如何解决在 extern "C" 范围内定义不声明c 函数
extern "C"
{
#include <user_interface.h>
#include <lwip/netif.h>
uint8 wifi_get_opmode(void)
{
return STATION_MODE;
}
bool wifi_station_get_config(struct station_config *config)
{
strcpy((char*)config->ssid,"emulated-ssid");
strcpy((char*)config->password,"emulated-ssid-password");
config->bssid_set = 0;
for (int i = 0; i < 6; i++)
config->bssid[i] = i;
return true;
}
}
我对 extern "C"
关键字的理解是禁用名称修改,因此可以从 cpp 链接和调用在 .c
文件中定义并使用 ac 编译器编译的函数代码。也就是说,这些C函数应该定义在一个.c
文件中,然后使用C编译器将它们编译成C类型的目标文件。
然而,此处由 extern "C"
括起来的函数是在 .cpp
文件中定义(未声明)。这样做的目的是什么?
解决方法
目的是使用“C”链接定义函数。意思是:不要修改它们的名字,而是像普通的 C++ 函数一样编译它们,否则。
它们可以直接从与此翻译单元链接的 C 代码中调用(取决于合适的声明),也可以从将这些符号声明为 extern "C"
的另一个 C++ 翻译单元中调用。
您实际上一直在这样做。当您将 extern "C"
放在头文件中时,这些头文件也包含在它们声明的函数的实现文件中。
要正确链接函数,定义它们的翻译单元和包含它们的翻译单元中的函数名称必须相同,因此您必须在两者中使用 extern "C"
(如果它们都是当然是C++)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。