this SO question 및 this SO question을 알고 있습니다. 이 요소의 새로운 요소 은 Xcode와 공백에 대한 포인터를 역 참조하기위한 대괄호 (0123)를 사용합니다.Xcode에서 void * 경고 알림
다음 프로그램은 내가이 컴파일러 고려할 기억, 내가 지금 비주얼 스튜디오 이 없지만 GCC 4.2에 대한 경고와 함께 를 컴파일하고, 엑스 코드 4.5.2에서 경고없이 컴파일 오류 및 MSDN 및 인터넷 동의합니다.
#include <stdio.h>
int main(int argc, const char * argv[])
{
int x = 24;
void *xPtr = &x;
int *xPtr2 = (int *)&xPtr[1];
printf("%p %p\n", xPtr, xPtr2);
}
I 메인의 몸의 세 번째 줄 변경하는 경우 :
int *xPtr2 = (int *)(xPtr + 1);
그것은 모두 GCC와 엑스 코드에 경고없이 컴파일합니다.
나는 내가하여 (주는 int이며 작동하지만, 명시 적으로 값을 반환하지 않는 사실을 포함하여, GDB와 특히 엑스 코드/LLVM에, 경고 또는 오류로이 침묵을 설정하는 방법을 알고 싶습니다내 생각에 - 벽은 GDB에서 트릭을한다.)
컴파일러 나던 포인터가 얼마나 큰지 알고있는 잘못된 모든 밤은
xptr [1] !!! 방법?? xPtr은 void에 대한 포인터입니다. 2D 배열이 아닙니다. –
@Anoop Vaidya : 잘못 알았습니다. Xcode는 그렇지 않습니다. 그리고 네, 2D 배열이 아니지만 아마도 "2 요소 배열"을 의미했을 것입니다. Visual Studio에서 xPtr [0]을 작성해도 오류가 발생했다고 생각합니다. 그 생각은 완전히 굉장합니다. – damix911
잘못 되었기 때문에 컴파일러는 포인터가 얼마나 큰지 알지 못합니다 ... void [] ~~ void * –