分享

函数宏:短小精干长得丑

 云深无际 2025-01-05 发布于内蒙古
在一些文件里面可以看到大量的这种东西。

函数式宏是一种由预处理器处理的代码片段,用于替换代码。
#define MESSAGE "This is a long message " \                "spanning multiple lines."
如果代码行太长,可以使用反斜杠 \ 将其连接到下一行。

这是一些标准的定义宏,源码里面没有,但是编译器会认

宏的定义使用 #define 关键字,可以带参数,看起来像一个函数调用。
而函数是由编译器处理的代码块,具有明确的返回类型和参数类型
函数在运行时通过调用机制执行。

就是少一些开销

少了检查

有多次的计算

难以调试

简单和性能攸关,可以使用函数宏

简单的代码片段(如数学公式)且性能要求高时,可以使用函数式宏。

上面的功能是预处理器带来的。

C语言预处理器是编译器的一部分,在编译前处理源代码。预处理器的任务是根据源代码中的 预处理指令(以#开头)对代码进行转换和扩展,生成一个没有预处理指令的新代码文件,供后续编译器处理。

预处理器允许定义符号常量和代码片段(宏),并在代码中用实际内容替换这些符号。

#undef PI

取消定义

工作流程是:

  1. 处理宏定义和替换:将所有定义的宏用实际内容替换。
  2. 处理文件包含:将头文件内容插入到代码中。
  3. 处理条件编译:根据条件保留或删除特定代码段。
  4. 其他操作:处理符号拼接、字符串化等操作。
经过预处理后,生成一个没有预处理指令的源代码文件,供编译器编译。
使用 gcc 时可以通过 -E 选项查看预处理后的代码:
gcc -E source.c -o preprocessed.c

C语言预处理器的核心任务是在编译前对代码进行转换和扩展。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多