sizeof (unsigned double)가 4와 같은 이유는 무엇입니까?
내 동료가 서명되지 않은 이중이 있는지 물었고 그렇지 않다고 말했지만 여전히 확인했으며 이것은 Microsoft Visual C ++ 2010 에서 컴파일됩니다 .
unsigned double a;
double b;
printf("size_a=%d size_b=%d", (int) sizeof(a), (int) sizeof(b));
출력 size_a=4 size_b=8
합니다. 즉,에는 4 바이트 unsigned double
, double
.
unsigned double
유효하지 않다. 이것은 MSVC에서도 마찬가지입니다. 경고가 활성화 된 MSCV 2010에서 위 코드를 컴파일하면 다음과 같은 결과가 나타납니다.
warning C4076: 'unsigned' : can not be used with type 'double'
컴파일러는 실제로 이후를 무시 하여 실제로 .double
unsigned
a
unsigned int
다음을 시도하는 경우 :
unsigned double a = 1.0;
실제로 두 가지 경고가 표시됩니다.
warning C4076: 'unsigned' : can not be used with type 'double'
warning C4244: 'initializing' : conversion from 'double' to 'unsigned int', possible loss of data
흥미롭게도 VS2010에 대한 MSDN에는 C4076 경고가 없습니다. VS2005 및 VS2008에만 존재합니다.
경고 수준을 더 높게 설정하면 (내 테스트에서 / W3) 적절한 경고가 표시됩니다.
경고 C4076 : 'unsigned': 'double'유형과 함께 사용할 수 없습니다.
그런 다음 디버거를 사용하여 변수를 검사하면 모든 것이 명확 해집니다.
변수가 실제로 unsigned int
선언 지정자 시퀀스에서 unsigned
와 결합 하는 double
것은 유효한 C ++가 아닙니다. 이것은 일종의 MSVC 확장 (또는 버그)이어야합니다.
일반적으로 선언 의 완전한 decl-specifier-seq 또는 type-specifier-seq 또는 trailing-type-specifier-seq 에는 최대 하나의 유형 지정자가 허용됩니다 . 이 규칙에 대한 유일한 예외는 다음과 같습니다.
const
자신을 제외한 모든 유형 지정자와 결합 할 수 있습니다.volatile
자신을 제외한 모든 유형 지정자와 결합 할 수 있습니다.signed
이나unsigned
와 결합 될 수있다char
,long
,short
, 또는int
.short
이나long
와 결합 될 수있다int
.long
와 함께 사용할 수 있습니다double
.long
와 함께 사용할 수 있습니다long
.
unsigned 및 signed는 가능한 경우 MSVC에서 형식 한정자로 작동합니다 (unsigned char, signed short 등). unsigned bool 또는 signed double과 같이 그렇게 할 수없는 경우 요청 된 유형이 생성되지 않습니다. 유형은 부호없는 [int] 및 부호있는 [int]로 처리됩니다.
VS2010의 버그입니다. VS2012는 해당 코드 줄에 다음 오류를 제공합니다.
error CS1002: ; expected
';'가 필요합니다. 키워드 'double'앞에.
참고 URL : https://stackoverflow.com/questions/14977454/why-is-sizeofunsigned-double-equal-to-4
'programing' 카테고리의 다른 글
Jasmine에서 프로그래밍 방식으로 스파이를 어떻게 제거합니까? (0) | 2020.10.28 |
---|---|
Elastic Beanstalk의 Linux AMI에서 Tomcat 7 설치 폴더는 어디에서 찾을 수 있습니까? (0) | 2020.10.28 |
Scala의 액터는 Go의 코 루틴과 비슷합니까? (0) | 2020.10.28 |
데이터가 없을 때 잘못된 읽기 시도 (0) | 2020.10.28 |
C # ASP.NET에서 전체 쿼리 문자열 가져 오기 (0) | 2020.10.28 |