宏定义:在代码中使用#define指令定义宏,为常量、函数等起一个易记的名字。 宏调用:在代码中使用定义好的宏,传入参数(如果有的话)。 预处理阶段:在编译之前的预处理阶段,预处理器会扫描代码中的宏调用,并将其替换为宏定义的内容。 宏展开:预处理器将宏调用展开为其定义的内容,包括参数的替换。 编译阶段:展开...
1、宏定义 宏(Macro),是一种批量处理的称谓。计算机科学里的宏是一种抽象(Abstraction),它根据一系列预定义的规则替换一定的文本模式。解释器或编译器在遇到宏时会自动进行这一模式替换。 2、C语言宏定义的常规用法 1) 定义符号常量 #definePI 3.1415926#defineMAX_N 10000 2) 定义傻瓜表达式(注意,定义的这种表达...
C语言的宏文本替换,是通过预处理指令define实现的,#define的使用场景主要有:1)直接使用标识符不定义具体常量的标识符用法 2)替换常量的对象式宏(Object-like macros)3)模拟函数功能的函数式宏(Function-like macros)4)替换文中支持可变的参数数量的可变参宏 5)#和##运算法的用法等。define 标识符 当用...
预处理指令不是语句,因此在预处理指令的末尾是无需加上分号的。如果加上分号,可能会获得超出预期的结果。虽然预处理阶段的宏定义没问题,但在编译阶段是会产生错误的。因为宏定义只是文本替换,所以预处理的时候,会将所有的 N 替换成 5;,放到源代码中 arr[5;] 这种写法不符合 C 语言语法,所以就会产生报错。
预处理之宏定义、条件编译与文件包含 预处理一般是指在程序源代码被转换为二进制代码之前,由预处理器对程序源代码文本进行处理,处理后的结果再由编译器进一步编译。 预处理功能主要包括宏定义、文件包含、条件编译三部分。 宏定义 简单的宏:#define 标识符 字符序列 #def
预处理器指令是一种特殊的指令,用于告诉编译器在编译程序之前进行某些操作,例如宏定义、条件编译等。预处理器指令一般使用#开头,并且必须出现在源码的最开始位置。下面是一些常用的预处理器指令:1. #define #define指令用于定义宏,例如:```C #define PI 3.1415926 ```在上述代码中,我们使用#define指令将PI...
当我们将5和int传入到Malloc是,那么n就是5,type就是int,也就是有一个参数是类型,宏是可以实现的,但函数可以实现,预处理之后替换的结果就是(int*)malloc(5 * sizeof(int))。 宏和函数的对比: 在这里插入图片描述 二、#和##运算符 2.1 #运算符 ...
下面聊一聊另一个用的比较多的预处理指令,宏定义指令。1. 什么是宏定义?宏定义又称为宏代换、宏替换,简称为宏。是 C 语言中最为常用的三种预处理指令之一。宏定义指令,是由 # 和关键字 define 组合而成的。宏定义其实就是简单的文本替换,使用宏定义可以提高程序的通用性、易读性,减少多次使用改文本造成容易...
在代码中使用 PI 时,预处理器会将 PI 替换为 3.14159265358979323846。预处理器宏也可以使用参数,例如,我们可以定义一个宏函数来计算一个数的平方:#define SQUARE(x) ((x) * (x))在代码中使用 SQUARE(x) 时,预处理器会将 SQUARE(x) 替换为 (x) * (x),然后进行计算。预处理器宏的高级用法 条件...
C语言预处理器主要分为6个方面,分别是条件编译指令、包含指令、宏替换指令、控制指令、文件名和行信息指令、诊断信息指令等。前两篇介绍了条件变编译指令和编译器控制指令#pragma的组合参数,今天将介绍诊断指令、文件名和行信息指令以及相关的预定义宏等。诊断指令:#error和#warning #error现代主流的编译器都已经...