C / C ++:sizeof(short),sizeof(int),sizeof(long),sizeof(long long)等…在32位机器上而不是在64位机器上

我正在运行Windows 7(64位)。

这个问题看的是这里发现的同一个问题:

长在64位机器上

但更深入,因为它处理更多的数据类型并适用于C或C ++,而不是C#。 首先,我使用的是Microsoft Visual Studio Ultimate 2012.不幸的是,虽然这个IDE支持C#和Visual C ++,但它似乎不再支持普通的旧版Visual C. 无论如何,我已经尝试在IDE中创建以下标准C ++程序:

#include  int main(int argc, char **argv) { printf("sizeof(short): %d\n", (int) sizeof(short)); printf("sizeof(int): %d\n", (int) sizeof(int)); printf("sizeof(long): %d\n", (int) sizeof(long)); printf("sizeof(long long): %d\n", (int) sizeof(long long)); printf("sizeof(size_t): %d\n", (int) sizeof(size_t)); printf("sizeof(void *): %d\n", (int) sizeof(void *)); printf("Hit enter to exit.\n"); char *scannedText; scanf("%s", &scannedText); return 0; } 

由于我找不到运行控制台应用程序的选项,我只是在“返回0”处放置一个断点。 语句,以便在控制台中查看输出。 结果是:

 sizeof(short): %d\n", 4 sizeof(int): %d\n", 4 sizeof(long): %d\n", 4 sizeof(long long): 8 sizeof(size_t): 4 sizeof(void *): 4 Hit enter to exit. 

旧C教科书声明int设置为“字大小”,在16位计算机上为16,在32位计算机上为32。 然而,这个规则似乎打破了64位系统,人们会期望“字大小”为64.相反,从我所读到的这些系统就像32位系统,但比64位计算更好地支持64位计算。他们的32位同行做到了。 因此,从上述C ++程序获得的结果与在32位系统上获得的结果完全相同。 数据类型的大小(size_t)(可用于测量内存中对象占用的内存量)也将其值存储为4个字节,并且用于访问内存位置的指针大小也很有趣(对于instance sizeof(void *)显示用于存储通用指针到内存中任何位置的位数也是32位长。

任何人都知道如何从Visual Studio 2012中删除Visaul C以及是否仍然可以从Visual Studio 2012运行控制台应用程序,而无需在退出之前设置断点或从标准输入读取文本,以便控制台窗口关闭前暂停?

此外,我的解释是正确的,还是我在IDE中有错误的配置,例如,它编译为32位而不是64位系统? 根据其中一张海报,由于我的系统是64位,我应该看到这里描述的size_t和指针的结果: https : //en.wikipedia.org/wiki/64-bit_computing#64-bit_data_models但我不是看到这个。 有没有办法重新配置Visual Studio,以便它可以支持64位内存模型,而不是我目前在程序输出中看到的?

谢谢。

看起来对我来说。 在c / c ++中,int没有根据位大小进行具体定义。 创建项目时,您可以选择“控制台应用程序”。 VS2012仍然支持C,但它们大多将项目归为C / C ++。 有一个编译器选项(/ TC我认为)会强制编译器符合C标准。 默认情况下,它将通过文件扩展名表示语言。 MS C支持不理想,例如它不包括stdbool.h。

如果要控制数据的位大小,可以使用包含精确宽度int数据类型的stdint.h。