Behavior」の日本語参考訳です。版はこちらからご利用になれます。式を使用することは正しいかどうかという質問について大きな討論を思いがけなく引き起こすことになりました。つのグループに分かれました。一方のグループは正しくないと主張し、もう一方は正しいと主張しました。両方のグループからさまざまな根拠やリンクが提示され、あるとき私は明確にすべき点があることに気付きました。開発チームに連絡をとりました。彼らからは、この記事を準備するにあたって多くの支援を受けました。興味のある方は、この続きを是非お読みください。答えを最後まで待てない人へ。このコードは正しくありません。カーネルのチェックに関する記事から始まりました。チェックでは何もする必要はありませんでした。コードを引用したことです。....}私は、このコードが未定義の動作を引き起こすと考えて、コードは危険であると述べました。とコメントが寄せられ、その説得力のある論拠に思わず納得してしまいそうになりました。マクロの実装が指摘されました。一般的な実装を次に示します。ポインターの逆参照が行われていますが、コードは問題なく動作します。私はだまされやすい性格ですが、疑わしい情報はダブルチェックしようとする一面も持ち合わせています。ポインターの逆参照問題に対する意見)」を執筆しました。すべては私が正しかったことを示していました。そのようなコードを記述することはできないのです。この記事では、私の結論に対する有力な証拠を提示するのではなく、標準規格の適切な項目を抜粋して引用しました。よる反論が寄せられました。言語のエキスパートに質問して回答を得ることにしました。この記事は、彼らの回答を要約したものです。式は未定義の動作を引き起こします。いずれかであるものとします。任意のオブジェクトや関数のポインターに対して等しくないことが保証されます。以外の不完全型を含む式です。オブジェクトを指定しない場合、動作は未定義です。)つまり、要約すると次のようになります。評価され、その結果、動作は未定義です。言語でも、状況は全く同じです。式は未定義の動作を引き起こします。多少の混乱をもたらしました。この議論に参加したプログラマーたちは、この式は未定義の動作ではないと主張しました。使用を認めている節を見つけられた人はいませんでした。アドレスにすることはできません。場合、未定義の動作を引き起こします。プログラムが動作するのは単に運がいいだけです。未定義の動作は、プログラマーが想定した方法でのプログラム実行を含む、さまざまな形になります。あったということにすぎません。そのようなコードを記述することはできません。ポインターは逆参照を行う前に確認する必要があるのです。演算子の慣用句的な実装を考える場合、コンパイラー実装は機能を実装するために可搬性のない手法を使用できることを考慮に入れる必要があります。使用しても問題ないということにはなりません。チェックは削除されます。カーネルは、そうしないようにコンパイラーに指示するスイッチを指定してコンパイルします。#2/3)」に言及していました。ドライバーのカーネル開発でも行われていたのは興味深いことです。pointers」を参照してください。ポインターがアクセスした構造体フィールドは、単にフィールドのアドレスを取得する代わりに変数を初期化する値として明示的に取得されることです。ポインターでフィールドのアドレスを取得することは未定義の動作になります。演算子の引数の場合は問題ありません。謝辞この記事は、全面的に信頼できるエキスパートのおかげで執筆することができました。執筆にご協力いただいた次の方々に感謝します。エンスージアストです。質問に回答することもあります)。