2017-03-17 9 views
0

私はCでプログラミングするのがかなり新しいです。私の問題は、2つの関数の実装があり、それらの間を簡単に切り替えることができることです。Cプリコンパイラでの実装の切り替え

ここでは、関数 "funtion_implementation1.h"と関数 "funtion_implementation2.h"のfunction_implementation1とfunction_implementation1の2つの実装をそれぞれ定義します。私は最初の行を変更する必要があり、他の1つの実装から切り替えるために

#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 ... 'でコンパイルすると、2番目のバージョンが得られます。 –

答えて

1

あなたは別名、マクロなど使用場所、あなたのパラメータファイルを含める必要があります。これはネスト防止

#ifndef __FILE_H__ 
    #define __FILE_H__ 

// definitions go there 

#endif 

は、ヘッダファイルのinclude:

#include "Parameters.h" 

、すべてのヘッダファイルがで開始する必要がありますが

+0

ありがとう、 "Parameters.h"を含むトリックでした。私の愚かなことは考えないでください。私はすでに警備員を持っていた。 –

1

preprocessor options、特に-Dオプションを使用してください。 IMPLEMENTATION1を使用する場合は、コマンドライン(またはIDE)でそのファイルをコンパイルするときに、-D IMPLEMENTATION1を追加します。これはそのマクロを定義します。どのマクロでも同じです

+0

あなたの提案に感謝しますが、私はそれも非常に便利だとは思わない。私はMicrosoft Visual Studioを使用して、コンパイルオプションを変更する作業がたくさんあります:) –

関連する問題