0

私はCプログラムを書いていますが、特定のマクロが少なくとも 1 回使用された場合、その関数がオブジェクト ファイルに 1 回だけコンパイルされるように関数を書きたいと考えています。

私はこれらの行で何かを考えていました:

#define CERTAIN_MACRO \
    ...some code here... \
    #include "myfunction.h"

(複数のインクルードを防ぐために適切なインクルード ガードを使用して、myfunction.h に関数コードを追加する)、または

#define CERTAIN_MACRO \
    ...some code here... \
    #define USE_MY_FUNCTION

#ifdef USE_MY_FUNCTION
    my function code
#endif

しかし、マクロ展開コードでは and が許可されていない#defineため、どちらも機能しません。#include助言がありますか?

4

1 に答える 1

0

リンカに本来の仕事をさせてください。

関数を独自のソース ファイルに配置し、それをライブラリにビルドしますliboptional.a

実行可能ファイルを作成するときは、そのライブラリを使用します。次に例を示します。

gcc -o execfile file1.o file2.o -loptional

リンカが を認識した時点で、-l optionalそのライブラリ内のオブジェクトを使用して、未定義の参照を満たします。したがって、file1.oまたはfile2.oで関数を使用している場合は、含まれます。

于 2015-08-03T02:16:18.760 に答える