void へのキャストの興味深い効果
C では、 (void)x を使用して未使用の変数に関する警告を抑制する行為が広く普及しています。ただし、void へのキャストは、他の型へのキャストと比較すると、独特の動作を示します。
コンパイラの警告とキャスト
次のコード スニペットを検討してください:
int main() { int x; (short)x; (void)x; (int)x; }
-Wall -Wextra を使用して警告を有効にしてこのコードをコンパイルすると、次のようになります。以下:
warning: statement has no effect [-Wunused-value] (short)x; warning: statement has no effect [-Wunused-value] (int)x;
これは、void へのキャストが他の型へのキャストとは異なる動作をすることを示唆しています。
考えられる説明
これについて考えられる 2 つの説明違いが生じます:
正解
正しい説明は最初のものです。 void へのキャストは、専用の警告抑制メカニズムです。この標準では、§5.2.9/4 で次のように明示的に規定されています:
あらゆる式は明示的に型「cv void」に変換できます。
式の値は破棄されます。
したがって、void へのキャストはプログラムの実行に実質的な影響を与えません。これは単に、未使用の可能性のある変数に関する警告を黙らせるだけの役割を果たします。
以上がC で「void」にキャストすると警告が抑制されるのに、他のキャストでは警告が抑制されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。