美文网首页
预处理宏( Preprocessor Macros)

预处理宏( Preprocessor Macros)

作者: 吃柠檬的鸮 | 来源:发表于2019-06-05 22:48 被阅读0次

    C中的预处理宏
    宏定义就属于预处理命令的一种。
    宏:C 语言标准允许在程序中用一个标识符来表示一个字符串。标识符就是宏名。
    宏替换:宏替换就是宏定义。在编译预处理中,将程序中所有的宏名用相应的字符串来替换,这个过程称为宏替换。

    使用宏时要谨慎,尽量以内联函数、枚举和常量代替之。
    宏意味着你和编译器看到的代码是不同的, 因此可能导致异常行为, 尤其是当宏存在于全局作用域中。
    值得庆幸的是,C++ 中, 宏不像 C 中那么必要。
    宏内联效率关键代码 ( performance-criticalcode ) 可以用内联函数替代;
    宏存储常量可以 const 变量替代;
    宏 “ 缩写 ” 长变量名可以引用替代;
    使用宏进行条件编译,这个……,最好不要这么做,会令测试更加痛苦( #define 防止头文件重包含当然是个例外)。

    宏可以做一些其他技术无法实现的事情,在一些代码库(尤其是底层库中)可以看到宏的某些特性(如字符串化( stringifying,使用 # ) 、 连接( concatenation,使用 ## ) 等等)。但在使用前,仔细考虑一下能不能不使用宏实现同样效果。

    下面给出的用法模式可以避免一些使用宏的问题,供使用宏时参考:

    1. 不要在 .h 文件中定义宏;
    2. 使用前正确 #define,使用后正确 #undef
    3. 不要只是对已经存在的宏使用 #undef,选择一个不会冲突的名称;
    4. 不使用会导致不稳定的 C++ 构造 的宏,至少文档说明其行为。

    相关文章

      网友评论

          本文标题:预处理宏( Preprocessor Macros)

          本文链接:https://www.haomeiwen.com/subject/hcsexctx.html