2017-03-17 35 views
0

我對於用C語言進行編程相當新穎。我的問題是我有兩個函數實現,我希望能夠輕鬆地在它們之間切換。在C預編譯器中的實現之間切換

現在我將函數的兩個實現分別定義爲function_implementation1和function_implementation1分別在文件「funtion_implementation1.h」和「funtion_implementation2.h」中。要在它們之間切換,我有以下文件:

#define IMPLEMENTATION1 

#ifdef IMPLEMENTATION_1 
    #include "funtion_implementation1.h" 
    #define myFunction function_implementation1 
#endif 

#ifdef IMPLEMENTATION_2 
    #include "funtion_implementation2.h" 
    #define myFunction function_implementation2 
#endif 

爲了從一個實現切換到另一個,我只需要更改第一行。這種方法很有效,並且我對它有一段時間感到滿意,但是現在它讓我煩惱不得不經常打開這個文件。我有一個parameters.h文件,我定義了所有的參數,我寧願選擇在該文件中使用哪個實現。可悲的是,將第一行移到該文件不起作用。如果我這樣做myFunction沒有定義。

這樣做的最好方法是什麼?

+0

我不太明白這個問題。只需在兩個實現中爲該函數使用相同的名稱,而不是通過'#define'將其別名爲通用名稱,並且應該在那裏。 – doynax

+0

爲什麼不讓一個默認值,例如'#ifndef IMPLEMENTATION2'然後使用默認的include和define。如果使用'gcc ... -DIMPLEMENTATION2 ...'進行編譯,則會得到第二個版本。 –

回答

1

你應該包括你的參數文件在您使用別名,宏等:

#ifndef __FILE_H__ 
    #define __FILE_H__ 

// definitions go there 

#endif 

這可防止嵌套包含頭文件:

#include "Parameters.h" 

還,所有的頭文件應該以啓動

+0

非常感謝,其中包括「Parameters.h」。我愚蠢的是不去想那件事。我已經有了守衛。 –

1

使用preprocessor options,特別是-D選項。如果您想使用IMPLEMENTATION1,那麼在命令行(或IDE中)編譯該文件時,請添加-D IMPLEMENTATION1。這定義了這個宏。同樣適用於任何宏

+0

感謝您的建議,但我不認爲這很方便。我使用Microsoft Visual Studio和changin編譯選項是很多工作:) –