2016-07-21 4 views
28

-Wlong-long gcc 경고의 이유는 무엇입니까? GCC의 man 페이지에서왜 gcc에 긴 시간 동안 경고가 표시됩니까?

가 :

내가 알고있는 것처럼
-Wlong-long 
     Warn if long long type is used. This is enabled by either -Wpedantic or -Wtraditional in ISO C90 and C++98 modes. To inhibit the warning messages, use -Wno-long-long. 

, long long는 최소 64 비트로 할 필요가있다 (실제적으로 적어도 오늘날의 컴파일러로, 항상 64 비트). 이것은 ISO C90 또는 C++ 98의 경우가 아니 었습니까? 아니면 long long을 사용하지 않는 다른 이유가 있습니까?

나는 int64_t과 친구처럼 대해 <stdint.h> 유형을 알고 있지만, 일부 그리 오래된하지 컴파일러 (예 : VS2005, 푸른 언덕 ARM 3.5) <stdint.h>을 제공하지 않습니다, 나는 long long가 (적어도) 64 비트 것이라고 생각 최신 및 최신 툴 체인.

+0

'stdint.h '가없는 컴파일러는 C99과 호환되지 않습니다. 즉,'long long '이 전혀없는 좋은 확률이 있다는 뜻입니다! (그들이 GCC의 구버전이 아닌 한) – zwol

+0

주어진 설명에서 그것은 "stdint.h"가없는 90 년대 gcc -'long long'와 동일한 카테고리에있는 Patrick의 "not-so-old"컴파일러처럼 들린다. (except 90 년대 대부분의 시간 동안 우리는 C99가 아직 작성되지 않았다는 핑계와 함께 "일반"CPU가 64 비트 정수 레지스터를 갖지 못했다는 핑계를 보았 기 때문에 기본 C 유형 중 64 비트 정수가 부족했습니다 어떤 감각을 만들었습니다.) –

+0

@ WumpusQ.Wumbley : C는 8 비트 프로세서에서 사용할 수 있도록 설계되었습니다 (1980 년 실제로 자주 사용됨). 4 단계로 긴 추가 작업을 수행해야하는 것은 다소 불쾌한 일 이었지만 16777215보다 크지 않은 수치가 알려 지더라도 단일 수량으로 작업 할 수있는 편의성은 3 단계가 아닌 4 단계를 사용하여 성능을 저하시키는 데 가치가있었습니다. 8 바이트 유형을 사용하는 것이 정당화 될 수있는 경우는 훨씬 적습니다. IMHO, 적절한 구제 방법은 적어도 독립적 인 구현을 위해 "긴"옵션 기능을 구현하는 것이 었습니다. – supercat

답변

32

ISO C90 및 C++ 98에는 아직 long long 유형이 없습니다. ISO C99 및 C++ 11에서만 추가되었습니다.

GCC는 표준화 이전에 확장으로 제공했습니다.

+19

... 동일한 의미로 표준화 된 gcc 확장의 드문 예제 –

+0

그런 경고를 제공하는 이유는 C99 또는 C++ 11이 아닌 컴파일러로 코드를 컴파일하는 데 도움이되는 것처럼 보입니다. – Patrick

+6

@Patrick 예, 나는 누군가가'-ansi -pedantic'에 의해 활성화 된 모든 경고가 그들 자신의'-Wfoo' 옵션으로 표현되어야한다고 결정했기 때문에 그 옵션이 존재한다고 생각합니다. 실제로'-Wlong-long'을 단독으로 사용할 이유가 없습니다. 오, 그렇지만'- 오래 걸려. ' –