2014-10-07 2 views
6
"과 같습니다.
#include <stdio.h> 

int main(void) 
{ 
    int a = 1, i = 3, x, y, z; 
    a = 1; i = 3; 
    x = a+++i; 
    a = 1; i = 3; 
    y = a++ + i; 
    a = 1; i = 3; 
    z = a + ++i; 
    printf("%d %d %d", x, y, z); 
    scanf(" "); 
    return 0; 
}  

이 코드 출력은 4 4 5 인 것으로 보입니다. 그런데 a+++ia++ + i과 같은 이유는 무엇입니까?"a +++ i"가 "

컴파일러는 항상 소스 코드를 왼쪽에서 오른쪽으로 읽습니까?

조작이 the order of precedence을 따르므로?

그리고 모든 컴파일러에서 동일하게 작동합니까?

+0

관련 항목 C++에서 왜 +++++ b가 작동하지 않습니까? (http://stackoverflow.com/q/5341202/1708801) –

답변

5

C11 표준은 일부 6.4 (Lexical elements)/4 (그리고 C99에가 동일합니다) 말한다 : 입력 스트림이 사전에 구문 분석 주어진 문자까지 토큰 된

경우, 다음 전처리 토큰이 긴 순서입니다 전처리 토큰 을 구성 할 수있는 문자

도 예입니다 :

해석 x ++ + ++ y가 올바른 표현을 얻을 수있다하더라도, 증가 사업자에 제약 조건을 위반 조각 x+++++yx ++ ++ + y으로 구문 분석 프로그램.

1

C 컴파일러 구현이 다를 수 있기 때문에 모든 것을 말할 수는 없습니다. 하지만 일반적으로 네, 맞습니다. C 컴파일러는 욕심이 많습니다. 가능한 한 많이 읽으므로 +++ == ++ +입니다.

+0

C++에서 템플릿을 찾을 수 없습니까? –

+0

아, 네 말이 맞아! – Vin