2013-09-25 106 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

是的,我明白這會打破標準庫。這就是爲什麼我將模式添加到樣本編譯器調用。匹配的文件只能自動包含一次。所以標準庫和其他文件不會受到這種行爲的影響。 –