gcc是否有针对八进制字面量的警告?

3

例如,如果您使用任何八进制字面量,它会给出警告。

微软的编译器是否也是如此?

如果不是,是否有其他工具可以检测八进制字面量?

(vim似乎有一个很酷的技巧,可以用不同的颜色突出显示第一个前导零,但我更想要一个自动化的工具)。


2
ack '(?<=\D)0[0-7]+' file.c 在注释和字符串中只会有很少的(如果有的话)误报,并且比您用于此目的的任何其他工具更加灵活(如果不是总是更好)。 (如果您没有安装ack,请安装。) - Chris Lutz
看起来,正则表达式中的"前瞻断言"应该是 (?<=\W)(或者我想\b也应该可以)。 - Chris Lutz
ack非常棒。我已经为嵌入式Linux编译了Perl,这样我就可以在上面使用ack了。 - Roman A. Taycher
我想我应该把那个作为答案。 - Chris Lutz
@ChrisLutz:这将匹配[0..1[范围内的所有浮点数,以及(但可能是非常特殊的情况)所有分钟小于10的时钟值(12:03)。 - Gauthier
2个回答

2
我不认为gcc有这样的警告。我刚刚运行了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

1

这个问题标记为gcc,但是文本也询问了关于微软编译器的问题。

我不认为MSVC++有一个针对一般八进制字面量的警告,但它会警告字符串字面量中可疑的八进制转义序列。例如"foo \669",如果你将警告级别调到最高,就会触发"C4125 decimal digit terminates octal escape sequence"。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接