37.0、C语言——C语言预处理(5) - 文件包含

37.0、C语言——C语言预处理(5) - 文件包含

文件包含

        1. 我们已经知道 ,#include 指令可以使另外一个文件被编译;就像他实际出现于 #include 指令的地方一样;

        2. 这种替换的方式很简单:预处理器先删除这条指令,并用包含文件的内容替换;这样一个源文件被包含 10 次,那就实际被编译 10 次;

头文件被包含的方式:

        1. 本地文件包含 ->

        #include "filename"

        查找策略,先在源文件所在目录下查找,如果该头文件未找到,编译器就像查找库函数头文件一样在标准位置查找头文件;如果找不到就提示编译错误;linux 环境的标准头文件的路径;

VS环境标准头文件路径:

C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include

        2. 库文件包含 ->

        #include <filename.h>

查找头文件直接去标准路径下查找,如果找不到就提示编译错误;

        1. 这样是不是可以说,对于库文件也可以使用 " " 的形式包含吗? 答案是肯定的,可以

        2. 但是这样做查找的效率就低些,当然这样也不容易区分是库文件还是本地文件了;

        3. 在预编译阶段 - 文件包含其实就是将被包含的文件内容拷贝一份,然后放到 #include 的文件中;

头文件的重复引入——解决方案

        如果头文件重复的引入,会导致头文件的内容拷贝多次并且放到 #include 的文件中,造成代码冗余;

        那其实这个问题在开发中是不可避免的,因为假设 程序猿A、程序猿B、程序猿C 分工合作写一个项目,那么在最后项目程序对接的时候,三个人的代码肯定会合到一起,那么很容易出现头文件重复引入的问题发生;

        那怎么解决这个问题呢?

我们可以用 条件编译 去解决这个问题 ->

#ifndef __TEST_H__
#define __TEST_H__

int Add(int x, int y);

#endif

        解释一下:#ifndef 判断如果 __TEST_H__ 未定义,则定义一个 __TEST_H__ 然后将int Add(int x ,int y);拷贝一份放到 #include 的文件中去;

        当我们第二次重复引入该头文件的时候,依旧是#ifndef 判断 -> 由于前面引入过一次该头文件,所以 __TEST_H__ 已经定义过了,那么下面至 #endif 的代码全部失效 -> 不参与编译,这样就不会重复拷贝相同的代码了;

        这样问题就解决了~

那么再给大家介绍一种解决头文件重复引入的方法 ->

#pragma once
int Add(int x, int y);

        这是一种比较新的写法,更为简单一下,也能够和上面第一种方法一样达到同样的效果;【只不过 这种写法在一些比较老的编译器中可能编不过去】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值