2010-08-22 4 views
6
int a=b=c=10; //invalid statement 

작동하지 않습니다하지만 다음은 b는 그 값을 가지고도 전에 할당 B로왜 오른쪽 연관성은 선언문

int a,b,c; 
a=b=c=10; 

먼저 하나가 유효하지 않은 유효한 문에게 있습니다.

두 번째 대문자는 등호 (=) 기호가 올바른 연관성을 갖는 것으로 유효합니다. 즉 "="기호는 오른쪽에서 선호도를 얻기 시작할 것입니다.

제 질문은 : 왜 오른쪽 연관성이 첫 번째 경우에 적용되지 않습니까? 연관성이 선언문과 작동하지 않는다는 의미입니까? 이 점에 대해 더 명확히해야합니다.

답변

8

구문 상 올바르지 않으므로 작동하지 않습니다. 두 번째 예에서 볼 수 있듯이 쉼표를 구분 기호로 사용하여 유형의 변수를 두 개 이상 선언합니다. 대신 bc이 이미 선언 된 경우 문제가 해결됩니다. 예를 들어이 작품 : 심지어이 (적어도 VS2010 컴파일러와 함께) 할 수

int b,c; 
int a=b=c=10; 

:

int b,c,a=b=c=10; 

마음은 내가 그 BAD 보이는 말을하고, 무리를 줄 것입니다.

+0

그것은 선언과 할당이 같은 라인에서 일어나는 문에 의미, 모든 변수의 선언 이전 할 것으로 예상된다. 설명해 주셔서 감사합니다. – Joe

0

변수는 먼저 선언하고 값을 할당하거나 표현식에 사용할 필요가있다.

4

연습 문제는 아니지만 실제 컴파일러로 테스트 한 경우 실제로 에 대한 정보를 조금 더 제공했을 것입니다.이 컴파일러를 불쾌하게 만듭니다. 대답의

일부는 = 연산자의 두 가지 역할을 발견하는 것입니다. 하나는 과제이고 하나는 초기화입니다. 귀하의 예를

int a = b = c = 10; 

그래서 오른쪽에있는 두 개의 =가 할당되지 초기화됩니다

int a = (b = (c = 10)); 

에 해당합니다. 그리고 과제에서 왼편은 잘 정의되어야합니다.

관련 문제