c++ - "long long"= "long long int"= "long int long"= "int long long"입니까?


나는 long int longint long long 모두 variable 타입으로 컴파일 할 수 있음을 발견했다. long int long , int long long , long longlong long int 사이에 어떤 차이가 있습니까?

일반적으로 long 가 같은 경우 유형이 동일합니까?

1 길게 :

long l;
int long il;
long int li;

2 long :

long long ll;
int long long ill;
long int long lil;
long long int lli;

위의 내용이 옳다면 다음 선언도 동일합니까?

long long* llp;
int long long* illp;
long int long* lilp;
long long int* llip;


Answers


C ++ 표준 (7.1.6.2 단순 형식 지정자)

3 여러 개의 simple-type-specifier가 허용되는 경우 다른 순서 지정자와 자유롭게 섞일 수 있습니다.

예를 들어 다음 선언이 유효합니다.

long static long const int x = 10;

const 한정자와 함께 constexpr 지정자를 사용할 수도 있습니다. 예를 들어

constexpr long static long const int x = 10;

그런데 우리 signed 것을 잊어 버렸습니다! 선언 자 x 앞에 예를 들어 추가해 보겠습니다.

constexpr long static long const int signed x = 10;

C에서는 동일한 선언 지정자 시퀀스에서 여러 유형의 한정자를 사용할 수도 있습니다. C 표준 (6.7.3 유형 한정자)

5 동일한 한정어가 동일한 specifier-qualifier-list에 두 번 이상 나타나면 직접 또는 하나 이상의 typedef를 통해 동작이 한 번만 나타나는 것처럼 동작합니다.

예를 들어 C에서는 다음 선언이 유효합니다.

const long const long static const int const signed x = 10;

따라서 프로그램에 입력 된 기호 수에 따라 돈을받는다면 그러한 선언을 사용하는 것이 좋습니다. :)




유형이 동일한 지 ...

예.

C ++ 11 §7.1.6.2 / 3

" 여러 개의 simple-type-specifier 가 허용되면 다른 순서 지정자가 다른 decl-specifier 와 자유롭게 섞일 수 있습니다.




네, 그러지 마세요 . 영어와 독일어가 형용사와 부사 (예 : 시간 방식 - 장소)에 대한 일반적인 단어 순서를 갖는 것처럼 C와 C ++도 마찬가지입니다. 기존 명령을 변경해도 컴파일러가 혼동되지는 않지만 동료 개발자를 혼란스럽게합니다. 나는 전통적인 질서가 대략적으로

  1. static / extern (연결)
  2. const / volatile (수정)
  3. signed / unsigned 안됨 (서명 됨)
  4. short / long (길이)
  5. 기본 유형 (머리 명사)

확실히 약간의 흔들림 방이 있지만.




"long long"= "long long int"= "long int long"= "int long long"입니까?

다른 모든 대답은 질문의 두 번째 부분에 대해 이야기했습니다. 첫 번째 부분 : "long long"= "long long int"입니까? , 대답은 ' 예' 입니다.

C ++ 11 7.1.6.2 단순 유형 지정자 (표 10)

Specifier(s)            Type
...                     ...
long long int           long long int
long long               long long int
long int                long int
long                    long int  
...                     ...  

질문의 두 번째 부분 : "long int long"= "int long long"입니까? , 대답은 다시 예스입니다.

타입 지정 자는 임의의 순서로 발생할 수 있으며 다른 선언 지정자와 섞일 수 있습니다 . 따라서 다음 모든

long long  
long long int  
long int long  
int long long  

유효하고 등가입니다.