1 预定义的符号
#include <stdio.h>
#define DEBUG_PRINT printf("Time: %s\n", __TIME__)
#define DEBUG_PRINT1 printf("date:%s\n", __DATE__)
#define DEBUG_PRINT2 printf("file: %s\n", __FILE__)
int main ()
{
DEBUG_PRINT;
//输出文件被编译的时间
DEBUG_PRINT1;
//输出文件编译的日期
DEBUG_PRINT2;
//输出编译生成文件的路径和名字
system("PAUSE");
return 0;
}
2 宏与函数
宏和函数的使用语法完全一样,命名时宏使用全大写,以示区分。
使用宏时,每次执行都会把代码插入到程序中。
#include<stdio.h>
#define MAX(a,b) ((a)>(b)?(a):(b))
int main()
{
int a;
a=MAX(2,3);
printf("%d\n",a);
system("PAUSE");
return 0;
}
3 带副作用的宏参数
#include<stdio.h>
#define MAX(a,b) ((a)>(b)?(a):(b))
int main()
{
int x=5;
int y=6;
int c=MAX(x++,y++);
printf("%d %d %d\n",x,y,c);
//输出 分别为 6 8 7
//宏替换后产生的代码 c=((x++)>(y++)?(x++):(y++))
//相当于 if((x++)>(y++)) c=x++ else c=y++
//执行if时 x和y 分别 ++ 比较 在y赋值给c后又进行了一次++
system("PAUSE");
return 0;
}