#define <宏名> <字符串> #define VALUE ((sizeof(a)) /sizeof(a[0])) (2) 带参数的宏定义 #define <宏名> (<参数表>) <宏体> #define MAX(a,b) ((a)>(b)?(a):(b)) 2、不能忽略宏定义中的空格 下面的宏定义中f是否带了参数呢? #definef(x) ((x)+1) 答案是否定的,在f与(x...
在C宏中强制空白可以通过在宏定义中使用一个空格来实现。例如,如果您想要定义一个宏,该宏将在代码中插入一个空格,您可以这样做: ```c #define FORCE_BLANK ' ' ``` 然后...
编译器在处理时宏定义时,首先从“#define”后第一个空格开始读取字符串,直到遇见下一个空格为止,两个空格之间的字符串为“宏名称”,确定好“宏名称”之后,本行的所有其他字符串都为“宏字符串”。图示:#define + N个空格(1 < N) + 宏名称(中间没有空格) + N个空格(1 < N) + 宏字符串(直到本行结束...
编译器认为这是定义了一个宏:SUM,其代表的是(x) (x)+(x)。 为什么会这样呢?其关键问题还是在于SUM 后面的这个空格。所以在定义宏的时候一定要注意什么时候该用空格,什么时候不该用空格。这个空格仅仅在定义的时候有效,在使用这个宏函数的时候,空格会被编译器忽略掉。也就是说,上一节定义好的宏函数SUM(x)在...
/*带参数的宏定义*/ main() { intx,y,max; printf("input two numbers: "); scanf("%d %d",&x,&y); max=MAX(x,y); printf("max=%d\n",max); /*宏调用*/ }</stdio.h> 程序运行结果如下(□表示空格,↙表示回车): 1 2 input two numbers: 2009□2010↙ ...
但是在书写上注意两点MAX和左“(”之间没有空格,因为宏定义把标示符后的第一个空格会认为是标示符与字符串的分割。当然我们在写宏的时候有时候会写多行,这样我们一般用“\”进行分割。 2.加括号 我们说到宏只是简单的替换,即使是函数宏也是这样的,所以为了避免一些优先级的错误不要忘记加括号。
当使用该宏定义时: example(abc); 在编译时将会展开成:printf("the input string is:/t%s/n","abc"); string str=example1(abc); 将会展成:string str="abc"; 注意: 对空格的处理 a。忽略传入参数名前面和后面的空格。 如:str=example1( abc ); 将会被扩展成 str="abc"; ...
#:将其后面的宏参数进行字符串化操作(Stringfication) #运算符用于在预处理期将宏参数转换为字符串 在预处理期完成,因此只在宏定义中有效 编译器不知道#的转换作用 注意: a、忽略传入参数名前面和后面的空格。 b、当传入参数名间存在空格时,编译器将会自动连接各个子字符串,用每个子字符串之间以一个空格连接,...
这还是定义的宏函数SUM(x)吗?显然不是。编译器认为这是定义了一个宏:SUM,其代表的是(x) (x)+(x)。 为什么会这样呢?其关键问题还是在于SUM 后面的这个空格。所以在定义宏的时候一定要注意什么时候该用空格,什么时候不该用空格。这个空格仅仅在定义的时候有效,在使用这个宏函数的时候,空格会被编译器忽略掉。