跪求大神,gcc编译问题

C语言 码拜 10年前 (2015-05-11) 1366次浏览 0个评论

   公司最近把某套程序从aix迁移到linux上,但是尝试迁移了一点后,出现了很多问题,很多是因为linux下临时变量未在代码层初始化就使用出现的,临时变量int会出现各种值,正数、负数、0.
   代码里,未初始化的临时变量太多了(吐槽)!在这个基础上,领导希望我在gcc的编译选项上入手,能为临时变量int赋初始值.查了百度,发现临时变量的内存空间是运行时才分配的,编译时还没这个内存空间,可能做不到,但是领导却希望我提供编译选项,或者其他某个东西,达到编译时编进去,而在运行时插值进去。。
   各位大神,有了解的告诉我下,gcc哪个编译选项比较接近,或者提供个思路(不一定通过gcc)也行。。。在线等,多谢。

来大神。。。绝望ing。。。
20分
恭喜你,gcc没有这种选项,你只能改代码了。编译时加上 -Wuninitialized 选项,再加上-O选项(-O1 -O2 -O3),然后编译器发现未初始化变量就会报警告,你可以根据警告改代码。
10分
-finit-local-zero       Initialize local vars and arrays to zero
-fzeros                 Treat initial values of 0 like non-zero values
引用 3 楼 zhao4zhong1 的回复:

-finit-local-zero       Initialize local vars and arrays to zero
-fzeros                 Treat initial values of 0 like non-zero values

老师,这2个选项我man gcc后没看到,其他的zero的我都看了下,好像也没有,然后百度了下,好像是有 gfortran -finit-local-zero x的用法,然后我也用了,但是gfortran也报没有这个 -finit-local-zero的选项,版本是4.1.2,请问,这个要用哪个版本才能有该选项,或者要加什么组件?

多谢。

引用 2 楼 JiangWenjie2014 的回复:

恭喜你,gcc没有这种选项,你只能改代码了。编译时加上 -Wuninitialized 选项,再加上-O选项(-O1 -O2 -O3),然后编译器发现未初始化变量就会报警告,你可以根据警告改代码。

倒不是我不想这样做,主要是太多了,看着就整个人都不好了。。

引用 3 楼 zhao4zhong1 的回复:

-finit-local-zero       Initialize local vars and arrays to zero
-fzeros                 Treat initial values of 0 like non-zero values

老师再问一下,-fzeros是哪个工具里的?没搜到相关信息。。

10分
没有这个选项,改代码去吧
http://stackoverflow.com/questions/10526602/is-there-a-gcc-flag-to-initialise-local-variable-storage
看来只能改代码了,感谢2楼 JiangWenjie2014 给的方法,分每人都给了。
gcc -v –help
引用 3 楼 zhao4zhong1 的回复:

-finit-local-zero       Initialize local vars and arrays to zero
-fzeros                 Treat initial values of 0 like non-zero values

 Options for Fortran:
   -finit-local-zero       Initialize local vars and arrays to zero
   -fzeros                 Treat initial values of 0 like non-zero values
Linux不是开源的吗?楼主高兴了在Linux加载ELF文件对应源代码中打个将无需初始化段内容清零的补丁,在gcc编译生成call函数调用之前将堆栈中临时变量清零的补丁。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明跪求大神,gcc编译问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!