如何从一个C源代码文件调用另一个C源代码文件中的静态函数?

x6492ojm  于 11个月前  发布在  其他
关注(0)|答案(6)|浏览(162)

我想从一个.c C源代码文件调用另一个.c C源代码文件中定义的static函数。但是,它总是显示**"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();
}


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

jmp7cifd

jmp7cifd1#

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

字符串
访问静态函数被限制在文件中,除非它们被声明。当我们想要限制从外部世界访问函数时,我们必须使它们成为静态的。如果你想从其他文件访问函数,那么就去全局函数,即非静态函数。

pgccezyw

pgccezyw2#

我同意Frodo和ANBU.SANKAR的观点,如果你想在文件外部调用一个静态函数,你可以使用下面的例子。
1.c

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

字符串
2.c

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

nzk0hqpo

nzk0hqpo3#

一个static函数有内部链接,只能被写在同一个文件中的函数调用。但是,如果你必须从另一个文件调用一个static函数,我们在C中有一个技巧。按照以下步骤操作:
1.在ble.c中全局创建一个函数指针,并定义它。

(void)(*fn_ptr)(void); // added

static void bt_le_start_notification(void)
{
    WPRINT_BT_APP_INFO(("bt_le_start_notification\n"));
    fn_ptr = bt_le_start_notification;  // added
}

字符串
1.在main.cextern中,获取对它的访问的函数指针:

#include "ble.h"

extern fn_ptr;  // added

void application_start(void)
{
    fn_ptr();
}


希望这将是有用的。

tvz2xvvm

tvz2xvvm4#

static函数的作用域被限制在定义它的 file(即translation unit)中。

bybem2ql

bybem2ql5#

关键字static通常用于将函数封装在定义它的源文件中。因此,它并不意味着您可以从外部调用另一个C文件中的static函数。我认为这很好地解释了这个主题:
报价 *:
静态函数很像Java或C++中的私有方法。私有方法是一种只能由类使用的方法,不能在类外部使用。在C中,我们可以声明static函数。static函数是一种只能在声明它的源文件中使用的函数。
所以,作为结论,如果你需要从外部调用函数,你必须 * 不 * 将函数定义为static

  • 来自以前的平台 dreamincode,主题“239347-static-functions-and-variables-in-c”
3npbholx

3npbholx6#

你得到这个消息是因为你已经声明了函数是静态的。所以实现只在你的.c文件中可见。尝试从你的.h和.c中删除静态,这应该允许你的函数被看到。

相关问题