“long long”= “long long int”= “long int long”= “int long long”입니까? 갖는 경우 유형이

난 둘을 발견 long int long하고 int long long변수 유형에 대해 컴파일 할 수 있습니다. , 및 사이 long int long에 차이점이 있습니까?int long longlong longlong long int

일반적으로 동일한 수의 long?를 갖는 경우 유형이 동일 합니까?

1 장 :

long l;
int long il;
long int li;

2 장 :

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;



답변

C ++ 표준 (7.1.6.2 단순 유형 지정자)에 따름

3 여러 단순 유형 지정자가 허용되면 순서에 상관없이 다른 선언 지정자와 자유롭게 혼합 할 수 있습니다.

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

long static long const int x = 10;

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

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 동일한 한정자가 동일한 지정자 한정자 목록에 직접 또는 하나 이상의 typedef를 통해 두 번 이상 나타나면 동작은 한 번만 나타나는 것과 같습니다.

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

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

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


답변

유형이 동일합니까?

예.

C ++ 11 §7.1.6.2 / 3

여러하면 간단 형 지정자 의 허용, 그들은 자유롭게 서로 혼합 될 수 자명 한 일 입니-지정자 임의의 순서로한다.


답변

예,하지만 하지 마십시오 . 영어와 독일어에 형용사와 부사 (예 : 시간-장소)에 대한 일반적인 단어 순서가있는 것처럼 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  

유효하고 동등합니다.


답변