Linuxer.
全部博文(199)
分类: LINUX
2013-05-06 17:29:38
今天想写一个程序,该程序的主函数为空,但是还可以输出hello world 这句话。
程序是在linux用vim 写的,原程序为:
#include
int test02()
{
printf("hello world!n"); //进行输出;
return 0;
}
int g=test02(); //调用函数进行变量的赋初值;
int main()
{
return 0;
}
原以为这么简单的一个程序应该没有啥问题,但是通过gcc进行编译时去报错:initializer element is not constant 。想了半天才弄清楚该程序的为啥报错。
全局变量是保存在静态存储区的,因此在编译的时候只能用常量进行初始化,而不能用变量进行初始化。在该程序中是用函数的返回值给变量进行初始化的,因此会出错。
在这里说一下全局变量和局部变量的在编译时的不同的处理方式,在程序编译的时候全局变量必须用常量进行初始化,也就是说直接在全局变量的内存地址直接存储变量的值;对于局部变量则在编译的时候不需要这样,编译的时候只需要将局部变量的赋值语句编译成机器代码,在程序运行到这里是在进行局部变量的赋值。
说了这么多,还是没有说这个问题到底怎么解决。
该问题有一个解决方法就是,可以用g++编译器对该程序进行编译,再碰到这里时,编译器会先把全局变量保存到.bss段中,而且默认值为0,但是会在main函数之前添加一条赋值语句,也就是相当于局部变量进行处理了。
到这里这个问题就完全解决了。