我想从一个.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();
}
型
我错过什么了吗?提前谢谢你。
6条答案
按热度按时间jmp7cifd1#
字符串
访问静态函数被限制在文件中,除非它们被声明。当我们想要限制从外部世界访问函数时,我们必须使它们成为静态的。如果你想从其他文件访问函数,那么就去全局函数,即非静态函数。
pgccezyw2#
我同意Frodo和ANBU.SANKAR的观点,如果你想在文件外部调用一个静态函数,你可以使用下面的例子。
1.c
字符串
2.c
型
nzk0hqpo3#
一个
static
函数有内部链接,只能被写在同一个文件中的函数调用。但是,如果你必须从另一个文件调用一个static
函数,我们在C中有一个技巧。按照以下步骤操作:1.在
ble.c
中全局创建一个函数指针,并定义它。字符串
1.在
main.c
,extern
中,获取对它的访问的函数指针:型
希望这将是有用的。
tvz2xvvm4#
static
函数的作用域被限制在定义它的 file(即translation unit)中。bybem2ql5#
关键字
static
通常用于将函数封装在定义它的源文件中。因此,它并不意味着您可以从外部调用另一个C文件中的static
函数。我认为这很好地解释了这个主题:报价 *:
静态函数很像Java或C++中的私有方法。私有方法是一种只能由类使用的方法,不能在类外部使用。在C中,我们可以声明
static
函数。static
函数是一种只能在声明它的源文件中使用的函数。所以,作为结论,如果你需要从外部调用函数,你必须 * 不 * 将函数定义为
static
。3npbholx6#
你得到这个消息是因为你已经声明了函数是静态的。所以实现只在你的.c文件中可见。尝试从你的.h和.c中删除静态,这应该允许你的函数被看到。