C++ extern(八股总结)

定义

用于声明变量或函数的外部链接性,使它们的定义可能在另一个文件或作用域中。

作用

1. 与C连用

当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数名而不是C++的;

示例:

C 文件: c_function.c

c++ 复制代码
#include <stdio.h>

void hello() {
    printf("Hello from C function\n");
}

C++ 文件: main.cpp

c++ 复制代码
#include <iostream>

extern "C" void hello(); // 告诉编译器这是一个 C 函数

int main() {
    hello(); // 调用 C 函数
    return 0;
}

2.声明函数和变量

当它作为一个对函数或者全局变量的外部声明,提示编译器遇到此变量或函数时,在其它模块中寻找其定义。

假设有两个文件:

文件1: file1.cpp

c++ 复制代码
#include <iostream>
using namespace std;

int globalVar = 42; // 定义全局变量

void printVar() {
    cout << "Global variable: " << globalVar << endl;
}

文件2: file2.cpp

C++ 复制代码
#include <iostream>
using namespace std;

// 声明外部变量
extern int globalVar;

// 声明外部函数
extern void printVar();

int main() {
    printVar(); // 调用 file1.cpp 中的函数
    cout << "Global variable in main: " << globalVar << endl;
    return 0;
}

编译并链接:

C++ 复制代码
g++ file1.cpp file2.cpp -o output
./output

输出:

C++ 复制代码
Global variable: 42
Global variable in main: 42
相关推荐
herinspace26 分钟前
管家婆实用贴-如何分离和附加数据库
开发语言·前端·javascript·数据库·语音识别
ILYT NCTR1 小时前
搭建Golang gRPC环境:protoc、protoc-gen-go 和 protoc-gen-go-grpc 工具安装教程
开发语言·后端·golang
叶小鸡1 小时前
小鸡玩算法-力扣HOT100-堆
数据结构·算法·leetcode
小雅痞1 小时前
[Java][Leetcode simple] 28. 找出字符串中第一个匹配项的下标
java·开发语言·leetcode
likerhood1 小时前
java中的不可变类(Immutable)
java·开发语言
Ulyanov1 小时前
《PySide6 GUI开发指南:QML核心与实践》 第一篇:GUI新纪元——QML与PySide6生态系统全景
开发语言·python·qt·qml·雷达电子对抗
何陋轩2 小时前
【重磅】悟空来了:国产AI编程助手深度测评,能否吊打Copilot?
人工智能·算法·面试
Rust研习社2 小时前
从入门到实践:Rust 异步编程完全指南
开发语言·后端·rust
yaoxin5211232 小时前
389. Java IO API - 获取文件名
java·开发语言·python
逸风尊者2 小时前
XGBoost模型工程使用
java·后端·算法