2017-09-27 17 views
1

나는 매우 큰 레거시 Visual Studio 솔루션을 가지고 있으며 일부 소스 코드에서 내가 관심을 가지는 유형은 unsigned long입니다. 이 코드를 변경할 수 없으며 카운터로 사용되는 변수가 언제 롤오버되는지 알고 싶습니다. 특정 고정 플랫폼이 주어지면 sizeof는 동일한 유형의 다른 크기를 반환 할 수 있습니까?

나는 간단한 프로그램 std::cout << sizeof(unsigned long)과 다른 아주 작은 비주얼 스튜디오 프로젝트를 쓴 나는 4을 얻을 : 나는 sizeof(unsigned long)4도 큰 솔루션 제공한다고 가정 할 수 있습니까? 아니면 그것을 바꿀 수있는 빌드/컴파일러 옵션이 있습니까?

Microsoft 고유의 컴파일러 옵션으로 프로젝트별로 기본 제공 형식의 크기를 변경할 수 있습니까?

+1

고정 된 크기의 정수가 필요한 경우, ''을보십시오. 'unsigned long'에 대한 가정을하지 마십시오 – StoryTeller

+0

@StoryTeller 예, 고맙습니다. 나는 ''을 알고 있습니다. –

+1

나는 이것을 묻는 동기가 의심 스럽다. 귀하의 게시물에 언급할만한 가치가 있습니다. 이 경우 얻을 수있는 대답은 단순한 예/아니오보다 낫습니다. – StoryTeller

답변

0

sizeof (부호없는 long)는 큰 솔루션에서도 4를 제공한다고 가정 할 수 있습니까?

예 (Windows, Visual Studio)입니다. 일반적으로 아니오입니다.

sizeof(void *) : depends on the target platform. 
sizeof(long ) : standard guarantees at least 4 bytes, but it could be larger. 

참조 : 마이크로 소프트의 Data Type Ranges에서 SO : sizeof basic types

+0

Microsoft doc에 대한 모든 참조는 무엇입니까? –

2

지수 :

비주얼 C++ 32 비트 및 64 비트 컴파일러는이 문서의 뒷부분에있는 테이블의 유형을 인식하고 있습니다.

Type   | Bytes 
unsigned long | 4 

Fundamental Types C++ :

마이크로 소프트 특정

다음 표 ++ 마이크로 소프트 C에서 기본 타입에 필요한 스토리지의 양을 보여줍니다.

     Type       | Size 
float, __int32, int, unsigned int, long, unsigned long | 4 bytes 

그래서 대답은 (마이크로 소프트 C++의 경우).

업데이트 :

의 크기를 변경할 수 있습니다 마이크로 소프트에 특정한 어떤 컴파일러 옵션 거기에 내장 된 형태의 프로젝트별로?

docs에서 Microsoft C++ 컴파일러는 4 바이트가되도록 보장합니다. 따라서 나는 (적어도 현재 존재하는 컴파일러에서는) 이것을 바꿀 수있는 옵션이 없다고 가정한다.

+0

당신이 쓴 것은 정확하지만 제 질문에 대답하지 않는 것 같습니다. Microsoft 고유의 컴파일러 옵션이 내장 된 형식의 크기를 변경할 수 있습니까? –

+1

@AlessandroJacopson 논리적으로는 Microsoft C++ 컴파일러의 경우 크기가 항상 4 인 문서를 따릅니다. 따라서 컴파일러 옵션을 통해 변경할 수 없다고 가정합니다 (적어도 현재 존재하는 컴파일러는 최소한). 게시물을 업데이트했습니다. – AMA