当前位置: 首页 > news >正文

编译基本过程 预处理器

编译基本过程

源代码(main.c)->预处理器(cpp)->编译器(gcc/clang/msvc)->汇编器(as)->链接器(ld)->可执行文件(main.exe)

预处理器

C语言中预处理器:执行预处理命令(文件包含、宏替换、条件编译)+处理注释(将所有注释替换为空格)+处理续行符(将所有续行符的代码连接到上一行)+处理字符串连接(将用空格或换行分隔的字符串连接成一个字符串)

预处理命令:是以#开始的命令

预处理命令分类:

  1. 宏定义(#define…#undef…)(包括预定义的宏)
  2. 文件包含(#include…)
  3. 条件编译(#ifdef…#elif…#else…#endif…)(#ifndef…#elif…#else…#endif…)(#if…#elif…#else…#endif)

语法:#command name(…) token(s)

预处理运算符:

  1. defined:用于检查某个宏是否被定义,用于检查某个宏是否被定义,若被定义返回true,否则返回false。与条件编译指令#if…#elif…#else使用。
  2. #:用来将宏参数转换为字符串(字符串化操作)
  3. ##:用于在预处理时连接两个标识符
http://www.lryc.cn/news/301234.html

相关文章:

  • 模拟算法.
  • ClickHouse--10--临时表、视图、向表中导入导出数据
  • Python一些可能用的到的函数系列124 GlobalFunc
  • python中线程/线程池,进程/进程池的创建
  • 【c++】vector的增删查改
  • 【研究生复试】计算机软件工程人工智能研究生复试——资料整理(速记版)——JAVA
  • JVM-JVM中对象的生命周期
  • RegExp正则表达式左限定右限定左右限定,预查询,预查寻,断言 : (?<= , (?= , (?<! , (?!
  • 相机图像质量研究(30)常见问题总结:图像处理对成像的影响--重影
  • 问题记录——c++ sort 函数 和 严格弱序比较
  • 《Go 简易速速上手小册》第9章:数据库交互(2024 最新版)
  • redis的hash数据结构底层简记
  • 清除Django的管理员admin站点中“Recent Actions“最近活动面板上的所有信息
  • 【JVM篇】ThreadLocal中为什么要使用弱引用
  • Stable Diffusion教程——stable diffusion基础原理详解与安装秋叶整合包进行出图测试
  • 【JavaEE】_线程与多线程的创建
  • 【前端工程化面试题】如何优化提高 webpack 的构建速度
  • 免费chatgpt使用
  • OpenCV识别人脸案例实战
  • VOSK——离线语音库
  • ELAdmin 隐藏添加编辑按钮
  • 浅谈Websocket
  • JavaScript闭包详细介绍
  • pytorch神经网络入门代码
  • 代码随想录算法训练营第三十四天|860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球
  • Ditto:提升剪贴板体验的宝藏软件(复制粘贴效率翻倍、文本处理好助手)
  • 【自然语言处理-工具篇】spaCy<2>--模型的使用
  • Java之通过Jsch库连接Linux实现文件传输
  • Nginx七层负载均衡之动静分离
  • 305_C++_定义了一个定时器池 TimerPool 类和相关的枚举类型和结构体