很多程序员写代码,可能没有仔细研究一些细节问题,比如今天说的#include相关的内容。

01

关于#include

首先,#include为预处理语句,那么什么是预处理语句呢?

预处理语句最明显的标志是一些行首以#开始的特殊语句。

例如:#include、 #define、 #if等就是预处理语句。在程序的其它编译处理(词法分析、语法分析、代码生成、优化和连接等)之前,先进行这些语句的分析处理。

在编译工具中,有一个叫预处理器,预处理器发现 #include 指令后,就会进行一些预处理操作。

02

#include的定义

如果你在看一些C/C++教程,那么你可能会发现,有些教程涨的#include命令写作#include <文件名>,但有时候又会出现#include "文件名"

你会很疑惑,到底哪个是对的呢?为什么要有这两种不同的写法呢?

1.#include <xxx.h>

系统自带的头文件用尖括号括起来,这样编译器会在系统文件目录下查找。

2.#include "xxx.h"

用户自定义的文件用双引号括起来,编译器首先会在用户目录下查找,然后在到C++安装目录(比如VC中可以指定和修改库文件查找路径,Unix和Linux中可以通过环境变量来设定)中查找,最后在系统文件中查找。

这两种写法都是正确的写法,但是它们却是有区别的。我们知道C/C++已经有一些编写好的头文件(比如标准函数库等),它们存放在VC++的Include文件夹里。当我们使用#include <文件名>命令时,编译器就到这个文件夹里去找对应的文件。显然,用这种写法去包含一个我们自己编写的头文件(不在那个Include文件夹里)就会出错了。所以包含C++提供的头文件时,应该使用尖括号。

相反地,#include "文件名"命令则是先在当前文件所在的目录搜索是否有符合的文件,如果没有再到Include文件夹里去找对应的文件。因此,无论这个文件是C++提供的还是自己编写的,使用#include "文件名"命令一定是正确的。这也正是书中本节之前的程序一律使用#include "文件名"命令的原因。

03

关于尖括号

C++标准中,包含C++提供的头文件并不是写作#include <文件名>,如#include <iostream.h>的写法是过时的。正确的写法是#include <iostream>,并且要使用std名字空间。有些程序中会有using namespace std;就是按照这种标准书写的。名字空间也称为命名空间,主要是用来避免大型程序开发中的标志符冲突。标准还规定了如何在C++中包含C的头文件,有兴趣的读者可以到网上查阅这些资料。

尽管以上两种#include命令都可以正确地被VC++识别了,但是它们却并不符合C++的标准。标准规定,包含C++提供的标准头文件或系统头文件时应使用尖括号,包含自定义头文件时可使用双引号。

虽然有些文件是系统文件,但如果你工程中包含有相应文件,使用#include "xxx.h" 也不会报错(比如在Keil中使用#include "stdio.h"),但还是建议使用规范的代码。

可能复制粘贴习惯了,你都不知道究竟是 #include <xxx.h> 还是 #include "xxx.h" 了

1.GD32 Arm MCU物联网开发者线上课程精彩内容预告!

2.杨福宇专栏|寻找可超车的弯道:伟人讲破字当头,立也在其中了

3.RISC-V其实是反潮流!

4.别忽视!嵌入式代码可能存在的致命漏洞!

5.号外!LoRa长距离通信从此“常驻”MCU

6.技术真的是中立的吗?

免责声明:本文系网络转载,版权归原作者所有。如涉及作品版权问题,请与我们联系,我们将根据您提供的版权证明材料确认版权并支付稿酬或者删除内容。

头文件中,#include使用引号“”和尖括号有什么区别?相关推荐

  1. c++ include 路径_头文件中,#include使用引号“”和尖括号lt;gt;有什么区别?

    很多程序员写代码,可能没有仔细研究一些细节问题,比如今天说的#include相关的内容. 01 关于#include 首先,#include为预处理语句,那么什么是预处理语句呢?预处理语句最明显的标志 ...

  2. include包含头文件的语句中,双引号和尖括号的区别

    #include <>格式:引用标准库头文件,编译器从标准库目录开始搜索 #incluce ""格式:引用非标准库的头文件,编译器从用户的工作目录开始搜索,如果找不到, ...

  3. include的头文件中include其他头文件时的路径问题

    问题 由于之前项目做得很少,一直没有注意到这个问题,include一直认为就是直接把include的文件复制过来,并没有去深究里面的原理.但今天做项目时发现如果是直接复制过来,那include的文件里 ...

  4. #include指令引号与尖括号的区别

    参考MS的官方文档,把include的搜索过程整理了一下-- #include是C/C++的预处理指令(Preprocessor Directive),主要作用是把头文件引入到任意源文件中,在预处理阶 ...

  5. #include使用引号“”和尖括号<>的区别

    很多程序员写代码,可能没有仔细研究过#include相关的内容,下面就来简单说说. 1.关于#include 首先,#include为预处理语句,那么什么是预处理语句呢? 预处理语句最明显的标志是一些 ...

  6. 6.set ff=unix;设置Linux中文件中每行后又尖括号的情况

     用vi命令打开要替换尖括号的文件 直接输入:   :set ff=unix 表示设置文件格式是unix格式

  7. c语言头文件中定义inline static相关函数的优劣

    头文件中常见static inline函数,于是思考有可能遇到的问题,如头文件经常会被包含会不会产生很多副本?网上说法不一.于是自己验证.经过arm-none-eabi-gcc下测试后得出结论. in ...

  8. stdio.h头文件中申明的基本函数

    stdio.h头文件中申明的基本函数 调用scanf函数时,需传入变量的地址作为参数,scanf函数会等待标准输入设备(键盘等)输入数据,并且将输入的数据赋值给地址对应的变量. #include< ...

  9. 编写一个头文件,头文件中定义一个宏cube(x)用于求一个数的平方

    <程序设计基础实训指导教程-c语言> ISBN 978-7-03-032846-5 p145 7.1.2 上级实训内容 [实现内容17]编写一个头文件,头文件中定义一个宏cube(x)用于 ...

最新文章

  1. 秒杀系统架构解密与防刷设计 - 高可用架构系列
  2. 第三讲 数学与简单DP【完结】
  3. jQuery操作CSS
  4. java字数统计_java统计字数
  5. php如何水平对齐所有星星,css怎么设置水平对齐
  6. CSS 选择器权重计算规则
  7. Snowflake如日中天是否代表Hadoop已死?大数据体系到底是什么?
  8. MySQL8.0 - 新特性 - 说说InnoDB Log System的隐藏参数
  9. CCNA学习与实验指南(640-802)
  10. Atitit.遍历图像像素点rgb java attilax总结
  11. 记录一下2019年-2020年期间的学习、工作经历
  12. 翻转课堂实践:让学生转换角色试一试
  13. 西部数据app可导致Windows 和 macOS 提权
  14. 2021年SWPUACM暑假集训day3最小生成树算法
  15. C#之DateTime
  16. windows下的wxWidgets环境配置
  17. 使用verilog实现4选1数据选择器的几种方法
  18. 种子点生长算法下——三维种子点生长
  19. VS2008简体中文版下载
  20. 实习笔记 —— MyBatis III (输入/输出映射)

热门文章

  1. 【docker ros】docker 开启自启运行容器中的程序
  2. STM32模拟I2C程序
  3. Zend studio 调整优化
  4. 12306快手,初始版本发布。匆忙写了个,不喜勿用
  5. 【转】在内核中之获取HKEY_CURRENT_USER对应路径
  6. 华为RH2288v3安装系统
  7. 微信小程序学习日记6
  8. 物联网小课堂之模组SIM卡相关秘籍
  9. 识别 零极点 matlab,matlab计算零极点分布图
  10. GBA火焰纹章改版-智慧的结晶