Есть ли в gcc предупреждение для восьмеричных литералов? - PullRequest
3 голосов
/ 12 августа 2011

т.так что если вы используете какие-либо восьмеричные литералы, вы получите предупреждение.

Тот же вопрос для компилятора Microsoft.

Если нет, то есть ли другие инструменты для обнаружения восьмеричных литералов.

(у vim, кажется, есть классный трюк, когда он выделяет первый ведущий ноль другим цветом, но я думаю больше об автоматизированном инструменте).

Ответы [ 2 ]

2 голосов
/ 12 августа 2011

Я не верю, что у gcc такое предупреждение. Я просто запустил info gcc (для gcc 4.5.2) и искал "восьмеричный". Было только два случая, ни один из них не полезен.

Я не знаю о компиляторе Microsoft.

Вы можете искать в ваших исходных файлах регулярное выражение, которое соответствует восьмеричным константам. Если у вас есть grep, что-то вроде этого должно помочь (предупреждение: я не проверял это):

grep '\<0[0-7][0-7]*' foo.c

Это соответствует 0, за которым следуют одна или несколько цифр в диапазоне 0,7 в начале слова. Он намеренно не соответствует 0, что является восьмеричной константой, но, вероятно, не той, о которой вы беспокоитесь. Это может дать вам несколько ложных срабатываний, например, в строковых литералах и комментариях. Он также будет соответствовать символьной константе, такой как '\007', которая является восьмеричной, но не такой подверженной ошибкам, как восьмеричная целочисленная константа.

1 голос
/ 25 апреля 2012

(Вопрос помечен gcc, но текст спрашивает и о компиляторе Microsoft.)

Я не думаю, что в MSVC ++ есть предупреждение для общих восьмеричных литералов, но он будет предупреждать о подозрительных восьмеричных escape-последовательностях в строковых литералах. Например, "foo \669", вызовет « Десятичная цифра C4125 завершает восьмеричную escape-последовательность », если уровень предупреждения полностью увеличен.

...