問題タブ [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.
glsl - GLSL での式の順序付け: ポストインクリメントで何が起こるか
C/C++ では、"sequence points"/"sequenced before" 関係を定義する明確なルールがあるため、たとえば次の式
未定義の動作を呼び出します。
さて、GLSL でこのような式を管理する規則は何なのだろうかと思います。The OpenGL Shading Language (4.40) 仕様には、シーケンス ポイント/sequenced before relationship に似た概念を定義するものは見つかりませんでした。
セクション「5.9式」では、それは言うだけです
プレインクリメントとプレデクリメントは、演算対象の式の内容に 1 または 1.0 を加算または減算し、プレインクリメントまたはプレデクリメント式の値は、その変更の結果の値です。ポスト インクリメントおよびポスト デクリメント式は、演算対象の式の内容に 1 または 1.0 を加算または減算しますが、結果の式には、ポスト インクリメントまたはポスト デクリメントが実行される前の式の値が含まれます。
しかし、たとえば他の部分式との関係でポストインクリメントが実際にいつ発生するかについては言及されていません。
1/ GLSL で式の順序付けがどのように定義されているかについて、仕様または合意はありますか?
2/i-- * ++i
有効な/明確に定義された GLSL 式ですか? もしそうなら、最初に持っていたときのその価値は何i=1
ですか?
c - Cで3番目の変数を使用せずに2つの変数の値を交換しますか?
次のコード スニペットを見つけました。
実際に変数を交換します
コードが変数を交換する方法を誰か説明してもらえますか?
括弧が最初に実行され、次に式が続くと思いました
c++ - シーケンス ポイントと UB を使用した C と C++ の違い
この投稿未定義の動作とシーケンス ポイントを使用して、 Cプログラムの未定義の動作 ( UB )を文書化しました。では、シーケンス ポイントと関連するUBに関して、 CとC++の違いは何ですか? C++シーケンスに関する投稿を使用して、 Cコードで何が起こっているかを分析することはできませんか?C and C++ have their own divergent rules for this [sequence points]
C++
* もちろん、 に当てはまらないの機能について話しているわけではありませんC
。
c - 標準からの Microsoft C 偏差
次の異常の理由は何ですか?
次の C プログラム (PstFixInc.c という名前) を検討してください。
でコンパイルした場合gcc 4.8.1
:
gcc -o PstFix.exe PstFixInc.c
そして実行すると、次の結果が得られます。
数: 0
Microsoft (R) C/C++ 最適化コンパイラ バージョン 18.00.21005.1 for x86 でコンパイルした場合
cl PstFixInc.c
そして実行すると、次の結果が得られます。
数: 1
c++ - C++ cout 副作用シーケンス
次のコードを想定します。
1
およびとしてマークされた行を実行2
し、ideone でコンパイルすると同じことが行われ、次のように出力されます。
私の見解では、関数の引数が解決される順序が指定されていないため、ここで観察される動作は指定されていません。
これはインタビューでの質問で、上記のシーケンス (代替なし) を印刷するのが正解のはずでしたが、本当に正しいのでしょうか?
c - 無限ループの理由
私はこれを読みました。while 文と文の終わり (;) がシーケンス ポイントであることが明確に示されています。
したがって、上記のものが無限に実行され、同じ値が出力される理由がわかりません[5]。
c - c - i = ++i が未定義の動作を呼び出すのはなぜですか?
C はシーケンス ポイントの概念を使用してあいまいな計算を識別し、その=
演算子はシーケンス ポイントではないことを理解しています。ただし、ステートメントの実行にあいまいさは見られません
i = ++i
私の理解では、これは単純に にあるものを評価し&i
、それをインクリメントして、同じ場所に戻すことになります。それでも、GCC は次のようにフラグを立てます。
[警告] 'i' に対する操作は未定義の可能性があります [-Wsequence-point]
=
どのように機能するか について何かが欠けていますか?
編集: 重複としてマークする前に、シーケンス ポイントと未定義の動作に関する他の投稿を閲覧したことに注意してください。それらのどれも具体的に式に対処していません( prei=++i
-incrementに注意してください)。言及されている表現は一般的に、 などです。私はそれらのいずれについても疑いの余地はありません。i=i++
a=b++ + ++b
c++ - C++11 での安全な短絡評価
&&
C++11 より前のバージョンでは、次の理由により、演算子には短絡と評価順序が必要であることがわかっています。
1.9.18
次の式の評価では
これらの式の演算子の組み込みの意味を使用すると、最初の式の評価の後にシーケンス ポイントがあります(12)。
しかし、C++11 にはシーケンス ポイントが存在しなくなったため、次の標準部分はどこにありますか。
安全ですか?
c - 「i」の操作は未定義の可能性があります
bla_2
フォームの文字列を取得して分離するこのコードがあります。
私が得た:
しかし、私は演算子をi
介して変更しているだけ++
で、何も割り当てていません。
では、もしそうなら、なぜUBなのですか?そうでない場合、警告を取り除く方法は?
私の意見では、この質問は別の問題を扱っていることに注意してください。