C言語で2次元配列に対するループで制御文から添字を省く試み

教育用の覚書。2次元配列、例えば画像データの画素に関するループで、添字に関するfor文を書くときに添字の範囲をタイポしそうなので、添字のインクリメントと範囲チェックを関数化してwhileの中に入れるとタイポのエラーが回避しやすいかもと思った。書いてみた。
画像データを格納するための構造体

typedef struct {
  int xMax, yMax;    // 画素数
  int **r, **g, **b; // 画素アクセス用のポインタのポインタ
  int x, y, flagSweep, margin; // 画素のループ用の変数
  [その他必要なもの]
} BMPData *img;

画素のループの処理

    initSweepPixel(img,margin); // ループ処理の初期化
    while( sweepPixel(img) ) {  // ループ処理の本体
        blue=  img->b[img->y][img->x];
        green= img->g[img->y][img->x];
        red=   img->r[img->y][img->x];
        ...
    }

添字を変化させ、添字の範囲をチェックする関数

int initSweepPixel ( BMPData *img, int margin ) {
  img->flagSweep= 1;
  img->x= margin;
  img->y= margin;
  img->margin= margin;
  return 1;
}
int sweepPixel ( BMPData *img ) {
  img->x++;
  if ( img->x - img->xMax + img->margin ) return 1;
  img->x= img->margin;
  img->y++;
  if ( img->y - img->yMax + img->margin ) return 1;
  img->flagSweep= 0;
  return 0;
}

for文がwhile文のシュガーシンタックス(for(A;B;C){D;} ⇔ A;while(B){D;C;})であることを言い換えたような感じ。