组织头文件的时候,编译时经常会遇到重复定义的error,这个问题的根源在于一个文件被include多次,如何解决这个问题呢?有下面两种方式
1 #ifndef方式
比如:
#ifndef __TEST_H__
#define __TESTH__
... ... // 声明语句
#endif
2 #pragma once方式
比如:
#pragma once
... ... // 声明语句
这二者出发目的一致,都是为了避免重复include,但是仍有一些细微区别:
#ifndef是通过宏定义的方式来避免重复include,不但可以保证一个文件不会被多次包含,同时还可以保证内容相同的两个文件不会被包含。但是缺点就是需要自行设计宏定义的名称,如果两个文件的宏定义名称相同,就会出现命名存在头文件大,但是编译器仍然不报出找不到声明的error。
#pragma once是通过编译器来保证同一个文件不会被include 多次,这里的同一个文件是指的是物理存储上的文件,而不是内容相同的两个文件。相比于宏定义优点是无需想宏定义的名字了,但是缺点是如果同一个文件存在多次拷贝,该方法无法保证被多次包含。
方式一由语言支持所以移植性好,方式二 可以避免名字冲突