2011-03-25 4 views
2

쉼표 여기에 무엇을 의미합니까 ","아래 코드 조각에서 재생할 역할이 있습니까? 코드에서 컴파일러 오류가 발생합니까?

int main() 
{ 
    int i = 1, 2; 
    printf("%d", i); 
} 
및이 법적 오브젝티브 C 또는 C입니까? 감사!

+0

그래, 그것은 ","운영자는 ... 당신은 코드에서'I = 1, 2' 사용하는 합법적 – phoenix

+0

... 자세한 내용은 운영자 테이블을 참조하려고 노력하지만, 수하지 않습니다되는 법적, 쉼표 나입니다 선언 작업. 어쨌든, 너는 무엇을 하려니? –

+0

@phoenix - 다른 위치의 다른 것들에는 쉼표가 사용됩니다. 함수를 호출 할 때 매개 변수를 분리하는 데 사용됩니다. 정의에서는 여러 변수를 정의 할 수 있습니다. – Lindydancer

답변

2

왜 그냥 컴파일하려고하지 않습니까?

컴파일되지 않습니다. i 두 개의 서로 다른 값 (int i = 1,2) 또는 수행하려는 작업을 할당 할 수 없습니다. C comma operator은 그렇게 작동하지 않으며 코드의 버그입니다.

an 더 합리적인 할당은 int i = 1, s = 2

+0

그것은 것입니다 ... 당신 놈들 바로 ...가 발생 오류 그래 compiler.but하는 컴파일러 다를 수 있습니다 생각 쉼표 연산자와 함께 놀러 노력했다 엮다. [이 참조] (http://en.wikipedia.org/wiki/Comma_operator) – jonsca

+2

@jonsca : 혼란 스럽습니다.이 컨텍스트에서 쉼표 연산자를 사용할 수 없습니다. 컴파일 해보십시오. http://codepad.org/adLXW5ja –

+3

@jonsca : '오류 : GCC 오류가 발생 내가 할 경우 I = (1,2) ... 난 그게 법적해야 추측 int로 어떤 숫자 constant' – sarnold

5

코드 같은이 상황에 쉼표가 새로운 변수 정의를 소개합니다 등의 오류가 발생합니다 것, 그리고 2 변수의 유효한 이름이 아닙니다. 콤마 연산자는 식 "스택"으로 사용될 수있는 다른 상황에서

는 마지막 표현식의 값은 전체 식의 값이 될 것이다.

+0

'스택 업'이란 식으로 배열에서 수행되는 것과 같은 의미입니까? 예를 들어 int arr [] = {1 , 2,3,4,5,6} – phoenix

+1

아니요, 예를 들어'for (int i = 0; i <10; ++ i, ++ j) {..}'는 합법적입니다. 둘 다 매 반복마다. 'return (i ++, j);'는 i를 증가시키고 j를 리턴합니다. – Rup

+1

아니요, 어떤 이유로 표현식의 값을 버리려는 경우 쉼표 연산자를 표현식 컨텍스트에 사용합니다. 일반적으로이 표현식은 일종의 부작용을 수행합니다. 예 :'if (x> 10) i = 0, j = 1; 또는'x = (++ y, 20)'. 배열을 초기화 할 때 사용되는 쉼표는 단순히 구분자입니다. – Lindydancer

관련 문제