C의 각 루프에 대해

Muhammad Zeeshan 2023년10월12일
  1. 프로그래밍 언어의 루프
  2. C의 for-each 루프
  3. 매크로를 사용하여 C에서 for-each 루프 구현
C의 각 루프에 대해

다음 내용은 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
}

배열을 사용하여 동일한 작업을 수행하기 위해 이 두 가지 중 하나를 수행할 수 있는 옵션이 있습니다.

  1. 배열의 길이는 배열의 첫 번째 멤버에 저장되어야 합니다.
  2. 배열의 길이와 배열 자체에 대한 참조를 저장하는 struct 내부에 배열을 캡슐화합니다.

이러한 구조 중 하나가 다음 예에 나와 있습니다.

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를 정의하여 쇠퇴하는 배열 포인터에서 작동하도록 할 수 있습니다. int*는 필요하지 않으며 count!= size는 사용자가 실수로 isize보다 크게 변경하여 끝없는 루프에 걸릴 경우를 대비하여 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