C++ Primer 学习笔记与思考_3 ---头文件那些事儿(extern)
(一)extern在头文件里的使用方法
由于头文件包括在多个源文件里。而且变量的定义仅仅能出现一次,所以在头文件里。 仅仅能够声明不能够出现定义。
#ifndef 检測指定的预处理器变量是否没有定义。#define接受一个名字并定义改名字为预处理器变量。
由于头文件包括在多个源文件里。而且变量的定义仅仅能出现一次,所以在头文件里。 仅仅能够声明不能够出现定义。
我们能够在头文件里用extern声明全局变量,这样在包括此头文件的cpp 中可直接使用 声明过的这个全局变量(例如以下面程序中的变量a)。
可是有三个例外:
1.头文件里能够定义类
2.值在编译时就已经知道的const对象
3.能够定义inline函数
extern int ival; // yes extern int ival=1; //error int ival; //error const int ival =3; //yes(二)使用头文件保护符避免多重包括
#ifndef 检測指定的预处理器变量是否没有定义。#define接受一个名字并定义改名字为预处理器变量。
#endif代表处理的边界。
// mine.h #include <iostream> extern int a; const int b = 2; //int c; error 提示反复定义 //hello.cpp #include"mine.h" int f(int x) { return a++; } //amin.cpp #ifndef TEST //检測指定的预处理器变量是否没有定义 #define TEST //定义预处理器变量 #include "mine.h" #endif //end using namespace std; int a = 2; //extern 都是针对全局变量的(假设是局部的不能在还有一个cpp中使用) int main() { cout << a << " " << b << endl; return 0; }