当 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。)