gpt4 book ai didi

c++ - Extern在C++中使用了两次

转载 作者:行者123 更新时间:2023-12-01 14:39:28 28 4
gpt4 key购买 nike

我对链接过程中发生的事情非常好奇,在研究该 Realm 的过程中,我一直在尝试使用此代码

#ifdef __cplusplus
extern “C” {
#endif

extern double reciprocal (int i);

#ifdef __cplusplus
}
#endif

该代码在某个头文件中,该文件包含在一个程序的.c和.cpp源文件中。它是一个函数的声明,然后在.cpp文件中定义。为什么行得通?我的意思是,在.cpp文件的编译过程中,这将变成
extern "C" {
extern double reciprocal (int i);
}

外部extern既使函数在全局范围内可见,又将函数名的C++样式转换为C one。但也有一个内在的外部。函数可以两次执行吗?

最佳答案

C++语言对添加新的关键字很敏感,因此有些关键字可以重复使用以表示不同的含义。 extern是这些重复使用的关键字之一。它具有3 possible meanings:

  • 外部链接-变量或函数在
  • 其他地方定义
  • 语言链接-变量或函数以“外部”语言
  • 定义
  • 显式模板实例化声明

  • 在您的情况下,您使用的是1和2。 extern "C"声明该代码具有 "C"而不是默认的 "C++"链接。这也意味着外部链接,因此在纯C++代码中,您可以编写:
    extern "C" {
    double reciprocal (int i);
    }

    reciprocal将自动标记为 extern。添加额外的 extern无效,并且对于没有 extern "C"包装程序的C版本来说,这是必需的。

    请注意,如果您使用的是 extern "C"的单个声明版本,则使用第二个 extern无效:
    extern "C" extern double reciprocal (int i);

    由于不需要第二个 extern,因此正确的声明是:
    extern "C" double reciprocal (int i);

    关于c++ - Extern在C++中使用了两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61467251/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com