C语言程序18:宏定义与预处理
Merry Christmas
宏定义与预处理
一、宏定义与宏函数
#include <stdio.h>
#include <stdlib.h>
/*
1.宏替换
1.1 符号常量
1.2 可以替换任何东西
注意:宏替换不是语句 所以没有;
2.宏函数:带参数的宏替换
一定是参数带括号
*/
#define MAX 100//符号常量
#define INT int
struct MM
{
char name[20];
int age;
int num;
char addr[20];
};
#define INFO struct MM
#define M 1+2
typedef int intData;
#define type "%s\t%d\t%d\t%s\n"
#define Data mm.name, mm.age, mm.num, mm.addr
//宏函数-->忽略类型去做处理
#define SWAP(a,b) (a)=(a)+(b),(b)=(a)-(b),(a)=(a)-(b)
//为什么加括号
//限制替换的计算的优先级
#define SUM(a,b) ((a)+(b))
//带语句的宏替换-->多行宏定义的写法
#define MAXAB(a,b) do{\
if (a > b)\
printf("Max=%d", a);\
else\
printf("Max=%d", b); \
}while (0)
//do_while(0) 包含 含语句的宏
int main()
{
int array[MAX] = { 0 };
INT iNum = 1;
INFO mm = {"Love",100,1008,"上海"};
//M * 2
//1+2*2=5;
printf("%d\n", M * 2);
printf(type, Data);
int a = 1001;
int b = 1002;
SWAP(a, b);
printf("a=%d,b=%d\n", a, b);
float aa = 1.1f;
float bb = 1.2f;
SWAP(aa, bb);
//SWAP(1.11, 1.22); 替换后违背C语言基本准则
printf("sum=%d\n",
SUM(1, 2) * 2);
MAXAB(a, b);
system("pause");
return 0;
}
二、条件编译(预处理)
#include <stdio.h>
#include <stdlib.h>
/*
1.宏替换
1.1 符号常量
1.2 可以替换任何东西
注意:宏替换不是语句 所以没有;
2.宏函数:带参数的宏替换
一定是参数带括号
*/
#define MAX 100//符号常量
#define INT int
struct MM
{
char name[20];
int age;
int num;
char addr[20];
};
#define INFO struct MM
#define M 1+2
typedef int intData;
#define type "%s\t%d\t%d\t%s\n"
#define Data mm.name, mm.age, mm.num, mm.addr
//宏函数-->忽略类型去做处理
#define SWAP(a,b) (a)=(a)+(b),(b)=(a)-(b),(a)=(a)-(b)
//为什么加括号
//限制替换的计算的优先级
#define SUM(a,b) ((a)+(b))
//带语句的宏替换-->多行宏定义的写法
#define MAXAB(a,b) do{\
if (a > b)\
printf("Max=%d", a);\
else\
printf("Max=%d", b); \
}while (0)
//do_while(0) 包含 含语句的宏
int main()
{
int array[MAX] = { 0 };
INT iNum = 1;
INFO mm = {"Love",100,1008,"上海"};
//M * 2
//1+2*2=5;
printf("%d\n", M * 2);
printf(type, Data);
int a = 1001;
int b = 1002;
SWAP(a, b);
printf("a=%d,b=%d\n", a, b);
float aa = 1.1f;
float bb = 1.2f;
SWAP(aa, bb);
//SWAP(1.11, 1.22); 替换后违背C语言基本准则
printf("sum=%d\n",
SUM(1, 2) * 2);
MAXAB(a, b);
system("pause");
return 0;
}
三、#和##的作用
#include <stdio.h>
//## 主要用来做连接
#define SUM(a,b) (a+b)
#define NAME(x,y) x##y //NAME(x,y) xy
#define NUM(a) info##a //NUM(a) ainfo
void print(int a)
{
printf("%d\n", a);
}
//#把代码转换为字符串
#define INFO(data) #data
int main()
{
printf("sum=%d\n", SUM(1, 2));
int info1 = 1005;
int info2 = 1003;
int info3 = 1001;
//NUM(a) info3
print(NUM(3));//print(info3);
//NUM(a) info2
print(NUM(2));//print(info2);
print(NUM(1));//print(info1);
printf("data=%s\n", INFO(123));
printf("data=%#d\n", 12345);
int xy;
NAME(x, y) = 10; //xy=10
printf("xy=%d\n", xy);
system("pause");
return 0;
}
我知道你在看哟
新浪微博:@秀米XIUMI