다음 코드를 고려해 봅시다.
int main() {
int i = 2;
int b = ++i++;
return 3;
}
오류와 함께 다음과 같이 컴파일됩니다.
<source>: In function 'int main()':
<source>:3:16: error: lvalue required as increment operand
3 | int b = ++i++;
| ^~
이것은 나에게 공평하게 들린다. 후위 증분 코드로서 해석되도록, 프리픽스 증가보다 더 높은 우선 순위를 보유 int b = ++(i++);
하고 i
r- 수치이다. 따라서 오류가 발생했습니다.
이제 기본 우선 순위를 무시하기 위해 괄호로이 변형을 고려해 보겠습니다.
int main() {
int i = 2;
int b = (++i)++;
return 3;
}
이 코드는 3을 컴파일하고 반환합니다.이 코드는 저에게 공평하게 들리지만 첫 번째 코드와 모순되는 것 같습니다.
질문 : 왜 (++i)
가 lvalue
때 i
아닌가요?
감사!
업데이트 : 위에 표시된 오류 메시지는 gcc (x86-64 9.2)에서 온 것입니다. 정확한 렌더링은 다음과 같습니다. gcc의 오류
Clang x86-64 9.0.0의 메시지 가 다릅니다 : clang 오류
<source>:3:13: error: expression is not assignable
int b = ++i++;
^ ~~~
GCC를 사용하면 접미사 연산자에 문제가 있다는 인상을 받고 왜 ++i
OK i
가 아닌지 왜 방황 할 수 있습니다 . Clang을 사용하면 접두사 연산자에 문제가있는 것이 더 분명합니다.