宏定义在源程序中单独另起一行,换行符是宏定义的结束标志。如果一个宏定义太长,一行不够时,可采用续行的方法。续行是在键人回车符之前先键入符号""。注意回车要紧接在符号""之后,中间不能插入其它符号。 宏定义的有效范围称为宏定义名的辖域,辖域从宏定义的定义结束处开始到其所在的源程序文件末尾。宏定义名的...
符号(#)必须是pragma所在那一行的第一个非空格字符;#号和pragma之间可以有任意个空格符。在#pragma之后,是可以被编译器解析的预处理特征字符。一般认为,#pragma属于宏扩展。如果编译器发现不认识的pragma,会提出警告,但继续编译下去。Pragmas可以用在条件声明上,提供最新的功能性的预处理程序,或者提供给编译器定义执行...
# define PRINT(format, ...) printf(# format, ##__VA_ARGS__) // 注意:符号 \ 在宏定义中是代表换行 // 注意宏定义里的do{}while(0)语句是故意不打分号,这样在主程序调用宏时,可以很好配合宏后面跟着的分号. // 宏定义中不要在do{}while(0)语句后面加分号写成了 do{}while(0); 这样就没有...
在宏定义的#之前可以有若干个空格、制表符,但不允许有其它字符。宏定义在源程序中单独另起一行,换行符是宏定义的结束标志。如果一个宏定义太长,一行不够时,可采用续行的方法。续行是在键人回车符之前先键入符号""。注意回车要紧接在符号""之后,中间不能插入其它符号。 、、、 、、、 、、、 宏定义有无参数...
宏定义以换行结束,不需要分号等符号作分隔符。如有以下定定义: # define PI 3.1415926; 原希望用PI求圆的周长的语句 c=2*PI*r; 经宏展开后,变成 c=2*3.1415926*r; 这就不能达到希望的要求。 带参数宏定义进一步扩充了无参数宏定义的能力,在字符序列替换同时还能进行参数替换。带参数定定义的一般形式为 # ...