itsource

C의 함수의 크기가 항상 1바이트인 이유는 무엇입니까?

mycopycode 2022. 8. 17. 23:56
반응형

C의 함수의 크기가 항상 1바이트인 이유는 무엇입니까?

함수의 크기를 확인할 때sizeof(), 우리는 항상 1바이트를 얻습니다.이 1바이트는 무엇을 의미합니까?

제약 위반이므로 컴파일러가 진단해야 합니다.그런데도 컴파일 하는 경우는, 프로그램이 동작을 정의하지 않은 것입니다(@Steve Jessop에 의한 장애 모드의 명확화, 및 일부 컴파일러가 이것을 허가하는 이유에 대한 @Michael Burr의 회답 참조).C11부터 6.5.3.4/1:

sizeof연산자는 함수 타입을 가진 표현식에 적용해서는 안 된다.

이것은 정의되지 않은 동작은 아닙니다.C 언어 표준에서는 다음 명령어를 사용할 때 진단이 필요합니다.sizeof함수 지정자(함수 이름)가 있는 연산자는 제약조건 위반이므로sizeof교환입니다.

단, C언어의 확장으로서 GCC는 다음 명령어에 대한 연산을 허용합니다.void포인터 및 함수 포인터, 이것은 사이즈를 처리함으로써 이루어집니다.void또는 로서의 기능1그 결과,sizeof오퍼레이터가 평가하다1위해서void또는 GCC가 있는 기능.http://gcc.gnu.org/onlinedocs/gcc/Pointer-Arith.html#Pointer-Arith 를 참조해 주세요.

GCC가 사용 시 경고하도록 할 수 있습니다.sizeof이러한 오퍼랜드에 대해서-pedantic또는-Wpointer-arith옵션을 GCC로 설정합니다.또는 에러로 할 수도 있습니다.-Werror=pointer-arith.

그것은 컴파일러 라이터가 당신의 코에서 악마를 날리게 하는 대신 1의 값을 결정했음을 나타냅니다(실제로, 그것은 정의되지 않은 또 다른 사용이었습니다).sizeof"C 컴파일러 자체는 이것이 당신의 프로그램에서 처음 발생하는 필수 진단이라면 반드시 진단을 발행해야 합니다.그러면 C 컴파일러가 구문 규칙 위반에 대한 추가 진단을 발행하는 것과 마찬가지로 악마가 당신의 코에서 날아오르게 할 수도 있습니다(그런데 문서화된 진단 메시지가 될 수도 있습니다).s 또는 제약사항(또는 그 문제에 대해서는 어떤 이유로든)"https://groups.google.com/forum/?from groups=#!msg/comp.std.c/ycpVKXTZkgw/S2hdTbv4d8J

여기서부터 컴파일러가 정의되지 않은 구성에 대응하여 무엇을 하기로 결정하든 간에 "비속어 악마"라는 용어가 있습니다. 1이 경우 이 컴파일러의 비음 악령입니다.

다른 사람이 지적한 것처럼 sizeof()는 유효한 식별자를 얻을 수 있지만 함수 이름에 유효한(정확하게 참된 유효한) 결과를 반환하지 않습니다.게다가, 그것은 분명히 "코에서 나오는 악마" 증후군을 일으킬 수도 있고 아닐 수도 있다.

프로그램 함수 크기를 프로파일링하려면 중간 결과 디렉토리(.obj/.o로 컴파일된 디렉토리 또는 결과 이미지/실행 파일이 있는 디렉토리)에 있는 링커 맵을 확인합니다.때때로 이 지도 파일을 생성하거나 생성하지 않는 옵션이 있습니다.컴파일러/링커에 의존합니다.

함수에 대한 포인터 크기를 원하는 경우 모두 동일한 크기, CPU에 있는 주소 지정 단어 크기입니다.

언급URL : https://stackoverflow.com/questions/12259101/why-is-the-size-of-a-function-in-c-always-1-byte

반응형