if文の中で変数を宣言できないのはなぜですか?

私は私のarduino時計の時間を設定するのに役立つvoid関数を持っています。同じ機能を2回使用する必要があります.1回はアラーム、もう一度は実際の時間です。私が定義している変数は、alarmHoursとalarmMinutes、または時と分のどちらかと等しい必要があります。これは私の解決策でした:

void setting(int i){
 if(i==0){
  int mi=alarmMinutes;
  int ho=alarmHours;
 }else if(i==1){
  int mi=minutes;
  int ho=hours;
 }
//more code later
}

私はホとミは定義されていないと言っている間違いを持っ​​ています。 私はこれを次のように修正しました:

void setting(int i){

 int mi;
 int ho;

 if(i==0){
  mi=alarmMinutes;
  ho=alarmHours;
 }else if(i==1){
  mi=minutes;
  ho=hours;
 }
}

これは問題を解決しました。関数のパラメータに0または1を渡した場合、最初のオプションを使用できないのはなぜですか?

0

2 答え

ブロック内の変数を宣言すると、ブロック内に変数が存在するだけです。ブロックが終了すると、ブロックにアクセスできなくなります。

4
追加された
具体的には、最も近い中括弧{ {} のペアに適用されます。
追加された 著者 caryden,
以前は、関数にのみ適用されると思っていました。 if文を含むすべてのコードブロックに当てはまると思います。
追加された 著者 Ron-Damon,

最初のやり方で問題を起こしたのは、if文の中で初期化した変数がelse文にならないということです。

それがあなたの解決策が正しい理由です。ブロックを使用するには、ブロック内に入る前に変数を宣言する必要があります。

ブロックの内部で変数を宣言するための用途がありますが、これは実現して固定しているものの1つではありません。

2
追加された