Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1723121
  • 博文数量: 199
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 6186
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-30 11:01
个人简介

Linuxer.

文章存档

2015年(4)

2014年(28)

2013年(167)

分类: 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函数之前添加一条赋值语句,也就是相当于局部变量进行处理了。

到这里这个问题就完全解决了。

阅读(6833) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~