PRINT3(b); /* TYPE1(int, c) 把name_和type和_type分开,然后强制连接,变为name_int_type * c参数在宏里没有被用上,没有连接为c_int_type,这就可能和编程人员所期望的不一致 */ TYPE1(int, c); name_int_type = a; PRINT3(name_int_type); // TYPE2(int, d) 用##把name和_和type和_...
宏定义以换行结束,不需要分号等符号作分隔符。如有以下定定义: # define PI 3.1415926; 原希望用PI求圆的周长的语句 c=2*PI*r; 经宏展开后,变成 c=2*3.1415926*r; 这就不能达到希望的要求。 带参数宏定义进一步扩充了无参数宏定义的能力,在字符序列替换同时还能进行参数替换。带参数定定义的一般形式为 # ...
当宏作为常量使用时,C程序员习惯在名字中只使用大写字母。...feral) foo(wolf); else bin(wolf); 判断语言被扩展成: if (!...不要使用宏来定义新类型名,应该使用typedef,否则容易造成错误。给宏添加注释时请使用块注释(/* */),而不要使用行注释。因为有些编译器可能会把宏后面的行注释理解为宏体的一...
printf("Programming" " in c" " is fun"\n);//Programing in c is fun // // 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 宏定义有无参数宏定义和带参数宏定义两种。 无参数的宏定义的一般形式为# define 标识符 字符序列 其中# define之后的标识符称为宏定义名(简称宏名),要求宏名与字符序列之间...