宏空白

Gop*_*opi -2 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;
}
Run Code Online (Sandbox Code Playgroud)

我应该打电话给MALLOC(sizeof(int) * 10)对吗?由于宏应该与调用匹配.即使我打电话给MALLOC (sizeof(int) * 10)我得到相同的输出是这个未定义的行为?或者我错过了什么?

在后MALLOC一个调用之后的空格是否被忽略了?

标准说当我们调用一个宏时,它的确切文本表示被替换不是这里的情况吗?

Grz*_*ski 8

"空白规则"很重要,但仅适用于类似函数的宏定义,而不是实际的调用.

换句话说,之间没有区别:

int *x = MALLOC(sizeof(int) * 10);
Run Code Online (Sandbox Code Playgroud)

int *x = MALLOC (sizeof(int) * 10);
Run Code Online (Sandbox Code Playgroud)

但是没有空白是至关重要的:

#define MALLOC(n) malloc(n)
Run Code Online (Sandbox Code Playgroud)

如下:

#define MALLOC (n) malloc(n)
Run Code Online (Sandbox Code Playgroud)

定义不带参数的类似对象的MALLOC.