C语言重点解剖预处理要点速记

news2024/11/13 12:32:48

1.宏定义字符串的时候一定要带上双引号。

2.程序的翻译,就是把文本代码翻译成二进制代码。分为4个阶段,即预处理,编译,汇编,链接。

3.预处理:头文件展开,去注释,宏替换,条件编译。

4.编译:将C语言翻译成汇编语言。

5.汇编:将汇编语言转化成为可重定向二进制目标文件。(非可执行)(可被链接)

6.链接:自身程序+库文件进行关联(动态链接,静态链接),形成可执行程序

7.预处理阶段,先去注释,再宏替换。所以宏替换不能用于去注释。

#define bsc //就变成了一个空的宏。(//在这里面本来就是注释,只是注释后面的内容为空)

8.宏定义并不是简单的无脑替换。

printf(" ")中,双引号里面的东西不能被宏替换。

9.#define INIT_VAL(a,b) a=0;b=0;

这样就用宏实现了赋值。需要注意的是,这个宏替换的是两条语句,如果在if语句中使用这个宏替换,记得加上大括号({})。但是不推荐这样使用。建议使用如下方式。

#define INIT_VAL(a,b) do{a=0;b=0;}while(0);

10.调用上述宏的时候。INIT_VAL ?(a,b)

?处可以带括号。但是不推荐。

11.在文件内,不管宏在哪里定义,都可以被使用。与是否在{}中无关。但是不能在宏定义的上方使用该宏。按照从上往下的顺序,宏定义的地方往后,就是宏的范围。

12.尽量使用函数,不要使用宏定义,不大好调试。

13.

2eb68273d1c1491c89a3211943bc3568.jpg

 14.

0ae01ed5ca724e84ae449c83f1a7153a.jpg

 15.

3f556fb28892446fb9f9c79ce39b55b9.png

16797328bb8fee454988688f3c8396541d.jpg

17.条件编译,本质上就是代码的裁剪。

#ifdef

#else

#endif

需要注意的是,只要定义了宏就能使用,不在乎宏是真(非0)是假(0)。

18.#define c 0

#if c

#else

#endif

用这种方法条件编译,不仅要看宏是否定义,还要看为真还是为假。如果只是定义宏,不定义是真还是为假,那么会报错。

19.宏的定义,编译器也可以直接帮我们自动定义,未必要在代码里面的。

20.b7c634dbd7294cbd8fd8fd8c0c15d8c5.jpg

21.

64e1643593ad4c23964a7711b05da6c7.jpg

22.条件编译可以多条件使用。

468a8cb678654a1b9ef316604e40885e.png

23.条件编译可以嵌套。

30d81365a54e46e2852eb2055d4cf569.jpg

24.防止头文件重复包含的两种办法。

#pragma once

028c9c5b7d234c008ab693f3ded60eb4.png

25.#error,让编译器打印一行内容。

053b236895854acf8c1e048208cd8e06.jpg

26.__FILE__,__LINE__,当前所在的文件和行号。

ecf112de878b483b9f3c3151e06f0a44.jpg

27.#line,改变所在的行号和文件。

082fa14525c3493a9dad1acdd285f2c8.jpg

28.#pragma

a7d2521d0d8a418f9037f0a67a7988e7.jpg

060d27ae16e74cb8a5f96bf9828ce12b.jpg 

29.相邻字符串()具有自动连接特性。

249786b3603a476b951e2ccaf9b24677.jpg

30.

5fa2c37556bc44948c1e6075aa7e5367.png

31.

abea13e004ca4f098836e058a2ba3465.jpg

652358735cff42088f06bc80cb770e58.png 

32.##的作用。

feadd43b6b3a4115a8353f3341d526c0.jpg

 b85b18fe17d040b38504c39f3bcc229a.jpg

 

 

 

 

 

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

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

相关文章

基于Spring cloud + vue 的前后端分离的社团管理系统,数据库采用MYSQL,前端使用 VUE + element

背景 因学校没有成熟的社团管理系统,一为满足学校需求, 其次开源的社团管理项目,多为mvc ssm框架 很少有前后端分离的微服务框架,为了科技的发展, 更好学习解决高并发问题,也为了更好地掌握锤炼新技术&…

Web前端:广州蓝景实训

0基础也能学,5个月的课程时间,从小白到就业课程内容紧贴市场就业要求。广州蓝景前端实训课程,6年时间培养出过千名工程师,成功就业。今天就跟大家分享,蓝景学员的学习体验流程: 一、前端技术学习 1、授课…

3.Kafka

1.定义 1.1传统定义 Kafka是一个分布式的基于发布订阅模式的消息队列,主要应用于大数据的实时处理领域发布订阅:消息发布者不会直接将消息发送给订阅者,而是将发布的消息分为不同的类别,订阅者只接收感兴趣的消息 1.2最新定义 …

计算机网络期末重点考点总复习

第三章数据链路层 CRC检验问题 知识点 例题 要发送的数据为1101011011。采用CRC的生成多项式是 P(X)X^4 X 1试求应添加在数据后面的余数。数据在传输过程中最后一个1变成了0,问接收端能否发现? 若数据在传输过程中最后两个1都变成了0,问接…

MacOS系统安装Qt教程

我以为搜索QT下载,安装好QT Creator就能开开心心HelloWorld,然而还是太年轻了,一个 No suitable kit found 报错告诉我,可能没那么简单。于是,我去查了查,大概原因就是苹果处理器和x86不太一样,…

借助这几个工具,轻松实现在手机压缩视频

我有一个习惯,就是会将生活中发生的趣事,或是沿途好看的风景,用手机录制下来,这样的话,后续再回看这些视频的时候,就能勾起相对应的美好回忆。 但是久而久之,这些视频积累太多的话,就…

Springboot 2.7.5 HikariCP 连接池多数据源配置

一. 引言 当前项目遇到需要连接多个数据库的场景,此时需要引入多数据源了. 还有一些诸如以下的场景: 与第三方对接时,有些合作方并不会为了你的某些需求而给你开发一个功能,他们可以提供给你一个可以访问数据源的只读账号,你需要…

Web漏洞扫描篇-Nessus使用

软件介绍 Nessus是一种漏洞扫描器,个人和组织广泛使用它来识别和修复计算机系统中的漏洞。Nessus可以扫描广泛的漏洞,包括缺少补丁、弱密码和配置错误的系统,它可以扫描单个系统或整个网络上的漏洞。Nessus可以在各种平台上运行,…

【云原生进阶之容器】第一章Docker核心技术1.10节——Docker网络模型设计

1 容器网络背景概述 1.1 Linux的namespace+cgroup 先来简要回顾一下前面的内容,namespace和cgroup是Linux 内核的两大特性,namespace的诞生据说就是为了支持容器技术,那么这俩特性到底干了啥呢? - namespace:linux支持多种类型的namespace,包括Network,IPC,PID, Mount…

基于HOG、LBP完成特征工程,基于SVM/RF/XGBOOST/GBDT/CNN/DNN完成人脸识别+表情识别

在我之前的文章中写过很多关于人脸识别和表情识别的文章,今天有一个项目的需求就是需要做两种或者是多种任务,我在开发完对应的模型之后就突然想到了之前做过的人脸识别和表情识别的项目,就想着是否可以基于机器学习/深度学习等方式来同时实现…

算法训练第五十七天 | LeetCode 647、516动态规划结尾

LeetCode 647回文子串 题目简析: 给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。 思路分析: 本题的难点 主要…

【Aptos与Sui智能合约】(Move长话短说) #03 - 智能合约编写与发布

前言:本篇学习如何在Aptos上发布两个自定义的智能合约 0x1 前置条件 安装好Aptos工具,MacOS、Ubuntu、Windows系统的预编译的安装包下载地址 https://github.com/aptos-labs/aptos-core/releases?q=cli&expanded=true 想自己从源码开始编译,你就下载Source Code 安装…

千万不要把Request传递到异步线程里面,有坑

前几天在网上冲浪的时候看到一篇技术文章,讲的是他把一个 request 请求传递到了线程池里面,然后遇到了一个匪夷所思的情况。 他写了这篇文章,把自己针对这个问题的探索过程分享了出来: 《springboot 中如何正确的在异步线程中使用…

艾美捷脂质过氧化检测试剂盒参数说明和文献参考

脂质过氧化的定量对于评估氧化损伤在病理生理学疾病中的作用至关重要。脂质过氧化导致饱和和不饱和脂质的高反应性和不稳定的氢过氧化物的形成。 艾美捷脂质过氧化检测试剂盒直接利用与亚铁离子的氧化还原反应测量过氧化氢,将脂质过氧化氢提取到氯仿中,提…

【python绘制地图——folium的方法和类的介绍(思维导图)】

Python使用folium制作地图并生成png图片 第一章 folium的方法和类的介绍(思维导图) 第二章 使用folium制作地图 第三章 folium实用功能进阶 第三章 使用Html2Image生成png图片 第四章 使用reportlab制作pdf报告 文章目录Python使用folium制作地图并生成…

轮廓图编程-自定义QChartView

目录 一、功能需求 二、实现效果 三、实现方法 一、功能需求 3D测量软件中,需要在轮廓上进行二次编程,需要显示轮廓线,然后可以调节矩形框的范围的获取参数,如华汉的HyperShape3D软件,对轮廓的编程界面如下。 二、实…

【Java基础知识复盘】String、StringBuffer、StringBuilder篇——持续更新中

本人知识复盘系列的博客并非全部原创,大部分摘自网络,只是为了记录在自己的博客方便查阅,往后也会陆续在本篇博客更新本人查阅到的新的知识点,望悉知! String类 在 Java 中字符串属于对象,Java 提供了 Str…

《融合视觉显著性和局部熵的红外弱小目标检测》论文复现

1.复现论文概要 复现的论文为《融合视觉显著性和局部熵的红外弱小目标检测》(赵鹏鹏,李庶中等,中国光学2022,http://www.chineseoptics.net.cn/cn/article/doi/10.37188/CO.2021-0170,以下简称论文)。论文…

【库存控制】基于象鼻虫损害优化算法求解库存控制问题(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

交换机的结构特点及主要功能

什么是交换机? Switch 意为“交换机”,是一种用于转发电 ( 光 ) 信号的网络设备。它可以为访问交换机的任意两个网络节点提供专用的电信号路径。非常常见的 是以太网交换机。其他常见的有电话语音交换机、光纤交换机等。 它的工作原理是什么&#xff1f…