IBM AIX xlc
编译器提供了一个标志,用于生成初始化本地变量存储的代码:
initauto=<hh>
Initialialize automatic storage to <hh>. <hh> is a
hexadecimal value. This generates extra code and
should only be used for error determination.
我认为MSVC编译器对调试版本做了类似的事情,但是我的内存在这一点上可能很模糊。
GCC是否有相同的选项?
答案 0 :(得分:10)
好的,我能提供的最佳答案。
http://gcc.gnu.org/onlinedocs/gcc/Option-Summary.html通过省略说“不”。没有任何文档可以将堆栈擦除代码注入到输出中。
尽可能接近我能猜到的唯一方法就是注入一些memset
- 类似的代码(可能就像一些mov
操作一样简单,但仍然是)每个嵌入的词法框架,其中创建自动变量。尽可能接近 - 我和GCC的内部专家远,但是 - 似乎没有任何记录的会这样做。< / p>
在下面的内容中,GCC Internals(http://gcc.gnu.org/onlinedocs/gccint.pdf)的PDF gccint.pdf(第361页)定义了在函数入口处的帧指针调整调用步骤的GCC名称为prologue
。 (但我真的不知道/理解这是否适用于函数中的其他词法范围。)因为这应该发生在机器定义(md)文件中,任何这样的选项似乎都有要为CPU体系结构定义。我在http://gcc.gnu.org/viewcvs/trunk/gcc/config/i386/点击他们的在线ViewCVS并在i386.md的第11,893行找到了prologue
的副本(至少有一份),在搜索功能扩展后跳了几跳,似乎没有像这样发出条件代码的东西。
但是这个GCC之下的东西有点整洁......
答案 1 :(得分:3)
我找不到任何明确的引用,但似乎GCC的某些副本(特别是GCC Fortran编译器)具有-finit-local-zero
选项,可以自动将任何非显式初始化的局部变量或数组设置为零。
就目前的标准GCC而言,我可以找到的这个主题的唯一特征是-Wuninitialized
对任何未初始化的变量发出警告(虽然我知道这不是你想要的)。
你需要多少钱?如果您有充分的理由,我认为将-finit-local-zero
代码复制到您的GCC版本并不困难......
答案 2 :(得分:-1)
C99:如果没有明确初始化具有自动存储持续时间的对象,则其值是不确定的。
有一个关于这个问题的话题。 What happens to a declared, uninitialized variable in C? Does it have a value?