C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[39416] Re:sizeof(void) 하면 에러가 나는데 왜그러죠?
플그램시러시러 [wars93] 1332 읽음    2005-03-09 00:48
음... 정말 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는 크기를 알수 없죠???
: 도와주세여

+ -

관련 글 리스트
39415 sizeof(void) 하면 에러가 나는데 왜그러죠? 김환석 868 2005/03/08
39416     Re:sizeof(void) 하면 에러가 나는데 왜그러죠? 플그램시러시러 1332 2005/03/09
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.