include 包含头文件的语句中 , 双引号和尖括号的区别是什么 ?

#incluce ""格式:

引用非标准库的头文件,编译器从用户的工作目录开始搜索。双引号表示先在程序源文件所在目录查找,如果未找到则去系统默认目录查找,通常用于包含程序作者编写的头文件;尖括号表示只在系统默认目录或者括号内的路径查找,通常用于包含系统中自带的头文件。

尖括号:在包含文件目录中去查找(包含目录是由用户在设置环境时设置的),而不在源文件目录去查找;

双引号:首先在当前的源文件目录中查找,若未找到才到包含目录中去查找。

详解:

预处理器发现 #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 指示符常被用来判断一个预处理器常量是否已被定义以便有条件地包含程序代码。

时间: 2024-08-27 20:59:17

include 包含头文件的语句中 , 双引号和尖括号的区别是什么 ?的相关文章

include包含头文件的语句中,双引号和尖括号的区别是什么?

include包含头文件的语句中,双引号和尖括号的区别是什么?  #include <> 格式:引用标准库头文件,编译器从标准库目录开始搜索 尖括号表示只在系统默认目录或者括号内的路径查找,通常用于包含系统中自带的头文件; 尖括号:在包含文件目录中去查找(包含目录是由用户在设置环境时设置的),而不在源文件目录去查找: #incluce "" 格式:引用非标准库的头文件,编译器从用户的工作目录开始搜索 双引号表示先在程序源文件所在目录查找,如果未找到则去系统默认目录查找,通常

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

include包含头文件的语句中,双引号和尖括号的区别 #include <>格式:引用标准库头文件,编译器从标准库目录开始搜索 #incluce ""格式:引用非标准库的头文件,编译器从用户的工作目录开始搜索 预处理器发现 #include 指令后,就会寻找后跟的文件名并把这个文件的内容包含到当前文件中.被包含文件中的文本将替换源代码文件中的#include指令,就像你把被包含文件中的全部内容键入到源文件中的这个位置一样. #include 指令有两种使用形式 #incl

C++中#include包含头文件带 .h 和不带 .h 的区别

C++中#include包含头文件带 .h 和不带 .h 的区别? 如 #include <iostream> 和 #include <iostream.h> 包含的东西有哪些不同? 之前在写C++程序的时候只知道使用 #include <iostream> 的时候,使用函数前要用 using namespace std; 导入命名空间,而 #include <iostream.h> 则不用,这个得看C+ +标准化过程为C++开发者做了哪些有意义的工作. (

JSP中的坑(二):使用include包含jsp文件时contentType中charset的值区分大小写

在JSP中<%@include file="" %>是比较常用的包含其他文件的一种手段,但是在使用时一不小心也会出错,如下代码: index.jsp: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//D

PowerDesigner使用Oracle建库语句中&quot;&quot;双引号的问题

这几天使用powerdesigner建库,general database导出的sql建表语句带有""双引号,结果导致我的库中表名都是小写的,但是Oracle查询等语句默认都是大写判断的,因此很是不方 便,以前使用pd没发现这个问题,可能是版本升级导致的,查了一下,原来需要Pd再设置一下:两种方式1.pd Edit Current DBMS-ORACLE9i2::Script\Sql\Format\CaseSensitivityUsingQuote将双引号的设置改为NO 2.变通方法就

ios import双引号和尖括号的区别

双引号:是指先在项目源码中目录搜索然后再进行系统目录搜索 尖括号:是指先系统目录中搜索然后再源码目录中搜索 eg:这就意味着,当系统里(如/usr/include/里)有一个叫做math.h的头文件,而你的源代码目录里也有一个你自己写的math.h头文件,那么使用尖括号时用的就是系统里的,而使用双引号的话则会使用你自己写的那个

js-替换“单引号”、“双引号”、“尖括号”

var str="<>"; str=str.replace(/\'/g,"’");//替换半角单引号为全角单引号 str=str.replace(/\"/g,"”");//替换半角双引号为全角双引号 str=str.replace(/</g,"<").replace(/>/g,">"); 原文地址:https://www.cnblogs.com/yuzhen02

C++包含头文件时尖括号和双引号区别

原文链接:http://c.biancheng.net/cpp/biancheng/view/66.html 如果你还看一些别的C++教程,那么你可能很早就发现了,有些书上的#include命令写作#include <文件名>,但有时候又会出现#include "文件名".你会很疑惑,到底哪个是对的呢?为什么要有这两种不同的写法呢? 这两种写法都是正确的写法,但是它们却是有区别的.我们知道C++已经有一些编写好的头文件(比如标准函数库等等),它们存放在VC++的Includ

怎么写好一个C++的类(二)不建议直接include包含cpp文件

在很多书上都教了#include包含头文件,但是没有教为什么不能包含源文件...所以有一些同学试过直接包含源文件(好吧,我承认,我在大学时候也这样做过,而且很幸运没有出问题). 那到底应不应该包含源文件呢? 我想用一个反证法,如果直接包含.cpp文件,那cpp文件中的static变量和接口不是全暴露给外部的.cpp文件了吗,那样要static和接口的在本文件生命周期有效这一个限定有毛用?不直接包含源文件,就可以把程序按照文件进行模块划分.(可能很多同学说,总是说模块化,就知道吹这些名词,都不感觉