目录
预处理
预定义的符号
__FILE__ __LINE__ __DATE__ __TIME__ __STDC__ | //进行编译的源文件 //文件当前的行号 //文件被编译的日期 //文件被编译的时间 //如果编译器遵循ANSI C,其值为1,否则未定义 |
#define定义标识符
语法:#define name stuff
#define 机制包括了一个规定,允许把参数替换到文本中,这种实现通常称为宏(macro)或定义宏(define macro)
#define 例子:
#define MAX(a, b) ( (a) > (b) ? (a) : (b) )
x = 5;
y = 8;
z = MAX(x++, y++);
printf("x=%d y=%d z=%d\n", x, y, z);//输出的结果是什么?
此刻将x++和y++代入 ( (x++) > (y++) ? (x++) : (y++) )
注意一下,宏定义有一个很容易犯错的地方就是优先级问题,所以在做宏定义时一定要记得扩上需要的扩号
比较宏和函数
宏经常用于简单的运算,较复杂的运算不应使用宏而是函数
宏运算速度要快,而函数运算的速度慢
宏由于与类型无关则就不够严谨
大家在使用时根据自身代码需要进行选择~
条件编译
在写代码时,使用条件编译可以帮助我们更好的调试不需要删除
!!!常见的条件编译指令
1.
#if 常量表达式
//...#endif
//常量表达式由预处理器求值。
如:
#define __DEBUG__ 1
#if __DEBUG__
//..
#endif
2.多个分支的条件编译
#if 常量表达式
//...
#elif 常量表达式
//...
#else
//...
#endif
3.判断是否被定义
#if defined(symbol)
#ifdef symbol
#if !defined(symbol)
#ifndef symbol
4.嵌套指令
#if defined(OS_UNIX)
#ifdef OPTION1
unix_version_option1();
#endif
#ifdef OPTION2
unix_version_option2();
#endif
#elif defined(OS_MSDOS)
#ifdef OPTION2
msdos_version_option2();
#endif
#endif