初始化
在不进行显示初始化的情况下,外部变量和静态变量都将被初始化为0,自动变量和寄存器变量的初始值为无用信息
对于外部变量的静态变量其初始化表达式必须是常量表达式
对于自动变和寄存器变量来说初始化表达式可以不是常量表达式,表达式中可以包含任意在此表达式之前已经定义的值,包括函数调用
宏调用:
宏替换对在括号中的字符串不起作用
如 #define YES 123
宏替换对引号中的字符串不起作用
如printf("YES");
输出的不是123,而是YES;
宏定义可以带参数,如
#define max(A,B) ((A) > (B) ? (A) : (B))
x = max(p+q, r+s)
将被替换成:x = ((p+q) > (r+s) ? (p+q) : (r+s));
例子:
#define square(x) x * x
当调用square(z+1)时就会出错
变为z+1 * z +1
因此应该这样定义
#define square (x) (x) * (x)
#undef
#undef 指令取消名字的宏定义,可以使后续的调用是函数调用,而不是宏调用
#undef getchar
int getchdar(void){.....}
条件包含
#if语句对常量整型表达式求值,若该表达式的值不等于0,则包含其后各行,直到遇到#endif, #elif, #else
在#if语句中可以使用表达式define(名字)
当名字定义时其值为1,否则为0