2011-08-12 31 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”。