C++ 코드 빌드(build) 순서는 다음과 같다.
1. 전처리(preprocess): 소스 코드에 담긴 메타 정보 처리
2. 컴파일(complie): 소스 코드를 머신이 읽을 수 있는 오브젝트 파일로 변환
3. 링크(link): 오브젝트 파일, 라이브러리 파일 들을 엮어서 결과 파일 생성
// helloworld.cpp
#include <iostream>
int main()
{
std::cout << "Hello, World!" << std::endl;
return 0;
}
#: 전처리 지시자(directive). 전처리기에 전달할 사항 표현
iostream: C++에서 제공하는 입력 및 출력 메커니즘
main() : 프로그램이 항상 main() 함수에서 시작함(int argc, char argv[]를 인자로 사용 가능)
* 용어 정리
- 주석(comment): 컴파일러가 무시하는 영역. //로 한 줄 주석 처리
- 여러 줄 주석(multiline comment): /*로 시작해서 */로 끝나는 영역
- 함수 선언부(declaration): 주로 헤더 파일(hpp or h) 사용
- 구현부, 정의부(definition): 주로 소스 파일(cpp or c) 사용
- 이스케이프 시퀀스(escape sequnece): 탈출/이탈 문자열
(예시. \n: 줄바꿈 / \t 탭 / \\ 역슬래시 등)
- 네임스페이스(namespace): 코드에서 이름이 서로 충돌하는 문제를 해결하기 위한 개념
namespace mycode{
void foo();
}
다른 라이브러리나 코드에서 foo() 함수와 같은 이름을 써도 mycode::foo()와 같이 네임스페이스를 명시하여 호출하면 사용 가능
- 리터럴(literal): 값 자체가 이름인 요소. 코드에 표시한 숫자나 스트링 같은 값
- 변수: 선언하면 블록 단위에서 접근 가능
- 캐스팅(casting): 변수의 타입을 프로그램 실행 중에 바꾸는 기능
명시적 변환: 변수 앞에 (int)와 같이 타입을 붙임
캐스팅: static_cast<int>().
- 열거 타입(enumerated type, enum): 연속적으로 나열한 숫자를 표현하는 방법. 변수에 지정할 수 있는 값의 범위가 엄격하게 제한된다.
enum Color{ Red, Blue, Green, Yellow };
Red는 0, 이후부터 1씩 증가한다. 대입연산자로 값을 지정할 수 있다.
- 엄격한 열거 타입(strongly typed): enum class를 사용한다. 타입에 안전함
- 구조체(struct): 기존에 정의된 타입을 묶어서 새로운 타입으로 정의함. 구조체 내의 변수들에 도트(.) 연산자로 접근
- 조건문(if/esle, switch, 조건 연산자)
- 논리 연산자(<, <=, >, >=, ==, !=, !, &&, ||)
- 함수
<리턴 타입> <함수 이름>(<매개 변수>);
__func__: 함수마다 로컬 변수로 정의되어 있음. 현재 함수 이름을 리턴
- C 스타일 배열
선언 및 초기화: arr[3] = {0};
배열 크기: sizeof(arr) / sizeof(arr[0]);
- std::array
<array> 헤더 인클루드 필요
array<int, 3> arr;
arr.size() 로 크기 리턴 가능
인덱스로 값 접근 가능
- std::vector
<vector> 헤더 인클루드 필요
저장 공간 크기가 고정되지 않을 경우 유용함
vector<int> vec;
vec.push_back(1);
벡터는 범용 컨테이너로 거의 모든 종류의 객체 타입을 담을 수 있다.
인덱스로 값 접근이 가능
- 반복문(while, do/while, for, 범위기반for)
범위기반for: 컨테이너에 담긴 원소에 대한 반복문이 용이함
- 이니셜라이저 리스트(initializer_list)
<initializer_list> 헤더 인클루드 필요
여러 인수를 받는 함수를 쉽게 작성할 수 있다.
'C++' 카테고리의 다른 글
텍스트 파일 통째로 std::string에 넣기 (0) | 2022.03.22 |
---|---|
폴더에서 파일 경로 불러오기 (0) | 2022.03.06 |
Visual Studio 2022 + OpenCV4.5.4(prebuilt) (1) | 2021.11.14 |
용어(Effective C++) (0) | 2021.11.04 |
C++11 실행 시간 체크(Chrono library) (0) | 2021.09.14 |