即。所以,如果你使用任何八进制文字,它会给你一个警告。
微软编译器的同样问题。
如果没有,还有其他工具可以检测八进制文字。
(vim似乎有一个很酷的技巧,突出了第一个领先 零颜色不同,但我更多的是考虑自动化工具。)
答案 0 :(得分:2)
我不相信gcc有这样的警告。我刚刚运行info gcc
(对于gcc 4.5.2)并搜索“八进制”。只有两次出现,都没有用。
我不知道微软的编译器。
您可以在源文件中搜索与八进制常量匹配的正则表达式。如果你有grep
,那么这样的事情应该可以解决问题(警告:我没有测试过这个):
grep '\<0[0-7][0-7]*' foo.c
这匹配0后跟一个或多个数字,范围为0..7,位于单词的开头。它故意不匹配0
,这是一个八进制常数,但可能不是你担心的那个。它可能会给你一些误报,例如在字符串文字和注释中。它还将匹配像'\007'
这样的字符常量,它是八进制但不像八进制整数常量那样容易出错。
答案 1 :(得分:1)
(问题标记为gcc,但文本也会询问Microsoft的编译器。)
我不认为MSVC ++对一般八进制文字有警告,但它会警告字符串文字中可疑的八进制转义序列。例如"foo \669"
,如果您的警告级别一直上升,则会触发“C4125 decimal digit terminates octal escape sequence”。