请参阅以下代码
#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一个调用之后的空格是否被忽略了?
标准说当我们调用一个宏时,它的确切文本表示被替换不是这里的情况吗?
"空白规则"很重要,但仅适用于类似函数的宏定义,而不是实际的调用.
换句话说,之间没有区别:
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.
| 归档时间: |
|
| 查看次数: |
394 次 |
| 最近记录: |