条件编译:如果宏至少存在一次,则编译一次

时间:2012-06-25 09:51:36

标签: c macros c-preprocessor conditional-compilation

我正在编写一个 C 程序,并希望编写一个函数,这样,如果某个宏至少使用一次,则该函数将在目标文件恰好一次

我正在考虑以下几点:

#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

但不起作用,因为在宏扩展代码中不允许使用#define#include。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

让链接器完成其意图的工作。

将函数放入自己的源文件中,然后将其构建到库中,比如说liboptional.a

在创建可执行文件时,请使用该库,例如:

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

当链接器看到-l optional时,它将使用该库中的对象来满足未定义的引用。因此,如果您使用file1.ofile2.o中的功能,则会将其包含在内。