【发布时间】:2018-05-14 15:03:17
【问题描述】:
下面是小程序:
#include <stdio.h>
#define max 'A'
int main()
{
char a;
printf("max[%d] sizeof[max][%ld]\n", max, sizeof(max));
a = max;
printf("a[%d] sizeof[a][%ld]\n", a, sizeof(a));
return 0;
}
而程序的输出是:
max[65] sizeof[max][4]
a[65] sizeof[a][1]
谁能帮我理解为什么 sizeof(max) 是 4 个字节?
【问题讨论】:
-
请记住,宏是在编译之前发生的文本替换。所以编译器看到
sizeof('A'),这是一个有意义的表达式。 -
由于
sizeof()返回一个size_t类型的值,最好使用匹配的打印说明符,如"%zu"而不是"%ld"。
标签: c macros c-preprocessor