我必须使 C 函数名称在 C++ 应用程序的开发环境 (Keil uVision) 中可见。不幸的是,显示的名称仍然使用 C++ 名称修饰。因此,系统不会显示 Task1
,而是显示 _Z5Task1Pv
。
在 C++ 中我调用
{
...
threadDef->pthread = (void (*)(void const*))getTaskID(tfunc);
...
threadId = osThreadCreate(threadDef, param);
}
然后在我的 C 文件中
extern "C" {
...
typedef void (*TaskFct)(void*);
...
static void Task1(void* param) { ... }
...
static TaskFct getTaskID(TaskFct tFunc) {
...
return Task1;
}
}
是否可以在 C++ 应用程序中获取纯 C 名称?
最佳答案
正如注释所说,extern "C"{...}
由 C++ 编译器使用来防止名称修改(或至少是 C++ 名称修改)。我目前有一个设置,其中有一个用 c 编写的用户空间“驱动程序”和一些静态链接它的 C++ 应用程序。我使用 gcc 构建 MyCDriver.o
文件,然后使用 g++ 构建驱动程序中的 cpp
应用程序和链接。在我想要调用驱动程序函数的每个 cpp
类的顶部
extern "C"
{
#include "MyCDriverHeader.h"
}
然后编译cpp
应用程序:
g++ -o MyCppApp MyCppApp.cpp MyCDriver.o
关于c++ - 在 C++ 中使用 C 名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36504275/