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


153

난 둘을 발견 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;

8
를 사용하여 테스트하십시오 (컴파일러에서만 가능) std::swap. 유형이 동일하지 않으면 컴파일되지 않습니다.
Bathsheba


24
다시 열기로 투표 주장되는 중복은 관련이 있지만이 질문은 아닙니다. 저기에 대한 대답은이 질문에 대답하지 않습니다. 마감 투표자 : 무지에 근거하여 마감 투표를하지 마십시오.
건배와 hth. -Alf


sizeof ()를 각각 비교하여 확인하십시오. longof는 64 비트 여야하므로 sizeof (ill) == sizeof (lil) 인 경우 컴파일러에서 크기를 동일하게 볼 경우 sizeof (l)은 8이어야합니다. 이것은 현재의 컴파일러와 발생할 수있는 미래의 컴파일러에 대한 true가됩니다 (sizeof 연산자의 서거 할 때까지 () - 희망 결코 없을 것 또는 내가 가지고있는 심각한 할 재 작성의 양을).
Michael Stimson 2016 년

답변:


136

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;

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


96
절대적으로 가치가 절대 변하지 않도록 확실하게해야합니다.

3
@hvd 불행히도 일반적으로 주석은 그러한 계산에서 제외됩니다.
모스크바에서 블라드

9
#define REM(...)다음 과 같이 쓰여져도 큰 단어 수의 예를 보려면 i++; REM(Here, we increment i to make sure the new value of i is one more than the old value of i. This is safe because we know the value of i is less than the maximum value of i's type.)?


15
당신은 한정자를 const const const const const const const const const const const const const const const const const const const const const const const const const const const const const const const const const const const const const const const const const const answer = 42;
섞을

111

유형이 동일합니까?

예.

C ++ 11 §7.1.6.2 / 3

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


2
스트레이트 슈터. +1.
einpoklum

42

예,하지만 하지 마십시오 . 영어와 독일어에 형용사와 부사 (예 : 시간-장소)에 대한 일반적인 단어 순서가있는 것처럼 C와 C ++도 마찬가지입니다. 기존의 순서와 달리 컴파일러를 혼동하지는 않지만 동료 개발자를 혼동합니다. 나는 전통적인 질서가 대략

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

확실히 흔들 흔들 방이 있지만.


29

"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  

유효하고 동등합니다.


3
@Cheers와 hth를 개선하지 않는 이유를 알 수 없습니다. -대신 Alf가 대답합니다.
Sebastian Mach

8
@phresnel; 다른 모든 답변은 절반 만 커버하기 때문입니다. 제목에서 질문의 전반부를 누락 한 형식 지정자의 혼합에 대해 모두 다루었습니다. “long long”=“long long int” =“long int long”=“int long long”입니까?
haccks

5
@phresnel 어떤 사람들은 담당자를 얻는 인센티브에 대해 대답합니다. 다른 사람의 대답을 편집하기 위해 다른 사람의 대답을 편집하는 것은 다른 사람에게 효과적으로 신용을주는 많은 작업입니다.

1
진실. 처음에 이것은 약간의 추가로 나타납니다. (CC : @Thebluefish)
Sebastian Mach
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.