例如,如果您使用任何八进制字面量,它会给出警告。
微软的编译器是否也是如此?
如果不是,是否有其他工具可以检测八进制字面量?
(vim似乎有一个很酷的技巧,可以用不同的颜色突出显示第一个前导零,但我更想要一个自动化的工具)。
info gcc
(对于gcc 4.5.2),并搜索了“八进制”。只有两个出现,都没有用处。grep
,像这样的东西就可以解决问题(警告:我还没有测试过):grep '\<0[0-7][0-7]*' foo.c
这个模式匹配一个以0开头,后跟一位或多位数字(范围在0..7之间)的单词。它故意不匹配0
,因为它是一个八进制常量,但可能不是您所担心的一个常量。它可能会给你一些误报,例如在字符串文字和注释中。它也会匹配一个字符常量,如'\007'
,它是八进制的,但不像八进制整数常量那样容易出错。
grep
有 \<
。 - Chris Lutz[0-7]+
(如果计划使用的 grep
不支持 +
,则为 [0-7]\{1,\}
)会更加简洁,不是吗? - Chris Lutz这个问题标记为gcc,但是文本也询问了关于微软编译器的问题。
我不认为MSVC++有一个针对一般八进制字面量的警告,但它会警告字符串字面量中可疑的八进制转义序列。例如"foo \669"
,如果你将警告级别调到最高,就会触发"C4125 decimal digit terminates octal escape sequence"。
ack '(?<=\D)0[0-7]+' file.c
在注释和字符串中只会有很少的(如果有的话)误报,并且比您用于此目的的任何其他工具更加灵活(如果不是总是更好)。 (如果您没有安装ack
,请安装。) - Chris Lutz(?<=\W)
(或者我想\b
也应该可以)。 - Chris Lutz