【问题标题】:Why are nested macros needed? [duplicate]为什么需要嵌套宏? [复制]
【发布时间】:2014-05-20 17:57:43
【问题描述】:

在功能模型接口头文件中的如下一段代码

#define fmiPaste(a,b)     a ## b
#define fmiPasteB(a,b)    fmiPaste(a,b)
#define fmiFullName(name) fmiPasteB(MODEL_IDENTIFIER, name)

为什么首先使用嵌套宏?为什么不只是

#define fmiPasteB(a,b)    a ## b
#define fmiFullName(name) fmiPasteB(MODEL_IDENTIFIER, name)

?

【问题讨论】:

    标签: c


    【解决方案1】:

    这与C 如何扩展宏有关。

    如果您没有嵌套宏,则传递给fmiFullName 的文字符号将被字符串化并用于连接,而不是符号的扩展。

    考虑下面的示例程序:

    #include <stdio.h>
    
    #define MODEL_IDENTIFIER Prefix
    
    #define fmiPaste(a,b)     a ## b
    #define fmiPasteB(a,b)    fmiPaste(a,b)
    #define fmiFullName(name) fmiPasteB(MODEL_IDENTIFIER, name)
    
    
    int main(){
        int Prefix1 = 2;
        int Prefix2 = 3;
        printf("%d\n", fmiFullName(1));
        printf("%d\n", fmiFullName(2));
    
    
    #undef fmiPasteB
    #undef fmiFullName
    
    
    #define fmiPasteB(a,b)    a ## b
    #define fmiFullName(name) fmiPasteB(MODEL_IDENTIFIER, name)
    
        int MODEL_IDENTIFIER1 = 100;
        int MODEL_IDENTIFIER2 = 1000;
        printf("%d\n", fmiFullName(1));
        printf("%d\n", fmiFullName(2));
    }
    

    输出:

    int MODEL_IDENTIFIER1 = 100;
    int MODEL_IDENTIFIER2 = 1000;
    printf("%d\n", fmiFullName(1));
    printf("%d\n", fmiFullName(2));
    

    【讨论】:

      猜你喜欢
      • 2017-12-15
      • 1970-01-01
      • 2010-11-08
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      • 1970-01-01
      • 2014-11-13
      • 1970-01-01
      相关资源
      最近更新 更多