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

C语言宏定义几个问题

1.#define Ant A虽说做的是将代码中Ant替换成A,但是是整体的替换,不能将整体分离替换。
不带宏参定义一般形式如下:
格式: #define 标识符 字符串
其中“标识符”为所定义的宏名,“字符串”可以是常数、表达式、格式串,也可以无值。

比如:
若有Ant>B这个表达式,Ant作为一个局部整体,B也作为一个局部整体,所以Ant会被替换成A,即A>B;若有Anta>B这个表达式,Anta作为一个局部整体,B也作为一个局部整体,虽说Anta中含有Ant,但他为一个整体,不会分开替换成Aa>B。
若要取消宏,则#undef Ant

又比如:
若有 "Ant is animal."这个字符串,"Ant is animal."作为一个整体,所以字符串中的Ant不会被替换成A。

2.带参数define(宏函数)
带宏参定义一般形式如下:
格式:#define 标识符(形参列表) 字符串
其中字符串中含有各个形参

若有#define mul(a,b,c,d) abcd
括号中即有a,b,c,d四个形参
假设mul(1,2,3,4)即会替换成1
234
表达式得出来的结果为24
但是我们一般引用形参时候都会带括号,即 (a)(b)©(d)
为什么呢?
这是为了防止逻辑错误,#define只是替换,并不知道你的逻辑,替换后的语句可能因运算符优先级导致逻辑错误。
假设mul(1+1,2,3,4)
得出来的表达式为1+1
234,这样就等于25,但实际上我想要的是1+1=2然后再223*4=48。

注意:宏名和形参之间不能有空格出现,不然预处理器会将mul替换成(a,b,c,d) abc*d。

3.带#(字符串化符)的define
(1)若有#define str(a) #a
则str(good)即被替换成字符串"good"
但#只限用于参数前才会将参数转换成字符串
(2)若有#define A #a
他不会把A替换成"a",而是把A替换成#a

4.带##(片段连接符)的define
若有#define link(num) num##778
则参数num会与778连在一起,即##起连接num和778成为一个整体的作用,
如str(123)会被替换成123778这个整体

注意:在带#或带##的define宏定义执行中不会被其他宏定义给替换掉
如:
#define STR1 “aa”
#define STR2 “bb”
#define STR1STR2 “welcome”
#define CAT(STR1,STR2) STR1##STR2
int main()
{
printf(“%s\n” ,CAT(STR1,STR2));
return 0;
}
得到的输出结果为:welcome
因为CAT(STR1,STR2)中含##,所以执行替换中不会被#define STR1 "aa"与#define STR2 “bb"影响,在执行完替换后,即STR1STR2,其为一整体,更不会被"aa"和“bb”替换,只会将整体的STR1STR2给替换成"welcome”。

不带#且##的define宏定义宏参数中若包含其他宏,那么宏参数在被代入之前会被其他宏替换掉。
又如:
#define A(y) X_##y
#define B(y) A(y)
#define SIZE 1024
#define S SIZE

问:A(S)、B(S)分别会被替换成什么?

结果:A(S)会被X_S替换,B(S)会被X_1024替换。
分析:
A(S)宏定义中含##,故替换过程中不会被其他宏定义替换,即不会被#define S SIZE替换,所以替换成了X_S,而X_S这个整体没有关于他的宏定义,所以结果为A(S)会被X_S替换;
B(S)宏定义中不含##,B(S)故会被替换成A(Size),后被替换成A(1024),最后结果就为X_1024。

相关文章:

C语言宏定义几个问题

1.#define Ant A虽说做的是将代码中Ant替换成A,但是是整体的替换,不能将整体分离替换。 不带宏参定义一般形式如下: 格式: #define 标识符 字符串 其中“标识符”为所定义的宏名,“字符串”可以是常数、表达式、格式串…...

王道计算机组成原理课代表 - 考研计算机 第二章 数据的表示和运算 究极精华总结笔记

本篇博客是考研期间学习王道课程 传送门 的笔记,以及一整年里对 计算机组成 知识点的理解的总结。希望对新一届的计算机考研人提供帮助!!! 关于对 数据的表示和运算 章节知识点总结的十分全面,涵括了《计算机组成原理…...

springboot集成mahout实现简单基于协同过滤算法的文章推荐算法

文章目录前言1.建表并且生成一些数据首先,建立一个用户文章操作表(user_article_operation)使用case when语句简单分析数据2. 代码与测试只需要根据表生成相应实体类(注意要加一个value属性来存储分数)主要代码如下&am…...

自动驾驶介绍系列 ———— 看门狗

文章目录硬件看门狗软件看门狗差异分析延申窗口看门狗硬件看门狗 硬件看门狗的本质上是一个定时器电路。通常存在一个输入,输入到MCU的RST端。在正常工作状态下,MCU每隔固定时间间隔会输出一个信号给RST端,实现对看门狗端清零。如果在指定的时…...

今天打开个税APP,我直接人麻了!

点击上方“码农突围”,马上关注这里是码农充电第一站,回复“666”,获取一份专属大礼包真爱,请设置“星标”或点个“在看这是【码农突围】的第 432 篇原创分享作者 l 突围的鱼来源 l 码农突围(ID:smartyuge&…...

javascript进阶学习笔记(含AJAX)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、JS变量(var、let和const)二、for/in循环三、正则表达式语法:正则表达式修饰符:正则表达式模式字符串方法&…...

今年没有金三银四

最近好几个铁子咨询目前的大环境如何,甚至还有几个CTO和总监级别的大佬想跳槽问有没有对应的岗位。 又到了每年金三银四的时间点,往年(去年除外)这个时候用工市场都是一遍火热,大家跳槽涨薪好不快活。 面对这些咨询我…...

NFS - Network FileSystem网络文件系统的实现原理

文章目录PreNFS简介NFS共享数据结构图NFS服务器的实现原理是否安装nfs安装配置NFSPre NFS - MIPS架构下构建NFS共享目录服务 NFS简介 NFS的全称是Network FileSystem,即网络文件系统 NFS最初是由 Sun Microsytem 公司开发出来的,主要实现的功能是让网络…...

C#【汇总篇】语法糖汇总

文章目录0、语法糖简介1、自动属性2、参数默认值和命名参数3、类型实例化4、集合4.1 初始化List集合的值4.2 取List中的值5、隐式类型(var)6、扩展方法【更换测试实例】7、匿名类型(Anonymous type)【待补充】8、匿名方法&#xf…...

高完整性系统工程(一): Safety Engineering, HAZOP Fault Tree Analysis

目录 1. 因果性不等同于相关性 2. HAZOP 2.1 学习HAZOP 2.2 HAZOP概览 2.3 Assessing Hazard Risks 评估 2.4 示例场景 2.5 HAZOP Guidewords 2.6 HAZOP Process 2.7 HAZOP Outcomes 2.8 HAZOP Summary 3. FAULT TREE ANALYSIS 3.1 Analysis Outcomes 1. 因果性不等…...

VGG16分类模型的网页界面(Flask,keras)

开发一个网页版的VGG16模型界面可以分为以下几个步骤: 步骤1:数据准备 首先要准备一组图片数据集,建议使用ImageNet数据集,该数据集包含超过1000个类别和100万张图像。您可以将ImageNet数据集转换为Keras的格式。如果您没有Imag…...

互联网摸鱼日报(2023-03-12)

互联网摸鱼日报(2023-03-12) InfoQ 热门话题 又拍云邵海杨:25年Linux老兵聊DevOps八荣八耻 快猫来炜:如何端好运维的饭碗 作业帮聂安:运维如何转型,听听作业帮的OPaS思路 CTO药方:如何搭建运…...

SpringBoot异常处理?用这两个就够啦!

​ 在日常项目中,我们难免会遇到系统错误的情况。如果对系统异常的情况不做处理,Springboot本身会默认将错误异常作为接口的请求返回。 GetMapping("/testNorError") public void testNorError() {try {throw new MyException(6000, "我…...

mysql-查询重复数据的条数-count

查询重复数据的条数 select name , count(*) from table group by name; 查询结果:查询表table中name相同重复的个数 补充:count的用法 查询一个表中总共多少行(多少条数据) select count (*) from table 小结 …...

【Java枚举类】使用enum关键词定义枚举类

使用说明 1.使用 enum 定义的枚举类默认继承了 java.lang.Enum类,因此不能再继承其他类 2.枚举类的构造器只能使用 private 权限修饰符 3.枚举类的所有实例必须在枚举类中显式列出(, 分隔 ; 结尾)。列出的 实例系统会自动添加 public static final 修饰 4.必须在…...

第十四届蓝桥杯三月真题刷题训练——第 8 天

目录 第 1 题:分数 题目描述 运行限制 代码: 第 2 题:回文日期 题目描述 输入描述 输出描述 输入输出样例 运行限制 代码: 第 3 题:迷宫 代码: 第 1 题:分数 题目描述 本题为填空题…...

鼎阳SDS2074X Plus免费“升级”(破解)备忘录

鼎阳SDS2074X Plus从基础参数来看,在一众国产示波器里并不出彩。但作为一款可以免费“升级”到【1】4通道2GSa/s的采样率,500MHz分析带宽,200Mpts存储深度的数字示波器(可惜原配的是200MHz的探头,500MHz的探头还是贵&a…...

【C++】C++标准模板库STL (一) string类的使用详解

前言 在前一章种我们介绍了C中的模板的使用,这是一种泛型编程,模板的使用能让我们减少大量的相似代码,减少我们的代码量与工作量,写出更加高效简洁的代码,模板如此好用,但还是要我们先出写一个泛型类或函数…...

如何用SpringBoot+Thymeleaf+Echart生成好看的柱状图,折线图,饼状图

一、前言 上篇文章我们用POI技术读取Excel并生成了相应的图表。但是实际的效果比较一般,因为本身WPS生成图表就比较简单,如果用程序操作远比人工耗时费力,效果远不如一些付费模板。如下图所示: 然后我就想到前端不是有一个简单易…...

LeetCode819. 最常见的单词(python)

题目 给定一个段落 (paragraph) 和一个禁用单词列表 (banned)。返回出现次数最多,同时不在禁用列表中的单词。 题目保证至少有一个词不在禁用列表中,而且答案唯一。 禁用列表中的单词用小写字母表示,不含标点符号。段落中的单词不区分大小写。…...

【深入理解C指针】经典笔试题——指针和数组

🔹内容专栏:【C语言】进阶部分 🔹本文概括:一些指针和数组笔试题的解析 。 🔹本文作者:花香碟自来_ 🔹发布时间:2023.3.12 目录 一、指针和数组练习题 1. 一维数组 2. 字符数组 …...

雷达散射截面

雷达散射截面(Radar Cross Section, RCS)是表征目标散射强弱的物理量。 σ = 4 π R 2 ∣ E s ∣ 2 ∣ E i ∣ 2 \sigma = 4\pi R^2 \frac{|E_s |^2}{|E_i|^2}...

希腊棺材之谜——复盘

文章目录梗概推导伪解答虽然花费6-8小时来看小说,是一件很奢侈的事情。但是再荒诞的事情终归有它背后的逻辑链条。这正如Ellery所坚持的那样,逻辑为王。希腊棺材之谜是Ellery Queen首次展露头角, 因此作者特地给他安排了3次伪解答和1次真解答…...

CentOS的下载和安装

文章目录前言一、CentOS的下载二、如何下载1.选择下载版本2.选择isos3.点击isos后,进入如下页面,接着点击X86_644.一般选择下面框住的进行下载三、安装软件选择设置接着进行分区设置设置网络和主机名前言 在学习Linux时,记录下CentOS的安装 …...

new bing的chatGPT如何解析英文论文pdf

昨天我的new bing申请下来了,有了聊天的界面: 但是解析pdf的英文文献,还是不行,没有对话窗口。就问了一下chatGPT,方案如下: 要使用New Bing解析PDF文献,你需要以下几个步骤: 1&a…...

学会这12个Python装饰器,让你的代码更上一层楼

学会这12个Python装饰器,让你的代码更上一层楼 Python 装饰器是个强大的工具,可帮你生成整洁、可重用和可维护的代码。某种意义上说,会不会用装饰器是区分新手和老鸟的重要标志。如果你不熟悉装饰器,你可以将它们视为将函数作为输…...

企业使用ERP的好处

ERP系统是企业管理信息系统的简称,它是以信息技术为手段,以物流、资金流、信息流为主线,以企业的核心业务流程为对象,建立的一套适用于企业管理的、高效的企业管理信息系统。它是通过科学方法和计算机信息技术,将企业运…...

【QT】如何获取屏幕(桌面)的大小或分辨率

目录1. QDesktopWidget 获取系统屏幕大小2. QScreen 获取系统屏幕大小3. geometry() 与 availableGeometry() 的区别1. QDesktopWidget 获取系统屏幕大小 QDesktopWidget 提供了详细的位置信息,其能够自动返回窗口在用户窗口的位置和应用程序窗口的位置 QDesktopW…...

ETL工具的选择

正确选择 ETL 工具,可以从 ETL 对平台的支持、对数据源的支持、数据转换功能、管理 和调度功能、集成和开放性、对元数据管理等功能出发,具体如下。 支持平台 随着各种应用系统数据量的飞速增长和对业务可靠性等要求的不断提高,人们对数据抽…...

SpringBoot仿天猫商城java web购物网站的设计与实现

1,项目介绍 基于 SpringBoot 的仿天猫商城拥有两种角色,分别为管理员和用户。 迷你天猫商城是一个基于SSM框架的综合性B2C电商平台,需求设计主要参考天猫商城的购物流程。 后端页面兼容IE10及以上现代浏览器,Chrome,Edge,Firebox…...

龙口建网站/北京seo关键词优化外包

前两天看了深入web请求过程的知识,比较陌生的就是DNS中几种域名解析的方式的点,这里记录一下。 linux中使用 dig www.taobao.com trace 就可以查看域名解析的过程,以下使用的是NS方式...

wordpress斜杠自动成-/seo网站课程

一、场景 相信很多phper都会遇到这样的场景,操作数据库一次性请求返回结果集过大,而又需要对结果集进行处理从而导致PHP内存开销过大。当然如果你使用过ThinkPHP和Laravel框架(其他框架或许也有类似方法,未使用过尚不清&#xff…...

qq是哪家公司运营的/seo技术专员招聘

http://blog.csdn.net/pipisorry/article/details/52845804 orange的安装 linux下的安装 先安装依赖pyqt4[PyQt教程 - pythonQt的安装和配置及版本间差异] pip install orange3 检查是否安装成功 import Orange 运行GUI界面 alias orange python3 -m Orange.canvas & 安装出…...

宁夏做网站建设公司/注册域名费用一般多少钱

如果项目有第三方jar包而部署服务器后启动项目jar包后报错说找不到你的第三方jar包class not found 只需在对应的pom文件里加入 <resource> <directory>src/main/resources/lib</directory> <targetPath>BOOT-INF/lib/</targetPath> <incl…...

网站制作中文版/百度关键词搜索次数

原题地址&#xff1a;http://oj.leetcode.com/problems/insertion-sort-list/ 题意&#xff1a;对链表进行插入排序。 解题思路&#xff1a;首先来对插入排序有一个直观的认识&#xff0c;来自维基百科。 代码循环部分图示&#xff1a; 代码&#xff1a; class Solution: # par…...

厦门营销型网站建设公司/东莞疫情最新消息今天新增病例

在实际的项目开发中会有非常多的对象&#xff0c;怎样高效、方便地管理对象&#xff0c;成为影响程序性能与可维护性的重要环节。Java 提供了集合框架来解决此类问题。线性表、链表、哈希表等是经常使用的数据结构&#xff0c;在进行 Java 开发时&#xff0c;JDK 已经为我们提供…...