#include叫做文件包含命令,用来引入对应的头文件(.h文件)。#include 也是C语言预处理命令的一种。

#include 的处理过程很简单,就是将头文件的内容插入到该命令所在的位置,从而把头文件和当前源文件连接成一个源文件,这与复制粘贴的效果相同。

#include 的用法有两种,如下所示:

#include <stdHeader.h>
#include "myHeader.h"

使用尖括号< >和双引号" "的区别在于头文件的搜索路径不同:

  • 使用尖括号< >,编译器会到系统路径下查找头文件;

  • 而使用双引号" ",编译器首先在当前目录下查找头文件,如果没有找到,再到系统路径下查找。

也就是说,使用双引号比使用尖括号多了一个查找路径,它的功能更为强大。

前面我们一直使用尖括号来引入标准头文件,现在我们也可以使用双引号了,如下所示:

#include"stdio.h"
#include"stdlib.h"

stdio.h 和 stdlib.h 都是标准头文件,它们存放于系统路径下,所以使用尖括号和双引号都能够成功引入;而我们自己编写的头文件,一般存放于当前项目的路径下,所以不能使用尖括号,只能使用双引号。

当然,你也可以把当前项目所在的目录添加到系统路径,这样就可以使用尖括号了,但是一般没人这么做,纯粹多此一举,费力不讨好。

在以后的编程中,大家既可以使用尖括号来引入标准头文件,也可以使用双引号来引入标准头文件;不过,我个人的习惯是使用尖括号来引入标准头文件,使用双引号来引入自定义头文件(自己编写的头文件),这样一眼就能看出头文件的区别。

关于 #include 用法的注意事项:

  • 一个 #include 命令只能包含一个头文件,多个头文件需要多个 #include 命令。

  • 同一个头文件可以被多次引入,多次引入的效果和一次引入的效果相同,因为头文件在代码层面有防止重复引入的机制。

  • 文件包含允许嵌套,也就是说在一个被包含的文件中又可以包含另一个文件。

#include 用法举例

我们早就学会使用 #include 引入标准头文件了,但是如何使用 #include 引入自定义的头文件呢?下面我们就通过一个例子来简单地演示一下。

本例中需要创建三个文件,分别是 main.c、my.c 和 my.h,如下图所示:

my.c 所包含的代码:

//计算从m加到n的和
intsum(int m,int n){
int i, sum =0;
for(i = m; i <= n; i++){sum += i;
}
return sum;
}

my.h 所包含的代码:

//声明函数
intsum(int m,int n);

main.c 所包含的代码:

#include<stdio.h>
#include"my.h"intmain(){
printf("%d\n",sum(1,100));
return0;
}

我们在 my.c 中定义了 sum() 函数,在 my.h 中声明了 sum() 函数,这可能与很多初学者的认知发生了冲突:函数不是在头文件中定义的吗?为什么头文件中只有声明?

「在头文件中定义定义函数和全局变量」这种认知是原则性的错误!不管是标准头文件,还是自定义头文件,都只能包含变量和函数的声明,不能包含定义,否则在多次引入时会引起重复定义错误。

此外,可能还有初学者会问,main.c 只是引入了 my.h,没有引入 my.c,程序在编译时应该找不到函数定义呀,然而当我们亲自去运行程序的时候,却发现运行结果是正确的,这是怎么回事呢?

C语言#include的用法详解相关推荐

  1. C语言return的用法详解,C语言函数返回值详解。 (本次转载仅供学习,感谢原创!!转发自C语言中文网,如有侵权请私信本人删除)

    C语言return的用法详解,C语言函数返回值详解 转载:http://c.biancheng.net/view/1855.html 函数的返回值是指函数被调用之后,执行函数体中的代码所得到的结果,这 ...

  2. c语言for表达式1的作用,C语言for语句用法详解

    C语言for语句用法详解 C语言是一门高级计算机编程语言,设计目标是提供一种能以简易的方式编译.处理低级存储器.产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言.下面小编给大家介绍C语言f ...

  3. 【C语言for语句用法详解】

    ** C语言for语句用法详解 说明 for语句用于重复执行一段语句块.通常会使用一个增量计数器递增和终止循环.for语句对于任何需要重复的操作是非常有用的. 结构 for(表达式1; 表达式2; 表 ...

  4. c语言 switch case 字符串,c语言switch case用法详解

    c语言switchcase用法详解 switch是"开关"的意思,它也是一种"选择"语句,但它的用法非常简单.switch是多分支选择语句.说得通俗点,多分支就 ...

  5. Java语言Socket接口用法详解

    Socket接口用法详解   在Java中,基于TCP协议实现网络通信的类有两个,在客户端的Socket类和在服务器端的ServerSocket类,ServerSocket类的功能是建立一个Serve ...

  6. C语言typedef的用法详解

    C语言允许为一个数据类型起一个新的别名,就像给人起"绰号"一样. 起别名的目的不是为了提高程序运行效率,而是为了编码方便.例如有一个结构体的名字是 stu,要想定义一个结构体变量就 ...

  7. 第十章 结构体_C语言typedef的用法详解

    C语言允许为一个数据类型起一个新的别名,就像给人起"绰号"一样. 起别名的目的不是为了提高程序运行效率,而是为了编码方便.例如有一个结构体的名字是 stu,要想定义一个结构体变量就 ...

  8. C语言return的用法详解,C语言函数返回值详解

    函数的返回值是指函数被调用之后,执行函数体中的代码所得到的结果,这个结果通过 return 语句返回. return 语句的一般形式为: return 表达式; 或者: return (表达式); 有 ...

  9. c语言const用法的位置与意义,const(c语言const的用法详解)

    const int *A; //const修饰指向的对象,A可变,A指向的对象不可变 怎么理解?. 呵呵,想法挺独特啊.const在声明变量时有四种用法:int x = 10;int y = 11.c ...

最新文章

  1. ProtoBuf开发者指南
  2. 支付宝 php 返回false,支付宝php sdk验签rsaCheckV1不正确isSign一直返回false
  3. Python中使用httpx模块详解
  4. JS-数据属性与访问器属性
  5. JavaScript框架的超简史
  6. centos7 通过kvm+vnc 实现远程桌面虚拟化和创建windows、Linux虚拟机
  7. 面试官:AtomicInteger是如何保证线程安全?
  8. Java 集合容器篇面试题(上)-王者笔记《收藏版》
  9. 大快HanLP自然语言处理技术介绍
  10. UVA10570 Meeting with Aliens【数学计算】
  11. OpenCV 1.0在VC6下安装与配置(附测试程序)
  12. 数据结构与算法之美-字符串匹配(上)
  13. 自动化测试方案_2第二章、自动化测试是什么?(What)
  14. access视频教程百度网盘_office 2016 全套高清视频教程打包下载 - 行客工作室
  15. 计算机系和清华大学,清华大学交叉信息研究院和计算机系区别
  16. 什么是容器服务_即学即用Docker(一):说说容器和Docker
  17. pat2020春季考试7-2 The Judger (25 分) 7-4 Replacement Selection (30 分)
  18. 三流大学和一流大学学生的简历有什么区别?
  19. cesium 漫游飞行_Cesium 之三维漫游飞行效果实现篇
  20. windows10 安装office2021(预装正版)经验分享

热门文章

  1. 2023五一杯C题公布
  2. 第1讲:树莓派及配件购买指南【子豪兄的零基础树莓派教程】
  3. jquery获取父元素及祖先元素
  4. 常用的请求报头和响应报头
  5. 急急,Android如何显示账单总余额?!!!
  6. 【赵强老师】Java语言简介
  7. linux 7 tmpfs,技术|如何在RHEL/CentOS 7.0中使用tmpfs
  8. 继华为仓颉后,再现4款国产编程语言,形式多样,有一款0代码
  9. java文件中搜索的快捷键_eclipse 项目中搜索资源 快捷键
  10. 站在中间立场看 360 VS QQ