2014-07-26 4 views
-2
#include<stdio.h> 
int main() 
{ 
    int a = 10; 
    ++a = 20;  
    printf("a = %d", a); 
    getchar(); 
    return 0; 
} 

위 코드에서 얻은 결과는 다음과 같습니다. a = 20; C++ 코드로 실행될 때.사전 증가 및 사후 증가

#include<stdio.h> 
int main() 
{ 
    int a = 10; 
    a++ = 20;  
    printf("a = %d", a); 
    getchar(); 
    return 0; 
} 

이렇게하면 컴파일 오류가 발생합니다. 이 이유는 무엇입니까?

+0

'++ A = 20 C 컴파일러를 사용한다고 가정? –

+3

실제 오류 메시지는 "컴파일 오류"입니까? 이것은 버그처럼 들리지만, 컴파일러는 여기서 무엇이 잘못 되었는지를 명확하게 나타내야했습니다. 어떤 컴파일러를 사용하고 있습니까? 보다 확장 된 오류 메시지를 보려면 다른 것을 시도하십시오. – usr2564301

+0

[관련 질문에 대한이 답변] (http://stackoverflow.com/a/10654019/335858)을보십시오. – dasblinkenlight

답변

6

C++ 컴파일러로 프로그램을 컴파일하고 있습니다.

C++에서 선 증가 연산자의 결과는 lvalue이지만 사후 증가 연산자의 결과는 lvalue가 아닙니다.

C에서 선행 증가 연산자와 사후 증가 연산자는 모두 왼쪽 값이 아니므로 증분 연산자의 결과에 할당 할 수 없습니다.

C와 C++에는 다른 규칙이 있으므로이 언어는 서로 다르므로 놀라운 것은 아닙니다.

+2

C 및 C++의 +1은 언어가 다르며 여기에 표시되는 방법을 설명합니다. – Deduplicator

+2

+1 나는'++ i'가 C.의 lvalue가 아니라는 것을 결코 알지 못했습니다. C는 이상한 언어입니다 ... –

0

++a = 20 또는 a++ = 20이 잘못되어 잘못된 컴파일러로 인해 오류가 발생합니다. C 철학을 이해하면 a++ 또는 ++aa = a+1입니다. 따라서 ++a = 20은 실제로는 a = a + 1 = 20 을 의미합니다. 이 명령문은 증분 지름길로 단독으로 사용됩니다. Ritchie와 Kernighan의 고전 서적 C을 방문하십시오. compile.which 컴파일러는`사용하지 않을 것입니다

난 당신이