私はこのSOの質問とこのSOの質問を知っています。これの目新しさの要素は、Xcodeに焦点を当てており、voidへのポインターを逆参照するために角かっこを使用しています。
次のプログラムは、Xcode 4.5.2では警告なしでコンパイルされ、GCC 4.2では警告付きでコンパイルされます。現在、Visual Studioを使用していなくても、これはコンパイラエラーと見なされることを覚えています。また、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);
}
メインの本体の3行目を次のように変更すると、次のようになります。
int *xPtr2 = (int *)(xPtr + 1);
GCCとXcodeの両方で警告なしでコンパイルされます。
GDB、特にXcode / LLVMで、この沈黙を警告またはエラーに変える方法を知りたいです。これには、関数mainがintであるが、明示的に値を返さないという事実が含まれます(ちなみに、-Wallはトリックを実行しますGDB上)。