#pragma once和#ifndef,#define,#endif都有防止头文件重复包含的作用。
所谓重复包含就是指在源文件中头文件被重复使用了同一个头文件(类似二次定义),造成冗余。1. 程序员想出了利用#ifndef,#define,#endif防止重复包含
//a.h #ifndef A_H #define A_H function1(); function2(); #endif A_H //b.h #include"a.h" #ifndef B_H #define B_H function3(); function4(); #endif B_H //main.app #include"a.h" #include"b.h" int main() { function1(); function3(); return 0; } 上述代码经过预处理(把头文件包含到源程序)后,得到如下语句: #ifndef A_H #define A_H function1(); function2(); #endif A_H #ifndef A_H #define A_H function1(); function2(); #endif A_H #ifndef B_H #define B_H function3(); function4(); #endif B_H int main() { function1(); function3(); return 0; } 显然由于第二个的#ifndef A_H的条件不成立,所以就避免了a.h 头文件的重复包含。但是这种方法也存在的明显的弊端: 其一,#ifndef的宏名要注意不能再次使用;其二,每次重复都要来判断,显然效率低下
2.随后出现了#pragma once解决了上述问题
//a.h #pragma once function1(); function2();但#pragma once也非十全十美,一些较老的编译器并不支持。
1 2 3