#include中用双引号和用尖括号括起来头文件的区别
尖括号表示只在系统默认目录或者括号内的路径查找,通常用于包含系统中自带的头文件;
尖括号:
在包含文件目录中去查找(包含目录是由用户在设置环境时设置的),而不在源文件目录去查找;
双引号:
首先在当前的源文件目录中查找,若未找到才到包含目录中去查找。
//双引号头文件的搜索范围比尖括号的搜索范围更广。
详解:
预处理器发现 #include 指令后,就会寻找后跟的文件名并把这个文件的内容包含到当前文件中。被包含文件中的文本将替换源代码文件中的#include指令,就像你把被包含文件中的全部内容键入到源文件中的这个位置一样。
#include 指令有两种使用形式
#include <stdio.h> 文件名放在尖括号中
#include “mystuff.h” 文件名放在双引号中
尖括号< 和> 括起来表明这个文件是一个工程或标准头文件。查找过程会检查预定义的目录,我们可以通过设置搜索路径环境变量或命令行选项来修改这些目录。
如果文件名用一对引号括起来则表明该文件是用户提供的头文件,查找该文件时将从当前文件目录(或文件名指定的其他目录)中寻找文件,然后再在标准位置寻找文件。
为什么要包含文件呢?
因为这些文件包含了编译器所需的信息。例如,stdio.h文件通常包含EOF,NULL,
getchar()和putchar()的定义。
包含大型头文件并不一定显著增加程序的大小。很多情况下,头文件中的内容是编译器产生最终代码所需的信息,而不是加到最终代码里的具体语句。
被包含的文件还可以含有#include 指示符,由于嵌套包含文件的原因,一个头文件可能会被多次包含在一个源文件中,条件指示符可防止这种头文件的重复处理。
例如:
#ifndef BOOKSTORE_H
#define BOOKSTORE_H
#endif
条件指示符#ifndef 检查BOOKSTORE_H 在前面是否已经被定义,这里BOOKSTORE_H是一个预编译器常量习惯上预编译器常量往往被写成大写字母,如BOOKSTORE_H在前面没有被定义,则条件指示符的值为真于是从#ifndef 到#endif 之间的所有语句都被包含进来进行处理。相反,如果#ifndef 指示符的值为假则它与#endif 指示符之间的行将被忽略,为了保证头文件只被处理一次,把如下#define 指示符
#define BOOKSTORE_H
放在#ifndef 后面,这样在头文件的内容第一次被处理时,BOOKSTORE_H 将被定义
从而防止了在程序文本文件中以后#ifndef指示符的值为真。
只要不存在两个必须包含的头文件要检查一个同名的预处理器常量这样的情形,这个策略就能够很好地运作。#ifdef 指示符常被用来判断一个预处理器常量是否已被定义以便有条件地包含程序代码。
#include中用双引号和用尖括号括起来头文件的区别相关推荐
- 为什么程序中用双引号括起来的宏在预处理的时候是不会被宏替换的。
因为在 C 语言中,用双引号括起来表示的是字符串: 双引号中的内容是照原样输出,不管双引号里面是什么内容: #define length 3.0 #define width 4.0 main() { ...
- c++ include 路径_头文件中,#include使用引号“”和尖括号lt;gt;有什么区别?
很多程序员写代码,可能没有仔细研究一些细节问题,比如今天说的#include相关的内容. 01 关于#include 首先,#include为预处理语句,那么什么是预处理语句呢?预处理语句最明显的标志 ...
- 头文件中,#include使用引号“”和尖括号有什么区别?
很多程序员写代码,可能没有仔细研究一些细节问题,比如今天说的#include相关的内容. 01 关于#include 首先,#include为预处理语句,那么什么是预处理语句呢? 预处理语句最明显的标 ...
- #include使用引号“”和尖括号<>的区别
很多程序员写代码,可能没有仔细研究过#include相关的内容,下面就来简单说说. 1.关于#include 首先,#include为预处理语句,那么什么是预处理语句呢? 预处理语句最明显的标志是一些 ...
- Shell 脚本 — 多行注释、开启子/不开启子进程执行、转义带颜色输出、读取键盘输入、输入输出重定向、单双引号、命令替换、读取变量、系统变量、正则过滤、算术运算、一行多条命令、字符串比较
1. 多行注释 #!/bin/bash<< COMMENT This is multi line comment COMMENTecho "This is demo script ...
- golang 单引号与双引号以及反引号
golang中 字符串在底层使用字节数组实现, golang中用双引号或者 反引号表示字符串 其中反引号会原样输出 及 不转义在这里插入代码片 对于单引号 在golang中用于表示 rune类型,ru ...
- python 输出引号_python输出字符串单双引号如何选择
在Python当中字符串的输出既可以使用单引号,也可以使用双引号,使用单引号或双引号是没有区别的:当使用双引号将输出的字符串括起来时,内部也可使用单引号,将单双引号匹配正确即可. 在Python中我们 ...
- js中单引号和双引号的区别(html中属性规范是用双引号,js中字符串规定是用单引号)(js中单引号区别和php很像:单引号快,双引号可转义字符,双引号可解析变量)...
js中单引号和双引号的区别(html中属性规范是用双引号,js中字符串规定是用单引号)(js中单引号区别和php很像:单引号快,双引号可转义字符,双引号可解析变量) 一.总结 1.html中属性规范是 ...
- mysql的单引号[ ' ],双引号[ ]和esc下面的反勾号[ ` ]的区别
这两天写sql的时候,发现别名什么的喜欢直接使用双引号, 可是好像有时候用双引号会报错,或者单引号会报错, 所以详细把这三个符号区分了一下. 单引号 ' 和双引号 "都可以表示字符串,所以没 ...
最新文章
- ac自动机模板(hdu2222)
- 多核时代 .NET Framework 4 中的并行编程6---并行LINQ
- docker 挂载主机目录访问报错Permission denied 解决办法
- Zookeeper分布式一致性原理(四):Zookeeper简介
- R语言编程 第一讲 变量与赋值
- Java实战应用50篇(一)-Java并发编程:volatile关键字解析
- string 中的offset_Kafka+Spark Streaming管理offset的几种方法
- python基础之python中if __name__ == '__main__': 的解析
- hibernate基础之无法自动创建表总结
- Thread.yield()方法表示交出主动权,join表示等待当前线程,可以指定秒数
- 课时105.边框属性下(掌握)
- Linux下C编程-----IO/文件操作 模拟linux ls程序显示文件系统树形结构(2)
- Android - Binder机制 - Binder框架总结
- eclipse经常高占用_高可用系统的设计指南
- SVM入门(十)将SVM用于多类分类
- WiFi 接口创建过程
- Perl篇:常用调试命令
- window.onerror=hide_error_message;
- CSND自定义模块管理
- 【源码】基于遗传算法的VST混响插件
热门文章
- 首都师范 博弈论 6 5 5无限次重复博弈中的策略选择
- linux下php添加imap模块
- python毕设代做_怎么用python做毕设?
- VBS上传文件(转载)
- 平安人寿“内鬼”泄露近4万条公民信息
- OpenGL 简明教程(一)开篇
- favicon.ico制作
- CATIA V6二次开发——Automation之对象
- 网管软件 LANDesk的配置(视频配截图)
- torch.bmm()和torch.matmul()函数的用法和区别,矩阵相乘