在C++中,为了避免同一个文件被include
多次,常常需要在文中加上一些保证,主要有两种方式,二者用法如下:1
1 |
通常,在能够支持这两种方式的编译器上,二者没有太大的区别。下面简介说一下二者格子的优缺点:
对于#ifndef
方式来说,不光可以保证同一个文件不会被包含多级,也能保证内容完全相同的两个文件不会被不小心同时包含,但这样就需要编译器每次都扫描头文件内部,因此会使得编译时间相对较长。另外一个缺点就是该方式需要自定义宏名称,当项目很大时,宏名称有“撞车”的风险。
对于#pragma once
方式来说,首先是需要code的代码很少,另外不需要自定义宏名称,避免了“撞车”的风险,但是#pragma once
提供的保证仅仅是:同一个物理意义上的文件不会被包含多次。如果两个文件内容完全一样,则该方式仍然会重复包含。
结合以上分析,我个人倾向于使用#pragma once
,因为需要code的代码更少,无需自想宏名称,另外,出现包含多个内容相同的文件的情况也很很少的(除非有意,否则不太可能出现这种情况)。