질문의 역사:
쉼표 연산자는 C 언어에 도입되어 단일 표현식이 필요한 곳에서 여러 표현식을 하나의 줄에 결합할 수 있게 합니다. 이는 표현을 간결하게 하고 때때로 불필요한 보조 코드 블록을 피할 수 있습니다.
문제:
쉼표 연산자는 종종 함수의 인수 구분자로 혼동됩니다. 그것의 주요 특징은 왼쪽에서 오른쪽으로 두 피연산자를 모두 계산하지만 마지막 값만 반환한다는 것입니다. 부작용이 있는 복합 표현식에서 계산 순서 때문에 예기치 않은 결과를 얻을 수 있습니다.
해결책:
의미에 따라 합당한 곳에서만 의식적으로 쉼표 연산자를 사용하십시오. 예를 들어, 여러 변수를 초기화하는 for 루프에서 사용합니다. 부작용이 있는 복잡한 표현식 내에서 쉼표 연산자를 사용하는 것을 피하여 가독성을 저하시킬 위험과 불안정한 동작을 방지하십시오.
코드 예시:
#include <stdio.h> int main() { int a = 1, b = 2, c; c = (a += 5, b *= 2); // a=6, b=4, c=4 printf("a=%d b=%d c=%d\n", a, b, c); for (int i = 0, j = 10; i < j; i++, j--) { printf("i=%d j=%d\n", i, j); } return 0; }
주요 특징:
쉼표를 함수 인수 목록에서 연산자로 사용할 수 있으며, 쉼표 연산자처럼 작동합니까?
아니요, 함수 매개변수 목록에서 쉼표는 단순한 구분자일 뿐이며 연산자가 아닙니다. 연산자는 표현식에서만 작동합니다.
return 내 괄호 안에서 쉼표 연산자를 사용하면 어떻게 됩니까: return (x++, y);?
y의 값을 반환하며 x가 1 증가하지만 반환된 값은 x++의 결과가 아닙니다.
쉼표 연산자가 함수 인수 전달 시 표현식 계산 순서에 영향을 미칩니까?
쉼표 연산자가 인수 내에서 사용되면 왼쪽에서 오른쪽으로 표현식을 계산하지만 인수 간의 계산 순서는 표준으로 보장되지 않습니다.
개발자가 return 표현식에서 여러 작업을 수행하기 위해 쉼표 연산자를 사용하는 경우:
장점:
단점:
리팩토링된 버전에서는 작업이 개별 줄로 분리되었습니다:
장점:
단점: