ホーム › フォーラム › Texas Instruments › マイコン › C2000 › 数値代入の順序 このトピックには1件の返信が含まれ、2人の参加者がいます。5 年、 6 ヶ月前に Yojiro さんが最後の更新を行いました。 2件の投稿を表示中 - 1 - 2件目 (全2件中) 投稿者 投稿 2019年5月27日 9:13 AM #6345 返信 HGTK参加者 数値代入の順序 デバイス型番:TMS320F28377SPTP お世話になっております。 現在、プログラム作成を実施しておりますが、 下記のコードにおいて、意図した動作とならず、困っております。 //条件成立前のX = 0 if(条件){ Y = X ; //Xの前回値をYに保存したい X = 10 ; //Xに次の値を代入したい } 条件成立時の結果 ⇒ Y = 10 X = 10 プログラムの処理は上から順に実施されると思っていますが、 2行同時に処理されているような挙動となっているように思います。 処理の順序において、上から順番との考え方が間違っているでしょうか? お手数おかけしますがご教示のほどお願いいたします。 2019年5月27日 9:36 AM #6346 返信 Yojiro従業員 HGTKさん プログラムの処理につきましては、基本的には上から順に実施されますが、最適化の設定により、プログラムの順番は前後することはあります。この条件分で変数Yへ設定したあと、その後変数Yが使用されることなく、再び変数Yへ変数Xの値を代入する行がある場合、最適化によっては最初の代入により変数Yは更新された変数Xの値が入る可能性はあります。 変数Yがauto変数の場合は、変数Y自体が、スタック領域ではなくレジスタに割り当てられることもあります。この場合、デバッグにてステップ実行でこのコードを実行直後は正しく反映して見えるのですが、数ステップ先では、別の用途で使用され値が変わって見えることもあります。 これを防ぐためには、変数Xおよび変数Yの定義・宣言において、volatile修飾子をつけていただくことをおすすめいたします。変数の定義・宣言にてvolatile修飾子を使用いただくと、その変数に対する最適化が抑制されますので、期待する動作となることが期待できます。 また、上記コードのみからの判断にはなりますが、コメントの記載についてもご確認いただけますでしょうか。 C言語ではコメントの記述に2種類( “/* ~ */” と “// ~”)使用することができます。後者(”// ~”)をお使い且つ日本語(Shift-JIS)での記載の場合、文字コードに注意いただく必要がございます。Shift-JISでは、2バイト目に’\’(文字コード0x5C)が使用される文字が複数あります。この文字をコメントの最後の文字に使用されると、続く改行文字が無効となり、コンパイルエラーまたは意図しない動作の原因となります。 コメントに”// ~ ”を使用される場合は、最後の文字にピリオド”.”を入れていただくか、文字コードをUnicodeで保存いただくことをおすすめいたします。 ご確認のほど、よろしくお願いいたします。 投稿者 投稿 2件の投稿を表示中 - 1 - 2件目 (全2件中)