1.宏定义
#include<stdio.h>
#include<head.h>
#define unit32_t unsigned int
#define TYPE(a,b) a##b
int main(int argc, const char *argv[])
{
unit32_t i;
TYPE(unit,32_t) j;
return 0;
}
2.宏函数与有参宏
#include<stdio.h>
#include<head.h>
#define MAX(a,b) {if(a>b)\
printf("%d\n",a);\
else\
printf("%d\n",b);\
}
#define Max(a,b) ({ int ret;\
if(a>b)\
ret=a;\
else;\
ret=b;\
ret;\
10000;\
})
int main(int argc, const char *argv[])
{
MAX(10,20);
printf("%d\n",Max(20,30));//输出为10000,因为函数最后一句语句为返回值
return 0;
}
3.宏函数与有参宏实现两数相加
#include<stdio.h>
#include<head.h>
#define Sum(a,b) {printf("%d\n",a+b);}
#define SUM(a,b) ({a+b;})
int main(int argc, const char *argv[])
{
Sum(10,20);
int sum=SUM(100,50);
printf("%d\n",sum);
return 0;
}
4.
1、假设屋内有三个LED等,分别是LED_1,LED_2,LED_3,
每一个led等分别有两种状态,LED_ON,LED_OFF,
设计程序模拟,灯的初始化,和控制灯状态的函数
(要求:分别初始化三盏灯,每个灯都有两种状态)
写两个函数:
1、led_init(LED ) ---->初始化LED灯的函数,参数是枚举类型
2、led_con(LED,LED_C) ------>控制灯状态的函数,两个参数,分别是LED灯,LED_C灯的状态
#include <stdio.h>
//定义了一个led灯的枚举类型
typedef enum led
{
LED_1=1,
LED_2,
LED_3,
}LED;
typedef enum led_c
{
LED_OFF,
LED_ON,
}LED_C;
//初始化LED灯的函数
void led_init(LED led)
{
switch(led)
{
case LED_1: //直接使用枚举项对枚举变量判断
printf("初始化了LED_1灯\n");
break;
case LED_2:
printf("初始化了LED_2灯\n");
break;
case LED_3:
printf("初始化了LED_3灯\n");
break;
}
}
//控制灯开关的函数
void led_con(LED led,LED_C c)
{
switch(led)
{
case LED_1: //直接使用枚举项对枚举变量判断
switch(c)
{
case LED_ON:
printf("打开了LED_1灯\n");
break;
case LED_OFF:
printf("关闭了LED_1灯\n");
break;
}
break;
case LED_2:
switch(c)
{
case LED_ON:
printf("打开了LED_2灯\n");
break;
case LED_OFF:
printf("关闭了LED_2灯\n");
break;
}
break;
case LED_3:
switch(c)
{
case LED_ON:
printf("打开了LED_3灯\n");
break;
case LED_OFF:
printf("关闭了LED_3灯\n");
break;
}
}
}
int main(int argc, const char *argv[])
{
LED led = LED_2;
//调用初始化函数时,直接使用枚举项进行传参
led_init(LED_1);
led_init(LED_2);
led_init(LED_3);
//调用控制函数时,通过枚举变量传参,led是哪一个枚举项,就控制哪一盏灯的状态
led_con(led,LED_ON);
led_con(led,LED_OFF);
return 0;
}