【发布时间】:2014-05-19 10:37:05
【问题描述】:
在头文件中的包含保护之前放置#include指令是否有任何正当理由:
#include "jsarray.h"
#include "jsanalyze.h"
#include "jscompartment.h"
#include "jsgcmark.h"
#include "jsinfer.h"
#include "jsprf.h"
#include "vm/GlobalObject.h"
#include "vm/Stack-inl.h"
#ifndef jsinferinlines_h___
#define jsinferinlines_h___
//main body mostly inline functions
#endif
注意,这个例子取自一个真实的高调开源项目,应该由经验丰富的程序员开发——Firefox 10 中使用的 Mozilla Spidermonkey 开源 Javascript 引擎(最新版本中也存在相同的头文件) .
在备受瞩目的项目中,我认为他们的设计背后一定有一些正当的理由。在包含防护之前有 #include 的正当理由是什么?它是适用于仅内联函数头文件的模式吗?还要注意,这个头文件(jsinferinlines.h)实际上是通过最后一个#include "vm/Stack-inl.h"(这个头文件包括很多其他头文件,其中一个实际上又包括这个jsinferinlines.h)指令在include保护之前包含了自己,这个对我来说更没有意义。
【问题讨论】:
标签: c++ include c-preprocessor spidermonkey