【问题标题】:force another file to define a function强制另一个文件定义一个函数
【发布时间】:2023-03-08 18:09:01
【问题描述】:

假设我有 3 个单独的文件:ma​​in.ctest.ctest.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
    ...        
}

ma​​in.c

#include "test.h"

int main(void)
{
    ...
}
inline void test_func(BYTE b)
{
    // Do something with b
}

简而言之:test.h 声明了一个函数,ma​​in.c 定义了该函数,test.c 调用了该函数。 p>

这可能吗?怎么样?

编辑:

用户在 ma​​in.c 中声明函数时编译器给出错误或该函数未声明的内容。

【问题讨论】:

  • "我如何“强制”包含 test.h 的函数"...函数不包含标题;翻译单位做的。正如您现在所拥有的那样,它将正确链接,因为test_func 在单个翻译单元(main.c)中是inlined,但从另一个翻译单元(test.c)引用。您真正想解决什么问题?
  • @WhozCraig 我正在为用户将能够使用的微控制器编写一个软件。但我需要他们手动定义该特定功能,因为这取决于他们如何处理他们想要的值。
  • 函数指针、引用默认实现或可检测为 NULL(无操作)并在加载时重置为用户提供的替代方案是否能实现您的目标?
  • @WhozCraig 但这不需要 test.h 中的全局变量吗?
  • @WhozCraig 你能发布一个你的意思的答案吗?我无法理解。

标签: c


【解决方案1】:

简而言之,应该可以做到这一点。 为什么 ?实现函数的文件不必在同名的头文件中。 链接器将解决任何问题(如果有)并在缺少某些东西时抱怨。 如果编译器报错,那么就是缺少头文件或者你的头文件函数定义与你在c文件中的不匹配。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-29
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-11
    相关资源
    最近更新 更多