C++은 header 파일과 cpp 파일로 나뉜다.
라이브러리의 경우 static / dynamic / header only 라이브러리가 존재함.
#include , #define
등을 찾아 치환.compiler
# -o 를 이용해 실행파일 이름 지정
g++ main.cpp -o greeting
# -Wall : warning
g++ main.cpp -o greeting -Wall
# -Werror : warning을 에러로 취급 -> 컴파일 안됨.
g++ main.cpp -o greeting -Wall -Werror
# c++17으로 컴파일
g++ main.cpp -o greeting -Wall -Werror -std=c++17
# -v : 여러 정보들 출력. 컴파일러 종류, 경로 등등..
g++ main.cpp -o greeting -Wall -Werror -std=c++17 -v
#ifdef A
~
#else
~
#endif
#ifndef A
~
#elif A == 0
~
#else
~
#endif
constexpr int ABCD = 2;
if constexpr (ABCD)
{
std::cout << "1: yes\n";
}
else
{
std::cout << "1: no\n";
}
#define MAX_UINT16 65535
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
#include <iostream>
#include "foo.h"
header guard
#ifndef CAT_H
#define CAT_H
class Cat
{
~
}
#endif
Extern : 바깥쪽에서 링크를 찾음.
Static : 안쪽에서만 링크.(internal)
extern int a; // 외부 파일에서 a의 정의를 찾음.
static int a = 100; // 이 파일(object file) 안에서만 접근 가능.
extern void foo(); // 외부 파일에 foo 함수가 정의되어 있음을 알림.
static void foo(); // 이 파일(object file) 안에서만 접근 가능.
unit test, integration test, code review 이후 버그 발생 시 debug 모드로 코드 컴파일.
# 디버그모드로 컴파일
g++ main.cpp -g
GDB, VS code 이용해 디버깅.
code, binary를 가져와서 사용 가능.
# object file 생성
g++ cat.cpp -c -O2 -Wall -Werror
# .a 파일(archive file) 생성
ar -rs libcat.a cat.o
# 현재 디렉터리에서 cat이라는 라이브러리를 추가해 빌드.
g++ main.cpp -L . -lcat
process load time 또는 runtime에 바인딩됨.
compile time에 계산 가능한 값들.