【C言語】研究 ループカウンタを改変出来なくする

 C言語のfor文では通常 i がカウンターとされます。そのときに i をループ中で改変出来るとバグが多く発生する原因になります。また、カウンタを改変する意図がなくても行ってしまう可能性もあります。 今回はこの解決策について考えてみます。

ループ開始時にconstにする

  1. #include<stdio.h>
  2. main(){
  3.     for(int i=0;i<10;i++){
  4.         const auto x = i;    //ループカウンターを定数として代入
  5.         {
  6.             const int i =0;    //生のループカウンター iにアクセス出来ないようにこれで封印
  7.             printf("%d ",x);
  8.         }
  9.     }
  10.     
  11. }

6行目で const auto x=i; としています。これは i の内容を定数として x に代入しています。変化する値なのに定数というのは変ですが、ここでの意味は 変化する値 i を使いこれ以降のxを定数とすることです。

これにより x の値は変更できません。 x++ などの変更するコードを記述するとコンパイルエラーが出るのでループカウンターの値を変更するバグを防げます。

更に i も改変不可にする

これでも、直接 i を変更可能です。 今回はこれを防ぐために、ブロックを一つ追加しています。 7と10行目の括弧囲んだ部分が追加したブロックです

このブロックの中の 8 行目で const int i = 0; としています。これによりループ変数としての i にアクセスできなくなります。 さらに i++ など変更を加えようとするとエラーが出ます。 難点としては i を参照すると この場合は0が取得できるところです。

仕様として error 型でも作って 参照したら即エラーになるような型でもあれば良いのですけど。

クラウドを使わずにバックアップが安心 ROBOCOPY と バックアップの習慣化

 皆さん、ファイルのバックアップは作成していますか? 私が聞いた限りでは「誰もやっていない」というのが正直なところです。ただ、そこまでパソコンというデバイスを信用しているのは怖いところです。 「良い道具は一生物」という言葉があります。実際、工具類は良いものを手に入れれば一生涯使え...