当 MACRO 不包含任何内存位置时,为什么 sizeof(MACRO) 给出 4 个字节的输出?
Why does sizeof(MACRO) give an output of 4 bytes when MACRO does not hold any memory location?
下面是小程序:
#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(max)
被预处理器替换为 sizeof('A')
。 sizeof('A')
与 sizeof(int)
相同,后者在您的平台上为 4。
为了避免疑义,'A'
在C中是一个int
常量,不是一个char
。 (请注意,在 C++ 中,'A'
是 char
文字 ,而 sizeof(char)
按标准固定为 1。)
下面是小程序:
#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(max)
被预处理器替换为 sizeof('A')
。 sizeof('A')
与 sizeof(int)
相同,后者在您的平台上为 4。
为了避免疑义,'A'
在C中是一个int
常量,不是一个char
。 (请注意,在 C++ 中,'A'
是 char
文字 ,而 sizeof(char)
按标准固定为 1。)