【发布时间】:2012-12-19 05:34:29
【问题描述】:
我知道this SO question 和this SO question。元素 这本书的新颖之处在于它对 Xcode 的关注,以及它对 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 上编译时都没有警告。
我想知道如何将这种沉默变成警告或错误,on GDB 和尤其是 Xcode/LLVM,包括函数 main 是 int 但 没有明确返回任何值(顺便说一下,我认为 -Wall 确实 GDB 的技巧)。
【问题讨论】:
-
xptr[1] !!!如何?? xPtr 是指向 void 的指针。不是二维数组。
-
@Anoop Vaidya:我知道这是错的,Xcode 没有,这让我很困扰。是的,它不是二维数组,但也许你的意思是“二元素数组”。我认为即使我写了 xPtr[0],Visual Studio 也会发出错误,我认为这非常棒。
-
因为没有错..编译器不知道指针有多大...一个void[] ~~ void*
标签: xcode compiler-errors compiler-warnings pointer-arithmetic