【发布时间】:2023-03-08 18:09:01
【问题描述】:
假设我有 3 个单独的文件:main.c、test.c 和 test.h。我如何“强制”包含 test.h 的函数来定义一个已在 test.h 中声明的函数,即 test.c 文件可以调用它。
这有点乱,所以让我给你一些代码示例来说明我的意思。
test.h:
...
#define SOMETHING
...
#ifdef SOMETHING
inline void test_func(BYTE b);
#endif
...
test.c:
#include "test.h"
void somefunction(void)
{
...
#ifdef SOMETHING
test_func(integer_value);
#endif
...
}
main.c:
#include "test.h"
int main(void)
{
...
}
inline void test_func(BYTE b)
{
// Do something with b
}
简而言之:test.h 声明了一个函数,main.c 定义了该函数,test.c 调用了该函数。 p>
这可能吗?怎么样?
编辑:
用户在 main.c 中声明函数时编译器给出错误或该函数未声明的内容。
【问题讨论】:
-
"我如何“强制”包含 test.h 的函数"...函数不包含标题;翻译单位做的。正如您现在所拥有的那样,它将不正确链接,因为
test_func在单个翻译单元(main.c)中是inlined,但从另一个翻译单元(test.c)引用。您真正想解决什么问题? -
@WhozCraig 我正在为用户将能够使用的微控制器编写一个软件。但我需要他们手动定义该特定功能,因为这取决于他们如何处理他们想要的值。
-
函数指针、引用默认实现或可检测为 NULL(无操作)并在加载时重置为用户提供的替代方案是否能实现您的目标?
-
@WhozCraig 但这不需要 test.h 中的全局变量吗?
-
@WhozCraig 你能发布一个你的意思的答案吗?我无法理解。
标签: c