原创博客,欢迎光临
嵌入式是本职,AI 是兴趣,其它是无奈

C 语言变量需要先定义后使用,那宏定义呢?

#重学 C 语言

问题

下述头文件中的代码,是否可编译通过:

#define PCBA_SELECT         PCBA_48PIN

#define PCBA_32PIN    1
#define PCBA_48PIN    2
#define PCBA_64PIN    3

我们都知道,C 语言变量需要先定义后使用,但是宏定义呢,是否也是必须要首先定义?

先说结论

上述代码没有问题,头文件中(或多个头文件之间)宏定义的相互引用不需要遵循先后顺序。
注意:这里说的是头文件中的宏定义间的相互引用,而不是头文件宏定义和 C 代码中的实际使用,在代码中实际使用时,宏定义是必须在使用前进行定义。

探究

在 C 语言中,宏是预处理指令,在预处理阶段,宏的替换文本在定义时并不会立即展开,而是等到宏在源文件中被实际使用时才进行展开。 简而言之:

  • 宏的替换在定义时不求值,只是保存文本;
  • 使用宏时会进行一次或多次的递归扫描,直到所有可展开的宏都被替换完;
  • 只要在源文件中使用点之前已经出现了所有涉及的宏定义(不论顺序),展开过程就能成功。
赞(0)
未经允许不得转载:程序员大狐狸 » C 语言变量需要先定义后使用,那宏定义呢?

评论 抢沙发

登录

找回密码

注册