#define值的大小

10 c++ c-preprocessor

如果值定义为

#define M_40 40

大小是否与short(2个字节)相同或者是char(1个字节)还是int(4个字节)?

大小取决于您是32位还是64位?

Bri*_*ndy 32

#define没有大小,因为它不是类型,而是纯文本替换到您的C++代码中. #define是一个预处理指令,它在代码甚至开始编译之前运行.

替换后的C++代码中的大小与您在那里的C++表达式或代码的大小无关.例如,如果你后缀为Llike 102L那么它看起来很长,否则没有后缀,只是一个int.因此x86和x64上可能有4个字节,但这取决于编译器.

也许C++标准的Integer文字部分将为您清除它(C++ 03标准的第2.13.1-2节):

整数文字的类型取决于其形式,值和后缀.如果它是十进制且没有后缀,则它具有这些类型中的第一个,其值可以表示为:int,long int; 如果该值不能表示为long int,则行为未定义.如果它是八进制或十六进制且没有后缀,则它具有这些类型中的第一个,其值可以表示为:int,unsigned int,long int,unsigned long int.如果它以u或U为后缀,则其类型是这些类型中的第一个,其值可以表示为:unsigned int,unsigned long int.如果它以l或L为后缀,则其类型是这些类型中的第一个,其值可以表示为:long int,unsigned long int.如果它以ul,lu,uL,Lu,U1,lU,UL或LU为后缀,则其类型为unsigned long int


Ada*_*mke 7

int在所有计算和赋值中将隐式转换为普通整数.

#define只是告诉预处理器用其他东西替换对符号的所有引用.这与在代码上执行全局查找替换并替换M_40为相同40.