c/c++中,预编译指令用法汇总

2023-11-02

切换模式
写文章
登录/注册

c/c++中,预编译指令用法汇总

4 人 赞同了该文章
毕竟西湖六月中,风光不与四时同。—— 南宋·杨万里

1 概述

如下图所示,一般来说c/c++ 程序的编译过程分为如下几个阶段:预处理编译汇编链接。其中预处理阶段,读取c源程序,对其中的伪指令(以#开头的指令)和特殊符号进行处理。或者说是扫描源代码,对其进行初步的整理和转换,产生新的源代码(还是文本文件)提供给编译器。预处理过程先于编译器对源代码进行处理。目前绝大多数编译器都包含了预处理程序,但通常认为它们是独立于编译器的。预处理过程读入源代码,检查包含预处理指令的语句和宏定义,并对源代码进行相应的转换。预处理过程还会删除程序中的注释和多余的空白字符[1]

预处理过程由独立的程序执行,与 c/c++语言无关,故而遵循与c/c++不同的语法规则。预处理语句遵循以下几个语法规则[2]

  • 预处理指令必须为所在行的第一个非空白字符;
  • 一条完整的预处理指令必须处于同一行中;
  • 预处理指令与 c/c++ 语句不同,在指令末尾不应该加入分号( ';' )。

预处理程序依次扫描源文件,并对遇到的预处理指令进行处理,直到扫描完所有源文件内容,完成预处理过程,经过预处理过程的文件一般使用 .i 作为后缀。

2 预编译指令

本文总结的预编译指令如下,下面将逐个讨论分析。

#define   //宏定义命名,定义一个标识符来表示一个常量
#include  //文件包含命令,用来引入对应的头文件或其他文件
#undef    //来将前面定义的宏标识符取消定义
#ifdef    //条件编译
#ifndef   //条件编译
#if       //条件编译
#else     //条件编译
#elif     //条件编译
#endif    //条件编译
#error    //用于生成一个编译错误消息

DATE //当前日期,一个以 “MMM DD YYYY” 格式表示的字符串常量
TIME //当前时间,一个以 “HH:MM:SS” 格式表示的字符串常量。
FILE //这会包含当前文件名,一个字符串常量。
LINE //这会包含当前行号,一个十进制常量。
STDC //当编译器以 ANSI 标准编译时,则定义为 1;判断该文件是不是标准 C 程序。

2.1 #define

#define又称宏定义,标识符为所定义的宏名,简称宏。#define指令可以认为是给表达式"起"一个别名,在预处理器进行处理时,会将所有出现别名的地方替换为对应的表达式,表达式可以是数字、字符串、计算表达式。其特点是定义的标识符不占内存,只是一个临时的符号,预编译后这个符号就不存在了。其一般用法如下:

#define  标识符  表达式   //注意, 最后没有分号

/例子/
#define MACRO EXPRESSION //预处理在源程序中遇到MACRO时,会将其替换为EXPRESSION


在使用#define语句时,有几个地方需要注意:

  • 预处理程序仅进行字符对象的替换,即将字符串MACRO替换为字符串EXPRESSION,并不会对替换的内容进行语义解析,故而在使用#define定义常量的别名时应该注意直接替换是否会造成潜在的语义改变;
  • #define指令将MACRO后的第一个空白字符作为MACROEXPRESSION的分界,EXPRESSION部分对应为自MACRO后第一个空白字符开始到行尾换行符的所有内容。例如在#define后面加上错误的分号(
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c/c++中,预编译指令用法汇总 的相关文章

随机推荐

  • EasyExcel详细教程

    目录 1 Excel导入导出的应用场景 2 EasyExcel特点 3 Excel进行写操作 4 Excel进行读操作 本篇文章为你详细介绍EasyExcel如何进行读取操作 1 Excel导入导出的应用场景 1 数据导入 减轻录入工作量
  • Linux_CGI_CGIC - 获取Get请求字符串

    获取Get请求字符串 Get请求就是我们在浏览器地址栏输入URL时发送请求的方式 或者我们在HTML中定义一个表单 form 时 把action属性设为 Get 时的工作方式 Get请求字符串就是跟在URL后面以问号 开始的字符串 但不包括
  • 知识蒸馏的说明

    本文参考 ChatGPT 温度系数t与top p 超参怎么设置最优 知乎 知识蒸馏系列 一 三类基础蒸馏算法 OpenMMLab的博客 CSDN博客 知识蒸馏算法汇总 知乎 知识蒸馏 Old Summer的博客 CSDN博客 目录 1 Ch
  • IDEA批量替换文件换行符、分隔符CRLF、LF、CR

    全局设置 只对新文件有效 file gt setting gt code style gt Line separator 选中需要替换的分隔符类型 注意 Line separator下面有行小字 applied to new files 意
  • 各种邮箱服务软件对比

    1 宝塔邮局管理器 特点 简单易用 可视化操作 小白也能搞 还有备份功能 一般足够用了 缺点 稳定性真是差 隔三差五的不能收发 没有接口 不能任意修改邮箱密码 只能管理员修改 注意要点 一定要开启ssl 否则有些邮箱给你发邮件你收不到 建议
  • python 学习笔记07: set(集合)类型的操作

    coding UTF 8 version Python2 7 15 set gt 集合学习笔记 Help on class set in module builtin class set object set gt new empty se
  • windows-x86安装qemu-arm虚拟机及文件互传

    一 规划安装目录及环境准备 a 这里是在D盘创建 vm arm64文件夹 然后再里面部署 正在上传 重新上传取消 b 在D盘创建一个存放镜像的目录 image并把镜像放到里面 c 下载qemu 并将软件安装在D vm arm64下qemu下
  • 【解决方案】5G时代浪潮来袭,EasyNVR助力5G厂区视频监控安防采集可视化展示

    智慧工厂被认为是5G技术的重要应用场景之一 利用5G网络将生产设备无缝连接 并进一步打通设计 采购 仓储 物流等环节 满足工业环境下设备互联和远程交互应用需求 TSINGSEE青犀视频面向工厂智能化升级需求 推出5G 智慧工厂方案 构建连接
  • Java-Final关键字

    Java Final关键字 1 概念 final 最终的 final可以修饰的结构 类 最终的类 此类不能被其他类继承 比如String类 StringBuffer类 方法 最终的方法 此方法不能被重写 比如Object 类中的getCla
  • JVM小册(1)------jstat和Parallel GC日志

    JVM小册 1 jstat和Parallel GC日志 一 背景 在生产环境中 有时候会遇到OOM的情况 抛开Arthas 等比较成熟的工具以外 我们可以使用java 提供的jatat和jps jmap等工具来帮助我们排查问题和定位原因 本
  • Kubernetes笔记(6) - Service和Ingress

    Service资源概述 创建Service资源 向Service对象请求服务 Service会话粘性 服务发现 服务暴露 Ingress和Ingress Controller Ingress资源 Ingress控制器 Service资源概述
  • FID(Fusion-in-Decoder models)源码笔记

    源码 源码 https github com facebookresearch FiD 目录 源码 数据集 数据格式 预训练模型 训练 测试 src slurm py 资源调度管理 util py 配置管理 evaluation py 查找
  • 夜光带你走进 传奇语言C#(24)

    夜光序言 一只站在树上的鸟儿 从来不会害怕树枝断裂 因为它相信的不是树枝 而是它自己的翅膀 有时候 经济不独立 你发的一切飚都是浮云 正文 任务18 班级编码表维护
  • oracle 16058,Oracle 11g Data Guard ORA-16058 错误处理

    采用RMAN 备份恢复搭建Oracle 11g的Data Guard 恢复结束之后 DG 同步一直异常 主库提示如下信息 https www cndba cn Dave article 4330 SQL gt select DEST NAM
  • java设计模式之观察者模式(含完整例子和UML类图)

    java设计模式之观察者模式 1 观察者模式 1 1定义 观察者 Observer 模式的定义 指多个对象间存在一对多的依赖关系 当一个对象的状态发生改变时 所有依赖于它的对象都得到通知并被自动更新 这种模式有时又称作发布 订阅模式 模型
  • 高性能服务器架构思路(一)——缓冲策略

    本文首发腾云阁 高性能服务器架构思路 一 缓冲策略 作者介绍 韩伟 1999年大学实习期加入初创期的网易 成为第30号员工 8年间从程序员开始 历任项目经理 产品总监 2007年后创业4年 开发过视频直播社区 及多款页游产品 2011年后就
  • 孕妇有什么副业做?孕妇在家有哪些兼职可以做?

    孕妇有什么副业做 孕妇在家有哪些兼职可以做 孕妇在家选择兼职工作时 有一点一定要遵循 不能从事极端的体力工作 因为体力工作容易让孕妇出现并发症 所以孕妇一定要选择一些没有太大压力的兼职工作 有很多兼职工作时间很自由 所以特别适合怀孕的女性做
  • LAMP部署

    文章目录 LAMP简介 web服务器 web服务器的资源分为两种 静态资源和动态资源 工作流程 http响应报文 httpd与php结合的方式 httpd与php结合的方式有以下三种 lamp平台构建 环境说明
  • 不会下载软件?这5个网站别错过,纯净、安全、无捆绑

    虽然下载网站有很多 但是一不小心就会下载到各种捆绑安装包 这里就给大家分享5个比较靠谱的软件下载网站 纯净 安全 无捆绑 可以放心使用 1 Microsoft Store 一个微软旗下的电脑软件商城 它里面有很多类型的软件可以下载 首页也有
  • c/c++中,预编译指令用法汇总

    切换模式 写文章 登录 注册