是否有一个gcc标志来初始化本地变量存储?

时间:2012-05-10 02:03:09

标签: c gcc local

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是否有相同的选项?

3 个答案:

答案 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?