2014-02-25 59 views
1

我以爲我曾經讀過一個像#define這樣的值的前導下劃線;什麼#define標識符保留給預處理器?

#define _FOO 

被ANSI C或其他標準阻止或禁止。今天我梳理了互聯網,審查了K & R和CRM,並且找不到任何支持該功能的東西。我發現的最接近的是一個建議(沒有合適的引用),預定義的標識符始終以結尾並帶有雙下劃線,以便上述內容不會發生衝突。我問,因爲我使用的是抱怨一個新的靜態檢查:

#ifndef __FOO_H 
#define __FOO_H 
... 
#endif // __FOO_H 

#define線和我是否正確或檢查是我無法找到一個權威的答案。

+1

*「今天我梳理了Int ernet,對K&R和CRM進行了評估,並且找不到任何支持該功能的內容。「* - 嗯......你試過標準嗎? –

+1

是的,那。 :)這個標準基本上是你會發現的最權威的文檔:什麼是和不是格式良好的C代碼。 – cHao

+0

我沒有印刷品,沒有在網上找到它。我的搜索條件可能很弱。不過,我會發誓「C標準」或「ANSI C」或「C99」在那裏。 –

回答

6

今天我梳理了互聯網,審查了K & R和CRM,並找不到任何支持。

(C99,7.1.3.p1)「以下劃線和一個大寫字母或另一個下劃線開頭的所有標識符,始終保留用於任何用途。」

現在關於ķ& [R書第二版上寫着:

(K & [R第2版,2.1)「不要用下劃線然而,開始的變量名,因爲庫函數經常使用這樣的名字。「

如果CRM(由哈比森&斯蒂爾CA參考手冊)實際上指的是CARM:

(CARM第5版,10.1.1保留庫標識符):「保留給C中的標識符實現使用包括:[...]爲宏,關鍵字或全局變量 ,標識符開頭_和以及一個第二_或 大寫字母(除_ _ STDC _...)」