(함수명)의 크기'는 무엇을 반환합니까?
샘플 코드:
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 — The
sizeof
연산자는 함수 유형 또는 불완전 유형을 가진 표현식, 해당 유형의 괄호가 붙은 이름 또는 비트 필드 멤버를 지정하는 표현식에 적용할 수 없습니다.
— 으로 정의되고 없는 이 —되었으며,형형)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
'source' 카테고리의 다른 글
*nix 의사단말기는 어떻게 작동합니까?마스터/슬레이브 채널은 무엇입니까? (0) | 2023.10.16 |
---|---|
CSS 필터: 투명도가 있는 컬러 이미지를 흰색으로 만듭니다. (0) | 2023.10.16 |
CSS 콘텐츠 생성 '입력' 요소 전후 (0) | 2023.10.16 |
장고: 데이터베이스에 행 삽입 (0) | 2023.10.16 |
SQL에서 문자열을 비교하려면 '=' 또는 'LIKE'를 사용하시겠습니까? (0) | 2023.10.16 |