2013-06-19 23 views
2

我不知道這是可能的,甚至也不是,如果它是正確的,但我已經在.c文件中定義的宏和現在我要揭露,宏觀,所以我需要把它放在.h文件。但我不希望暴露它是如何實現的,只是使用的簽名。如何實現一個宏.C,但其暴露在用於.h文件

//.c 
#define sayhi() printf("hi"); 

//.h 
sayhi() 

//another.c 
int main(...) { 
    sayhi(); 
} 
+0

任何不把'#define'放在頭部的原因? – Kevin

+0

@Kevin不,我只是忘了:P – Fabricio

回答

5

宏沒有簽名功能的方式,它們只存在於預處理階段的持續時間。你要麼必須使它成爲一個函數,要麼使實現成爲一個函數。

7

不要讓宏然後。只需將它作爲函數調用即可。

您的.h文件中:

extern void DoSomething(int x, int y, int z); 

你的.c文件:

void DoSomething(int x, int y, int z) 
{ 
    // your code goes here. 
} 
1

預處理沒有像C源代碼聯動語義什麼,所以什麼宏展開將取決於預處理器所看到的最後一個定義。出於這個原因,你真的需要將宏的定義保存在頭文件中。

兩種方法浮現在腦海中:

  1. 代表儘可能多的儘可能宏的功能函數,並宣佈在頭宏和函數原型。您可以將該函數的實現放在源文件中。

  2. 把宏的定義在一個私人的頭。

與說明性註釋你的公共報頭包含這一點。

// hi.h  

#define sayhi()  

// hi_internal redefines the above macros. 
// It must be included after the above definitions. 
#include "hi_internal.h" 
相關問題