c++ - 在 C++ 中使用 C 名称

标签 c++ c

我必须使 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/

相关文章:

调用 scanf() 会出现错误 "ISO C++ forbids cast to non-reference type used as lvalue"

c - 如何在没有 stdio 的情况下为我的操作系统在 c 中创建 printf 函数?

c - 程序退出,代码为 : 5 - Geany with gcc

c++ - 获取 Apache Avro 通用记录字段的名称?

c++ - 为 "abstract"父类(super class)使用复制构造函数

C++-如何增加堆栈大小以允许 Kosaraju 算法进行更多递归以计算强连通分量

c - 强制 C 发生越界错误并崩溃

c - kbhit() 和 getch() 和系统 ("cls"的可移植替代方案)

c++ - xhtml不同浏览器之间的特殊字符

c++ - 使用 C++ Boost.Test 组织单元测试?