C中文件包含的一些认识

来源:互联网 发布:java编程思想有第5版吗 编辑:程序博客网 时间:2024/06/05 17:36

   今天,在设计C代码的时候,想到了一点,想让B包含A,并自由使用A的头文件,但是却不想让包含B的C使用A,让A没有权限直接使用使用C……如下图:

 

  

   不知道应该怎么办。当时心想,如果是C++,使用继承,很灵活就能搞定这些事

 

   跟同事商量了一下,对方给出了一种方法:用B的源文件进行包含A的头文件,然后在用C的头文件包含B的头文件,这样子就OK了……有点百思不得其解。网上查询了一下资料,发现自己对于源文件,头文件,以及文件包含上的一些认识,还存在许多不足。自己总结了一下,顺便标记一二

 

 

  大部分人认识存在一个误区,以为写代码,必须要包含头文件以及源文件,但是其实是必要的。必要的只是源文件。一般来说,源文件(.c,.cpp)会被编译器编译生成模块。而头文件只是一个文本文件,#include这个预编译命令将这个文本文件插入到这个指令得位置。在源文件中使用#include包含一个头文件,那就相当于把头文件直接拷贝到了原文件中。

 

  而其他得文件,想使用你这个源文件中得内容,那么你就必须要引用声明(extern):

extern int b_max(int a , int b);

 

但是,不能忘记,在C中有规定,extern其实可以不用书写,默认的是extern,所以有了以下得形式的声明:

 int b_max(int a , int b);

 

如果说这个源文件需要,假如是a.cpp中提供了很多函数的外部接口,为了方便起见,我们把这些声明统一放置在一个文件中,这就是头文件的由来

 

  对于自己来讲,非常重要的一点就是:包含了头文件,其实是将一些函数给引入进来,那么引入以后,我就可以使用头文件中所规定的接口。没别的,跟头文件中其他得内容无关

 

  当然,头文件可能会被包含了N次,但是实际上我们只需要对他进行编译一次就够了,因此#ifndef来让头文件放置被重复包含,就是非常必要得了

 

 

 

 

原创粉丝点击