【发布时间】:2013-08-28 18:25:59
【问题描述】:
我正在制作一个小型库,我想为用户提供禁用他们不需要的部分的选项。
lib.h
#ifndef ONLY_BASICS
void complexFunction(void);
#endif
lib.c
#ifndef ONLY_BASICS
void complexFunction(void) {
printf("damn, this is complex alright!\n");
}
#endif
main.c
#define ONLY_BASICS
#include "lib.h"
我在其他库中看到过这样做,我缺少什么?
【问题讨论】:
-
“我错过了什么?”与您遇到的问题相关的问题?
-
是的,即使设置了 ONLY_BASICS,我仍然可以调用该函数。
-
问题是
ONLY_BASICS只定义在main.c中。因此,lib.c将定义complexFunction。我认为您无法使用define机制实现您所尝试的目标,并且仍然保持lib.h通用。但是,当您编译时,它至少应该警告您正在尝试在没有函数原型的情况下调用complexFunction。您还见过哪些其他库使用了这种技术? -
好的,现在我明白了这个问题。但是有解决办法吗?
-
你能把
#define ONLY_BASICS放在lib.h中吗?只要代码的其他部分不需要lib.c中的复杂项目,它就可以工作。如果lib.c正在为一些需要complexFunction的模块提供服务,而另一些则不需要,那么您尝试做的事情作为编译时选项是无法实现的。complexFunction要么存在于你的构建中,要么不存在,它不能同时存在。
标签: c header c-preprocessor