我知道这个 SO question和这个 SO question。这篇文章的新颖之处在于它对 Xcode 的关注,以及它使用方括号来取消引用指向 void 的指针。
以下程序在 Xcode 4.5.2 中编译时没有警告,在 GCC 4.2 上编译时出现警告,即使我现在没有 Visual Studio,我记得它会认为这是编译器错误,MSDN 和 Internet 都同意.
#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);
}
如果我将 main 正文的第三行更改为:
int *xPtr2 = (int *)(xPtr + 1);
它在 GCC 和 Xcode 上编译时都没有警告。
我想知道如何在 GDB尤其是Xcode/LLVM 上将这种沉默转变为警告或错误,包括函数 main 是 int 但没有显式返回任何值的事实(顺便说一下,我认为 -Wall 可以解决问题在 GDB 上)。