Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 强制另一个文件定义函数_C - Fatal编程技术网

C 强制另一个文件定义函数

C 强制另一个文件定义函数,c,C,假设我有三个独立的文件,分别称为:main.c、test.c和test.h。我如何“强制”包含test.h的函数定义一个已在test.h中声明的函数,而test.c文件可以调用该函数 这有点混乱,所以让我给你一些我的意思的代码示例 测试.h: ... #define SOMETHING ... #ifdef SOMETHING inline void test_func(BYTE b); #endif ... #include "test.h" void somefunction(void)

假设我有三个独立的文件,分别称为:main.ctest.ctest.h。我如何“强制”包含test.h的函数定义一个已在test.h中声明的函数,而test.c文件可以调用该函数

这有点混乱,所以让我给你一些我的意思的代码示例

测试.h

...
#define SOMETHING
...
#ifdef SOMETHING
inline void test_func(BYTE b);
#endif
...
#include "test.h"

void somefunction(void) 
{
    ...
    #ifdef SOMETHING
    test_func(integer_value);
    #endif
    ...        
}
#include "test.h"

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

...
#define SOMETHING
...
#ifdef SOMETHING
inline void test_func(BYTE b);
#endif
...
#include "test.h"

void somefunction(void) 
{
    ...
    #ifdef SOMETHING
    test_func(integer_value);
    #endif
    ...        
}
#include "test.h"

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

...
#define SOMETHING
...
#ifdef SOMETHING
inline void test_func(BYTE b);
#endif
...
#include "test.h"

void somefunction(void) 
{
    ...
    #ifdef SOMETHING
    test_func(integer_value);
    #endif
    ...        
}
#include "test.h"

int main(void)
{
    ...
}
inline void test_func(BYTE b)
{
    // Do something with b
}
简而言之:test.h声明了一个函数,main.c定义了该函数,并test.c调用了该函数

这可能吗?怎么做

编辑:


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

简而言之,应该可以这样做。 为什么?实现函数的文件不必位于具有相同名称的头文件中。 链接器将解决任何问题(如果有),并在缺少某些内容时进行投诉。
如果编译器投诉,则说明缺少头文件或头文件函数定义与c文件中的不匹配。

“我如何“强制”包含test.h的函数”。。。函数不包括标题;翻译单位有。现在,它将无法正确链接,因为
test_func
在单个翻译单元(main.c)中是
inline
d,但从另一个翻译单元(test.c)引用。你到底想解决什么问题?@WhozCraig我正在为微控制器编写一个用户可以使用的软件。但是我需要他们手动定义那个特定的函数,因为这取决于他们对那个值的处理。函数指针会引用默认实现还是可以检测为NULL(无操作)并重置为用户提供的备用加载实现您的目标?@WhozCraig但这不需要在test.h中使用全局变量吗?@WhozCraig您可以发布一个anwser,其中包含您的确切意思吗?我很难理解。