即。所以如果你使用任何八进制文字,它会给你一个警告。在八进制文字的gcc中是否有警告?
微软编译器的问题也一样。
如果没有其他工具来检测八进制文字。 (vim似乎有一个很酷的把戏,它突出了第一个领先的 零不同的颜色,但我想更多的自动化工具)。
即。所以如果你使用任何八进制文字,它会给你一个警告。在八进制文字的gcc中是否有警告?
微软编译器的问题也一样。
如果没有其他工具来检测八进制文字。 (vim似乎有一个很酷的把戏,它突出了第一个领先的 零不同的颜色,但我想更多的自动化工具)。
我不认为gcc有这样的警告。我只跑了info gcc
(对于gcc 4.5.2)并搜索了“八进制”。只有两次出现,都没有用。
我不知道微软的编译器。
您可以在源文件中搜索匹配八进制常量的正则表达式。如果你有grep
,这样的事情应该做的伎俩(警告:我没有测试过这一点):
grep '\<0[0-7][0-7]*' foo.c
这个匹配后跟一个或多个数字范围0..7 0,在一个词的开始。它故意不匹配0
,这是一个八进制常数,但可能不是你担心的一个。它可能会给你一些误报,例如在字符串文字和注释中。它也会匹配一个字符常量,如'\007'
,它是八进制数,但不像八进制整数常数那么容易出错。
我不知道普通的'grep'有'\ <'。 –
另外,如果计划'grep'不支持'+'),''[0-7] +'(或'[0-7] \ {1,\}')会更简洁吗? –
(问题被标记的gcc,但文本询问微软的编译器也是如此。)
我不认为MSVC++具有一般八进制文字警告,但它会发出警告字符串文本中可疑的八进制转义序列。例如"foo \669"
,如果警报级别一直向上,将触发“C4125 decimal digit terminates octal escape sequence”。
'ACK '(?<= \ d)0 [0-7] +' file.c'将只具有少数(如果有的话)中的注释和字符串假阳性,并且将更加灵活(如果不是总是更好)比任何其他工具,你用这个。 (如果你没有'ack',就修正这个问题。) –
看着它,后视应该是'(?<= \ W)'(或'\ b'(我认为)可能也会起作用) 。 –
ack是完全真棒。我有一个perl编译的嵌入式linux,所以我可以用它来检测 –