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

Sun*_*pta 8 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;
}
Run Code Online (Sandbox Code Playgroud)

该计划的输出是:

max[65] sizeof[max][4]
a[65] sizeof[a][1]
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助我理解为什么sizeof(max)是4个字节?

Bat*_*eba 12

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

为避免疑问,在C中'A'int 常数,而不是 a char.(注意,在C++中'A'char 文字,并且sizeof(char)标准固定为1.)

  • 为了进一步避免疑问,在C和C++中,`sizeof(char)== 1` _ by definition_和IIRC,两种语言中令牌"A"的正式名称都是"字符文字".但是表达式''A'的_type_在C中是`int`而在C++中是`char`. (4认同)