预处理功能是C语言的重要功能。

问:为什么要预处理,什么是预处理?

答:我们知道高级语言的运行过程是通过编译程序(编译器)把源代码翻译成机器语言,实现运行的。编译程序的工作包含:语法分析、词法分析、代码生成、代码优化等。但是在正式编译之前还有一些工作要做,例如:去掉注释、变换格式之类的。C语言允许在源程序中包含预处理命令,正式编译(词法分析)前,先对这些命令进行“预处理”;然后在进行通常的编译处理。预处理命令从语法上讲不是C语言的一部分,但扩展了C语言程序设计的环境,简化程序开发过程;有利于移植和调试C语言程序。

预处理命令的定义:

以#开头,换行符结尾的行称为预处理命令;预处理命令不是C语言的语法成分,而是传给编译程序的各种指令;预处理命令分为三种:宏定义、文件包含、条件编译

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

宏定义

定义一个标识符来代表一个字符串;这种标识符称为宏名(macro name);

在源程序中发现该标识符时,都用该字符串替换,形成新的源程序;将标识符替换成指定字符串的过程称为宏替换(macro substitution);

宏替换的操作是在预编译时进行的;

说白了就是将一个变量强制定义为你想要的值。

注意点:

1)全部用大写,以便与变量区分,帮助读者快速识别;
2)最好把所有宏定义命令放在文件的最前面;

如果需要终止宏的作用域,可以使用#undef命令;格式为: #undef 标识符

应用举例:

#define PI 3.14 就是将PI的值定义成3.14,这样在程序里看到PI就可以替换成3.14了

参考链接:

#define的用法详解:https://www.cnblogs.com/shmilxu/p/4837373.html

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

文件包含:

用法:

#include <包含文件名>    或    #include "包含文件名"

作用:

将另一个文件全部包含进来;

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

条件编译:

一般情况下,源程序中所有的语句都参加编译;但是有时候也希望根据一定的条件去编译源文件的不同部分;

有时候一个C文件会多次包含同一个头文件,就可能出现重复定义的问题;

这时候可以通过条件编译来避免重复定义(重复包含);

#ifndef __headerfileXXX__

#define __headerfileXXX__

  …

  文件内容

  …

#endif

#ifndef 和 #endif 要一起使用,如果丢失#endif,可能会报错。

参考链接:

#ifndef, #define, #endif 作用:https://www.cnblogs.com/challenger-vip/p/3386819.html

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

C语言中的预处理命令的更多相关文章

  1. 【转载】如何在C语言中调用shell命令

    转载自:http://blog.csdn.net/chdhust/article/details/7951576 如何在C语言中调用shell命令 在linux操作系统中,很多shell命令使用起来非 ...

  2. 让你提前认识软件开发(23):怎样在C语言中运行shell命令?

    第1部分 又一次认识C语言 怎样在C语言中运行shell命令? [文章摘要] Linux操作系统具备开源等诸多优秀特性,因此在很多通信类软件(主流开发语言为C语言)中,开发平台都迁移到了Linux上, ...

  3. C 语言中的预处理

    C 语言中以 # 开头的就是预处理指令,例如 #include . 预处理指令的用途 所有的预处理指令都会在 GCC 编译过程的预处理步骤解析执行,替换为对应的内容.在下一步编译过程中,看不到任何预处 ...

  4. C 语言中可以调用命令行指令的 system()函数

    C语言有一个system函数(在<stdlib.h>头中,C++则为<cstdlib>头),可以用来调用终端命令.原型如下: int system(const char *cm ...

  5. Keil 中的预处理命令const

    在keil中,宏定义是一个重要内容.无参数的宏作为常量,而带参数的宏则可以提供比函数更高的调用效率.但预处理只是进行简单的文本代替,而不做语法检查,所以会存在一些问题. 例如:#define BUFS ...

  6. 解析如何在C语言中调用shell命令的实现方法【转】

    本文转自:http://www.jb51.net/article/37404.htm 1.system(执行shell 命令)相关函数 fork,execve,waitpid,popen表头文件 #i ...

  7. Unity 预处理命令

    我们经常在代码里面写Debug.Log()调试代码,游戏后门代码.这些代码在发布时无意义的,我们就需要慢慢的删除掉它们(很痛苦),有什么办法让它们在编译的时候并不加入编译代码中呢?  预处理命令..比 ...

  8. 【C语言入门教程】2.8 C 语言的预处理命令

    预处理命令是在程序编译阶段进行执行的命令,用于编译与特定环境相关的可执行文件.预处理命令扩展了 C 语言,本节将选择其中一些常用的预处理命令进行讲解. 2.8.1 宏替换命令 宏替换命令的作用类似于对 ...

  9. 不可或缺 Windows Native (4) - C 语言: 预处理命令,输入,输出

    [源码下载] 不可或缺 Windows Native (4) - C 语言: 预处理命令,输入,输出 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 预处理命令 输入 ...

随机推荐

  1. Hadoop YARN: 1/1 local-dirs are bad: /var/lib/hadoop-yarn/cache/yarn/nm-local-dir; 1/1 log-dirs are bad: /var/log/hadoop-yarn/containers hdfs硬盘90% yarn unhealthy

    1/1 local-dirs are bad: /var/lib/hadoop-yarn/cache/yarn/nm-local-dir; 1/1 log-dirs are bad: /var/log ...

  2. opencv3更换图片背景

    #include <opencv2/opencv.hpp>#include <iostream> using namespace std;using namespace cv; ...

  3. (转)Linux网络协议栈(三)——网络设备(1)

    网络设备(network device)是内核对网络适配器(硬件)的抽象与封装,并为各个协议实例提供统一的接口,它是硬件与内核的接口,它有两个特征:(1)    作为基于硬件的网络适配器与基于软件的协 ...

  4. cximage使用

    为什么使用CxImage u 使用简单:下面的入门教程会给你展示这一点. 构造函数 初始化 多帧图像操作 区域选择操作 Alpha通道操作 Layers 图像层操作 Attributes 图像属性操作 ...

  5. Entity Framework Tutorial Basics(24):Update Single Entity

    Update Existing Entity using DBContext in Disconnected Scenario: In this chapter, you will learn how ...

  6. java全栈day02案例

    商场库存清单案例 A: 案例分析. * a:观察清单后,可将清单分解为三个部分(清单顶部.清单中部.清单底部) * b:清单顶部为固定的数据,直接打印即可 * c:清单中部为商品,为变化的数据,需要记 ...

  7. 如何在Eclipse中如何自动添加注释和自定义注释风格

    1. 如何自动添加注释 可通过如下三种方法自动添加注释: (1)输入“/**”并回车. (2)用快捷键 Alt+Shift+J(先选中某个方法.类名或变量名). (3)在右键菜单中选择“Source ...

  8. Understanding the Effective Receptive Field in Deep Convolutional Neural Networks

    Understanding the Effective Receptive Field in Deep Convolutional Neural Networks 理解深度卷积神经网络中的有效感受野 ...

  9. javaScript实现轮播图

    一.需求分析 在首页完成对轮播图的效果实现,完成自动切换图片的功能. 二.技术分析 获取元素 document.getElementById(“id 名称”) 事件(onload) 定时操作: set ...

  10. DjVu转PDG的方法与步骤

    作者:马健邮箱:stronghorse_mj@hotmail.com发布:2008.08.03更新:2008.08.24 补充说明:此文成文较早,当时PDG浏览器只支持纯正PDG,不支持名为PDG,实 ...