【发布时间】:2012-06-26 13:42:13
【问题描述】:
我正在编写一个 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。有什么建议吗?
【问题讨论】:
-
我认为这不可能。建议:问问你真正想要解决的问题,可能还有其他方法可以实现。例如,如果真正的目标是该函数在未使用时不存在于二进制文件中,则标记函数
static可能会完成这项工作,因为如果未使用,编译器可以将其删除。但是再举一个例子,如果函数中有一个#error,当且仅当宏在文件的其他地方使用时,您要触发该函数,那么您就不走运了。 -
不要试图让编译器做链接器的工作。把你的函数放到一个单独的文件中,编译它,然后构建一个静态库。让链接器完成剩下的工作。
-
我想我会选择基于链接器的解决方案,谢谢
标签: c macros c-preprocessor conditional-compilation