C语言收尾 预处理相关知识

一. 预处理详解

1.1 预定义符号

FILE //进行编译的源文件
LINE //文件当前的行号
DATE //文件被编译的日期
TIME //文件被编译的时间
FUNCTION //文件当前所在的函数
STDC //如果编译器遵循ANSI C标准,其值为1,否则未定义

这些预定义符号都是语言内置的

我们来使用下上面的语句

 这样我们就可以知道 函数在什么时间 什么地点 发生了什么

1.2 #define 定义标识符号

define可以定义符号
例如

#define MAX 1000
int main()
{int m = MAX;//int m = 1000;printf("%d\n", m);return 0;
}

在预处理时其实MAX就变成了1000

这里注意的是define是不能加分号的 否则替换到源文件里面会出现各种问题

1.3 #define 定义宏

我们举个例子

#define SQUARE(x) (x)*(x)
int main()
{printf("%d\n", SQUARE(5 + 1));//不要吝啬括号,不加括号有时候可能导致优先级的错误printf("%lf\n", SQUARE(5.0));//宏定义不限制类型return 0;
}

这里 它就是一个宏 它允许把参数替换到文本中去 这种实现通常称为宏

我们在定义宏的时候一定要注意括号

#define DOUBLE(x) ((x)+(x))
int main()
{printf("%d\n", 10 * DOUBLE(3));//最好能把整体也加上括号return 0;
}

这题如果不在宏定义时加上整体的一个大括号就会导致输出结果的错误 计算成33

但实际上我们的要求是60

这里还有要注意的一点 注释中的宏是不会被替换的

1.4 #define 的副作用

我们写出以下代码

#define Max(x,y)((x)>(y))?(x):(y)int main()
{int a = 5;int b = 8;int c= Max(a++, b++);printf("%d\n", a);printf("%d\n", b);printf("%d\n", c);return 0;
}

这里输出结果如下

我们可以发现 其实b是++了两次的

这里就是宏的一个小缺陷

1.5 宏和函数对比

宏通常用于比较简单的运算

例如求两个数中的较大值

为什么这样子呢?

因为

1 宏在规模和速度方面更胜一筹
2 函数必须要声明类型 而宏不用

当然宏也有缺点

  1. 每次使用宏的时候一份宏的代码将会被插入到程序中 除非宏比较短 可能大幅度增加程序的长度
  2. 宏无法调试
  3. 宏无类型定义 不够眼睛
  4. 宏可能会带来操作符优先级的问题 导致程序出错

 以上便是本文所有内容了,如有错误请各位大佬不吝赐教,感谢留言

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/10609.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

类和对象中篇

类的六个默认成员函数 如果一个类中什么成员都没有,简称为空类。空类中什么都没有吗?并不是的,任何一个类在我们不写的情况下,都会自动生成下面6个默认成员函数 ①初始化和清理:构造函数和析构函数 ②拷贝复制&#x…

Linux——信号量

什么是信号量? 信号量是用来用于同步和互斥的。其实就是一个计数器,进行PV操作,其中P操作就是让计数器–,V操作就是让计数器。 从物理上说明信号量的P、V操作的含义。 P(S)表示申请一个资源,S.value>0表示有资源可…

OBS插件--复合模糊

复合模糊 复合是一款滤镜插件,支持多种模糊类型和多种蒙版效果。支持模糊源的部分显示区域,可以反选区域进行模糊,这个功能对于场景部分区域需要遮盖非常实用。 下面截图演示下操作步骤: 首先,打开 OBS直播助手 在…

【Unity 鼠标输入检测】

Unity 鼠标输入检测 Unity提供了多种方法来检测和处理鼠标输入,允许开发者在游戏中实现对鼠标移动、点击和滚轮滚动的响应。以下是一些基本的鼠标输入检测方法: 1. Input.mousePosition 这个属性返回当前鼠标指针的屏幕坐标。坐标是以像素为单位的&…

【吊打面试官系列】Java高并发篇 - 同步方法和同步块,哪个是更好的选择?

大家好,我是锋哥。今天分享关于 【同步方法和同步块,哪个是更好的选择?】面试题,希望对大家有帮助; 同步方法和同步块,哪个是更好的选择? 同步块是更好的选择,因为它不会锁住整个对象…

临近空间相关概念

临近空间概念 距地 20KM-100KM 的临近空间位于内外层空间之中,也称为 超高空、近空间、亚轨道等。 特点就是:纵跨 非电离层和电离层、空气稀薄,存在 臭氧、紫外、辐射等特殊环境 存在 重力波、行星波、大气放电等特殊现象。 临近空间高速飞…

##15 探索高级数据增强技术以提高模型泛化能力

文章目录 前言数据增强的重要性常见的数据增强技术高级数据增强技术在PyTorch中实现数据增强结论 前言 在深度学习领域,数据增强是一种有效的技术,它可以通过在原始数据上应用一系列变换来生成新的训练样本,从而增加数据的多样性&#xff0c…

前端 | 易混词卡片切换

文章目录 📚实现效果📚模块实现解析🐇html🐇css🐇javascript 📚实现效果 绘制单词卡片效果,实现点击左半部分上翻,点击右半部分下翻。 📚模块实现解析 🐇…

品鉴中的个人风格:如何形成自己与众不同的红酒品鉴体验

品鉴云仓酒庄雷盛红酒不仅是一种感官体验,更是一种个人风格的展现。每个人都有自己与众不同的品味和偏好,通过品鉴红酒,我们可以形成自己与众不同的红酒品鉴体验。 要形成自己与众不同的红酒品鉴体验,首先需要勇于尝试不同类型的红…

C++语法之在谈const与模版参数

最近一直在复习C的语法,感觉遇到了不少问题,或许是之前没想的这么深。废话不说,开始说正事。 一、再谈const 有些朋友可能有些疑问,不就是const吗?我知道,const可以给非const赋值,反过来不行&…

通过mvn archetype 创建一个spring boot start 工程

mvn archetype https://maven.apache.org/archetype/index.html 遇到的问题 对于想自定义一个spring-boot-start的同学,比如 Springboot自定义Starter启动器 整个过程很繁琐。 定义属性开关增加 spring boot test start插件定义自动装载 spring.factories or org.springfra…

javax.net.ssl.SSLException: Received fatal alert: protocol_version已经解决

起因: 在帮别人讲解项目时,将项目的tomcat配置完,点击运行后,报错,信息如标题。 解决办法: 在csdn百度问题,得到的方法主要有几个: 1.jdk要配置在1.8以上; 2.数据库地…

Stable Diffusion是什么?

目录 一、Stable Diffusion是什么? 二、Stable Diffusion的基本原理 三、Stable Diffusion有哪些运用领域? 一、Stable Diffusion是什么? Stable Diffusion是一个先进的人工智能图像生成模型,它能够根据文本描述创造出高质量的图…

信息检索(36):ConTextual Masked Auto-Encoder for Dense Passage Retrieval

ConTextual Masked Auto-Encoder for Dense Passage Retrieval 标题摘要1 引言2 相关工作3 方法3.1 初步:屏蔽自动编码3.2 CoT-MAE:上下文屏蔽自动编码器3.3 密集通道检索的微调 4 实验4.1 预训练4.2 微调4.3 主要结果 5 分析5.1 与蒸馏检索器的比较5.2 …

网络运维故障排错思路!!!!!(稳了!!!)

1 网络排错的必备条件 为什么要先讲必备条件?因为这里所讲的网络排错并不仅仅是停留在某一个小小命令的使用上,而是一套系统的方法,如果没有这些条件,我真的不能保证下面讲的这些你可以听得懂,并且能运用到实际当中&a…

Unity值类型和引用类型

我们都知道C#编程语言中,数据类型被分为了两种: 值类型引用类型 那么什么是值类型?什么是引用类型呢?它们的区别又是什么? 为了搞清楚这些问题,我们先列举一下我们开发中会碰到的值类型和引用类型。 常…

【AI+老照片焕新】母亲节用AI把时间的印记变成暖心礼物

想念是一张泛黄的照片,藏在抽屉里的笑容,总是那么亲切。今天是母亲节,是不是想给妈妈来点不一样的惊喜?用AI技术,把那些老照片瞬间焕新,让妈妈的青春记忆重放光华! 想象一下,妈妈年…

如何根据招聘信息打造完美简历

如何根据招聘信息打造完美简历 招聘信息分析简历调整策略个性化与关键词结语 在求职过程中,简历是第一块敲门砖。它不仅展示了你的专业技能和工作经验,还体现了你对所申请职位的理解和热情。然而,如何从招聘信息中提炼关键点,打造…

scrapy的入门

今天我们先学习一下scrapy的入门,Scrapy是一个快速的高层次的网页爬取和网页抓取框架,用于爬取网站并从页面中提取结构化的数据。 1. scrapy的概念和流程 1.1 scrapy的概念 我们先来了解一下scrapy的概念,什么是scrapy: Scrapy是一个Python编写的开源网络爬虫框架…

WebSocket前后端建立以及使用

1、什么是WebSocket WebSocket 是一种在 Web 应用程序中实现双向通信的协议。它提供了一种持久化的连接,允许服务器主动向客户端推送数据,同时也允许客户端向服务器发送数据,实现了实时的双向通信。 这部分直接说你可能听不懂;我…