2008년 09월 09일
Compiler Error C2100

그 동안 자바를 이용해서 서버를 구현 할 업무가 있어서 자바 위주로 공부를 하다 보니까 void* 포인터를 캐스팅하다가 실수를 했는데요, 처음에 왜 자꾸 Compiler Error C2100를 나는지 이해가 가지 않았다가 코드를 유심히 보니 제가 이상한 짓을 하고 있었네요 ;;

Compiler Error C2100은 영문으로 illegal indirection이라고 표기하고 한글로는 역참조 에러라고 부른다고합니다.

int i=100;
void* pVoid = &i;
int value = *pVoid;
// try
// int value = *((int*)pVoid);

위 소스는 제가 실수한 코드 샘플인데요, int value에 void 포인터가 가리키는 주소의 값을 넣으려고 하고있네요;;
포인터 변수의 경우 32bit 컴퓨터에서 무조건 4byte의 주소번지를 저장하고 있기 때문에 int* 이건 double* 이건 무조건 44byte 주소번지를 저장하고 있지요 ~ 여기서 포인터 변수에 데이터 형은 포인터 변수가 가리키고(저장하고) 있는 주소번지로 부터 몇 바이트를 읽어올 것인지를 알려주는 역할을 하는 것인데요, void형의 경우 몇 바이트를 읽어야 할 지 컴파일러는 알 수 없고 그래서 Compiler Error C2100를 발생시키는 것입니다.


※ 위 글에 대한 잘못된 부분이나 궁금하신 부분에 대한 피드백은 언제나 환영입니다 ~ 물론, 퍼가신다면 영광이구요. 우리나라의 모든 개발자 분들께서 바쁘시지만 서로 자신의 귀중한 경험과 지식을 공유해서 함께 발전해 나갈 수 있었으면 합니다 ^^
by greenfrog | 2008/09/09 04:43 | C++ / WIN32 / MFC | 트랙백 | 덧글(1)
트랙백 주소 : http://greenfrog7.egloos.com/tb/806845
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by shint at 2011/12/03 22:50
int* 이건 double* 이건 무조건 44byte 주소번지를 저장하고 있지요?? 응?? ㅇ_ㅇ??

:         :

:

비공개 덧글



<< 이전 페이지 | 다음 페이지 >>