「Accelerated C」の演習 2 ~ 3 に取り組んでいるときに、学習者は符号付き整数と符号なし整数の比較に関連する警告に遭遇することがあります。符号なし整数式。この警告は、整数 (int) を使用して string::size_type と比較するときに発生します。
C の整数は、符号付きまたは符号なしのいずれかになります。符号付き整数の値の範囲は -2^(n-1) から 2^(n-1) - 1 までです。ここで、n は整数を表すビット数です。一方、符号なし整数の範囲は 0 ~ 2^n - 1 です。
指定されたコードの警告は、変数 r がint は符号付きですが、padtopbottom も int です。ただし、c は string::size_type であり、ほとんどのプラットフォームでは署名されていません。符号付き整数と符号なし整数を比較する場合、コンパイラは、値の範囲が異なるために予期しない動作が発生する可能性を示す警告を出します。
このような警告や潜在的な問題を回避するには、次のようにします。推奨事項:
提供されたコードには、「Accelerated C」のサンプル プログラムのコードは含まれていません。元のプログラムでは、値が正の値になることがわかっており、わかりやすくするために const が使用されていたため、パディングに const int を使用した可能性があります。ただし、ユーザー入力を使用する場合は、前述の警告を回避するために、変数を unsigned または size_t として宣言することが重要です。この本の後の章では、このような比較を適切に処理するためのさらなる洞察が提供される可能性があります。
以上がC で符号付き整数と符号なし整数を比較すると警告がトリガーされるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。