C 言語の for-each ループについて

Muhammad Zeeshan 2023年10月12日
  1. プログラミング言語のループ
  2. C 言語の for-each ループ
  3. C でマクロを使用して for-each ループを実装する
C 言語の for-each ループについて

次のコンテンツでは、C 言語が for-each ループをサポートしているかどうかを調査します。まず、ループとは何かを正確に知る必要があります。

プログラミング言語のループ

プログラミング言語でのステートメントまたは単語のコレクションの実行は、条件の評価の結果によって決定される繰り返しの数で、何度も実行するためにループされる場合があります。ステートメントがループ内で実行されるためには、結果として生じる条件が満たされる必要があります。

コレクションコンポーネントの反復は、for-each ループを使用して実行できます。コレクションは、リストまたは配列の場合があります。

配列の各要素に対して操作を実行します。

C 言語の for-each ループ

for-each 構文は C ではサポートされておらず、実装できません。配列がポイント表記を使用して解析される場合、受信者は配列の長さを知りません。

したがって、配列の最後に到達した時期を判断する方法はありません。C 言語の int*変数は、int を含むメモリ内の場所へのポインタであることに注意してください。

順番に並べられた数字の数に関する情報を持つヘッダーオブジェクトはありません。これは、数字がないためです。結果として、プログラマーはこれを追跡する必要があります。

一方、リストを操作するときに for-each ループと同様に機能するものを作成するのは簡単です。

for (Node* node = head; node; node = node.next) {
  // Your logic will be here
}

配列を使用して同じことを達成するために、これら 2つのことのいずれかを実行するオプションがあります。

  1. 配列の長さは、配列の最初のメンバーに格納する必要があります。
  2. 配列の長さと配列自体への参照を格納する struct 内に配列をカプセル化します。

そのような構造の 1つを次の例に示します。

typedef struct job_t {
  int countvariable;
  int* arr;
} arr_t;

C でマクロを使用して for-each ループを実装する

さらに、マクロを利用してコードを簡素化し、理解と記述を容易にする場合があります。一部のデータ構造では、マクロを作成して、C 言語で for-each 構造を実装できます。

この概念をよりよく理解するために、次の例を見てみましょう。

#include <stdio.h>

int main() {
#define FOREACH(item, arr, start, size)                              \
  for (int i = start, keep = 1; keep && i < size; keep = !keep, i++) \
    for (item = arr[i]; keep; keep = !keep)

  int arr[] = {3, 9, 7, 1, 8};
  FOREACH(int z, arr, 3, 7)
  printf("Shanii Demo index: %d. element: %d\n", i, z);
}

これで、start インデックスと size を定義して、減衰する配列ポインターで機能するようになりました。ユーザーが誤って isize より大きく変更した場合に備えて、int*の必要はなく、count!= sizei<size に変更されました。無限のループ。

出力:

Shanii Demo index: 3. element: 1
Shanii Demo index: 4. element: 8
Shanii Demo index: 5. element: 32766
Shanii Demo index: 6. element: -1762484992
Muhammad Zeeshan avatar Muhammad Zeeshan avatar

I have been working as a Flutter app developer for a year now. Firebase and SQLite have been crucial in the development of my android apps. I have experience with C#, Windows Form Based C#, C, Java, PHP on WampServer, and HTML/CSS on MYSQL, and I have authored articles on their theory and issue solving. I'm a senior in an undergraduate program for a bachelor's degree in Information Technology.

LinkedIn