C언어 공부하기: 시작하며 느낀 점과 개발 환경 설정
C언어 공부하기: 시작하며 느낀 점과 개발 환경 설정
솔직히 C언어를 시작한 건 거창한 이유가 있어서가 아니었습니다. Python으로 이것저것 만들다 보니까 “이게 내부적으로 어떻게 돌아가는 거지?” 하는 궁금증이 계속 쌓였는데, 그걸 해소하려면 결국 한 단계 아래로 내려가봐야 하더라고요. 그래서 C를 꺼내 들었습니다.
왜 하필 C언어였나
사실 C++이랑 고민을 좀 했습니다. C++이 더 현대적이기도 하고, 클래스도 쓸 수 있으니까요. 근데 C++은 문법이 너무 방대해서 “기초부터 다시 본다”는 취지랑 안 맞을 것 같았습니다. C는 문법 자체가 작아서 언어보다는 컴퓨터 구조 쪽에 집중할 수 있겠다 싶었어요.
그리고 한 가지 더, Python을 쓸 때 list나 dict가 내부적으로 메모리를 어떻게 쓰는지 전혀 감이 없었습니다. 가비지 컬렉터가 알아서 해주니까 신경 쓸 일이 없었는데, 그게 오히려 찜찜했달까요. C를 하면 그런 부분을 직접 다루게 되니까 한번 해보자고 생각했습니다.
개발 환경 세팅 — 여기서 시간을 좀 썼습니다
MinGW-w64 설치
Windows에서 C를 컴파일하려면 gcc가 필요한데, 이걸 Windows에서 쓸 수 있게 해주는 게 MinGW-w64입니다.
설치 자체는 어렵지 않습니다.
- https://www.mingw-w64.org/ 에서 설치 파일을 받아서 실행
- 설치 경로를 정하고 Next를 쭉 누르면 끝
설치 후에 환경 변수 PATH에 MinGW의 bin 폴더를 추가해줘야 합니다. 이걸 안 하면 CMD에서 gcc를 못 찾아요. 저는 처음에 이걸 빠뜨려서 “gcc는 설치했는데 왜 안 되지?” 하고 한참 헤맸습니다.
확인은 CMD를 열고 이렇게 치면 됩니다.
gcc --version
버전 정보가 뜨면 된 겁니다. 안 뜨면 PATH를 다시 확인해보세요.
VS Code 설치
에디터는 VS Code를 골랐습니다. 다른 것도 써봤는데 결국 여기로 돌아오게 되더라고요. 가볍고 확장 프로그램이 많아서 C 개발에도 무리가 없습니다.
- https://code.visualstudio.com/ 에서 다운로드
- 설치하고 실행
Ctrl + Shift + X로 확장 프로그램 탭 열기- “C/C++” 검색해서 Microsoft 거 설치
C/C++ 확장을 깔면 코드에 색이 입혀지고 자동완성도 되니까 훨씬 편해집니다.
첫 코드 작성하고 실행하기
VS Code에서 hello.c 파일을 만들고 이렇게 작성했습니다.
#include <stdio.h>
int main() {
printf("Hello, World!\n");
printf("안녕하세요! C언어를 공부하고 있어요!\n");
return 0;
}
Python이랑 비교하면 확실히 타이핑이 많습니다. print("Hello")면 끝나는 걸 여기선 #include도 써야 하고, main 함수도 감싸야 하고, 세미콜론도 붙여야 하고요. 처음엔 좀 번거롭다고 느꼈는데, 이게 “필요한 것만 명시적으로 가져다 쓴다”는 C의 방식이라고 생각하니까 나름 이해가 됐습니다.
각 줄이 하는 일을 적어보면:
#include <stdio.h>—printf같은 입출력 함수를 쓰려면 이 헤더가 필요합니다. Python처럼 그냥 바로 쓸 수가 없어요.int main()— 프로그램의 시작점입니다. C 프로그램은 무조건 여기서부터 실행됩니다.printf("...\n")— 화면에 출력하는 함수.\n은 줄바꿈인데, 이걸 빼먹으면 다음 출력이 바로 옆에 붙어 나옵니다.return 0— 프로그램이 정상 종료되었다는 뜻. 0이 아닌 값을 반환하면 뭔가 문제가 있었다는 신호입니다.
컴파일과 실행
C는 컴파일 언어라서 코드를 바로 실행할 수 없습니다. 먼저 기계어로 번역(컴파일)하고, 그 결과물을 실행하는 두 단계를 거칩니다.
VS Code에서 터미널을 열고 (Ctrl + ~) 이렇게 입력합니다.
gcc hello.c -o hello
이러면 hello.exe가 생기고, 이걸 실행하면 됩니다.
hello
Hello, World!
안녕하세요! C언어를 공부하고 있어요!
Python에서는 python hello.py만 치면 바로 결과가 나왔는데, C는 컴파일 단계가 하나 더 있으니까 처음엔 약간 귀찮았습니다. 근데 이 과정 자체가 “내가 쓴 코드가 기계어로 바뀌어서 실행되는구나”를 체감하게 해줘서, 나중에 보면 오히려 좋은 경험이었다 싶습니다.
C 프로그램의 기본 뼈대
모든 C 프로그램은 이런 구조를 따릅니다.
#include <stdio.h> // 1. 필요한 라이브러리 불러오기
int main() { // 2. 프로그램 시작점
// 여기에 코드를 작성합니다
printf("안녕하세요!\n");
return 0; // 3. 프로그램 종료
}
처음에 int main()의 int가 왜 붙는지 이해가 안 됐는데, return 0의 0이 정수니까 반환 타입이 int인 거였습니다. 나중에 함수 파트에서 자세히 나오겠지만, 일단 지금은 “main 함수는 정수를 반환하는 함수”라고 알아두면 됩니다.
연습: 자기소개 프로그램
printf에 익숙해질 겸 간단한 걸 하나 더 만들어봤습니다.
#include <stdio.h>
int main() {
printf("=== 자기소개 ===\n");
printf("이름: 홍길동\n");
printf("나이: 25세\n");
printf("취미: 프로그래밍\n");
printf("좋아하는 언어: C언어\n");
printf("================\n");
return 0;
}
=== 자기소개 ===
이름: 홍길동
나이: 25세
취미: 프로그래밍
좋아하는 언어: C언어
================
별거 아닌 코드인데 직접 컴파일하고 결과를 보면 뿌듯하긴 합니다.
초반에 자주 걸리는 것들
공부하면서 몇 번이고 반복한 실수를 적어둡니다. 다 사소한 건데, 초반에는 이런 거에 시간을 꽤 잡아먹힙니다.
세미콜론 빠뜨리기
printf("Hello") // 에러
printf("Hello"); // 정상
Python 쓰다가 넘어오면 거의 100% 이걸로 한 번은 당합니다. 컴파일 에러 메시지가 “expected ’;’” 같은 게 뜨면 세미콜론부터 확인하면 됩니다.
따옴표 혼동
printf('Hello'); // 에러 -- 작은따옴표는 문자 하나용
printf("Hello"); // 정상 -- 문자열은 큰따옴표
Python에서는 작은따옴표든 큰따옴표든 상관없었는데, C에서는 완전히 다른 의미입니다. 작은따옴표는 char 하나('A' 같은), 큰따옴표는 문자열. 이걸 헷갈리면 컴파일러가 알 수 없는 에러를 내뿜어서 처음에 좀 당황했습니다.
한글 깨짐
VS Code에서 파일 인코딩이 UTF-8이 아닌 다른 걸로 되어 있으면 한글이 깨집니다. VS Code 우하단에 인코딩이 뭔지 보이는데, UTF-8로 맞춰두면 됩니다. 저는 처음에 이걸 몰라서 “코드는 맞는데 왜 출력이 이상하지?” 하고 한참 삽질했습니다.
여기까지 하고 느낀 점
솔직히 Hello World 찍는 데 환경 설정까지 합치면 생각보다 시간이 걸렸습니다. Python이었으면 설치하고 바로 print했을 텐데요. 근데 컴파일이라는 과정을 직접 거쳐보니까 “아, 내가 짠 코드가 이런 단계를 거쳐서 실행되는구나” 하는 감각이 좀 생겼습니다. 앞으로 변수랑 데이터 타입을 정리할 건데, C에서 타입을 왜 그렇게 엄격하게 따지는지 그때 좀 더 와닿지 않을까 싶습니다.