source

(함수명)의 크기'는 무엇을 반환합니까?

nicesource 2023. 10. 16. 21:54
반응형

(함수명)의 크기'는 무엇을 반환합니까?

샘플 코드:

int main(void)
{
    printf ("size = %d\n", sizeof(main));
}

된 값 는 얼마입니까?sizeof예)에 적용됩니다.main?

를 금지합니다 - C 로 - gcc -pedantic를 생산합니다.invalid application of ‘sizeof’ to a function type경고문.

.gcc다를(를).1위해서sizeof(main) 즉, .

컴파일러 의존적인 것 같습니다.

연산자 크기

 sizeof unary-expression
 sizeof ( type-name )

피연산자는 단항식인 식별자 또는 유형 캐스트식(즉, 괄호로 둘러싸인 유형 지정자)입니다.단항식은 비트 필드 개체, 불완전한 유형 또는 a를 나타낼없습니다.결과는 부호 없는 적분 상수입니다.표준 헤더 STDDEF.H는 이 유형을 다음과 같이 정의합니다.size_t.

: -Wall -pedantic합니다.sizeof()sizeof자),드:

$ cat sizeof.c 
#include<stdio.h> 
int main(){
    printf("%zu %p\n", sizeof(main), (void*)main);
    return 0;
} 

GCC 버전 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)을 포함한 컴파일 메시지:

$ gcc -Wall -pedantic sizeof.c -std=c99
sizeof.c: In function ‘main’:
sizeof.c:3:30: warning: invalid application of ‘sizeof’ to a function type 
              [-pedantic]
sizeof.c:3:38: warning: ISO C forbids conversion of function pointer to 
              object pointer type [-pedantic]

읽어보기:

6.5.3.4 작업자의 크기

— — 1118 — Thesizeof연산자는 함수 유형 또는 불완전 유형을 가진 표현식, 해당 유형의 괄호가 붙은 이름 또는 비트 필드 멤버를 지정하는 표현식에 적용할 수 없습니다.
— 으로 정의되고 없는 이 —되었으며,형형)size_t됨, <stddef.h> 더)

형식 size_t이다.%zu들어 다를 할 수 .%lu다로 합니다.unsigned long.

C는 ISO C++를 .sizeof함수 유형의 표현에 적용됩니다.

C++의 ISO/IEC 14882는 다음과 같이 말합니다(섹션 5.3.3).

"크기 연산자는 함수 또는 불완전한 형식을 가진 표현에 적용되지 않아야 합니다,..."

표준 C(ISO/IEC 9899:1999) 섹션 6.5.3.4에 대한 동일한 보류:

"연산자의 크기는 함수형 또는 불완전형을 갖는 표현, 이러한 형식의 괄호가 붙은 이름 또는 비트 필드 멤버를 지정하는 표현에는 적용할 수 없습니다."

ISO C11에 6.5.3.4 The sizeof and _Alignof operators 1 1(제약 조건):

sizeof연산자는 함수 형식 또는 불완전 형식을 갖는 표현식, 이러한 형식의 괄호가 붙은 이름 또는 비트 필드 멤버를 지정하는 표현에 적용할 수 없습니다.

4번 구역도 있어요6.3.2.1 Lvalues, arrays, and function designators다음은 다음과 같습니다.

함수 지정자는 함수 유형을 갖는 표현입니다.피연산자인 경우를 제외하고는sizeof연산자, 더_Alignof연산자(65) 또는 단항자&연산자, "함수 복귀형" 타입을 갖는 함수 지정자는 "함수 복귀형" 타입을 갖는 식으로 변환됩니다.

여기서 참조한 각주 65는 다음과 같은 점을 설명합니다.

이 변환이 발생하지 않기 때문에 의 피연산자는sizeof아니면_Alignof연산자는 함수 지정자로 남아 있으며 6.5.3.4의 제약 조건을 위반합니다.

구간에 따라4 Conformance:

본 국제 표준에서 "할 것"은 구현 또는 프로그램에 대한 요구 사항으로 해석되어야 하며, 반대로 "할 것"은 금지 사항으로 해석되어야 합니다.

따라서 엄격하게 준수하는 프로그램은 결코 함수의 크기를 가져가서는 안 됩니다.하지만, 다시 말하지만, 아마도 그것은 또한 정확한 형태의main():-)

하지만 여기에 허점이 있습니다.할 수 은 한"다션)).4 Conformance, 6).

행동 변화라고 주장할 수 있습니다(허용).sizeof(function)허락하지 않는다)는 것이 아니라, 원래의 프로그램은 애초에 엄격하게 준수하지 않았을 것이므로, 서브섹션은 그것을 금지하지 않습니다.

언급URL : https://stackoverflow.com/questions/2666392/what-does-sizeof-function-name-return

반응형