c++ - 为什么 "long int"与 "int"大小相同?这个修改器到底有没有用?

标签 c++ c types long-integer abi

嗯..我有点'虽然像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
}

由于未知原因,它打印出 intlong int 的大小相同。 我使用的是 vc++ 2010 速成版。 抱歉,很难在谷歌中找到答案,它总是将 longint 显示为不同的类型。

最佳答案

即使在 64 位系统上,MS 选择将 long 设为 32 位的原因是现有的 Windows API,出于历史原因混合使用了 intlong 用于类似的事情,并且期望这是 s 32 位值(其中一些可以追溯到 Windows 是 16 位系统的时代)。因此,为了将旧代码转换为新的 64 位架构,他们选择将 long 保持在 32 位,以便应用程序混合使用 intlong 在不同的地方仍然可以编译。

C++ 标准中没有任何内容规定 long 应该大于 int(在大多数 32 位系统上肯定不是这样)。所有标准都说 short <= int <= long 的大小 - 而 short 在至少16位,如果内存可用【不一定表示为“应该至少16位”,我认为它提到了取值范围】。

关于c++ - 为什么 "long int"与 "int"大小相同?这个修改器到底有没有用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18353168/

相关文章:

c++ - 为什么我在尝试使用 map 时遇到访问冲突

c++ - 按值和按引用区别函数模板

c++ - 带有 const 的外部 "C"

c - 反转c中弹出的优先级队列的顺序

c - 如何在全局变量中获得缓冲区溢出?

Delphi 2010 错误 E2010 不兼容类型 : 'AnsiChar' and 'Char'

javascript - 在 For 循环中乘以整数

c++ - 如何访问图像属性列表并在 MITK 中进行操作

c - 在c中逐行从文件中读取值

haskell - 与 GHCi 中 fromIntegral 的行为不一致