您的位置:首页 > 编程语言 > C语言/C++

c/c++编程心得 -initializer element is not

2015-06-01 12:09 351 查看
原文地址:c编程心得 -initializer element is not constant作者:tencentljp
今天想写一个程序,该程序的主函数为空,但是还可以输出hello world 这句话。

程序是在linux用vim 写的,原程序为:

#include<stdio.h>

int test02()

{

printf("helloworld!n"); //进行输出;

return 0;

}

intg=test02(); //调用函数进行变量的赋初值;

int main()

{

return 0;

}

原以为这么简单的一个程序应该没有啥问题,但是通过gcc进行编译时去报错:initializer element is not constant。想了半天才弄清楚该程序的为啥报错。

全局变量是保存在静态存储区的,因此在编译的时候只能用常量进行初始化,而不能用变量进行初始化。在该程序中是用函数的返回值给变量进行初始化的,因此会出错。

在这里说一下全局变量和局部变量的在编译时的不同的处理方式,在程序编译的时候全局变量必须用常量进行初始化,也就是说直接在全局变量的内存地址直接存储变量的值;对于局部变量则在编译的时候不需要这样,编译的时候只需要将局部变量的赋值语句编译成机器代码,在程序运行到这里是在进行局部变量的赋值。

说了这么多,还是没有说这个问题到底怎么解决。

该问题有一个解决方法就是,可以用g++编译器对该程序进行编译,再碰到这里时,编译器会先把全局变量保存到.bss段中,而且默认值为0,但是会在main函数之前添加一条赋值语句,也就是相当于局部变量进行处理了。

到这里这个问题就完全解决了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: