こんにちは。
MikroCというコンパイラで
C言語のプログラムを組んでいます。
ここで、
ある関数に引数を渡すのですが、
a=Adc_Read(0);
a=a+10;
Delay_Cyc(a);
では、期待した動作を
しないのですが、
a=Adc_Read(0);
Delay_Cyc(a+10);
では、期待した動作となります。
また、
a=Adc_Read(0)+10;
Delay_Cyc(a);
でも、期待した動作となります。
まったく同じのように
思うのですが、
何が違うのでしょうか。
コンパイラが、a=a+xという
書き方を許していない
ということでしょうか。
何か分かる人がいましたら、
よろしくお願いします。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
>期待した動作をしないのですが、
と書かれても、回答者にはどのように動作していないのかは判断するすべがありません。
Adc_Read();
Delay_Cyc();
に関連するソース(呼び出し元も含めて)をすべて開示してください。
最低でも上記二つの関数のソースの内容と
>a=a+10;
のaの宣言文は必須です。
>コンパイラが、a=a+xという書き方を許していないということでしょうか。
ならば、普通はコンパイル時にワーニングもしくはエラーとなります。
No.4
- 回答日時:
こんばんは。
質問者様の期待する動作がどのようなものか分かりませんがタイトルにある「a=a+1;mysub(a);とmysub(a+1);」は少なくとも違う動きになりますね。
1つめの「a=a+1;mysub(a);」は
(1).a=a+1; ここで"a"は加算されて"a"に代入されるため、"a"自体が変化
(2).mysub(a); 変化した"a"を関数"mysub"に引き渡し
2つめの「mysub(a+1);」は
(1).<mysub実行前の>a+1 "a+1"自体は評価されるが"a"自体は変化しない
(2).mysub(a+1); "a+1"の結果が関数"mysub"に引き渡される
前者は"a"の値が変化しますが、後者は"a"の値は変化しません。
質問本文にある"Delay_Cyc"関数に渡す値は変化しませんが、その後の"a"は変化しますよ。
質問者様が指しているのが本文の"a"の結果であれば、
1つめと3つめは同一の結果、2つめは他より10少ない結果です。
ただ、質問者様が期待している動作は2つめと3つめなので、少なくとも"a"の結果を期待しているのではないのですよね?
質問本文に間違いがなければですが…
他には"Adc_Read"関数実行、"a+10"の評価、"Delay_Cyc"関数実行のタイミングは若干異なるのかな?
バイナリレベルの想像がつかないし、どんな実行方式かも分からないので何とも言えませんが。
MikroCというコンパイラがどのようなものか分かりませんので、実行コードに落ちた段階でどうなるかは分かりません。
後は質問者様はデバッグ中だと思いますが、その注視する範囲が間違っているとか、問題を見誤っているとか?
参考になれば幸いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 コードを書いたのですが上手く実行出来なかったです。どこが間違ってますか? 【作成したいもの】 1 2022/05/04 11:36
- C言語・C++・C# C言語 ① 5秒間 1秒間隔で点滅を繰り返す ② 3秒間 0.5秒間隔で点滅を繰り返す ①→②→①→ 5 2022/05/03 23:37
- 英語 英文和訳の正解を教えてください。 1 2023/05/11 12:38
- 英語 「今日 ひさしぶりに本を読みました」を自然な英語で。 2 2022/04/14 11:01
- C言語・C++・C# C++のcase文の書き方 4 2023/02/24 20:50
- 数学 確率の問題 4 2023/02/24 01:07
- 高校 英作文 今度のテストの英作文で、英語が苦手なので手伝って欲しいです。 下のような文を書きたいのですが 1 2022/11/20 17:28
- 英語 日本語の意味を教えてください 2 2022/09/03 08:28
- 英語 文の構造 4 2022/05/25 15:19
- 英語 英文が正しいか教えて下さい 1 2023/03/11 22:21
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
volatile修飾について
-
C++ で、「)」が必要 というエ...
-
0除算して、落ちるプログラムと...
-
コンパイルできない
-
C++でアボート(Abort)で処理が...
-
C言語のワーニングメッセージの...
-
makeのエラーについて
-
io.hをincludeするとそのような...
-
UNIX フォートラン 数値計算精度
-
困っています。
-
COBOLのEVALUATE文について
-
【エラー】Cpadで初めてコンパイル
-
PICマイコンでGIEビットが1に出...
-
無償ボーランドC++5.5の...
-
コンパイラの制限 : ヒープの領...
-
インクリメント演算子のみを用...
-
スポーツ施設での出来事で心配...
-
65536は2の何乗なのでしょうか?
-
Vba 実数および実数タイプの変...
-
【JAVA】数字をひし形に出力す...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
0除算して、落ちるプログラムと...
-
C++ で、「)」が必要 というエ...
-
コンパイルできない
-
C++でアボート(Abort)で処理が...
-
変数(関数)名の頭に_
-
Visual C++とVisual C++.NETの違い
-
Eclipseの環境設定について
-
volatile修飾について
-
コンパイラについて
-
linuxのセキュリティ対策と致し...
-
__extension__
-
io.hをincludeするとそのような...
-
コンパイラフラグ(compiler fla...
-
PICマイコンによる乱数の表示に...
-
conio.h? curses.h?
-
【エラー】Cpadで初めてコンパイル
-
ABAQUS ユーザーサブルーチン...
-
関数の戻り値による変数の初期化
-
Delphiの逆コンパイル
-
プリコンパイラとは?
おすすめ情報