sizeof
함수가 아니라 연산자 로 간주되는 이유는 무엇 입니까?
운영자 자격을 얻으려면 어떤 재산이 필요합니까?
답변:
C 표준이 그렇게 말하고 있고 유일한 투표를 받기 때문입니다.
결과 :
sizeof (int)
는 객체 표현식 대신 괄호로 묶인 유형일 수 있습니다 .int a; printf("%d\n", sizeof a);
합니다. 완벽합니다. 그들은 종종이 유형 캐스트 표현의 일환으로 필요하고, sizeof 연산자는 매우 높은 우선 순위가 둘째 때문에, 그래서있어 먼저하기 때문에, 볼 수있는 sizeof a + b
동일하지 않습니다 sizeof (a+b)
. 그러나 이들은 sizeof 호출의 일부가 아니라 피연산자의 일부입니다.sizeof a++
되지 않습니다 ( a를 수정하지 않음).기능은 모든 점에서 다를 것입니다. 함수와 단항 연산자 사이에는 다른 차이점이있을 수 있지만 원하는 이유가 있어도 sizeof가 함수가 될 수없는 이유를 보여주기에 충분하다고 생각합니다.
sizeof
표현에 VLA가 있으면 부작용 도 허용 합니다.
sizeof
: sizeof unary-expression
및 sizeof ( type-name )
-에 대해 두 가지 표기법을 사용 하므로 C11 표준에서는 '캐스트'로 간주되지 않고 괄호로 묶인 유형 이름으로 간주됩니다. 결과는 거의 동일합니다. (비교를 위해 캐스트 표현은 ( type-name ) cast-expression
입니다.) 그리고 Markdown이 Q & A Markdown과 다르게 작동하는 방식이 싫습니다 !
컴파일 타임 상수로 사용할 수 있으며 함수가 아닌 연산자 인 경우에만 가능합니다. 예를 들면 :
union foo {
int i;
char c[sizeof(int)];
};
구문 적으로 연산자가 아니라면 함수가 유형을 인수로 취할 수 없기 때문에 전 처리기 매크로 여야합니다. sizeof
유형과 변수를 인수로 사용할 수 있으므로 구현하기 어려운 매크로 입니다.
C 표준이 그렇게 말하고 있고 유일한 투표를 받기 때문입니다.
때문에 표준은 아마 올바른 sizeof
형식을 취하고
일반적으로 함수의 도메인 또는 공동 도메인 (또는 둘 다)에 실수보다 훨씬 더 복잡한 요소가 포함 된 경우 해당 함수를 연산자라고합니다. 반대로 함수의 도메인이나 공동 도메인에 실수보다 복잡한 요소가 포함되어 있지 않으면 해당 함수는 단순히 함수라고 할 수 있습니다. 코사인과 같은 삼각 함수가 후자의 예입니다.
또한 함수가 너무 자주 사용되어 일반 F (x, y, z, ...) 형식보다 더 빠르고 쉬운 표기법으로 발전한 경우 결과 특수 형식을 연산자라고도합니다. 예를 들면 더하기 "+"및 나누기 "/"와 같은 중위 연산자와 계승 "!"과 같은 접미 연산자가 있습니다. 이 사용법은 관련된 엔터티의 복잡성과 관련이 없습니다.
기능이 아니기 때문입니다. 다음과 같이 사용할 수 있습니다.
int a;
printf("%d\n", sizeof a);
함수에는 진입 점, 코드 등이 있습니다. 함수는 런타임 (또는 인라인)에 실행되어야하며 sizeof는 컴파일 타임에 결정되어야합니다.
sizeof 연산자는 런타임이 아닌 컴파일 타임 엔티티이며 함수처럼 괄호가 필요하지 않습니다. 코드가 컴파일되면 컴파일 시간에 해당 변수의 크기로 값을 대체하지만 함수가 실행 된 후 함수에서 반환 값을 알 수 있습니다.