typedef void something(void); 형식 사용시 이해가 안가는점..
글쓴이: potons1 / 작성시간: 목, 2012/08/23 - 7:59오후
안녕하세요
함수포인터와 typedef 공부를 하다가 궁금한 점이 있어서 질문드립니다.
일반적인 함수 포인터 type define은
typedef void (*something)(void) // void를 반환하고 void를 인자로 받을 수 있는 type define
이렇게 하는 것을 이해했는데요,
typedef void something(void) 이런 식으로 하면 어떻게 타입정의가 되는 것인지 궁금합니다.
일단 이렇게 하면
something * fptr; 이런식으로 함수포인터를 선언해서 사용할 수 있었는데
something tempPtr; 이렇게 선언하면 변수가 어떻게 선언되는지 궁금합니다.
이 위의 tempPtr은 sizeof(tempPtr) 해보면 1이 나오는데 이것도 왜 그런지 궁금합니다.
(fptr은 sizeof연산하면 일반 포인터 size와 값이 같게 나와서 이해가 되었습니다.)
Forums:
와...
3년전의 나에게 댓글을 작성한다.
typedef 사용법은
typedef 변수명;
으로 쓴다.
typedef void something(void) 함수를 typedef한 것이기 때문에 sizeof(tempPtr)은 함수를 sizeof연산자에 대입한 것과 같으며 sizeof (함수명)은 금지되어있단다...
그런데 크기가 왜 1인가?
답변
이 문서에 따르면 sizeof (function_name)은 기본으로 금지되었지만 몇몇 컴파일러는 지원을 하는 모양이네요.
요약하면 C 확장으로 GCC는 void나 함수의 크기를 1로 취급한답니다.
http://stackoverflow.com/questions/12259101/why-is-the-size-of-a-function-in-c-always-1-byte/12259995#12259995
검색어: "c sizeof function 1" from Google
Visual Studio 2015 버전에선 컴파일 불가능했고, online compiler인 ideone에서는 컴파일 가능했으며 1이 출력되었습니다.
저는 이렇게 생각했습니다.
댓글 달기