교내에서 진행하는 멘토링 프로그램에 멘토로 참여하게 되었고, C/C++ 멘토링을 담당할 예정이다. 아래는 멘토링을 진행하기 위해, 정리한 자료들을 모아둔 것이다. 1학년 때 열심히 인터넷을 헤맸던 기억이 있는데, 다시 자료들을 모으다보니 그때 기억도 새록새록 나는 것 같다.
IDE는 통합 개발 환경(Integrated Development Environment)을 뜻하며, 프로그래밍을 효율적으로 할 수 있도록 도와주는 소프트웨어 애플리케이션이며, 대표적으로, Visual Studio, Visual Studio Code(VSCode), eclipse, IntelliJ IDEA, Android Studio 등이 있다.
Visual Studio는 C/C++ 개발에서 주로 사용하며, VSCode는 Visual Studio 가벼운 버전으로 볼 수 있다. 다만, VSCode에서 C/C++ 컴파일을 진행하려면 추가적인 설정이 필요하다.
VSCode는 Python 개발, 프론트엔드 웹 개발(HTML, CSS, TS 등)에도 주로 활용되는 등 활용 범주가 굉장히 넓고 여러 확장들이 존재하며, WSL, SSH, Docker, Github 등와 연동해서 사용하는 데도 편리하다.
eclipse는 2학년 때 주로 수강하는 ‘JAVA 프로그래밍 실습’ 수업에서 사용하게 될 Java를 기반으로 하는 IDE이다. 그러나 본인은 IntelliJ IDEA(Java, Kotlin)를 더 편하게 사용한 경험이 있다.
Android Studio는 3학년에 주로 수강하는 ‘모바일 앱 프로그래밍 실습’ 수업에서 사용하게 될 IDE이다. IntelliJ IDEA를 기반으로 만들어졌다고 한다.
VSCode 확장 설치

Python 확장 설치




Anaconda는 Python 패키지와 환경을 쉽게 관리할 수 있도록 한다. 또한, Jupyter Notebook(.ipynb )을 쉽게 설치할 수 있는 방법이기도 하다.
신입생 프로그래밍언어(Python) 사전교육에 참여하였다면 이미 설치가 되어있을 것이다.
특히 인공지능 분야에서 각 모델에 맞는 Python 버전 및 패키지 버전 (예. python 3.11.11, numpy =1.25.0, tensorflow=2.15.0 등)이 설치된 가상환경을 만들어 편리하게 사용하기 위해 사용한다.
데이터 분석에 있어서도 Jupyter Notebook은 각 셀을 개별적으로 실행하면서, 데이터 전처리, 시각화, 모델링 등을 단계별로 수행하고 결과를 바로 확인할 수 있다는 점에서 매우 편리하게 활용되고 있다. 또한, Markdown 문서도 지원하고 있다. 🔗 Markdown 문법 설명
Python이 이미 설치되어 있는 경우, Anaconda와 충돌이 날 수 있으므로 Python을 삭제하고나서 Anaconda를 설치하거나, 그냥 Python이 설치되어 있다는 것에 만족하고 Anaconda를 설치하지 않는 방법이 있다.


cmd에서 python --version명령어를 실행하여 제대로 설치가 완료되었는지 확인한다.
VSCode에서 간단한 python 코드 작성 후, 우측 상단의 실행 버튼을 눌러 코드를 실행할 수 있다.
MinGW는 GNU gcc 컴파일러(C언어 컴파일)를 Windows 환경에서 사용할 수 있도록 만든 도구이다.
VSCode Debugging 도구를 사용할 생각이 없다면 굳이 설치하지 않아도 괜찮다. WSL에서 GCC를 활용해서도 C언어 컴파일이 가능하기 때문이다. (다음 자료 내용)

다운받은 .zip 파일을 압축 해제하고, mingw64 폴더를 C 드라이브(C:\mingw64)로 이동시킨다.
환경변수 검색 후, 시스템 환경 변수 편집 클릭

Path 선택 후, 편집 클릭

새로 만들기 클릭 후, C:\mingw64\bin 입력
cmd에서 gcc --version명령어를 실행하여 제대로 설치가 완료되었는지 확인한다. 

C/C++을 사용할 폴더를 열고 (예. C), 내부에 .vscode 폴더(VSCode 설정 파일들을 저장하는 곳)를 생성한다. 이후, 해당 폴더 내부에 각각 c_cpp_properties.json 파일과 tasks.json 파일을 생성한다.
※ 이때, 폴더의 경로에 한국어가 있으면 오류가 발생한다. (예. 사용자명이 한국어인 경우)
c_cpp_properties.json 파일 내용
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"windowsSdkVersion": "10.0.22000.0",
"compilerPath": "C:/mingw64/bin/g++.exe",
"cStandard": "c17",
"cppStandard": "c++17",
"intelliSenseMode": "windows-gcc-x64"
}
],
"version": 4
}
tasks.json 파일 내용
{
"version": "2.0.0",
"runner": "terminal",
"type": "shell",
"echoCommand": true,
"presentation": {
"reveal": "always"
},
"tasks": [
{
"label": "save and compile for C++",
"command": "g++",
"args": [
"${file}",
"-g",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"group": "build",
"problemMatcher": {
"fileLocation": [
"relative",
"${workspaceRoot}"
],
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
},
{
"label": "save and compile for C",
"command": "gcc",
"args": [
"${file}",
"-g",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"group": "build",
"problemMatcher": {
"fileLocation": [
"relative",
"${workspaceRoot}"
],
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
},
{
"label": "execute",
"command": "cmd",
"group": "test",
"args": [
"/C",
"${fileDirname}\\${fileBasenameNoExtension}"
]
}
]
}
테스트를 위해, 간단한 C언어 코드를 작성한다.
#include <stdio.h>
int main() {
printf("Hello, world!\n");
return 0;
}
설정에서 바로 가기 키로 들어가, ‘작업: 빌드 작업 실행’과 ‘작업: 테스트 작업 실행’의 단축키를 각각
Ctrl + Alt + C와 Ctrl + Alt + R로 변경한다.
이후
Ctrl + Alt + C를 눌러 save and compile for C 작업으로 컴파일을 진행하고,Ctrl + Alt + R을 누르면 생성된 실행 파일(.exe)이 실행된다.프로그램이 내가 의도한대로 잘 동작하고 있는지 확인하는 방법은 무엇일까? 혹은 내가 작성한 프로그램에서 의도치 않은 오류가 발생하고 있는 경우에는 어떻게 오류의 발생 원인을 발견할 수 있을까?
printf를 활용해 변수들의 값을 확인한다.printf를 작성하는 것이 귀찮지 않을까?따라서 프로그램의 실행을 한 줄씩 따라가며, 동시에 코드 실행에 따라 변화하는 변수의 값을 확인할 수 있도록(약간의 제약이 있긴 하지만…) 도와주는 Debugging 도구를 VSCode에서 사용해보자.
.vscode 폴더 내부에 launch.json 파일을 생성한다.
launch.json 파일 내용
{
"version": "0.2.0",
"configurations": [
{
"name":"build and debug for C++",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "C:/mingw64/bin",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "C:\\mingw64\\bin\\gdb.exe",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "save and compile for C++"
},
{
"name":"build and debug for C",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "C:/mingw64/bin",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "C:\\mingw64\\bin\\gdb.exe",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "save and compile for C"
}
]
}
테스트를 위해, 간단하지 않은 C언어 코드를 작성한다.
🔗아래 코드와 관련된 문제(1541번: 잃어버린 괄호)
#include <stdio.h>
#include <string.h>
int main()
{
char exp[51];
scanf("%s", exp);
int result = 0, flag = 0, num = 0;
char op = 0;
for (int i = 0; i < strlen(exp); i++)
{
if ('0' <= exp[i] && exp[i] <= '9')
{
num *= 10;
num += exp[i] - '0';
continue;
}
if (op == 0)
result = num;
else if (op == '+')
{
if (flag)
result -= num;
else
result += num;
}
else
{
flag = 1;
result -= num;
}
op = exp[i];
num = 0;
}
// 마지막 숫자 처리
if (op == 0)
result = num;
else if (op == '+')
{
if (flag)
result -= num;
else
result += num;
}
else
{
flag = 1;
result -= num;
}
printf("%d\n", result);
return 0;
}
build and debug for C을 선택해 디버깅을 시작한다.
55-50+40을 입력하여 넣는다.
F10이나 좌상단 버튼을 눌러 코드를 한 줄씩 실행할 수 있다.F11이나 좌상단 두번째 버튼을,F5이나 좌상단 첫번째 버튼을 이용한다.
변수/함수/클래스명을 작성하는데 있어서 여러 코드 스타일들이 존재하고 있다. 대표적으로,
| 코드 스타일 | 예시 | 설명 |
|---|---|---|
| Camel Case | myVariableName | 소문자로 시작하여, 단어의 경계마다 대문자를 사용한다. (Java, JavaScript 등에서 많이 사용) |
| Pascal Case | MyVariableName | 모든 단어의 첫 글자를 대문자로 한다. (주로 클래스명에 사용) |
| Snake Case | my_variable_name | 단어 사이를 _로 구분한다. (Python에서 주로 사용) |
| SCREAMING_SNAKE_CASE | MY_CONSTANT_NAME | 상수명을 표현할 때 주로 사용한다. |
가 있다.
다른 사람들과 협업할 때는 주로 이러한 세세한 부분들을 통일하여 코드의 가독성을 높힌다. 또한, Github를 통한 버전 관리 시, 코드 스타일 차이로 인한 불필요한 변경사항을 줄일 수 있다.
그러나 띄어쓰기(공백)와 같은 세부적인 스타일은 사람마다 편차가 크고, 개발자가 매번 일관되게 관리하기 어려운 부분이다.
// 1번 예시
if(x==5){console.log("hi");}
// 2번 예시
if (x == 5) {
console.log("hi");
}
// 3번 예시
if (x == 5)
{
console.log("hi");
}
따라서 자동 코드 Fomatter를 활용해, 스타일을 통일하는 것이 협업과 유지보수 측면에서 효과적이다.
아래와 같이 설정에 들어가, Formatter 사용을 설정한다.

*Python에서는 Black Formatter로 설정한다.
이후 작성한 코드를 저장하면, 자동으로 1, 2번 예시를 3번 예시로 포맷팅을 진행하는 것을 볼 수 있다.