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

时间:2016-02-16 06:58:23

标签: 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();
}

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

6 个答案:

答案 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中删除静态,这应该可以看到你的功能。