在Visual Studio 12.0附带的stl
实现中,numeric
标头看起来像这样
#pragma once
#ifndef _NUMERIC_
#define _NUMERIC_
// shortened for the sake of readibility
.
.
.
#endif /* _NUMERIC_ */
我知道#pragma once
不是standard conform。
但是,为什么要实现双头保护?
#pragma once
:不会多次包含同一文件include guard idiom
:使用预处理程序宏定义来防止文件内容的多次包含。
根据Doc
include guard
惯用语和#pragma once
在同一文件中。编译器识别出包含保护习惯用法,并以相同方式实施多包含优化如果没有非注释代码,则为#pragma once
指令预处理指令位于标准格式的之前或之后成语