すなわち。8 進リテラルを使用すると、警告が表示されます。
Microsoftのコンパイラについても同じ質問です。
そうでない場合、8 進リテラルを検出する他のツールはありません。
(vimには、最初の先行ゼロを別の色で強調表示するクールなトリックがあるようですが、私はもっと自動化されたツールを考えています)。
gccにそのような警告があるとは思わない。(gcc 4.5.2の場合)実行info gcc
して、「octal」を検索しました。発生は2回だけで、どちらも役に立ちませんでした。
Microsoftのコンパイラについては知りません。
ソースファイルで、8進数の定数に一致する正規表現を検索できます。あなたが持っているならgrep
、このようなものがトリックをするはずです(警告:私はこれをテストしていません):
grep '\<0[0-7][0-7]*' foo.c
これは、単語の先頭にある0..7の範囲の1つ以上の数字が後に続く0に一致します。意図的に一致しません0
。これは8進数の定数ですが、おそらく心配しているものではありません。たとえば、文字列リテラルやコメントなどで、誤検知が発生する可能性があります。'\007'
また、8進数ですが、8進数の整数定数ほどエラーが発生しにくい、のような文字定数にも一致します。
(質問には gcc のタグが付けられていますが、テキストでは Microsoft のコンパイラについても質問されています。)
MSVC++ には一般的な 8 進リテラルに対する警告はないと思いますが、文字列リテラルの疑わしい 8 進エスケープ シーケンスについては警告します。たとえば、警告レベルを最大にすると、「 C4125 10 進数が 8 進数エスケープ シーケンスを終了します"foo \669"
」がトリガーされます。