2013-09-25 76 views
1

我尝试从我的个人项目中删除每个不必要的样板代码。我注意到,第一件事是每个头文件#pragma的第一行。并不奇怪。 但是,我想问我的编译器(clang SVN HEAD版本)是否会自动将此行添加到我的头文件中(例如,使用像这样的模式:src/*。hpp)。我认为当你真的想要多次包含一个标题时,会遇到非常罕见的情况。自动将#pragma添加到头文件

  1. 你同意吗?
  2. 这个问题是否有任何现有的解决方案?
  3. 你认为这是一个好主意吗?

随着铛工具这个问题可以解决,但我需要一些帮助来启动这个扩展。我应该使用

  1. 哪个铛工具?

这个工具/扩展的理论用法:

clang --auto-pragma-once src/*.hpp src/*.cpp -o test

感谢您的任何意见

编辑:

  1. 我不想存储此编译一次在我的文件中。因此,任何编辑器或其他任何将新内容放入文件的工具都无法解决此问题。

  2. 这话题是关于一次性包容的头文件,而不是编译一次。

回答

1

只要硬着头皮将标记文件放在头文件中。这只是一行,如果没有任何内容,它可能会混淆查看你的文件的其他人。

+0

而且不要忘了包括警卫,这仍然需要(至少如果你想将代码移植别处---'的#pragma once'是非常不标准)。 –

+0

@JamesKanze真的,我认为(可能是错误),如果他用他知道的含义..编译指示 –

+0

@JamesKanze:这是不规范的,但最近版本的Visual C++,G ++和锵至少支持,因此您可以覆盖更广阔已经有一系列的平台。 – thokra

0

我不确定你为什么要使用clang。这取决于 的编辑器,但每次我知道编辑器允许您在 事情触发像打开一个新的文件,其名称的特定 模式匹配,并在其中插入样板。在工业界,很多人都禁止不要使用它,因为这是版权 通知的插入方式。在我的情况下,例如,如果我创建 名为xyz.hh一个新的文件时,编辑器自带了

/****************************************************************************/ 
/*  File:  xyz.hh             */ 
/*  Author:  J. Kanze            */ 
/*  Date:  25/09/2013            */ 
/*  Copyright ....              */ 
/* ------------------------------------------------------------------------ */ 

#ifndef xyz_hh_20130925QPIvFK6xMJYLBhSpv58ROPOU 
#define xyz_hh_20130925QPIvFK6xMJYLBhSpv58ROPOU 

#endif 
// Local Variables:      --- for emacs 
// mode: c++        --- for emacs 
// tab-width: 8       --- for emacs 
// End:         --- for emacs 
// vim: set ts=8 sw=4 et filetype=cpp:  --- for vim 

如果我这样做,在我的工作领域,版权声明是 不同的是,包括卫兵遵循不同的标准,并且 还有一次#pragma。

+0

但是这个解决方案插入的信息稍后存储在文件中。我不想要这个。也许我的问题是误导性的。 –

+0

@BalázsÁrva但是你想要什么呢?你不能让编译器把每个文件当作包含'#pragma once'的对象,因为这会破坏标准库(至少有一个头必须包含多次)。 –

+0

是的,我明白这会打破标准库。这就是为什么我将模式添加到样本编译器调用。匹配的文件只能自动包含一次。所以标准库和其他文件不会受到这种行为的影响。 –