嗯..我有点'虽然像long/short这样的修饰符扩展/减少了创建变量时分配的内存量,但是......
#include <stdio.h>
#define test_int int
#define long_int long int
#define long_long_int long long int
void main()
{
printf("%i\n", sizeof (test_int)); //output 4
printf("%i\n", sizeof (long_int)); //output 4. Why? wasn't I modified it's size?
printf("%i\n", sizeof (long_long_int)); //output 8
}
由于未知原因,它打印出 int 和 long int 的大小相同。 我使用的是 vc++ 2010 速成版。 抱歉,很难在谷歌中找到答案,它总是将 long 和 int 显示为不同的类型。
最佳答案
即使在 64 位系统上,MS 选择将 long
设为 32 位的原因是现有的 Windows API,出于历史原因混合使用了 int
和long
用于类似的事情,并且期望这是 s 32 位值(其中一些可以追溯到 Windows 是 16 位系统的时代)。因此,为了将旧代码转换为新的 64 位架构,他们选择将 long
保持在 32 位,以便应用程序混合使用 int
和 long
在不同的地方仍然可以编译。
C++ 标准中没有任何内容规定 long
应该大于 int
(在大多数 32 位系统上肯定不是这样)。所有标准都说 short
<= int
<= long
的大小 - 而 short
在至少16位,如果内存可用【不一定表示为“应该至少16位”,我认为它提到了取值范围】。
关于c++ - 为什么 "long int"与 "int"大小相同?这个修改器到底有没有用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18353168/