2012-04-30 2 views
3

코드 스 니펫을 실행 중입니다. 하지만 코드와 산출물을 이해할 수는 없습니다.출력 이유를 알 수 없습니다.

#include <stdio.h> 
int main() 
{ 
    int a, b,c, d;  
    a=3;  
    b=5;  
    c=a,b;  
    d=(a,b);  
    printf("c = %d" ,c);  
    printf("\nd = %d" ,d);  
    return 0; 
} 

이 프로그램의 출력은 다음과 같습니다 출력이 오는 방법

c=3 
d=5 

내가 점점 아니에요?

답변

3

C의 쉼표 연산자의 우선 순위를 고려하십시오.

9
  1. 쉼표를 사용하면 표현식이 올바른 매개 변수로 평가되므로 d=(a,b);d=b으로 평가됩니다.
  2. = 쉼표를 통해 higher precedence이 있으므로 표현 c=a,b; 전체 c=a,b; 표현이 b 아닌, 예를 들어,로 평가된다 언급 대답의 (c=a),b;

하지 일환으로 평가하지만, 가치가 d=(c=a,b);이라고 쓰면 c=a이고 d=b이됩니다.

1

C++에서 쉼표 연산자가 오버로드 될 수 있습니다. 따라서 실제 행동은 예상했던 행동과 매우 다를 수 있습니다.

예를 들어 Boost.Spirit은 쉼표 연산자를 사용하여 기호 테이블에 대한 목록 초기화기를 구현합니다. 따라서, 가능한 의미는 다음 구문을 만든다 (! 의도적) 인해 연산자 우선 순위에 코드가 있음

keywords = "and", "or", "not", "xor"; 

공지 동일

이다
(((keywords = "and"), "or"), "not"), "xor"; 

로 불리는 첫 번째 조작자 키워드 인 .operator = ("and") 나머지 연산자가 호출 된 프록시 객체를 반환합니다.

keywords.operator =("and").operator ,("or").operator ,("not").operator ,("xor"); 
관련 문제