当前位置:首页>正文

c 宏定义 “C语言的宏定义”是什么

2023-04-10 20:01:00 互联网 未知

“C语言的宏定义”是什么?

宏定义又称为宏代换、宏替换,简称“宏”。
是C提供的三种预处理功能的其中一种。
1、宏名一般用大写。

2、使用宏可提高程序的通用性和易读性,减少不一致性,减少输入错误和便于修改。例如:数组大小常用宏定义。

3、预处理是在编译之前的处理,而编译工作的任务之一就是语法检查,预处理不做语法检查。

4、宏定义末尾不加分号。

5、宏定义写在函数的花括号外边,作用域为其后的程序,通常在文件的最开头。

6、可以用#undef命令终止宏定义的作用域。

7、宏定义可以嵌套。

8、字符串" "中永远不包含宏。

9、宏定义不分配内存,变量定义分配内存。

C语言 宏定义

PR1(ADD(5)*i)

括号中的ADD(5)*i展开后就是:

3.54 5*i

由于 i=4,所以整个 PR1(ADD(5)*i) 就相当于: PR1(23.54)

继续展开PR1()就成了:

PR(23.54)putchar( )

PR(23.54)展开后就成了:

print("%d",(int)23.54))

于是最终的宏展开形式就是:

print("%d",(int)23.54))putchar( )

前面的printf()函数会输出23,后面的putchar()会输出回车换行符。

特别需要注意的一点就是ADD宏的展开形式了,宏展开不会进行任何的数值计算,它只是对程序文件的机械替换。

C语言宏定义算法

宏只是在编译的时候进行替换,而不会对定义的内容进行计算,只是单纯的替换, 首先N 定义为2,M 定义为N 1, 在编译的时候,C系统就会把这里的N变为2,
下面的NUM定义为了2*M 1,在编译的时候,就直接把M变为N 1,放进去, 系统只是做了替换,
如果你用 #define N #deine M (N 1)
#deine MUN 2*M 1 则可以得到MUN为2*(N 1) 1,要记住,宏只是替换,

C语言中带参数的宏定义问题

上面是 宏 定义。
第一行 DEFINE...SUITE 是宏函数名,小括号里是 三个 形式参数。 定义为 下面第二行开始 含 续行号的 所有的行。 程序中出现 DEFINE...SUITE 宏函数时,均用 它的 定义句 做字符替代。
定义句替代宏函数时,凡是有 三个形式参数 的地方,用 实际参数 做字符替代。
## 是 连接符,用于一个Token 与另 一个Token 的 连接,(Token 也可以是另外的宏,也可以不是)。
例子: 若形参_sym的实际参数 是 XYZ, 那么 _test_str_##_sym[] 变成 _test_str_XYZ[]。 这个 _test_str_XYZ 是 static const char型 数组的名字。
后面还有个 .name = _test_str_XYZ, 也是token的连接。