Kos*_*mos 10 c c++ int modifier
嗯..我很喜欢这样的修饰符,如长/短扩展/减少创建变量时分配的内存量,但是......
#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
}
Run Code Online (Sandbox Code Playgroud)
由于未知原因,它将int和long int的大小打印为相同.我使用的是vc ++ 2010 express版.对不起,很难在谷歌找到答案,它总是显示长和int作为单独的类型.
Mat*_*son 17
MS选择long在64位系统上制作32位的原因是,由于历史原因,现有的Windows API使用混合int和long类似的东西,并且期望这是32位值(某些这可以追溯到Windows是16位系统的时候.因此,为了使旧代码转换到新的64位架构,他们选择保持long在32位,这样应用程序混合int并long在不同的地方仍然编译.
C++标准中没有任何内容规定a long应该大于int(当然不是大多数32位系统).所有标准都说大小short<= int<= long- 并且short至少是16位,如果内存服务[不一定表示为"应该至少为16位",我认为它提到了值的范围].
该标准要求的全部是:
sizeof(char) == 1
Run Code Online (Sandbox Code Playgroud)
和
sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)
Run Code Online (Sandbox Code Playgroud)
(并且相应的未签名类型与已签名类型具有相同的大小)。
此外,有最小的尺寸为每种类型的,由限制间接指定上的值INT_MAX等:一个char
必须是至少8位,一个short和int16,long32和long long64。
上16个的平台上,它是通常用于两个short和int为16位; 在32位平台(以及仍然存在的36和48位平台)上,int并且long几乎总是相同的大小。在现代的64个平台(以字节寻址),合理的解决办法是让所有四种类型有不同的尺寸(尽管人们可以争辩说,按照标准,
int应该是64位,这将意味着int,long与long
long所有有同样的尺寸)。