- **`extern “C“` 本身并不主要表达“外部引用”**,它的核心功能是指定链接规则。 - **“外部引用”作用仍然适用,但需要结合实际场景**,如声明外部变量或未定义的函数时。

extern "C" 的场景中,它并没有“外部引用”的直接作用,因为其主要功能是指定 C 的链接规范,而不是明确表示定义在外部。换句话说,extern "C" 的作用与普通的 extern 声明不完全相同。


extern "C" 的主要作用

  • 主要是告诉编译器按照 C 的规则进行名称链接,避免 C++ 的名称修饰(Name Mangling)。
  • 它的作用是针对链接属性,而不是仅仅用于“外部引用”。

例如:

extern "C" void func();
  • 编译器会将 func 的链接名处理为 C 风格的符号(如 func),而不会使用 C++ 的修饰符(如 _Z4funcv)。
  • 这里的 extern 不再强调“引用外部定义”,而是专注于名称修饰和链接规则。

是否还有外部引用的作用?

1. 默认没有直接外部引用作用

extern "C" 的设计目标是解决 C 和 C++ 的互操作问题,而不是专门用于表示外部定义。

  • 如果在声明时仅使用 extern "C",它并不隐含“外部定义”的意思。
  • 如果需要明确外部引用,还需要结合普通的 extern 场景。
2. 如果与变量一起使用

对于全局变量,extern "C" 可以同时表达“外部定义”的意思。

// C 文件
int var = 42;

// C++ 文件
extern "C" int var;

int main() {
    return var;  // 可以引用 C 文件中的全局变量 var
}

在这种场景中:

  • extern 的“外部引用”作用仍然存在。
  • extern "C" 额外确保 var 的符号以 C 风格处理。

普通 externextern "C" 的对比

普通 extern

仅表示“定义在外部”:

extern int globalVar;  // 声明外部变量
extern "C"
  • 不直接表示“外部引用”,它是为链接规范而设计的。
  • 只有当它与变量或未定义的函数一起使用时,才具有隐含的“外部引用”功能:
    extern "C" int globalVar;  // 既声明外部引用,又指定 C 风格链接
    extern "C" void func();    // 声明 C 风格的函数
    
两者结合

有时需要同时使用普通的 externextern "C",例如:

extern "C" {
    extern int globalVar;  // 明确外部引用和 C 风格链接
    void func();
}

总结

  • extern "C" 本身并不主要表达“外部引用”,它的核心功能是指定链接规则。
  • “外部引用”作用仍然适用,但需要结合实际场景,如声明外部变量或未定义的函数时。
  • 如果你需要更明确地表达外部定义,建议同时结合普通 extern 的用法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

金士顿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值