1. extern
关键字
1.1 extern
的作用
-
extern
主要用于声明全局变量或函数,表明该变量或函数的定义在其他文件中。 -
作用域可扩展到多个文件,避免重复定义。
1.2 extern
变量
// file1.cpp
#include <iostream>
int global_var = 42; // 定义全局变量
// file2.cpp
#include <iostream>
extern int global_var; // 声明外部变量
void printVar() {
std::cout << "global_var: " << global_var << std::endl;
}
1.3 extern
函数
// file1.cppC
void foo(); // 声明函数
void foo() {
std::cout << "Hello from foo()!" << std::endl;
}
// file2.cpp
extern void foo();
int main() {
foo();
return 0;
}
2. inline
关键字
2.1 inline
解决多定义问题
-
extern
适用于变量,但若头文件中定义了函数,会导致多次定义错误。 -
inline
允许函数在多个文件中定义,编译时合并为一份,避免多重定义错误。
2.2 使用 inline
解决多定义问题
// myheader.h
#ifndef MYHEADER_H
#define MYHEADER_H
#include <iostream>
inline void sayHello() {
std::cout << "Hello, inline function!" << std::endl;
}
#endif // MYHEADER_H
// file1.cpp
#include "myheader.h"
int main() {
sayHello();
return 0;
}
// file2.cpp
#include "myheader.h"
void test() {
sayHello();
}
2.3 inline
适用场景
-
适用于短小且频繁调用的函数,避免函数调用的额外开销。
-
适用于头文件定义的函数,防止重复定义错误。
-
不能用于递归函数、复杂函数,否则影响性能。
3. 总结
关键字 | 作用 | 适用场景 |
---|---|---|
extern | 连接外部变量/函数 | 变量、非内联函数 |
inline | 解决头文件函数重复定义问题 | 短小、频繁调用的函数 |
inline
主要用于防止头文件中函数的多次定义问题,而 extern
适用于变量和非内联函数。合理搭配 extern
和 inline
,可有效解决多文件项目中的符号冲突问题。
视频链接:
关注微信公众号 程序员陈子青 解锁你的高薪offer之旅。