微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

GCC 如何抑制“从指针目标类型中丢弃‘易失性’限定符”

如何解决GCC 如何抑制“从指针目标类型中丢弃‘易失性’限定符”

我怎样才能抑制这个警告? 也许代码中忽略了一些#pragma GCC 诊断或 makefile 中的 CFLAG?

解决方法

如果您发布了完整的警告消息,它应该显示具体的警告 [-Wdiscarded-qualifiers]。与其他警告一样,只需添加前缀 no- 即可抑制它。

来自gcc manual

-Wno-discarded-qualifiers(仅限 C 和 Objective-C)

不要警告指针上的类型限定符是否被丢弃。通常,编译器会在将 const char * 变量传递给采用 char * 参数的函数时发出警告。此选项可用于抑制此类警告。

$ cat test.c
#include <stdio.h>

int a;
volatile int *p = &a;

int main (void)
{
        int *q = p;
        return 0;
}

$ gcc test.c
test.c: In function ‘main’:
test.c:8:11: warning: initialization discards ‘volatile’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  int *q = p;
           ^
$ gcc -Wno-discarded-qualifiers test.c
$ 
,

尽管您可能已经知道这是一种糟糕的编程策略,但您可以在编译时禁用一般警告,而不仅仅是让您出错的警告。

编译时添加-w选项

我还附上了有关警告选项的文档。

http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html

希望对我有所帮助!

,

好的,谢谢各位。 -Wdiscarded-qualifiers 并没有真正帮助我。 实际上我试图在 gcc 文档中找到它,但我不擅长这个。

这是我在项目中的 cflags CFLAGS ?= -g0 -O3 -Wno-discarded-qualifiers -Wshadow -Wmaybe-uninitialized -Wall -Wextra -Wno-unused-function -Wno-error=strict-prototypes -Wpointer-arith -fno-strict-aliasing -Wno-错误=cpp -Wuninitialized -Wmaybe-uninitialized -Wno-unused-parameter -Wno-missing-field-initializers -Wtype-limits -Wsizeof-pointer-memaccess -Wno-format-nonliteral -Wno-cast-qual -Wunreachable-code - Wno-switch-default -Wno-switch-enum -Wreturn-type -Wmultichar -Wformat-security -Wno-ignored-qualifiers -Wno-error=pedantic -Wno-sign-compare -Wno-error=missing-prototypes -Wdouble-促销 -Wclobbered -Wdeprecated -Wempty-body -Wtype-limits -Wno-unused-value -Wno-unused-parameter -Wno-missing-field-initializers -Wuninitialized -Wmaybe-uninitialized -Wall -Wextra -Wno-unused-parameter - Wno-missing-field-initializers -Wtype-limits -Wsizeof-pointer-memaccess -Wno-format-nonliteral -Wpointer-arith -Wno-cast-qual -Wunreachable-code -Wno-switch-default -Wreturn-type -Wmultichar - Wformat-security -Wno-ignored-quali fiers -Wno-sign-compare LDFLAGS ?= -lm

我使用丢弃 volatile 限定符的原因是我不想在函数原型中添加 volatile 并且不想在函数调用中转换它,因为一些变量在没有 volatile 键的情况下可以正常工作,而其他变量则不是。 (它的一些常见变量和 thread_t 类型) 所以代码工作正常,当我试图在函数调用中转换 volatile 类型时 - 发生了一些小故障,现在一切正常。感谢您的帮助,我很感激!

现在有了我拥有的那把钥匙 “从指针目标类型中丢弃 'volatile' 限定符” 它的指针有时会被编译器优化。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。