用于指针算术警告的c gcc编译器选项

用于指针算术警告的c gcc编译器选项,c,gcc,compiler-construction,C,Gcc,Compiler Construction,我正在使用以下标志,但仍然无法获得此警告: p.c:7: warning: wrong type argument to increment 算术中使用的void*类型的指针 使用的标志: -O2-Werror-Wall-Wno main-Wno格式零长度-Wpointer arith-Wmissing原型-Wstrict原型-Wswitch-Wshadow-Wcast qual-Wwrite字符串-Wno符号比较-Wno指针符号-Wno属性-fno严格别名 -Wpointer-arith应

我正在使用以下标志,但仍然无法获得此警告:

p.c:7: warning: wrong type argument to increment
算术中使用的
void*
类型的指针

使用的标志:

-O2-Werror-Wall-Wno main-Wno格式零长度-Wpointer arith-Wmissing原型-Wstrict原型-Wswitch-Wshadow-Wcast qual-Wwrite字符串-Wno符号比较-Wno指针符号-Wno属性-fno严格别名
-Wpointer-arith
应捕获此类型的警告,但我无法获取此警告:

p.c:7: warning: wrong type argument to increment
算术中使用的
void*
类型的指针

应使用哪个特定的cflag来获取此警告


编辑:我错了,它是未定义的宏检查的一部分:(通过定义该宏,我可以得到该错误。

在OS X上使用gcc 4.2.1,我得到以下警告:

p.c:7: warning: wrong type argument to increment
对于以下程序:

#include <stdio.h>

int main(void)
{
    int i[] = { 42 };
    void *p = i;
    printf("%p\n", p++);
    return 0;
}

您可以发布您的程序,或发布编译上述内容的结果吗?

在OS X上使用gcc 4.2.1,我收到以下警告:

p.c:7: warning: wrong type argument to increment
对于以下程序:

#include <stdio.h>

int main(void)
{
    int i[] = { 42 };
    void *p = i;
    printf("%p\n", p++);
    return 0;
}

你能发布你的程序吗,或者发布编译上述内容的结果吗?

你说得对。
-Wpointer-arith
应该根据

我刚刚尝试了以下程序(故意错误):

如果您给编译器提供了“正确”的代码,编译器确实会发出警告。因此,我建议您检查为什么您期望出现此警告。可能您正在编译的代码已更改

我可以给你一个可能的线索:
foo=bar+1;
在上面的代码中触发警告。但是
foo=bar++;
不会(你会得到一个不同的警告)。因此,如果你的代码在指针上使用递增(或递减)运算符,它可能不会触发警告


我知道这不是一个直接的答案,但我希望这有助于你集中精力进行调查。

你是对的。
-Wpointer-arith
应该根据

我刚刚尝试了以下程序(故意错误):

如果您给编译器提供了“正确”的代码,编译器确实会发出警告。因此,我建议您检查为什么您期望出现此警告。可能您正在编译的代码已更改

我可以给你一个可能的线索:
foo=bar+1;
在上面的代码中触发警告。但是
foo=bar++;
不会(你会得到一个不同的警告)。因此,如果你的代码在指针上使用递增(或递减)运算符,它可能不会触发警告


我知道这不是一个直接的答案,但我希望这有助于你集中精力进行调查。

你使用的是哪一版本的gcc?你能提供源代码吗?只要改进源代码,你就可以清除警告。抱歉..它基本上是netbsd的一部分..我无法发布程序。gcc版本:arm--netbsdelf gcc-v使用Build-规格目标:arm--netbsdelf线程型号:posix gcc版本4.1.2 20061021(预发布)(NetBSD nb3 20061125)你能发布一个展示你所看到的东西的最小代码示例吗?当你在我的回答中编译程序时会发生什么?一个与你有相同问题的小代码呢。只需输入假变量名、假函数名等),这样它就不会被识别。你使用的是哪个版本的gcc?你能提供源代码吗。通过改进源代码,您将能够清除警告。对不起。它基本上是netbsd的一部分。我无法发布该程序。gcc版本:arm--netbsdelf gcc-v,使用内置规范。目标:arm--netbsdelf线程模型:posix gcc版本4.1.2 20061021(预发布)(NetBSD nb3 20061125)您能否发布一个展示您所看到的内容的最小代码示例?在我的回答中,当你编译程序时会发生什么?一个与你有同样问题的小代码呢。只需输入假变量名、假函数名等),这样它就不会被识别。对不起。它基本上是netbsd的一部分。我无法发布程序。gcc版本:arm--netbsdelf gcc-v,使用内置规范。目标:arm--netbsdelf线程型号:posix gcc版本4.1.2 20061021(预发布)(NetBSD nb3 20061125)我的错误,它是未定义的宏检查的一部分:(抱歉..它基本上是netbsd的一部分..我无法发布程序。gcc版本:arm--netbsdelf gcc-v使用内置规范。目标:arm--netbsdelf线程模型:posix gcc版本4.1.2 20061021(预发布)(netbsd nb3 20061125)我的错误,它是作为未定义的宏检查的一部分出现的:(我们真正想要的是对任何使用“+”的指针算法的警告。我误读了这篇文章,认为我已经找到了答案。但是指针算法是C语言灵魂的一部分。当然,cerr我们真正想要的是对任何使用“+”的指针算法的警告。)我误读了这篇文章,认为我已经找到了答案。但是指针运算是C。当然,cerr的灵魂的一部分