我想从另一个C文件中调用静态函数。但它始终显示 "function" used but never defined
。
在ble.c
static void bt_le_start_notification(void)
{
WPRINT_BT_APP_INFO(("bt_le_start_notification\n"));
}
在ble.h
static void bt_le_start_notification(void);
当我尝试在 main.c 中致电bt_le_start_notification
时,会显示 "bt_le_start_notification" used but never defined
。
在main.c
#include "ble.h"
void application_start( void )
{
bt_le_start_notification();
}
我错过了什么吗?提前谢谢。
答案 0 :(得分:18)
For restricting function access from other file, the keyword static is used
除了声明它们之外,对静态函数的访问仅限于文件。当我们想要限制对外部世界的函数的访问时,我们必须使它们成为静态的。如果你想从其他文件访问函数,那么去全局函数,即非静态函数。
答案 1 :(得分:12)
我同意Frodo和ANBU.SANKAR 如果你想调用文件外的静态函数,你可以使用下面的例子。
1.C
extern (*func)();
int main(){
(func)();
return 0;}
2.C
static void call1(){
printf("a \n");
}
(*func)() = &call1;
答案 2 :(得分:5)
静态函数具有内部链接,只能由写在同一文件中的函数调用。但是,如果你想从另一个文件调用静态函数,我们在C中有一个技巧。完成步骤。 1.在ble.c中全局创建一个函数指针并定义它。
(void)(*fn_ptr)();
static void bt_le_start_notification(void)
{
WPRINT_BT_APP_INFO(("bt_le_start_notification\n"));
fn_ptr=bt_le_start_notification;
}
在main.c extern中的函数指针
#include "ble.h"
extern fn_ptr;
void application_start( void )
{
fn_ptr();
}
希望它会有用。
答案 3 :(得分:1)
静态函数范围是定义它的文件(即翻译单元)。
答案 4 :(得分:1)
关键字static
通常用于将函数封装在定义它的源文件中。所以它不是要从外部调用static
函数,而是另一个c文件。一个extern article[^]正在解释这个话题我觉得很好。
引用:
静态函数很像Java或C ++中的私有方法。私有方法是一种仅由类使用的方法,不能在其外部使用。在C中,我们可以声明一个静态函数。静态函数是一个只能在声明它的源文件中使用的函数。
因此,如果您需要从外部调用该函数,则不要将该函数定义为static
。
答案 5 :(得分:0)
您收到此消息是因为您已将该函数声明为静态。因此,实现仅在.c文件中可见。尝试从你的.h和.c中删除静态,这应该可以看到你的功能。