Learning ROS for Robotics Programming - Second Edition

equitable1660 9 0 pdf 2024-07-23 22:07:03

如果在C++中需要使用C库,那该怎么办呢?举个例子,如果我们有一个C函数声明如下:


float f(int a, char b);

C++编译器会将这个名字变成像_f_int之类的东西,以支持函数重载和类型安全连接。然而,C编译器编译的库通常不会做这样的转换,所以它的内部名可能是_f。这样,连接器将无法解决我们在C++中对f()的调用。

怎么办呢?C++提供了一种连接转换指定,通过重载extern关键字来实现。我们可以使用如下方式声明这个函数:


extern "C" float f(int a, char b);

这就告诉编译器f()是C连接类型,这样就不会转换函数名。标准的连接类型指定符有“C”和“C++”两种,但编译器开发商可以选择用同样的方法支持其他语言。如果有一组转换连接的声明,可以把它们放在花括号内或者在头文件中:


extern "C" {

    float f(int a, char b);

    int g(double x);

}

多数C++编译器开发商在他们的头文件中已经处理了转换连接指定,包括C和C++,所以我们不用担心它们。

你是否还觉得extern和static有些困惑?不妨看看这些资源,它们对相关概念有更详细的解释和实例:C语言中的static和externC++C中的extern和staticC++语言中的static和extern。这些文章不仅能帮助你理解这些关键字的使用,还能让你在实际编程中游刃有余。

至于练习,你可以尝试创建一个带整型数组的类。在类内部用未标识的枚举变量来设置数组的长度。这个练习不仅能让你更好地理解C++中的数组和类的关系,还能让你对枚举变量有更深刻的认识。更多关于const、extern、static、volatile等关键字的用法,可以参考这篇详细解析的文章:const extern static volatile的使用

用户评论
请输入评论内容
评分:
暂无评论