본문 바로가기
Language/C++

01. C++ 프로그램의 구조

by 아무키 2023. 12. 21.
반응형

 

공부했던 내용 기록한 곳입니다.

 

교재 추천

윤성우의 열혈 C++ 프로그래밍

The C++ Programming Language

 

유튜버 추천

홍정모 교수님 유튜브 채널

The Cherno 유튜브 채널

 

Summary

빌드 프로세스

오류의 종류

기본 구조, 기능과 용어

… 키워드 / 지시자 / 연산자

… 전처리 지시문

… main()함수

… 주석

… namespace

… 표준 입출력

 

빌드 프로세스

오브젝트 코드 : Machine-readable, 컴퓨터가 실행할 수 있는 코드

컴파일러 : 소스코드를 오브젝트 코드로 변환하는 도구

링커 : 오브젝트 코드를 실행 파일(exe)로 변환하는 도구

테스트 & 디버깅 : 프로그램에 존재하는 오류를 찾고, 수정

 

IDE(Integrated Development Environment) → 통합 개발 환경

… 텍스트 에디터 + 컴파일러 + 링커 + (디버거)

 

오류의 종류

Compiler Error

 프로그래밍 언어의 규칙을 위반하는 경우

 문법적 오류 → 코드 자체 오류

 

std::cout << "Errors << std::endl;

return 0;

 

의미 오류

int a = 5;
string b = "Hello World";

a + b;

 

Compiler Warnings

 코드에 잠재적인 문제가 있을 것으로 예상될 때

 빌드는 가능하지만, 무시하면 안됨!

 

Linker Errors / Runtime Erros

링크 에러

… obj 파일의 링크 과정에서 오류가 있을 경우

… 주로 라이브러리 또는 obj 파일을 (어떤 이유에서) 찾을 수 없는 경우

 

런타임 에러

…프로그램의 실행 도중 발생하는 오류

…Divided by zero, file not found, out of memory, etc…

…프로그램의 crash

…예외 처리를 통해 문제 발생에 따르는 처리를 할 수 있다.

 

Logical Errors

…프로그램의 동작에 관한 논리적 오류

…프로그램 작성자의 실수가 원인

…테스트 과정을 통해 찾아내고, 수정해야 함

 

기본 구조, 기능과 용어

…구성요소 - keyword, identifier, operator

… 전처리기 지시문 - #include, …

… main()함수

… 네임스페이스

… 주석 - //, /* */

… 입출력 - cin, cout

 

키워드

…… 약 90개의 키워드(변수 타입, if, for등)

…… 언어 자체에서 예약된 단어들

 

식별자

……변수, 함수, 타입 등 개발자가 지정하는 부분

……대소문자 구분!

 

연산자

……… +, -, *, >>, <<, ::, …

 

전처리기

……컴파일 이전에 처리됨

……#으로 시작

…… ex) #include, #ifdef, #pragma,…

 

#define

……Platform independency, 코드 단축, debug 목적 등으로 활용

 

주석

……프로그래머가 읽을 수 있는 정보를 제공하기 위함(협업, 유지보수)

 

main() function

모든 C++ 프로그램은 하나의 main함수를 가져야 함

...프로그램의 진입점 : 프로그램이 실행되면 가장 먼저 실행되는 함수

...리턴값 0이 올바른 프로그램 실해을 의미함(지금은 생략해도 무방)

 

두가지 버전

int main(){
	//code
	return 0;
}

>> program.exe

int main(int argc, int *argv[]){
	//code
	return 0;
}
>> program.exe argument1, argument2

 

동일 프로젝트에 cpp파일을 계속 추가하여 작성하면 오류 발생

→ 하나의 프로그램에 2개 이상의 main 함수가 존재하기 때문

 

해결법 1) 솔루션을 우클릭하여 추가 → 새 프로젝트로 별도의 프로젝트를 만들어 사용

→ 이때, 현재 빌드하고자 하는 프로젝트를 우클릭하여 “시작 프로젝트로 설정”필요

 

해결법 2) 현재 빌드하고자 하는 cpp이외의 코드는 전체 주석처리하고 빌드

 

namespace

std::cout

충돌 방지를 위함

...외부 라이브러리와 구현한 소스 코드간의 이름 충돌 가능성

코드의 “그룹화”로 이해

…서로 다른 namespace로 그룹화하여 충돌을 방지할 수 있다.

…”::” : scope resolution operator

#include <iostream>

namespace A{
	void function(){
		std::cout << "Hi 1";
	}
}

namespace B{
	void function(){
		std::cout << "Hi 2";
	}
}

int main(){
	A::function();
	B::function();
};

 

using namespace

…특정 namespace 내의 함수들을 사용하겠다는 선언

…남용은 금물

 

using namespace를 모든 코드에 넣는다면 namespace의 기능을 상실

 

Basic IO

cout << “Hello World”
cin >> “Hello World”

 

줄바꿈은 필요한 경우 명시해 주어야 함

cout << “My age is” << age << endl;
cout << “My age is” << age << ‘\n’;
반응형

'Language > C++' 카테고리의 다른 글

05.포인터  (0) 2023.12.22
04.Function  (1) 2023.12.22
03.basic-syntax  (1) 2023.12.22
02. 변수와 상수  (1) 2023.12.22
C++ 이론편  (0) 2022.05.22

댓글