問題タブ [sequence-points]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - コード内の未定義の動作に対して gcc が警告を出さないのはなぜですか?
未定義の動作とシーケンス ポイントに関するこのSO C++ FAQを読み、少し実験しました。次のコードgcc-4.5.2
では、コード コメントで言及されている行でのみ警告が表示されますが、その前の 1 行も未定義の動作を示していますね。加算のどのオペランドが最初に実行されるかはわかりません (+
シーケンス ポイントがないため)。gcc がこの行でも警告を表示しないのはなぜですか?
助けてくれてありがとう。
c - C の結合性とシーケンス ポイント
'?' の結合性から は右から左に、任意の 2 つの連続する '?' です。演算子はそのように扱われなければなりませんよね?
今、
私はこれが次のように実行されることを期待しています:
右から左に実行されるため、最初の「?」に遭遇したとき。ステートメントでは、x の値は 0 であり、式は次のようになります。
したがって、私は y が 1 であることを期待していましたが、dev-cpp でゼロを示しています。どこが間違っていますか?
c++ - チェーンされた静的関数呼び出し間の引数評価順序
チェインされた静的関数とメンバー関数で引数の評価順序に違いがあるのはなぜでしょうか。この質問の回答から、このような連鎖関数呼び出し間の引数評価順序が指定されていないことがわかります。たとえば、次のスニペットを見てください。
GCC 4.6.2 および CL 15.00.30729.01 (MSVC 9) の場合、結果の出力は私のためのものです
しかし、仕様に何らかの理由があるのか 、それとも静的関数が左から右に(引数とともに)評価され、非静的関数の場合はすべての引数が最初に評価されるのか(right-私が他のテストで見たものから左へ)。
私がこれを尋ねている理由は、C で (構造体と関数ポインターを使用して) 同様の動作を取得しようとして失敗したときに、この動作の違いに最初に気付いたからです。これは、メンバー関数の GCC と MSVC の両方で実装された最適化であると強く疑っていますが、ここの誰かがこれについてもう少し詳しく説明してくれることを願っています。
編集:
奇妙に感じる重要な情報を 1 つ言及するのを忘れていました: GCC は、チェーンされた非静的関数の未指定の動作についてのみ警告しますが、静的関数については警告しません:
GCC はそのような警告を提供する義務はないので、2 番目の式を見逃す可能性がありますが、これが何か興味深いことが起こっていると私に思わせます。
c - ビットフィールドとシーケンスポイント
f0
とf1
を同じバイトにパックする実装の場合、以下のプログラムは定義されていますか?
C99とC11の答えが違うと思う理由があれば興味があります。
C99 では、6.5:2 しか見つかりませんでした。
前のシーケンス ポイントと次のシーケンス ポイントの間で、オブジェクトに格納されている値は、式の評価によって最大 1 回変更されます。[...]
この段落が上記のプログラムにどのような影響を与えるかは、私には明確ではありません。
多数のランダム化されたテストに基づいて、ほとんどのコンパイラは、2 つの割り当てが干渉しないコードを生成するようです。
c++ - コードが c++11 ではシーケンス ポイントを持ち、c++03 では持たない状況はありますか?
新しい c++11 標準では、シーケンス ポイントの記述方法が変更されたので、c++03 と c++11 の間で何が変更されたのかを正確に調べようとしています。
特に、同じように見えるコードが c++11 ではシーケンス ポイントを持ち、c++03 では持たないような状況はありますか?
c++ - イニシャライザ リストのシーケンス ポイントの警告
実際には同じものへの参照である場合とそうでない場合がある2つの参照を取る親クラスがあります。この場合、それらが同じ場合、Child クラスの初期化子リストでシーケンス ポイントの警告が表示されます。
メモリが割り当てられた後にその行の逆参照が発生することが保証されていないためだと思います。いずれにせよ、私の質問は、親または A のいずれかに変更を加えずに、とにかくこれに関連するものはありますか?
c - この操作の何が違法なのですか
つまり、これに似たコードで、出力が未定義になります。
この操作が正確に何と呼ばれているのかわかりません。
c++ - 可変長展開間のシーケンス
この非可変個の例では:
またはが最初に計算されるかどうFunc1()
かは指定されていませんが、呼び出されるFunc2()
前に両方を実行する必要があるだけです。MyFunc()
この順序付けは、可変引数の展開でどのように機能しますか?
f
それが、最初の呼び出し後に状態を変更する関数オブジェクトであるとしましょう。?f
の各セグメントに対して順番に呼び出されa
ます。つまり、展開されたリストをランダムにスキップするのではなく、 のリストのf
最初の項目、次に 2 番目の項目、3 番目の項目などで呼び出されますか? a
各アイテム間にシーケンス ポイントと呼ばれていたものはありますか?
c# - 同じコード、C#とC++で異なる出力
C#:
出力:27
C ++:
出力:76
同じコードの出力が異なりますが、なぜそうなのか誰かにわかりますか?感謝します!
c - C の三項演算子とシーケンス ポイント
私は以下に示す形式の式を持っています:-
三項演算子はCのシーケンスポイントですが、シーケンスポイントはテスト部分で終わると思います。
この理解は正しいですか?このステートメントは未定義の動作につながりますか?