|
음... 정말 C 전문가가 듣는다면 혹시 웃을지도 모릅니다만...
문득 재미있는 질문이라서.. 저도 한번 만들어 돌려봤습니다. error는 나오지 않고... warning이 뜨는 군요...
warning C4034: sizeof returns 0
#include <stdio.h>
void main(void)
{
int size;
size = sizeof(void);
printf("%d\n", size);
return;
}
일단 VC에서는 0 이라고 반환이 되는군요... 없는 것이면... 0이 아닌가? 저는 그렇게 생각되는데...
잠깐 지나가는 의미로 void를 살펴보면...
일단... void는 Empty라는 뜻이죠... 즉 비어있다는 겁니다. 예를 들어...
void function1(void)라고 선언하게 되면... return 값도.. parameter도 없다고 생각하면 되겠죠... 즉 비어있는 형이라는 겁니다.
그런데... 이것은 MSDN에 있는 VOID (void와 같습니다)의 정의는 ANY_TYPE이라고 되어있습니다. 이는 void로써라기 보다는 주로 void* 또는 PVOID의 경우에 오히려 걸맞다고 볼 수 있는데... 이는 어떠한 형태의 주소값도 VOID로 캐스팅을 해서 사용할 수 있는 것에서 살펴볼 수 있습니다.
예를 들어... Windows 커널모드 함수 중에... PsCreateSystemThread라는 함수가 있습니다. 커널모드(신경안쓰셔도 됩니다.) 스레드를 생성해주는 함수인데.. 이 때 파라미터를 오직 하나의 변수를 이용해서 넘겨주어야 합니다. 이때 만약 정해진 구조체로 집어넣게 된다면, 넣고 싶은 값을 넣지 못하는 경우도 발생할 수 있습니다. 이때에는 구조체를 void의 포인터(PVOID, void*)를 통해서 전달하게 됩니다. 이러한 경우를 본다면... void는 (특히 void*)는 어떠한 값으로든 변화할 수 있는 것을 보여주는 겁니다.
어떠한 형태이든... sizeof(void)를 넣는다는 것은 즉 empty의 사이즈를 구하라는 말... 없는 것의 크기를 구하라는 것과 같습니다. 0이 나오거나... error가 compiler에 따라서 나올 수도 있겠군요...
김환석 님이 쓰신 글 :
: 이제 막 C++배우기 시작한 초보입니다.
: 오늘 첫수업에 모든 타입의 크기를 조사해오라고 하여서
: sizeof()를 이용해서 크기를 알아냈거든여
: 그런데 다른건 다들 되는데 void타입만 안되더라구여
: 왜 void는 크기를 알수 없죠???
: 도와주세여
|