2014-05-20 68 views
0

在功能性實體模型接口頭文件爲什麼需要嵌套宏?

#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) 

+0

試試看。 –

回答

0

它與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));