본문 바로가기
Topos Uranos

요약

이 수업은 강좌가 끝까지 따를 작업 방식을 정한다. 편집, 저장, 컴파일, 실행, 읽기로 이루어진 작업 순환을 설명하고, 오류를 가능한 한 이른 단계에서 발견하는 것이 왜 유리한지 밝힌다. 강좌가 권하는 컴파일 명령과 그 각 옵션이 하는 일을 소개하고, 터미널에서 이 순환을 수행하는 방법과 같은 옵션으로 컴파일하도록 Visual Studio Code를 설정하는 방법을 보여 준다. 컴파일러의 출력에서 오류와 경고를 구별하고 그것이 가리키는 줄을 찾는 법을 가르친다. 새니타이저를 소개하는데, 새니타이저는 프로그램이 어떤 종류의 정의되지 않은 동작에 빠질 때 프로그램을 멈추고 그 줄을 알려 준다. 끝으로 한글이 제대로 표시되도록 콘솔을 준비해 둔다.

학습 목표

  1. 강좌의 옵션(-std=c++23 -Wall -Wextra 옵션과 나머지 옵션)으로 터미널에서 프로그램을 컴파일하고, -o 옵션으로 실행 파일의 이름을 정하고, 그것을 실행한다.
  2. 터미널과 같은 옵션으로 컴파일하고 경고를 문제 패널에 보여 주도록 Visual Studio Code를 설정한다.
  3. 컴파일러의 출력에서 오류와 경고를 구별하고, 각 경고를 낸 옵션을 말하고, 경고가 가리키는 줄을 찾는다.
  4. 메모리 오류 새니타이저와 정의되지 않은 동작 새니타이저를 켜고, 그 보고서에서 실패의 종류와 실패가 일어난 줄을 알아본다.
  5. 출력에 한글 대신 이상한 기호가 나타나는 이유를 진단하고, 글자가 제대로 보이도록 편집기와 콘솔을 설정한다.

작업 순환

프로그램을 쓰는 일은 한 번으로 끝나는 행위가 아니라, 한 번의 작업 중에 수십 번 되풀이되는 순환이다. 여기에는 다섯 단계가 있다. 소스 코드를 편집한다. 파일을 저장한다. 컴파일러가 읽는 것은 편집기의 화면이 아니라 디스크이기 때문이다. 컴파일한다. 즉 컴파일러에게 파일을 실행 파일로 번역해 달라고 요청한다. 그 결과를 실행한다. 그리고 컴파일러와 프로그램이 출력한 모든 것을 주의 깊게 읽는다. 읽은 내용은 새로운 편집으로 이어지고, 순환이 다시 시작된다.

마지막 단계는 가장 소홀히 다루어지면서도 가장 중요하다. 전제는 간단하다. 결함은 늦게 발견될수록 고치는 비용이 커진다. 컴파일러가 지적하면 어느 줄인지, 그리고 거의 언제나 왜인지 알 수 있다. 실행할 때 드러나면 무언가 잘못되었다는 것만 알 수 있다. 몇 주 뒤에 다른 데이터로 드러나면, 원인은 아무도 알아내지 못할 수도 있다. 이로부터, 결함은 되도록 일찍 발견하는 것이 좋으며 컴파일러는 프로그램의 첫 번째 검사자로 대해야 한다는 결론이 나온다. 지칠 줄 모르는 독자로서, 제대로 설정해 두면 오타보다 훨씬 많은 것을 알려 준다.

이 수업은 이 검사자를 세 수준에서 설정한다. 실행 파일을 얻지 못하게 하는 오류, 실행 파일은 얻게 하지만 의심스러운 코드를 지적하는 컴파일러 경고, 그리고 실행 중인 프로그램을 감시하는 새니타이저이다. 컴파일러와 편집기는 설치되어 있다고 가정한다(1.3강). 예제에서는 변수와 if 문을 쓰는데, 이것들은 2.1강과 4.1강에서 설명한다. 여기서는 읽을 수 있으면 충분하다.