gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 01:42:59 25 4
gpt4 key购买 nike

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

pointer of type void * used in arithmetic

使用的标志:

-O2 -Werror -Wall -Wno-main -Wno-format-zero-length -Wpointer-arith -Wmissing-prototypes -Wstrict-prototypes -Wswitch -Wshadow -Wcast-qual -Wwrite-strings -Wno-sign-compare -Wno-pointer-sign -Wno-attributes  -fno-strict-aliasing     

-Wpointer-arith 应该捕捉到这种类型的警告,但我无法得到这个警告:

pointer of type void * used in arithmetic

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

编辑:我的错误,它是作为未定义的宏检查的一部分存在的。 :( 通过定义该宏,我能够得到该错误。

最佳答案

你是对的。 -Wpointer-arith 应该根据 documentation 向您发出警告.

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

~/code/samples$ cat foo.c
#include <stdio.h>
int main (int argc, char **argv)
{
void * bar;
void * foo;
foo = bar + 1;
return 0;
}

我只使用 -Wpointer-arith 选项和上面列出的所有选项编译程序。两次尝试都提出了所需的警告。我正在使用 gcc 版本 4.3.4 (Debian 4.3.4-6)。:

~/code/samples$ gcc -Wpointer-arith foo.c
foo.c: In function ‘main’:
foo.c:6: warning: pointer of type ‘void *’ used in arithmetic

~/code/samples$ gcc -O2 -Werror -Wall -Wno-main -Wno-format-zero-length -Wpointer-arith -Wmissing-prototypes -Wstrict-prototypes -Wswitch -Wshadow -Wcast-qual -Wwrite-strings -Wno-sign-compare -Wno-pointer-sign -Wno-attributes -fno-strict-aliasing foo.c
cc1: warnings being treated as errors
foo.c: In function ‘main’:
foo.c:6: error: pointer of type ‘void *’ used in arithmetic

如果您给它“正确”的代码,编译器确实会抛出警告。因此,我建议您检查一下为什么您期望收到此警告。也许您正在编译的代码已更改?

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

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

关于用于指针算术警告的 c gcc 编译器选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1997751/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com