foo(a = b+c);
//new value of a(after the call) = b+c
//but
sizeof(a = b+c);
//new value of a = old value of a
후자의 경우 할당 구문의 결과가 함수 스택 (위 코드 포함)에 반영되지 않는 이유는 무엇입니까?sizeof 함수를 내부에 할당
foo(a = b+c);
//new value of a(after the call) = b+c
//but
sizeof(a = b+c);
//new value of a = old value of a
후자의 경우 할당 구문의 결과가 함수 스택 (위 코드 포함)에 반영되지 않는 이유는 무엇입니까?sizeof 함수를 내부에 할당
sizeof
은 기능이 아닌 연산자입니다. sizeof
의 피연산자는 가변 길이 배열 인 경우를 제외하고는 계산되지 않습니다.
C11
: 6.5.3.4 P (2)
sizeof
연산자 식 또는 유형의 괄호 이름 일 수있다 피연산자의 크기 (바이트)를 산출한다. 크기는 피연산자 유형에서 결정됩니다. 결과는 정수입니다. 피연산자 유형이 가변 길이 배열 유형이면 피연산자가 평가됩니다. 그렇지 않으면 피연산자가 계산되지 않고 결과는 정수 상수입니다.
sizeof
은 피연산자를 평가하지 않습니다. 가변 길이 배열을 포함하는 경우를 제외
size_t x = sizeof(i++); // i is not incremented
:
피연산자의 형태는 가변 길이 배열 유형이면(C99은 6.5.3.4p2)가 "피연산자가 평가되고, 그렇지 않으면 피연산자는 평가되지 않으며 결과는 정수입니다. "
(C99, 6.7.5.2p4) "크기식이를 sizeof 연산자의 연산의 일부로서 어디에 연산자의 결과에 영향을 미치지 않을 크기의 식의 값을 변경 크기 표현식이 평가되는지 여부는 불특정입니다. "size_t y = sizeof(int [j++]); // j is incremented;
size_t z = sizeof (*(int (*)[k++]) 0); // k may or may not be incremented
// gcc increments k
내 [DUP 예는 (http://stackoverflow.com/a/21995718/1708801)은식이 sizeof' '로 평가 한 경우를 나타낸다. –