- 论坛徽章:
- 0
|
有4个文件:glo.h, b.h,b.c, a.c, 为了测试问题,在glo.h中定义(不是声明)一个全局变量
两个问题:
[1]b.c汇编后,b.c中定义的全局变量test_b_init位于.rodata段,test_b汇编后看不到,而glo.h中的global_var位于data段,为什么不一样?
[2]当glo.h中global_var没有初始化时,最终a.c可以编译执行,而如果global_var初始化,则报多次定义错误!这是为什么?
- //glo.h
- #ifndef _GLO_H_
- #define _GLO_H_
- int global_var=8;
- #endif
复制代码
//b.h
#ifndef _H_T_B_H
#define _H_T_B_T
void get_a();
#endif
- //b.c
- #include <stdio.h>
-
- #include "glo.h"
-
- int test_b;
- int test_b_init=1;
-
- void get_a()
- {
- printf("b.c: a is :%d\n",global_var);
- }
复制代码
- //a.c
- #include <stdio.h>
-
- #include "glo.h"
- #include "b.h"
-
-
- int main()
- {
- get_a();
-
- printf("a.c: global_var is:%d\n",global_var);
- return 0;
- }
复制代码 |
|