Q & A

\n은 다른 문자와 붙여 써도 되는건가요?

보통 \n"Hello, world!\n"처럼 사용하는데요. 붙여서 써도 상관 없습니다. 만약 문자와 \n 사이를 공백으로 띄우면 눈에는 보이지 않지만 실제로는 공백도 함께 출력됩니다.

//                   ↓ 문자와 \n 사이를 공백으로 띄움
printf("Hello, world! \n");
printf("1234\n");

실행 결과

             ↓ 실제로는 \n 앞의 공백이 출력됨
Hello, world! 
1234

Debug 모드와 Release 모드는 무엇인가요?

Visual Studio에서는 기본적으로 C/C++ 빌드 모드가 Debug, Release로 나뉘어져 있습니다.

  • Debug: 실행 파일에 디버깅 정보가 포함됩니다. 따라서 Visual Studio의 디버거에서 지역 변수의 값이나 기타 디버깅 정보를 확인할 수 있습니다. 실행 파일은 솔루션 디렉터리 아래의 Debug 디렉터리에 생성됩니다.
  • Release: 실행 파일에 디버깅 정보가 포함되지 않고, 속도와 크기가 최적화됩니다. 따라서 제품을 개발하여 출시할 때 사용하는 모드입니다. 실행 파일은 솔루션 디렉터리 아래의 Release 디렉터리에 생성됩니다.

main 함수가 없으면 어떻게 되나요?

C 언어로 실행 파일을 만들 때는 main 함수가 있어야 합니다. 만약 main 함수가 없으면 링크 에러가 발생합니다.

1>  hello.c
1>MSVCRTD.lib(exe_main.obj) : error LNK2019: _main 외부 기호(참조 위치: "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ) 함수)에서 확인하지 못했습니다.
1>C:\project\hello\Debug\hello.exe : fatal error LNK1120: 1개의 확인할 수 없는 외부 참조입니다.

main 함수의 이름이 다를 수도 있나요?

main 함수의 이름은 운영체제에 따라 달라질 수 있습니다. 예를 들어 Windows에서 WinAPI로 프로그래밍을 한다면 WinMainmain 함수로 사용합니다.

#include 를 안 써도 printf 함수를 사용할 수 있던데요?

scanf, printf 등의 함수는 컴파일러가 암묵적으로 포함하기 때문에 #include를 안 써도 사용할 수는 있습니다(컴파일러에 따라 경고만 발생시키고 넘어가는 경우도 있고, 에러로 처리해서 컴파일이 안 될 수도 있습니다). 하지만 바람직하지 않은 방법입니다. 따라서 함수를 사용할 때는 항상 함수가 선언된 헤더 파일을 포함해주세요.

이 책의 코딩 스타일을 지켜야 하나요?

이 책은 일반적으로 사용하는 코딩 관례를 따릅니다.

printf ( "Hello, world!\n" ) ;

함수와 괄호 사이, 괄호와 인수 사이에 공백을 넣거나 ; 앞에 공백을 넣는 사람도 있습니다. 그러나 가능하면 코딩 관례를 따르는 것이 좋습니다.

이것도 가능하던데요?

# include < stdio.h >

컴파일은 되지만 바람직하지는 않습니다. 코딩 관례대로 #include <stdio.h>와 같이 작성해주세요. 다른 사람이 내 코드를 읽거나 내가 다른 사람의 코드를 읽을 때 서로 코딩 관례를 따른다면 코드를 읽기가 편해집니다.

컴퓨테이셔널 씽킹과 알고리즘의 차이점은 무엇인가요?

컴퓨테이셔널 씽킹은 4가지로 되어 있습니다.

  • 분해: 복잡한 문제를 작은 문제로 나눕니다.
  • 패턴 인식: 문제 안에서 유사성을 발견합니다.
  • 추상화: 문제의 핵심에만 집중하고, 부차적인 것은 제외합니다.
  • 알고리즘: 이렇게 정의한 문제를 해결하는 절차입니다(일반화와 모델링은 여기에 포함됩니다).

복잡한 문제를 해결하는 것은 어렵지만, 작은 문제를 해결하는 것은 비교적 쉽습니다. 작은 문제를 해결하다보면 복잡한 문제를 해결하게 됩니다. 컴퓨터 공학에서 배우는 알고리즘은 대부분 정형화된 문제에 대해 검증된 해법을 제시하는 과목입니다.

현실에서 컴퓨터로 해결하려는 문제는 정형화된 문제가 아니라 비정형화된 문제가 더 많습니다. 그래서 비정형화된 문제를 컴퓨터로 해결하는 과정, 즉, 문제를 이해하고 분해, 패턴 인식, 추상화, 알고리즘 작성까지를 컴퓨테이셔널 씽킹이라고 합니다.