3

すなわち。8 進リテラルを使用すると、警告が表示されます。

Microsoftのコンパイラについても同じ質問です。

そうでない場合、8 進リテラルを検出する他のツールはありません。

(vimには、最初の先行ゼロを別の色で強調表示するクールなトリックがあるようですが、私はもっと自動化されたツールを考えています)。

4

2 に答える 2

2

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進数の整数定数ほどエラーが発生しにくい、のような文字定数にも一致します。

于 2011-08-12T07:11:24.497 に答える
1

(質問には gcc のタグが付けられていますが、テキストでは Microsoft のコンパイラについても質問されています。)

MSVC++ には一般的な 8 進リテラルに対する警告はないと思いますが、文字列リテラルの疑わしい 8 進エスケープ シーケンスについては警告します。たとえば、警告レベルを最大にすると、「 C4125 10 進数が 8 進数エスケープ シーケンスを終了します"foo \669"」がトリガーされます。

于 2012-04-24T20:36:54.907 に答える