✔ 프로그램 개발 단계
프로그램이란 컴퓨터로 하여금 특정 작업을 수행하도록 하는 명령어들의 집합이다.
프로그램을 작성하는데엔 아래와 같은 단계를 거쳐야한다.
프로그램 목적 정의
요구 분석과 시스템 분석을 통하여 프로그램이 가져야 할 기능 정의
프로그램 설계
분석된 기능을 처리할 수 있도록 구조 설계
소스 코드 작성
설계를 기반으로 에디터를 사용하여 작성
컴파일 / 링킹
소스 코드를 실행 가능한 코드로 변환 및 문법 검사
프로그램 실행
테스트와 디버깅
에러 검사 및 디버깅
유지 보수
- 에디터 : 소스 코드(source code)를 쉽게 작성해 기억장치에 저장할 수 있도록 도와주는 도구.
- 컴파일러 : 에디터를 사용하여 작성한 소스 코드를 컴퓨터가 이해할 수 있는 기계어로 바꾸어주는 번역 소프트웨어.
✔ C프로그램 완성 과정
C 언어로 작성된 프로그램은 크게 코딩, 컴파일, 링킹이라는 3단계 과정을 거쳐 완성된다.
- 소스 파일 생성
소스 코드(source code) : C프로그램 안에 있는 명령어들. 에디터를 이용해 입력한다.
.c 확장자를 가진 소스 파일로 저장된다. - 소스 파일 컴파일
컴파일 : 작성된 소스 파일을 컴퓨터가 이해할 수 있도록 기계어로 변환하는 과정
컴파일러를 이용해 컴파일 하면 .obj 확장자를 가진 목적 파일(object file)이 만들어진다. - 실행 파일 생성(링킹)
링커(linker) : 컴파일 된 목적파일들을 라이브러리 파일과 연결하여 실행파일을 만드는 링킹 과정에서 필요한 도구
컴파일러는 대부분 링커 기능까지 제공하므로 컴파일 시 자동적으로 처리된다.
링킹 과정이 끝나면 .exe라는 확장자를 가진 실행파일이 만들어진다.
C언어의 경우 에디터는 상관없이 사용가능하지만 C컴파일러가 필요하다. Dev-C++과 Visual Studio가 여기에 속한다.
그러나 mac용 Visual Studio의 경우 C언어가 지원되지 않는다. 이걸 모르고 삽질을 꽤 오래 했다.
나는 xcode가 열리지않았고(대체 왜), 익숙한 환경에서 가볍게 개발하길 원했기 때문에 VS Code를 사용하기로 했다.
✔ Visual Studio Code 에서 C/C++ 개발 환경 구축하기
1. Extension - C/C++ 설치
2. C/C++ 파일 생성하기
컴파일을 진행하기 위해 원하는 폴더에 C/C++파일을 생성 해준다.
아래 코드는 C를 기준으로 작성되어 확장자가 .c이다. C++은 .cpp로 설정하면 된다.
#include <stdio.h>
int main()
{
printf("문자열을 입력후 엔터를 누르세요!\n");
char a[256];
scanf("%s", a);
printf(" \" %s \" 를 입력하셨네요.\n", a);
return 0;
}
VS Code는 에디터이기때문에 바로 프로그램을 돌릴 수 없다. 코드를 빌드할 컴파일러와 옵션을 지정해줘야한다.
여러가지 컴파일 해봤는데 gcc, g++ 이 안먹혀서 clang👍 으로 해결했다.
3. 빌드 단축키 설정
tasks.json 파일 생성에 앞서 설정 > 바로가기 키에서 다음과 같이 테스트 작업 실행 단축키를 만들어준다.
명령어를 입력하면 당연히 템플릿이 없기 때문에 위와 같이 나온다. '실행할 테스트 작업이 없습니다.' 를 클릭한다.
'템플릿에서 tasks.json' 파일 만들기를 클릭한다.
'Others'를 클릭한다.
여기까지 따라오면 tasks.json파일이 새로 생성된다. 왼쪽 패널에서도 확인할 수 있다.
tasks.json 파일 내 기존 코드를 지우고 아래와 같이 구성해준다.
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "C bulid for clang",
"command": "clang",
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"options": {
"cwd": "${workspaceRoot}"
},
"presentation": {
"clear": true
},
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": []
},
{
"type": "shell",
"label": "C++ bulid for clang++",
"command": "clang++",
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"options": {
"cwd": "${workspaceRoot}"
},
"presentation": {
"clear": true
},
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": []
},
{
"type": "shell",
"label": "execute",
"command": "${fileDirname}/${fileBasenameNoExtension}",
"group": "test",
"presentation": {
"clear": true
}
}
]
}
tasks.json 파일을 저장한 뒤 기존 C/C++ 파일로 돌아가 빌드 실행 명령어 Command + Shift + b 를 입력한다.
(나는 빌드 명령어도 단축키로 설정해놨다.)
두 개의 build task가 생성된 것을 볼 수 있다.
C/C++ 파일에 맞는 것으로 선택해준다.
build 작업이 끝나면 다음과 같이 파일들이 생성된 것을 볼 수 있다.
.vscode - tasks 파일은 각 프로그램 파일마다 하나씩 있어야한다.
폴더 지정을 잘못할 경우 빌드는 되지만 종료 코드 -1 을 뱉어내니 유의 해야한다! 이걸로 파일이 안만들어져 엄청 싸웠다.
4. 프로그램 실행
테스트 작업 실행 단축키를 다시 입력하면 하단 터미널에 프로그램이 실행된다!!
빌드 단축키가 아니다 헷갈리면 안된다.
👇 각 코드가 어떤 기능을 하는지 살펴보기
tasks : 뒤에 오는내용이 수행할 작업에 대한 내용
label : 중괄호로 묶여있는 부분의 이름. 이후 Command + Shift + b 를 눌렀을 때 표시되는 내용
type : 작업이 수행되는 공간
command : 작업공간에서 수행할 명령
args : 위 command에 적어준 명령의 파라미터를 넣어줌
-g : 디버깅을 위한 옵션
-o : 출력파일의 이름을 정의
${fileDirname}/${fileBasenameNoExtension}.out : 파일의 현재 디렉토리에 파일명.out 파일을 생성
${file} : 현재 파일을 의미. 해당 파일이 여기서는 gcc의 입력이 됨
* 해당 프로그램을 디버깅하는 과정은 추가 예정 (m1 은 디버그 지원이 안된다고 함..)
* m1 mac air에서 실행됐다.