首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于未初始化变量的gcc3和gcc4的差异

关于未初始化变量的gcc3和gcc4的差异
EN

Stack Overflow用户
提问于 2010-04-30 14:25:15
回答 2查看 1.4K关注 0票数 1

我们有一套C++代码,正在从基于RHEL 4的发行版移植到基于RHEL-5的发行版。它以前用g++ 3.4.3编译,现在用g++ 4.1.2编译。结果发现,有一些未初始化的局部级POD变量,在新环境下会导致故障--这并不奇怪,因为C++规则说本地POD结构没有初始化,因此是随机的。

我正在寻找一种解释,为什么在用3.4.3编译时,这并没有让我们感到困扰,但现在却给4.1.2带来了巨大的破坏。在gcc3的规范中是否有一个模糊的设置,可以帮助初始化本地POD变量?

EN

回答 2

Stack Overflow用户

发布于 2011-10-16 21:00:54

顾名思义,未定义的行为是未定义的。编译器不需要解释他们为什么要做他们所做的事情,他们不需要始终如一地做一件事,他们也不需要为他们所做的事情找一个理由。

编译器通常处理未定义行为的方式是忽略它。从来没有GCC的开发人员坐下来说:“让我们编写一些代码,以说明GCC如何处理未初始化的变量”。无论发生在他们身上的事情,都是GCC的所有其他代码被忽略的结果。因此,编译器的新版本可能会对未初始化的变量执行不同的操作,这不是因为编译器处理它们的方式不同,而是因为它从未有意地处理它们。

票数 3
EN

Stack Overflow用户

发布于 2011-10-16 19:54:51

也许通过使用g++的最新版本(如4.6.1)编译代码,并请求所有警告(使用-Wall -Wextra),然后对源代码进行黑客攻击,直到发出更多警告,您就可以改善这种情况。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2745136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档