1、C语言外部说明(变量及函数的作用域扩充)

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文件提供通道。

原文地址:https://www.cnblogs.com/dyllove98/p/3122889.html