宏空白

时间:2015-06-23 13:09:24

标签: c malloc

请参阅以下代码

#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之后的空格是否被忽略了?

  

标准说当我们将宏称为精确文本时   表示被替换不是这里的情况?

1 个答案:

答案 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,它不带任何参数。