달력

52024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

'while(0)'에 해당되는 글 1건

  1. 2007.05.16 do while(0) 을 이용한 goto 대체

어셈블리언어에는 특정 코드 위치로 바로 이동하기 위해서 goto 키워드를 많이 사용한다.
C언어에서도 goto 키워드가 존재하지만 절차식의 C 프로그래밍을 배우면서
흐름을 깨기 때문에 사용하지 않기를 권장한다.

유닉스를 만들기 위해 개발한 언어가 C인데, 정작 유닉스 & 리눅스 코드에서는
goto 키워들 상당 부분에서 발견할 수 있다.
간단히 말해서 엉키지 않게 제대로만 쓰면 error 처리하는 용도로 편리하게 이용할 수 있다.
다시 말하면 함수의 알고리즘의 흐름 상에서 다수의 error 검출을 해서 주로 공통적인 error 처리를 하는 경우,
함수의 끝에 error를 위한 특정 코드를 추가하고 Label을 설정해서 goto 키워드를 이용하는 방식이다.

이러한 goto 대신 비슷하게 사용할 수 있는 방식이 do while을 이용하는 것이다.

do{
  if (err)
      break;
}while(0);
error_handling_code

위와 같은 방식으로 while() 안에 조건을 '0'으로 하여 한 번만 실행되게 하고,
블록 안에서 error가 발생한 경우에만 블록을 빠져나오게 하여 while 이후의 코드를 실행하게 하는 것이다.

본인이 생각컨대 goto 키워드를 굳이 써서 다른 기능을 구현하자면,
다수의 Error에 대해서 그 처리가 공통적이지 않은 경우 여러 개의 Label과
해당 Label로 이동하게 하는 goto 키워드를 써서 구현하는 것이다.
이 경우 절차식 처리에서 상당히 벗어나는 어셈블리언어식 코드가 되는데
엉키지 않도록 주의해서 사용해야 할 것이다.

쓸데 없는 얘기를 많이 한 것 같은데,
결론적으로 goto 키워드를 통한 error 처리 대신에 do while(0)을 쓸 수 있다는 것을 알아두자는 것이다. ^^;

'Lang, Tool, Env' 카테고리의 다른 글

C 프로그래머가 알아야 할 것들  (1) 2007.05.16
CRC를 통한 error 검출  (0) 2007.05.16
static 통한 접근 제한  (0) 2007.05.16
CONTAINING _RECORD macro  (0) 2007.04.26
크기 미지정 배열의 새로운 고찰  (0) 2007.04.19
Posted by neodelicious
|