请参阅以下代码
#include <stdio.h>
#include<stdlib.h>
#define MALLOC(n) malloc(n)
int main(void) {
int *x = MALLOC (sizeof(int) * 10);
x[0] = 20;x[9] =200;
printf("%d %d\n",x[0],x[9]);
return 0;
}
我应该打电话给MALLOC(sizeof(int) * 10)
吧?由于宏应该与调用匹配。即使我调用MALLOC (sizeof(int) * 10)
我得到相同的输出是这个未定义的行为?或者我错过了什么?
后者调用中MALLOC
之后的空格是否被忽略了?
标准说当我们将宏称为精确文本时 表示被替换不是这里的情况?
答案 0 :(得分:8)
&#34;空白规则&#34;很重要,但仅适用于类似函数的宏定义,而不是实际的调用。
换句话说,之间没有区别:
int *x = MALLOC(sizeof(int) * 10);
和
int *x = MALLOC (sizeof(int) * 10);
但是没有空白是至关重要的:
#define MALLOC(n) malloc(n)
如下:
#define MALLOC (n) malloc(n)
定义类似对象的宏MALLOC
,它不带任何参数。