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

C语言有哪些预处理操作?

8f14d2eadec2b9984ea12db9a98f39c5.png

C语言的预处理是在编译之前对源代码进行处理的阶段,它主要由预处理器完成。预处理器是一个独立的程序,它负责对源代码进行一些文本替换和处理,生成经过预处理的代码。以下是C语言预处理的一些重要特性:

1,头文件包含

#include <stdio.h>
  • 作用:将其他文件的内容包含到当前文件中。

  • 示例:#include指令用于包含标准库头文件,如上例中的 <stdio.h>。


2,宏定义

#define PI 3.14159
  • 作用:创建宏,用指定的文本替换源代码中的标识符。

  • 示例:上例中PI将在源代码中被替换为3.14159。


3,条件编译

#ifdef DEBUG
// 调试模式下的代码
#endif
  • 作用:根据条件选择性地编译代码。

  • 示例:定义了DEBUG宏,#ifdef DEBUG和#endif之间的将被编译。


4,条件包含

#if SIZE == 64#include "header64.h"
#else#include "header32.h"
#endif
  • 作用:根据条件选择性地包含头文件。

  • 示例:定义了SIZE为64,则包含header64.h,否则包含header32.h。


5,标识符连接

#define CONCAT(x, y) x ## y
int result = CONCAT(10, 20); // 相当于 int result = 1020;
  • 作用:将两个标识符连接为一个标识符。

  • 示例:上例中CONCAT(10, 20)被连接为1020。


6,条件编译中的宏定义

#if defined(DEBUG) && (LOG_LEVEL > 1)// 在调试模式且日志级别大于1时执行的代码
#endif
  • 作用:在条件编译中使用宏定义进行更复杂的条件判断。

  • 示例:上例中,当定义了DEBUG宏并且LOG_LEVEL大于1时,才会编译对应的代码块。


7,#undef 指令

#undef PI
#define PI 3.1415926535
  • 作用:取消已定义的宏,然后重新定义。

  • 示例:上例中,取消了之前定义的PI宏,然后重新定义为更精确的值。


8,#error 指令

#if !defined(CONFIG)#error "CONFIG macro is not defined!"
#endif
  • 作用:在编译过程中产生错误消息。

  • 示例:如果CONFIG宏没有被定义,将产生编译错误并显示错误消息。

==========

往期回顾:

面试题--函数指针的五大作用

中值滤波的原理和C代码

移动平均滤波的原理和C代码

MOS管防反接电路

==========

791176ee33df15a17a78f329338129eb.png

6e17e82090113d194ead4dfee85c69e5.png

bbae899b61198d1869390aa8dbf999c0.png

相关文章:

C语言有哪些预处理操作?

C语言的预处理是在编译之前对源代码进行处理的阶段&#xff0c;它主要由预处理器完成。预处理器是一个独立的程序&#xff0c;它负责对源代码进行一些文本替换和处理&#xff0c;生成经过预处理的代码。以下是C语言预处理的一些重要特性&#xff1a; 1&#xff0c;头文件包含 #…...

数据结构算法-希尔排序算法

引言 在一个普通的下午&#xff0c;小明和小森决定一起玩“谁是老板”的扑克牌游戏。这次他们玩的可不仅仅是娱乐&#xff0c;更是要用扑克牌来决定谁是真正的“大老板”。 然而&#xff0c;小明的牌就像刚从乱麻中取出来的那样&#xff0c;毫无头绪。小森的牌也像是被小丑掷…...

php使用vue.js实现省市区三级联动

参考gpt 有问题问gpt 实现效果 现省市区三级联动的方法可以使用PHP结合AJAX异步请求来实现。下面是一个简单的示例代码&#xff1a; HTML部分&#xff1a; <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>省市区三级联动…...

软件测试:测试用例八大要素模板

一、通用测试用例八要素 1、用例编号&#xff1b; 2、测试项目&#xff1b; 3、测试标题&#xff1b; 4、重要级别&#xff1b; 5、预置条件&#xff1b; 6、测试输入&#xff1b; 7、操作步骤&#xff1b; 8、预期输出 二、具体分析通用测试用例八要素 1、用例编号 一般是数字…...

C语言进阶之路之顶峰相见篇

目录 一、学习目标 二、宏定义 预处理 宏的概念 带参宏 无值宏定义 三、条件编译 条件编译 条件编译的使用场景 四、头文件 头文件的作用 头文件的内容 头文件的基础语句&#xff1a; GCC编译器的4个编译步骤&#xff1a; 总结 一、学习目标 掌握宏定义含义和用…...

第76讲:MySQL数据库中常用的命令行工具的基本使用

文章目录 1.mysql客户端命令工具2.mysqladmin管理数据库的客户端工具3.mysqlbinlog查看数据库中的二进制日志4.mysqlshow统计数据库中的信息5.mysqldump数据库备份工具6.mysqllimport还原备份的数据7.source命令还原SQL类型的备份文件 MySQL数据库提供了很多的命令行工具&#…...

初级数据结构(二)——链表

文中代码源文件已上传&#xff1a;数据结构源码 <-上一篇 初级数据结构&#xff08;一&#xff09;——顺序表 | NULL 下一篇-> 1、链表特征 与顺序表数据连续存放不同&#xff0c;链表中每个数据是分开存放的&#xff0c;而且存放的位置尤其零散&#…...

Kubernetes架构及核心部件

文章目录 1、Kubernetes集群概述1.1、概述1.2、通过声明式API即可 2、Kubernetes 集群架构2.1、Master 组件2.1.1、API Server2.1.2、集群状态存储2.1.3、控制器管理器2.1.4、调度器 2.2、Worker Node 组件2.2.1、kubelet2.2.2、容器运行时环境2.2.3、kube-proxy 2.3、图解架构…...

RAW和YUV的区别

RAW是指未经过任何压缩或处理的原始图像数据。在摄像头中&#xff0c;原始图像数据可以是来自图像传感器的未经处理的像素值。这些原始数据通常以一种Bayer模式的形式存在&#xff0c;其中每个像素仅包含一种颜色信息&#xff08;红色、绿色或蓝色&#xff09;&#xff0c;需要…...

Linux常见问题-获取日志方法总结(Ubuntu/Debian)

1 日志基本路径和基础查看方法 在 Ubuntu 或 Debian 11 系统中&#xff0c;可以通过不同的日志文件来获取系统日志和内核日志。日志常见路径如下&#xff1a; /var/log/syslog&#xff1a;包含系统的整体日志&#xff0c;包括各种系统事件和服务日志。/var/log/auth.log&…...

【机器视觉技术栈】03 - 镜头

镜头 定焦镜头变焦镜头远心镜头 FA镜头与远心镜头的区别&#xff1f; 焦距越小畸变程度越大&#xff0c;精度要求不高的场景可以使用焦距大的FA镜头做尺寸测量&#xff0c;但焦距越大带来的问题就是整个机械设备越大。精度高的场景使用远心镜头进行尺寸测量。 光学基础知识…...

判断一个Series序列的值是否为单调递减Series.is_monotonic_decreasing

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 判断一个Series序列中 各值是否单调递减 s.is_monotonic_decreasing [太阳]选择题 以下代码的输出结果中正确的是? import pandas as pd s1 pd.Series([3,2,1]) s2 pd.Series([3,2,4]) pri…...

CSPNet: A New Backbone that can Enhance Learning Capability of CNN(2019)

文章目录 -Abstract1 Introduction2 Related workformer work 3 Method3.1 Cross Stage Partial Network3.2 Exact Fusion Model 4 Experiments5 Conclusion 原文链接 源代码 - 梯度信息重用&#xff08;有别于冗余的梯度信息&#xff09;可以减少计算量和内存占用提高效率&am…...

本科毕业论文查重的依据

大家好&#xff0c;今天来聊聊本科毕业论文查重的依据&#xff0c;希望能给大家提供一点参考。 以下是针对论文重复率高的情况&#xff0c;提供一些修改建议和技巧&#xff1a; 本科毕业论文查重依据&#xff1a;维护学术诚信的基石 摘要&#xff1a; 本科毕业论文是衡量学生学…...

如何利用Axure制作移动端产品原型

Axure是一款专业的快速原型设计工具&#xff0c;作为专业的原型设计工具&#xff0c;Axure 能够快速、高效地创建原型&#xff0c;同时支持多人协作设计和版本控制管理。它已经得到了许多大公司的采用&#xff0c;如IBM、微软、思科、eBay等&#xff0c;这些公司都利用Axure 进…...

Java中时间之间的转换

Java中常见的时间类有&#xff1a;Date、Calendar、SimpleDateFormat等。下面对不同时间类之间的转换进行介绍。 1、Date和Calendar之间的转换 Date和Calendar都可以表示时间&#xff0c;但是它们的使用方式不同。Date是一个表示特定时间点的类&#xff0c;而Calendar则是一个…...

【win32_005】调试信息打印到控制台----2种简单方法

方法1&#xff1a;使用win32 api函数 PCTSTR str1 TEXT("123456789");AllocConsole();HANDLE HConsole GetStdHandle(STD_OUTPUT_HANDLE);WriteConsole(HConsole, str1, 9, NULL, NULL);https://learn.microsoft.com/zh-cn/windows/console/writeconsole 方…...

PPT添加备注

0 Preface/Foreward 1 添加备注方法 添加备注方法&#xff1a;在page的最下端&#xff0c;有一个空白文本框&#xff0c;该文本框用来添加备注。...

Ubuntu20.04使用cephadm部署ceph集群

文章目录 Requirements环境安装Cephadm部署Ceph单机集群引导&#xff08;bootstrap&#xff09;建立新集群 管理OSD列出可用的OSD设备部署OSD删除OSD 管理主机列出主机信息添加主机到集群从集群中删除主机 部署Ceph集群 Cephadm通过在单个主机上创建一个Ceph单机集群&#xff0…...

激光打标机在智能手表上的应用:科技与时尚的完美结合

随着科技的飞速发展&#xff0c;智能手表已经成为我们日常生活中不可或缺的智能设备。而在智能手表制造中&#xff0c;激光打标机扮演着至关重要的角色。本文将详细介绍激光打标机在智能手表制造中的应用&#xff0c;以及其带来的优势和影响。 ​ 一、激光打标机在智能手表制…...

终极指南:如何利用Storybook实现集中式日志组件管理

终极指南&#xff1a;如何利用Storybook实现集中式日志组件管理 【免费下载链接】storybook Storybook is the industry standard workshop for building, documenting, and testing UI components in isolation 项目地址: https://gitcode.com/GitHub_Trending/st/storybook…...

10. 免费GPU资源汇总(二):AutoDL、阿里云免费算力申请与使用

001、系列引言:为什么你需要关注AutoDL与阿里云免费算力? 深夜两点,示波器的波形还在跳,我盯着屏幕里那个诡异的时序毛刺,突然意识到一件事——手头这块老旧的开发板已经跑不动更复杂的模型验证了。同事上周训练一个轻量级YOLO,在自己的笔记本上跑了整整两天,结果因为散…...

华硕笔记本性能释放新选择:轻量级开源工具GHelper深度体验

华硕笔记本性能释放新选择&#xff1a;轻量级开源工具GHelper深度体验 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix…...

OpenClaw 控制面板侧边栏工具说明书

这份说明书基于 OpenClaw 官方文档整理&#xff0c;帮助你理解控制面板各个功能模块。版本&#xff1a;2026.3.31 &#x1f4cb; 侧边栏工具概览 工具对应功能用途代理Agents&#xff08;多代理&#xff09;管理多个独立 AI 代理技能Skills安装和管理自定义技能节点Nodes配对的…...

零基础部署Nanbeige 4.1-3B:Streamlit极简UI手把手教程

零基础部署Nanbeige 4.1-3B&#xff1a;Streamlit极简UI手把手教程 如果你对本地运行大语言模型感兴趣&#xff0c;但又被复杂的命令行界面和简陋的Web界面劝退&#xff0c;那么今天这篇文章就是为你准备的。我们将一起完成一个既好看又好用的本地AI对话界面的部署&#xff0c…...

千问3.5-2B视觉理解作品分享:电商商品图识别、医疗报告图解析、工业仪表读数案例

千问3.5-2B视觉理解作品分享&#xff1a;电商商品图识别、医疗报告图解析、工业仪表读数案例 1. 视觉理解模型简介 千问3.5-2B是Qwen系列中的小型视觉语言模型&#xff0c;它能够同时理解图片内容和处理自然语言。这个模型最特别的地方在于&#xff0c;你只需要上传一张图片&…...

OpenClaw故障排查:千问3.5-9B接口连接问题解决大全

OpenClaw故障排查&#xff1a;千问3.5-9B接口连接问题解决大全 1. 问题背景与排查思路 上周我在本地部署OpenClaw时&#xff0c;遇到了对接千问3.5-9B模型的连接问题。作为一个开源AI智能体框架&#xff0c;OpenClaw需要稳定接入大模型才能发挥自动化能力。但在实际配置过程中…...

GLM-4-9B-Chat-1M多语言法律文书生成:中英双语合同条款自动起草

GLM-4-9B-Chat-1M多语言法律文书生成&#xff1a;中英双语合同条款自动起草 1. 项目简介与核心价值 法律文书起草是法律工作中的重要环节&#xff0c;但传统方式耗时耗力且容易出错。GLM-4-9B-Chat-1M模型的出现&#xff0c;为法律文书生成带来了全新的解决方案。 这个基于v…...

文档格式高效破解:NCMDump实现加密文件自由掌控全指南

文档格式高效破解&#xff1a;NCMDump实现加密文件自由掌控全指南 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 在数字化办公时代&#xff0c;你是否曾因收到的加密文档无法跨平台打开而错失重要信息&#xff1f;是否经历过花费数…...

GeoServer零配置入门:如何用绿色版快速搭建本地地图服务器(含端口自定义技巧)

GeoServer零配置入门&#xff1a;如何用绿色版快速搭建本地地图服务器&#xff08;含端口自定义技巧&#xff09; 在GIS开发领域&#xff0c;快速搭建本地测试环境是每个开发者必备的技能。GeoServer作为开源地图服务器中的佼佼者&#xff0c;其绿色版更是提供了即解压即用的便…...