为什么当MACRO没有任何内存位置时,sizeof(MACRO)会给出4字节的输出?

时间:2018-05-14 15:03:18

标签: c macros c-preprocessor

以下是小程序:

#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个字节?

1 个答案:

答案 0 :(得分:12)

sizeof(max)被预处理器替换为sizeof('A')sizeof('A')sizeof(int)相同,后者在您的平台上为4。

为避免疑义,'A'是C中的int 常量 a char。 (请注意,在C ++中'A'char 文字,标准将sizeof(char)固定为1.)