C语言宏定义

C语言宏定义教程

C 语言 源程序中允许用一个标识符来表示一个 字符串,称为 “宏”。被定义为宏的标识符称为 “宏名”。在编译预处理时,对程序中所有出现的宏名,都用宏定义中的字符串去代换,这称为宏替换或宏展开。

宏定义是由源程序中的宏定义命令完成的。宏替换是由预处理程序自动完成的。在 C 语言中,宏定义分为有参数和无参数两种。

C语言无参数宏定义

语法

#define identify expression

参数

参数 描述
#define 定义宏使用的关键字。
identify 宏的标识符,也就是宏名。
expression 该宏所代表的表达式或者常量值。

举例

#define PI 3.14

说明

我们定义了一个宏 PI,其代表的常量值为 3.14,以后,我们需要使用 3.14 的地方,可以直接使用 PI 来代替。

宏定义说明

  • 宏定义用宏名来表示一个字符串,在宏展开时又以该字符串取代宏名。这只是一种简单的文本替换,预处理程序对它不作任何检查。如有错误,只能在编译已被宏展开后的源程序时发现。
  • 宏名一般用大写字母表示,以便于与 变量 区别。
  • 宏定义末尾不必加分号,否则连分号一并替换。
  • 宏定义可以嵌套。
  • 可用 #undef 命令终止宏定义的作用域。
  • 使用宏可提高程序通用性和易读性,减少不一致性,减少输入错误和便于修改。如 数组 大小常用宏定义。
  • 预处理是在编译之前的处理,而编译工作的任务之一就是语法检查,预处理不做语法检查。
  • 宏定义写在 函数 的花括号外边,作用域为其后的程序,通常在文件的最开头。
  • 字符串" "中永远不包含宏,否则该宏名当字符串处理。
  • 宏定义不分配内存,变量定义分配内存。

案例

C语言宏定义

定义宏常量

#include <stdio.h> #define PI 3.14 #define N 20 int main() { printf("嗨客网(www.haicoder.net)\n\n"); int r = 10; float area = 0; area = PI * r * r; int arr[N]; printf("Area = %f, Arr Size = %d\n", area, sizeof(arr)); return 0; }

程序运行后,控制台输出如下图所示:

03_c语言宏定义.png

我们首先定义了一个宏 PI,代表常量值 3.14,接着,我们再次定义了一个常量 N,代表常量 20,接着,我们分别使用了 PI 宏来计算圆的面积。

使用宏 N 来定义了一个 数组,其中 N 代表了数组的长度。

C语言宏定义

定义宏常量

#include <stdio.h> #define INT_PTR int* int main() { printf("嗨客网(www.haicoder.net)\n\n"); int a = 1024; INT_PTR ptr = &a; printf("a = %d, ptr = %p, *ptr = %d\n", a, ptr, *ptr); return 0; }

程序运行后,控制台输出如下图所示:

04_c语言宏定义.png

我们定义了一个宏 INT_PTR,该宏代表的是 int 的指针类型,接着,我们使用了该宏定义了一个 int 类型指针 变量并保存了 int 类型变量 a 的地址。

C语言宏定义教程总结

C 语言源程序中允许用一个标识符来表示一个字符串,称为 “宏”。被定义为宏的标识符称为 “宏名”。在编译预处理时,对程序中所有出现的宏名,都用宏定义中的字符串去代换,这称为宏替换或宏展开。