Q&A (continue, goto, null)

2024. 9. 11. 15:08·📚 STUDY/🔥 C

📌 6.1 단원에서 나온 루프 말예요, "> 0" 검사를 빼면 좀 더 루프가 짧아지지 않나요? i가 0이 되면 루프는 멈출거고, 원래 사용했던 루프랑 동일하게 작동하잖아요.

while (i > 0) {
  printf("T minus %d and counting\n", --i);
}

while (i) {
  printf("T minus %d and counting\n", --i);
}

 

- 간결해보이지만, 몇 가지 단점이 존재함.

① 가독성이 떨어짐. 새 코드를 보면 i가 0이 되면 종료할 거라는 건 알겠지만, i를 통해 숫자를 증가하면서 수를 세고 있는 건지, 감소갛면서 수를 세고 있는 건지 불명확함.

② 새 코드는 만약 i가 루프가 실행될 때, 음수라도 되는 순간 원래 코드에서 의도한 방식대로 작동하지 않음. 원래 코드라면 바로 종료되겠지만, 새 코드는 바로 종료되지 않음.

 

 

📌 6.3 단원을 보니까 대부분의 경우 for문은 while문으로 공식처럼 치환이 될 수 있다고 하셨는데, 그럼 대부분이 아닌 경우는 뭐가 있나요?

// 1
n = 0;
sum = 0;
while (n < 10) {
  scanf("%d", &i);
  if (i == 0) {
    continue;
  }
  sum += i;
  ++n;
}

// 2
sum = 0;
for (n = 0; n < 10; ++n) {
  scanf("%d", &i);
  if (i == 0) {
    continue;
  }
  sum += i;
}

 

- 1을 2(for)로 치환함. 이게 근데 원래 코드랑 같은 코드는 아님.

- i가 0일 때, 원래 코드는 n을 증가시키지 않음. 반면, 새로 짠 코드는 n을 증가시킴.

 

 

📌 while (1)이랑 for(;;) 중에 어떤 게 더 나은 무한루프인가요?

- 보통 C 프로그래머들은 for (;;)을 더 선호함.

- 효율성 때문인데, 옛날 컴파일러들은 while문의 1 조건을 매번 검사하게 했음.

- 요즘 컴파일러들 기준으로 둘 사이에 성능 차이는 없음.

 

 

📌 프로그래머라면 continue문은 절대로 쓰면 안된다고 하던데, 정말인가요?

- 자주 사용하지 않는 건 맞지만, while문에서는 continue문을 나름 쓸만 함. 

- 아래 예시) 입력값을 받는 루프. 입력값을 받았을 때, 유효한 값이면 어떤 처리를 해준다고 가정. 만약, 이 값이 유효한지 아닌지 판별하는 코드가 상당히 복잡하다면 continue문이 상당히 유용함.

for (;;) {
  read data;
  if (data fails first test) {
    continue;
  }
  if (data fails second test) {
    continue;
  }
  .
  .
  .
  if (data fails last test) {
    continue;
  }
  process data;
}

 

 

 

📌 goto문이 도대체 뭐가 안 좋다는 거예요?

- 안 좋다기 보다, goto문보다 더 나은 방법이 있어서 그럼. goto문을 여러 번 사용하면 '스파게티 코드'가 될 것.

- goto문은 코드의 특정 부분이 여러 목적을 수행하게 만들 수 있기 때문에, 수정하기 까다로움.

 

 

📌 null문이 루프의 본문을 비워주는 것 말고는 따른 용도가 없나요?

- 매우 적음. 

- null문은 문법상 여러 군데에서 사용가능하기 때문에, 사용 가능성은 높음. 근데 실무에서는 본문 비우는 거 말고 드물게 발생하는 경우 딱 하나에만 사용함.

- 복합문 마지막에 라벨을 넣어야한다고 하자. 라벨은 혼자서는 사용할 수 없어요. 만드시 뒤에 구문이 따라와야함. 여기에 null문을 넣어주면 이 문제를 해결해줄 수 있음.

ed!{
  …
  goto end_of_stmt;
  …
  end_of_stmt: ;
}

 

 

📌 null문 말고는 빈 루프를 만드는 방법은 없나요?

- continue문을 사용하는 프로그래머들도 있긴 함.

for (d = 2; d < n && n % d != 0; ++d) {
  continue;
}

 

- 빈 복합문을 사용하는 경우도 있음.

for (d = 2; d < n && n % d != 0; ++d) {
}

 

 

 

💡 본 내용은 K.N.King의 C Programming: A Modern Approach 책을 참고하였습니다.

저작자표시 (새창열림)

'📚 STUDY > 🔥 C' 카테고리의 다른 글

[tip] 여러 줄 한 번에 출력하기  (1) 2025.01.22
[6-5] null문  (1) 2024.09.11
[6-4] 루프에서 벗어나기  (1) 2024.09.11
[6-3] for문  (2) 2024.09.05
[6-2] do문  (0) 2024.09.05
'📚 STUDY/🔥 C' 카테고리의 다른 글
  • [tip] 여러 줄 한 번에 출력하기
  • [6-5] null문
  • [6-4] 루프에서 벗어나기
  • [6-3] for문
엄지잉
엄지잉
공부하는거 올림
  • 엄지잉
    엄지잉의 이것저것
    엄지잉
  • 전체
    오늘
    어제
    • 분류 전체보기 (94)
      • 🏫 학교 (2)
        • 👩‍🏫 교직 (1)
        • 🏢 USG (1)
      • 🌱 탐구 (17)
        • 📷 SLAM (7)
        • 💡 연구 (8)
        • 🌐 BOJ (2)
      • 📚 STUDY (47)
        • 🔥 C (32)
        • 📈 알고리즘 (9)
        • 👀 컴퓨터비전 (5)
        • 🔆 UNITY (1)
      • 🏆 자격증 (23)
        • ⚡ 정처기 (17)
        • 🔠 TOEIC (6)
      • 🎈 활동 (4)
        • 🎁 CJ 리모트 인턴십 (2)
        • 😶 기타 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Github
  • 공지사항

  • 인기 글

  • 태그

    필기
    모션캡처
    C언어
    식별자
    mocopi
    컴퓨터비전
    C++
    DB 구축
    c기초
    Slam
    실기
    azurekinect
    SW 개발
    2022년
    프언 활용
    Remote Internship
    BOJ
    Azure Kinect
    2021년
    토익
    C
    SW 설계
    정처기
    알고리즘
    Unity
    opencv
    Body Tracking
    RC
    정보처리기사
    정보시스템 구축관리
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
엄지잉
Q&A (continue, goto, null)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.