预处理器发现 #include 指令后,就会寻找后跟的文件名并把这个文件的内容包含到当前文件中。被包含文件中的文本将替换源代码文件中的#include指令,就像你把被包含文件中的全部内容键入到源文件中的这个位置一样。  
#include 指令有两种使用形式 
#include <stdio.h> 文件名放在尖括号中 
#include “mystuff.h” 文件名放在双引号中 
(1)尖括号< 和> 括起来表明这个文件是一个工程或标准头文件。

查找过程会检查预定义的目录,我们可以通过设置搜索路径环境变量或命令行选项来修改这些目录。

(2)如果文件名用一对引号括起来则表明该文件是用户提供的头文件,查找该  
      文件时将从当前文件目录(或文件名指定的其他目录)中寻找文件,然后再在标准位置寻找文件。  
为什么要包含文件呢? 
      因为这些文件包含了编译器所需的信息。例如,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 指示符常被用来判断一个预处理器常量是否已被定义以便有条件地包含程序代码。

http://www.cnblogs.com/yc_sunniwell/archive/2010/06/22/1762874.html

预处理器#include 指令的更多相关文章

  1. C++学习009预处理器指令符号 # ## #@ 符号的使用

    # ## #@ 符号是预处理器指令符号. 当预处理器遇到#指令符号时,会将#之后的部分用双引号括起来 当预处理去遇到##指令符号时,直接将##前后部分连接起来 当预处理器遇到#@指令符号,将#@之后的 ...

  2. C语言基本语法——预处理器和预处理指令

    1.什么是预处理器 2.什么是预处理器指令 3.预处理器指令 4.宏指令 5.宏函数 6.宏函数的优缺点 7.条件编译指令 1.什么是预处理器 • 预处理器是一个程序,用来处理源程序中的预处理指令. ...

  3. C#预处理器指令 ,你造吗??? (●'◡'●)

    什么是c#预处理指令?? 用于在 C# 源代码中嵌入的编译器命令. C#预处理器指令有哪些?? ↓↓↓这些就是预处理器指令啦 下面我们一一道来(●'◡'●) 1.#if ,#elif,#else,en ...

  4. C#预处理器指令

    在C#中有许多名为“预处理指令”的命令,这些命令从来不会转化为可执行代码中的命令,但会影响编译过程的各个方面.例如,使用预处理器指令可以禁止编译器编译代码的某一部分.如果计划发布两个版本的代码,即基本 ...

  5. C语言--- 字符串数组 、 预处理器和预处理指令 、 多文件编程 、 结构体

    1 输入一个姓名,判断是否是五虎上将. 1.1 问题 本案例需要使用交互的方式判断:用户从控制台输入一个名字,由程序判断该名字是否在五虎上将的名单中.五虎上将的名单是:GuanYu.ZhangFei. ...

  6. 一些C#预处理器指令

    像C语言一样,C#有一些预处理器指令的命令.例如,#if#end if,#define等,所谓这些命令是指不会转化为可执行代码中的一些命令,只是在编译的过程中起作用.下面简要介绍一下:1 .#defi ...

  7. C#中的预处理器指令详解

    这篇文章主要介绍了C#中的预处理器指令详解,本文讲解了#define 和 #undef.#if.#elif.#else和#endif.#warning和#error.#region和#endregio ...

  8. C#中的预处理器指令

    C#中有许多名为“预处理器指令”的命令.这些命令从来不会转化为可执行代码中的命令,但会影响编译过程的各个方面. 例如,使用预处理器指令可以禁止编译器编译代码的某一部分.如果计划发布两个版本的代码,即基 ...

  9. C#变量、常量、枚举、预处理器指令知多少

    一.变量 C#共有其中变量类型有:静态变量.实类变量.数组元素.数值参数.引用参数.输出参数和局部变量 先定义一个简单的类来说明,如下: public class VariableDefine { p ...

随机推荐

  1. Android Studio打包apk,aar,jar包

    转载请标明出处:一片枫叶的专栏 文本我们将讲解android studio打包apk,aar,jar包的相关知识.apk包就是android系统的安装包,这里没什么好说的,aar包是android中独 ...

  2. SpringBoot项目优化和Jvm调优(楼主亲测,真实有效)

    项目调优 作为一名工程师,项目调优这事,是必须得熟练掌握的事情. 在SpringBoot项目中,调优主要通过配置文件和配置JVM的参数的方式进行. 在这边有一篇比较好的文章,推荐给大家! Spring ...

  3. C#MVC中创建多模块web应用程序

    当一个应用程序有越来越多的子模块后,应用程序将变得越来越大,复杂度也越来越高,应用程序也越来越难维护.如果把每个子模块,独立分成不同的web应用程序,则这个项目将易于维护.关于这个的好处,我也描述得不 ...

  4. Windows下快速搭建安卓开发环境android-studio

    Windows下快速搭建安卓开发环境android-studio 发布时间:2018-01-18 来源:网络 上传者:用户 关键字: 安卓 搭建 Android Windows 快速 环境 Studi ...

  5. List&lt;Map&lt;String, String&gt;&gt; 开启 Map&lt;String, List&lt;String&gt;&gt;

    将List变成Map结构体,下面的文字是没有水平! 写作方法传送前土壤很长一段时间.我不知道有没有好的解决办法.我们也希望提供! Map<String, String> map1 = ne ...

  6. JPEG图像扩展信息读取和修改

    最近,项目需要使用jpg图像信息被写入(非水印),经过研究发现,Android已封装的读者jpg图片扩展信息api(ExifInterface). 通讯api住址:http://developer.a ...

  7. 2 Task中的延续和7种阻塞

    1.wait using System; using System.Threading; using System.Threading.Tasks; namespace 多线程_List { clas ...

  8. C# WPF 仿网易云音乐(PC)Banner动画控件

    在自定义用户控件内添加3个border(左.中.右,以下分别简称为:b1.b2.b3),对border进行缩放和移动动画.往右切换时b1放大平移到b2的位置,b2缩小平移到b3的位置,b3平移到b1的 ...

  9. 机器学习: Python with Recurrent Neural Network

    之前我们介绍了Recurrent neural network (RNN) 的原理: http://blog.csdn.net/matrix_space/article/details/5337404 ...

  10. opengl编程指南 第七版 源代码bug Page35 lines.c 红宝书

    问题1:根据源代码时,我发现的时候去敲门.不正确实施效果.哪里是不正确?没有源代码glPushAttrib(GL_LINE_STIPPLE) glPopAttrib().所以会出现最后的下一次抽奖提供 ...