이번 포스트는 반복문에 관하여, 그리고 반복문 중 for문에 관하여 이야기를 하려 한다.
1. for문의 기본 사용 방법
void do_something(void)
{
for(초기식;판단식;연산식)
{
... do something
}
}
위 코드처럼 for의 괄호 안에 초기식; 판단식;연산식을 작성한다.
음 굉장히 자주 예시드는 코드로 한번 보자.
int i;
for(i = 0;i < 5; i++)
{
printf("*****\n");
}
위와 같은 코드가 있다면,
초기식은
i = 0;
가 초기식이 되는것이고,
판단식은
i < 5;
가 판단식
연산식은
i++
가 되는 것이다.
이처럼 세가지의 식을 동시에 넣어서 반복하는 문장인데,
이를 세가지의 식을 구분하기 위해 세미콜론을 사용한다.
2. 초기식의 응용 사례
for문이 의외로 다양한 형태로 사용한다.
초기식이 변형되기도 하고,
판단식이 괴랄해지기도 하며,
판단식에 단순히 증감만 쓰는게 아닐 수 있다.
먼저 초기식 활용을 보자.
for문의 초기식 위치에 오는 코드는 for문이 접근할 수 있는 변수는
다 입력이 가능하다.
int global_vars;
void something_func(void)
{
int i;
for(i = 0, global_vars = 20; i < 5; i++)
{
global_vars += (global_vars + i);
}
}
위의 코드처럼 global_vars라는 변수는 전역변수임에도 불구하고
for문에서 20이라고 초기화 하면 반복문을 실행할때 global_vars는 20부터 반복하게 된다.
하지만 저러면 버그찾기 매우 힘드니깐 어지간하면 전역변수 가지고 저런짓을 안 했으면 한다.
두번째로 텅 비어있는 초기식도 볼 수 있다.
for(;i < 20; i++)
{
do something
}
위처럼 초기식을 비워넣는 행위는
"여기는 이전에 사용했던 변수의 상태 그대로를 활용해서 반복한다."
라는 의미를 내포하고 있다.
2. 판단식 응용 사례
여기는 딱히 응용이랄 것이 없다.
조건 판단이라는게 하나만 걸리는게 아니지 않는가?
마찬가지다.
이 곳에선 여러 조건들을 내 걸수 있다.
다만 가독성 때문에 반복 관련 조건만 작성할 뿐이다.
판단식이 비어 있다는 것은 아래 코드에서 break나올때까지 무한히 실행한단
뜻도 포함되는거니, 여기는 어지간하면 비워두진 말자.
3. 연산식 응용 사례
다른 곳에선 증감식이라고 작성했던데
난 그게 도무지 이해가 안가서...
이곳에는 증감식만 넣는거 아니다.
초기 식 처럼 엄한 변수의 연산도 들어갈 수 있다.
for(i = 0;i < 5; i++, p += index_jump)
{
p[i] = something value;
if(index_jump condition)
index_jump = some value1;
else
index_jump = some value2;
}
이런식으로 연산 도중에 변수를 활용한 식도 볼 수 있다.
4. 특수 사례
이건 임베디드 펌웨어 세상에서만 볼수 있는 특이한 형태다.
for(;;)
{
do something
}
펌웨어에선 main이 전원이 동나기 전까진 멈춰서는 안된다는 조건이 있기 때문에
main loop라 부른다. (설계도 이게 대원칙이다.)
실무 코드서는 main loop를 while(1)로 두는데
이를 위 코드처럼 for문으로 쓰는 분들이 종종 있다.
가끔 MISRA C에선 while(1)이거 금지 조항이 있다는것만 얼핏 들어서
for(;;)로 대체한단 소리도 들어보긴 했는데...
사실 잘 넘어가서 피부엔 와 닿진 않고...
지금은 그냥 취향 정도로만 생각하고 있다.
'C언어 이야기' 카테고리의 다른 글
| C언어 - 반복문, while과 do-while (4) | 2025.07.23 |
|---|---|
| C언어 - 조건문(3) (2) | 2025.07.09 |
| C언어 - 조건문(2) (0) | 2025.07.02 |
| C언어 - 조건문(1) (0) | 2025.06.25 |
| C언어 - 연산자 (1) | 2025.06.18 |