c语言中g警告是什么意思?如何避免或解释它?

2026-04-16 17:173阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计368个文字,预计阅读时间需要2分钟。

c语言中g警告是什么意思?如何避免或解释它?

在尝试编译下一代代码时,我收到了一条非同寻常的警告信息:+

在尝试编译以下代码时,我收到了一个非常奇怪的警告:

#include <map> #include <set> class A { public: int x; int y; A(): x(0), y(0) {} A(int xx, int yy): x(xx), y(yy) {} bool operator< (const A &a) const { return (x < a.x || (!(a.x < x) && y < a.y)); } }; struct B { std::set<A> data; }; int main() { std::map<int, B> m; B b; b.data.insert(A(1, 1)); b.data.insert(A(1, 2)); b.data.insert(A(2, 1)); m[1] = b; return 0; }

输出:

$g++ -Wall -W -O3 t.cpp -o /tmp/t t.cpp: In function ‘int main()’: t.cpp:14: warning: dereferencing pointer ‘__x.52’ does break strict-aliasing rules t.cpp:14: warning: dereferencing pointer ‘__x.52’ does break strict-aliasing rules /usr/lib/gcc/i686-redhat-linux/4.4.2/../../../../include/c++/4.4.2/bits/stl_tree.h:525: note: initialized from here

对我来说根本没有任何意义.我该如何解读?我没有看到发布的代码有什么问题.

忘记指定编译器详细信息:

$gcc --version gcc (GCC) 4.4.2 20091027 (Red Hat 4.4.2-7) gcc 4.4有一个错误,其中std :: map中断错误警告严格别名规则.

gcc.gnu.org/bugzilla/show_bug.cgi?id=39390

c语言中g警告是什么意思?如何避免或解释它?

您的代码有效C.严格别名仅允许使用-O3时默认启用的优化子集.

您的解决方案是使用-fno-strict-aliasing或不同版本的gcc进行编译.

如果你对什么是严格混叠感到好奇,that has been asked here.

本文共计368个文字,预计阅读时间需要2分钟。

c语言中g警告是什么意思?如何避免或解释它?

在尝试编译下一代代码时,我收到了一条非同寻常的警告信息:+

在尝试编译以下代码时,我收到了一个非常奇怪的警告:

#include <map> #include <set> class A { public: int x; int y; A(): x(0), y(0) {} A(int xx, int yy): x(xx), y(yy) {} bool operator< (const A &a) const { return (x < a.x || (!(a.x < x) && y < a.y)); } }; struct B { std::set<A> data; }; int main() { std::map<int, B> m; B b; b.data.insert(A(1, 1)); b.data.insert(A(1, 2)); b.data.insert(A(2, 1)); m[1] = b; return 0; }

输出:

$g++ -Wall -W -O3 t.cpp -o /tmp/t t.cpp: In function ‘int main()’: t.cpp:14: warning: dereferencing pointer ‘__x.52’ does break strict-aliasing rules t.cpp:14: warning: dereferencing pointer ‘__x.52’ does break strict-aliasing rules /usr/lib/gcc/i686-redhat-linux/4.4.2/../../../../include/c++/4.4.2/bits/stl_tree.h:525: note: initialized from here

对我来说根本没有任何意义.我该如何解读?我没有看到发布的代码有什么问题.

忘记指定编译器详细信息:

$gcc --version gcc (GCC) 4.4.2 20091027 (Red Hat 4.4.2-7) gcc 4.4有一个错误,其中std :: map中断错误警告严格别名规则.

gcc.gnu.org/bugzilla/show_bug.cgi?id=39390

c语言中g警告是什么意思?如何避免或解释它?

您的代码有效C.严格别名仅允许使用-O3时默认启用的优化子集.

您的解决方案是使用-fno-strict-aliasing或不同版本的gcc进行编译.

如果你对什么是严格混叠感到好奇,that has been asked here.