무엇을 하는 것인가
파이썬은 print("안녕") 한 줄이면 돌아갑니다. C는 그렇지 않습니다. #include, main, 중괄호, return 0이 갖춰져야 비로소 한 줄이 실행됩니다. 처음엔 번거롭지만, 이 뼈대가 뭘 뜻하는지 알면 외울 것이 아니라 당연한 것이 됩니다.
#include <stdio.h>는 "화면 입출력 기능을 가져와라"입니다. printf는 C에 원래 있는 말이 아니라 표준 라이브러리에 들어 있는 함수라서, 쓰겠다고 미리 알려줘야 합니다. 이 줄을 빼면 printf에서 경고나 오류가 납니다.
int main(void)는 프로그램이 시작되는 곳입니다. 이름이 반드시 main이어야 합니다. 앞의 int는 "이 함수가 정수를 돌려준다"는 뜻이고, 마지막 return 0;이 그 정수입니다. 0은 "탈 없이 끝났다"는 관례입니다.
파이썬이 들여쓰기로 묶는 것을 C는 중괄호 { }로 묶습니다. 그리고 문장마다 세미콜론;을 찍습니다. 초보자가 내는 오류의 절반은 세미콜론을 빠뜨린 것입니다.
예제 코드
아래 코드가 위 버튼으로 받는 파일과 같은 내용입니다. 통째로 복사해 실행해 보고, 값을 바꿔 가며 결과가 어떻게 달라지는지 보는 편이 읽기만 하는 것보다 훨씬 빨리 익습니다.
/* C언어 첫 프로그램 — 뼈대의 각 줄이 무슨 뜻인가
컴파일: gcc c-hello.c -o hello -Wall
실행: ./hello (윈도우는 hello.exe) */
#include <stdio.h> /* printf 를 쓰겠다고 미리 알려주는 줄 */
int main(void) /* 프로그램은 여기서 시작합니다 */
{
printf("안녕하세요!\n"); /* \n 이 줄바꿈. 빼면 다음 출력이 붙습니다 */
printf("줄바꿈 없이 ");
printf("이어 붙었습니다.\n");
/* 서식 문자로 값을 끼워 넣습니다 */
int 나이 = 20;
double 키 = 168.5;
char 등급 = 'A';
printf("나이: %d 살\n", 나이); /* %d 정수 */
printf("키: %.1f cm\n", 키); /* %f 실수, %.1f 는 소수 첫째자리까지 */
printf("등급: %c\n", 등급); /* %c 문자 하나 */
printf("이름: %s\n", "김서연"); /* %s 문자열 */
/* 여러 개를 한 번에 */
printf("%s (%d세) 등급 %c\n", "이준호", 21, 'B');
return 0; /* 0 = 탈 없이 끝났다는 관례 */
}
기억할 것
#include <stdio.h>—printf,scanf를 쓰려면 필요합니다.int main(void) { ... return 0; }— 여기서 시작하고 여기서 끝납니다.- 문장 끝에 세미콜론(;). 오류 메시지가 엉뚱한 줄을 가리키면 그 윗줄의 세미콜론을 보세요.
\n은 줄바꿈입니다. 안 붙이면 다음 출력이 같은 줄에 이어 붙습니다.printf는 서식 문자로 값을 끼워 넣습니다. 정수%d, 실수%f, 문자%c, 문자열%s.
자주 묻는 것
오류가 났는데 그 줄에는 아무 문제가 없습니다
C 컴파일러는 문제를 알아챈 지점을 알려줍니다. 세미콜론을 빠뜨리면 컴파일러는 다음 줄까지 읽고 나서야 이상하다고 느끼기 때문에, 오류가 가리키는 줄의 바로 윗줄을 먼저 보는 것이 요령입니다.
한글이 깨져서 나옵니다
윈도우 명령 프롬프트의 기본 코드페이지 때문입니다. chcp 65001을 먼저 실행하거나, 소스 파일을 UTF-8로 저장하고 gcc -finput-charset=UTF-8 -fexec-charset=UTF-8 옵션을 주면 됩니다. 실행 창을 UTF-8로 맞추는 문제이지 코드가 틀린 것이 아닙니다.
printf 와 puts 는 뭐가 다른가요
puts는 문자열 하나를 출력하고 줄바꿈까지 알아서 합니다. 서식 문자를 못 씁니다. 값을 끼워 넣어야 하면 printf, 그냥 한 줄 찍을 거면 puts가 간결합니다.
컴파일은 어떻게 하나요
gcc hello.c -o hello로 만들고 ./hello(윈도우는 hello.exe)로 실행합니다. -Wall을 붙이면 경고를 다 보여주니 배우는 동안에는 꼭 붙이세요. 경고는 대부분 진짜 버그입니다.