,我學習包括在C++中後衛和Wikipedia過這個命名約定傳來:標題的這個命名約定是指什麼?
CREATORSNAME_YYYYMMDD_HHMMSS
我現在得到,這是一個時間戳,並聲稱
#ifndef CREATORSNAME_YYYYMMDD_HHMMSS
#define CREATORSNAME_YYYYMMDD_HHMMSS
#endif
那麼編譯器如何知道它是HeaderName.h?
,我學習包括在C++中後衛和Wikipedia過這個命名約定傳來:標題的這個命名約定是指什麼?
CREATORSNAME_YYYYMMDD_HHMMSS
我現在得到,這是一個時間戳,並聲稱
#ifndef CREATORSNAME_YYYYMMDD_HHMMSS
#define CREATORSNAME_YYYYMMDD_HHMMSS
#endif
那麼編譯器如何知道它是HeaderName.h?
這只是一個便捷的方式來存儲有關編寫模塊的人員的文檔以及何時保證監護人的唯一性(通過日期)以及爲引用該模塊的其他人提供附加信息。特別是如果他們認爲相應的實施存在問題,那麼他們有人可以寫信給他們。否則,模塊的創建者可能會忘記添加文檔以確定他們是誰。
#ifndef CHRIS_20140807_011555
#define CHRIS_20140807_011555
struct foo {
int member;
};
#endif /* CHRIS_20140807_011555 */
或者,您也可以做到這一點,但它並沒有提供更多的信息,並在頂部添加的文檔很容易忘記。(雖然說實話,它應該成爲習慣中,而不應被遺忘)。但是,儘管下面的選項被廣泛使用,但這仍然可能是這種做法的動機。
/*
* AUTHOR: Chris
* DATE: July 7, 2013
*
* These comments are easy to forget
*/
#ifndef FILENAME_H
#define FILENAME_H
struct foo {
int member;
};
#endif /* FILENAME_H */
此:
#ifndef AAAA
#define AAAA
struct foo {
int member;
};
#endif
和
#pragma once
struct foo {
int member;
};
所有這些代碼段完成同樣的事情。
謝謝,但有沒有一些機制,編譯器從時間戳知道它確實是filename.h? –
不,這只是一個慣用的慣例,標籤和文件名必須相同。 – ChrisCM
但是你是否在說這裏的標籤和文件名,即。 CHRIS_19870909_234545是header.h的同義詞嗎? –
對於在下午12:00於2013-01-01由李四做了一個文件名爲MyFile.h,你可以使用:
#ifndef JOHNDOE_20130101_120000
#define JOHNDOE_20130101_120000
// File contents
#endif
爲什麼你不會要放置文件的包括後衛的名字超越了我。
就第二點達成一致。 –
我唯一能想到的就是文件在項目中的獨特性的保證。 – Phlucious
@Michael謝謝,但那麼編譯器如何知道它的MyTest.h或SomeOtherHeader.h,因爲這裏沒有包含名稱? –
我在Boost.Proto看到了這個。 – Rapptz
整個維基百科頁面是不是完全解釋了什麼包括守衛和你如何使用它們? – Mat
@Rapptz我在標準庫中看到過這個地方。 – ShuklaSannidhya