2011-08-12 65 views
2

即。所以如果你使用任何八進制文字,它會給你一個警告。在八進制文字的gcc中是否有警告?

微軟編譯器的問題也一樣。

如果沒有其他工具來檢測八進制文字。 (vim似乎有一個很酷的把戲,它突出了第一個領先的 零不同的顏色,但我想更多的自動化工具)。

+2

'ACK '(?<= \ d)0 [0-7] +' file.c'將只具有少數(如果有的話)中的註釋和字符串假陽性,並且將更加靈活(如果不是總是更好)比任何其他工具,你用這個。 (如果你沒有'ack',就修正這個問題。) –

+0

看着它,後視應該是'(?<= \ W)'(或'\ b'(我認爲)可能也會起作用) 。 –

+0

ack是完全真棒。我有一個perl編譯的嵌入式linux,所以我可以用它來檢測 –

回答

2

我不認爲gcc有這樣的警告。我只跑了info gcc(對於gcc 4.5.2)並搜索了「八進制」。只有兩次出現,都沒有用。

我不知道微軟的編譯器。

您可以在源文件中搜索匹配八進制常量的正則表達式。如果你有grep,這樣的事情應該做的伎倆(警告:我沒有測試過這一點):

grep '\<0[0-7][0-7]*' foo.c 

這個匹配後跟一個或多個數字範圍0..7 0,在一個詞的開始。它故意不匹配0,這是一個八進制常數,但可能不是你擔心的一個。它可能會給你一些誤報,例如在字符串文字和註釋中。它也會匹配一個字符常量,如'\007',它是八進制數,但不像八進制整數常數那麼容易出錯。

+0

我不知道普通的'grep'有'\ <'。 –

+0

另外,如果計劃'grep'不支持'+'),''[0-7] +'(或'[0-7] \ {1,\}')會更簡潔嗎? –

1

(問題被標記的gcc,但文本詢問微軟的編譯器也是如此。)

我不認爲MSVC++具有一般八進制文字警告,但它會發出警告字符串文本中可疑的八進制轉義序列。例如"foo \669",如果警報級別一直向上,將觸發「C4125 decimal digit terminates octal escape sequence」。