如何从另一个c文件调用静态函数?

我想从另一个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(); } 

我错过了什么吗? 提前致谢。

  For restricting function access from other file, the keyword static is used 

除了声明它们之外,对静态函数的访问仅限于文件。当我们想限制从外部世界访问函数时,我们必须将它们设置为静态。 如果你想从其他文件访问函数,那么去全局函数,即非静态函数。

我同意Frodo和ANBU.SANKAR如果您想在文件外调用静态函数,您可以使用如下示例。

1.C

 extern (*func)(); int main(){ (func)(); return 0;} 

2.C

 static void call1(){ printf("a \n"); } (*func)() = &call1; 

静态函数具有内部链接,只能由写在同一文件中的函数调用。 但是,如果你想从另一个文件调用静态函数,我们在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(); } 

希望它会有用。

静态函数范围是定义它的文件(即转换单元)。

关键字static通常用于将函数封装在定义它的源文件中。 所以它并不是要从外部调用static函数,而是另一个c文件。 一篇extern 文章[^]正在解释这个话题我觉得很好。

引用:

静态函数很像Java或C ++中的私有方法。 私有方法是一种仅由类使用的方法,不能在其外部使用。 在C中,我们可以声明一个静态函数。 静态函数是一个只能在声明它的源文件中使用的函数。

因此,如果您需要从外部调用该函数,则不要将该函数定义为static

您收到此消息是因为您已将该函数声明为静态。 因此,实现仅在.c文件中可见。 尝试从你的.h和.c中删除静态,这应该可以让你看到你的function。