C语言中的预处理命令
预处理功能是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语言中的预处理命令的更多相关文章
- 【转载】如何在C语言中调用shell命令
转载自:http://blog.csdn.net/chdhust/article/details/7951576 如何在C语言中调用shell命令 在linux操作系统中,很多shell命令使用起来非 ...
- 让你提前认识软件开发(23):怎样在C语言中运行shell命令?
第1部分 又一次认识C语言 怎样在C语言中运行shell命令? [文章摘要] Linux操作系统具备开源等诸多优秀特性,因此在很多通信类软件(主流开发语言为C语言)中,开发平台都迁移到了Linux上, ...
- C 语言中的预处理
C 语言中以 # 开头的就是预处理指令,例如 #include . 预处理指令的用途 所有的预处理指令都会在 GCC 编译过程的预处理步骤解析执行,替换为对应的内容.在下一步编译过程中,看不到任何预处 ...
- C 语言中可以调用命令行指令的 system()函数
C语言有一个system函数(在<stdlib.h>头中,C++则为<cstdlib>头),可以用来调用终端命令.原型如下: int system(const char *cm ...
- Keil 中的预处理命令const
在keil中,宏定义是一个重要内容.无参数的宏作为常量,而带参数的宏则可以提供比函数更高的调用效率.但预处理只是进行简单的文本代替,而不做语法检查,所以会存在一些问题. 例如:#define BUFS ...
- 解析如何在C语言中调用shell命令的实现方法【转】
本文转自:http://www.jb51.net/article/37404.htm 1.system(执行shell 命令)相关函数 fork,execve,waitpid,popen表头文件 #i ...
- Unity 预处理命令
我们经常在代码里面写Debug.Log()调试代码,游戏后门代码.这些代码在发布时无意义的,我们就需要慢慢的删除掉它们(很痛苦),有什么办法让它们在编译的时候并不加入编译代码中呢? 预处理命令..比 ...
- 【C语言入门教程】2.8 C 语言的预处理命令
预处理命令是在程序编译阶段进行执行的命令,用于编译与特定环境相关的可执行文件.预处理命令扩展了 C 语言,本节将选择其中一些常用的预处理命令进行讲解. 2.8.1 宏替换命令 宏替换命令的作用类似于对 ...
- 不可或缺 Windows Native (4) - C 语言: 预处理命令,输入,输出
[源码下载] 不可或缺 Windows Native (4) - C 语言: 预处理命令,输入,输出 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 预处理命令 输入 ...
随机推荐
- 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 ...
- opencv3更换图片背景
#include <opencv2/opencv.hpp>#include <iostream> using namespace std;using namespace cv; ...
- (转)Linux网络协议栈(三)——网络设备(1)
网络设备(network device)是内核对网络适配器(硬件)的抽象与封装,并为各个协议实例提供统一的接口,它是硬件与内核的接口,它有两个特征:(1) 作为基于硬件的网络适配器与基于软件的协 ...
- cximage使用
为什么使用CxImage u 使用简单:下面的入门教程会给你展示这一点. 构造函数 初始化 多帧图像操作 区域选择操作 Alpha通道操作 Layers 图像层操作 Attributes 图像属性操作 ...
- Entity Framework Tutorial Basics(24):Update Single Entity
Update Existing Entity using DBContext in Disconnected Scenario: In this chapter, you will learn how ...
- java全栈day02案例
商场库存清单案例 A: 案例分析. * a:观察清单后,可将清单分解为三个部分(清单顶部.清单中部.清单底部) * b:清单顶部为固定的数据,直接打印即可 * c:清单中部为商品,为变化的数据,需要记 ...
- 如何在Eclipse中如何自动添加注释和自定义注释风格
1. 如何自动添加注释 可通过如下三种方法自动添加注释: (1)输入“/**”并回车. (2)用快捷键 Alt+Shift+J(先选中某个方法.类名或变量名). (3)在右键菜单中选择“Source ...
- Understanding the Effective Receptive Field in Deep Convolutional Neural Networks
Understanding the Effective Receptive Field in Deep Convolutional Neural Networks 理解深度卷积神经网络中的有效感受野 ...
- javaScript实现轮播图
一.需求分析 在首页完成对轮播图的效果实现,完成自动切换图片的功能. 二.技术分析 获取元素 document.getElementById(“id 名称”) 事件(onload) 定时操作: set ...
- DjVu转PDG的方法与步骤
作者:马健邮箱:stronghorse_mj@hotmail.com发布:2008.08.03更新:2008.08.24 补充说明:此文成文较早,当时PDG浏览器只支持纯正PDG,不支持名为PDG,实 ...