C语言外部说明(变量及函数的作用域扩充)
C习惯编程方式:在.c文件中定义,同名.h文件中声明,需要使用时.c中的程序时,#include 同名.h文件就可以。
注:(同名中只是为了程序逻辑清晰,不同名的.c和.h文件也是一样的。)
C编译方式:只同时编译.c文件,不会编译.h文件,所以如果需要.h文件的编译,只能包含在.c文件当中去。
C外部变量的查找方式:在本项目或工程中的所有文件中去查找。所以理论上不应该存在
同名的外部变量。
一、.h文件之间全局变量的扩充
.h文件之间全局变量的扩充,一般使用#include(因为如果使用extern 在使用这个
头文件时,那个定义所在的头文件必须直接或间接#include在.c文件中,才能编译这个定义
所在的头文件,那样才能找到这个外部变量的定义),直接使用在头文件中使用include的方
式就是使用间接的方式去包含,如果在.c文件中包含了这个.h文件,那么在这个.h文件也包含了它需要使用的外部变量定义所在的.h文件,一样会进行编译.
出现错误:
两种解决办法:
1、 在t2.h文件中直接 #include “fun.h” 而不是用extern int B;
2、 直接在main.c文件中包含#include “fun.h”,而不通过t2.h文件(t2.h没有任何关于fun.h文件中的任何信息)
二、.c 和.h文件之间全局变量的扩充
如果是同名的:一般只使用extern(在.h文件中使用)
如果是非同名的:一般使用#include 与另一个.c文件同名的.h文件
理论上这两种方法可以交替使用。
但是如上所说,同名只是为了程序的清晰可读性。
三、.c文件之间,一般使用通过包含与.c同名的.h文件(配合二中的方法)
这里包含的同名.h文件,只是为了程序清晰才在同名的.h文件中去声明.c文件中的外部变
量和函数,其实不同名的.h文件也完全可以做到这点,但是会显得混乱。
或者使用extern .
注:同名的.c文件之间不能使用#include 会生成多个目标文件中含有同一个变量,在进行
程序链接时会出错。
实际编程中:绝大部分的声明全部放在.h文件中,绝大部分的定义全部放在.c文件中。
.h文件主要是为了.c的独立性,以及为.c文件提供通道。