问题一:
A.h:
int g=3;
A.c:无
B.h:无
B.c: #include"A.h"
结果是B.c中使用g,gcc编译说多次定义g错误!
为什么?
问题二:
而
A.h:
int g;
A.c:int g=3;
B.h:无
B.c: #include"A.h"
结果是B.c中使用g,gcc编译通过,无问题
为什么?
所有.c文件都包含对应.h文件,所以.h文件都用了ifndefine/define/endif
所有.h文件都用了ifndefine/define/endif
这种写法错误在哪呢?
追答错误就是,你只能在头文件做声明,然后在C文件定义,也就是赋值,所以你第二种可以编译通过,第一种直接在头文件定义就会出错
这种写法错误在哪呢?
追答会出现重复定义
但是我 所有.h文件都用了ifndefine/define/endif
追答#ifndefine A_H
#define A_H
int g=3;
#endif
ifndefine/define/endif这些关键字只是用来告诉GCC该怎么编译,它实际上并非C语言代码
#ifndefine A_H //GCC看来这一行就检查是否定义了A_H,
//如果定义了,那么到endif中间的东西编译器就不会编译了,相当于if语句;
//头文件中加这个,只是防止程序中多次#include"a.h"时出错
#define A_H
int g=3;
#endif
#include
int main()
{
//#ifndefine A_H 加上这两句,编译器发现已经定义了A_H 就不会编译下面一行了
int g=2; //如果这样写当然就会出现错误了
//#endif
printf("%d\n",g);
return 0;
}