아두이노 함수에서 루프로 돌아가는 방법

C언어 분기문(return, break, continue)

- 프로그램의 순차적 수행 순서에 따르지 않고 다른 명령을 수행하도록 이행 시키는 명령입니다.

- 분기문에는 여러 종류가 있고, 각각 다른 특징을 가집니다.

1. return

return은 자신(함수)를 호출한 곳으로 다시 되돌아가는 명령입니다.

아직 함수에 대해서 자세히 다루지는 않았지만, 이미 우리는 return 을 봤습니다.

  1. int main (void)

  2. {

  3. return 0;

  4. }


C언어의 기본인 main 함수를 보면, return 을 포함하고 있습니다.

return '상수 or 변수'; 의 구조로 사용이 되는데, 자신을 호출한 곳으로 돌아가면서,

'상수 or 변수'의 값을 반환해 주는 것입니다. 위의 예제에서는 즉, main 함수를 호출한 곳으로

돌아가라는 의미로 다르게 말하자면, main 함수가 프로그램의 시작이기 때문에 main을 호출한 곳으로

돌아가라는 것은 프로그램의 종료를 의미합니다.

아두이노 함수에서 루프로 돌아가는 방법

만약 main 함수에서 func 라는 함수를 호출(1) 하였고, func에서 return을 하게 되면

다시 main 함수로 돌아가는 것(2)입니다. 중요한 사항은, return을 하게 되면 함수를 호출한

직 후의 위치로 돌아가는 것 입니다.

2. break

break는 현재 현재 수행 중인 루프 중 가장 가까운 루프를 벗어나는 명령입니다.

  1. int main (void)

  2. {

  3. int i;

  4. for( i = 1 ; ; i ++)

  5. {

  6. if( i == 10)

  7. {

  8. break;

  9. }

  10. }

  11. return 0;

  12. }


위의 예제를 보시면, line.5의 for문에 조건부가 비어져 있습니다. 이 경우에는 비교할 조건이 없기 때문에

루프가 무한으로 반복하게 됩니다. 하지만 루프 안에 line.7의 조건에는 i 값이 10이 되면,

break를 수행한다고 명시되어 있습니다.

즉, break를 만나면 가장 가까운 루프인 for를 빠져나가게 됩니다.

break 수행 후의 위치는 line.11의 중괄호 다음이 됩니다.

  1. int main (void)

  2. {

  3. int i, j;

  4. for( j = 1 ; ; j ++)

  5. {

  6. for( i = 1 ; ; i ++)

  7. {

  8. if( i == 10)

  9. {

  10. break;

  11. }

  12. }

  13. }

  14. return 0;

  15. }

위의 소스를 보면, 루프가 2개가 겹쳐 있는 구조입니다. line.5에 for문이 있고 그 안에 line.7에 for문이

또 있습니다. 앞서 설명한 것과 같이 break는 가장 가까운 루프를 벗어나게 됩니다.

위의 예제코드에서 break를 수행하면, 가장 가까운 루프인 line.7의 for문을 벗어나므로

line.13의 중괄호 다음의 위치로 가게 됩니다. 하지만 line.5의 for를 벗어나지 못했으므로

계속해서 무한 루프를 수행하게 됩니다. 이렇듯 반복 루프가 2겹 이상일 경우에는

break의 사용에 주의하시기 바랍니다.

3. continue

continue는 현재 수행 중인 루프의 처음으로 되돌아가는 명령입니다.

break와 많이 헷갈리시는 분들도 계시지만, continue는 루프 자체를 벗어나지 못합니다.

단순히 continue 다음에 있는 내용들을 무시하고, 루프의 처음으로 돌아가라는 명령입니다.

  1. int main (void)

  2. {

  3. int i, j;

  4. for( i = 1 ; ; i ++)

  5. {

  6. if( i == 10)

  7. {

  8. continue;

  9. }

  10. }

  11. return 0;

  12. }

위의 소스를 예로 보시면, for문을 이용하여 무한 루프를 수행하고, 반복 문장에는

continue와 출력문(printf)가 있습니다. i가 10이 아닌 모든 경우에는 출력문을 수행합니다.

하지만 i가 10이 돼서 continue를 수행하면, continue 아래에 있는 반복 내용들을 수행하지 않고

다시 line.5인 루프의 처음으로 돌아가게 됩니다.

※ 즉, continue와 break의 공통점은 각 분기문을 만났을 때, 분기문 아래에 있는 루프 내용들은

수행하지 않습니다. 다만 break는 루프를 벗어나는 것이고, continue는 루프의 처음으로 갑니다.