[C++] #include頭文件格式?


Answers

我總是使用INCLUDED_FOO_HPP

我不會使用雙下劃線,因為用雙下劃線開始的東西是保留的。

Question

我知道這對一個項目沒有什麼影響,但是,假設你為你的C ++代碼使用了#define的頭文件,你使用了什麼格式? 例如假設一個名為foo.hpp的頭foo.hpp

#ifndef __FOO_HPP__
...

#ifndef INCLUDED_FOO_HPP
...

#ifndef SOME_OTHER_FORMAT

我被大寫#定義的想法賣掉,但不能以這些警衛的格式來解決。




當我為我的時間付款,而且還沒有公司標準時,我使用:

#ifndef path_to_file_h
#define path_to_file_h

小寫字母的原因是複制和粘貼文件名以及用下劃線替換斜線更容易。 #ifndef的原因是它與#define很好地排列在一起,使得更容易看到這些符號是相同的。 不過,我喜歡GUID的想法,所以我可以試試看。

當我沒有為我的時間付款,而不是把我的代碼放到野外時,我只用了#pragma once 。 與大多數其他的可移植性問題不同的是,現在可以像以前一樣簡單地添加包括守護程序,並且可以由對代碼庫一無所知的人來完成(例如,一年以來的我,或者一些無辜的程序員發送我的代碼)所以YAGNI適用。




如果您使用Visual Studio或Microsoft編譯器使用雜注方式

#pragma once



我用

<FILENAME_IN_ALL_CAPS>_<YYYYMMDD>

要么

<FILENAME_IN_ALL_CAPS>_INCLUDED_<YYYYMMDD>

保持與文件夾層次結構同步太麻煩(重構的朋友),GUID太煩人,日期後綴是足夠好的 。 如果我必須在同一天同樣命名的文件,我會的

<FILENAME_IN_ALL_CAPS>_<YYYYMMDD>a
<FILENAME_IN_ALL_CAPS>_<YYYYMMDD>b
<FILENAME_IN_ALL_CAPS>_<YYYYMMDD>...



我總是使用使用

#ifndef FOOBAR_CPP



就個人而言,我只是使用文件名FOO_HPP。 Google使用像SRC_ENGINE_FAST_HPP這樣的整個路徑。

某些名稱和函數簽名集總是保留給實現:

  • 每個包含雙下劃線(_ _)的名稱或以下劃線開頭,後面跟著一個大寫字母(2.11)的名稱都保留給實施用於任何用途。
  • 每個以下劃線開頭的名字都保留給實現,用作全局名稱空間中的名稱。

17.4.3.1.2/1