라이브러리: 이미 만들어진 코드나 바이너리를 가져와서 프로그래밍 할 때 사용할 수 있는 콜렉션. 대표적으로 Standard Library가 있다. 자주 사용하는 등이 이에 해당한다. 1. 라이브러리의 종류 1) Header only 일반적으로 코드를 받게 되면 헤더 안에 모든 게 정의되어 있어서 이 헤더를 include 하여 사용하는 경우를 말한다. 2) Static library 윈도우에서는 .lib 확장자, 리눅스에서는 .a 확장자로 나타난다. 이 라이브러리를 빌드 프로세스에서 가져와서 링크 시켜준다고 생각하면 된다.1 3) Dynamic library 로드 타임에 바인딩 할 수도, 런 타임에 바인딩 할 수도 있는 라이브러리. 로드 타임: 프로그램 실행될 때 로더가 프로세스를 실행시킬 때 라이브러리를..
모던C++/컴파일 프로세스 Compile Process
extern, static은 c++ 빌드 프로세스에서 핵심적인 키워드이다. 두 키워드는 모두 링킹 linkage 프로세스와 관련이 되어 있다. extern: 바깥쪽에서 링크를 찾아라. static: 바깥쪽이 아닌 안쪽으로만 링크를 열어라. *c++에서는 이렇게 빌드 프로세스에서 사용되는 static 말고도 static 메모리를 사용하라는 static 키워드가 존재하니 헷갈리지 말자. *참고 cppreference의 static extern 의 linkage 파트 참고할 것. https://en.cppreference.com/w/cpp/language/storage_duration Storage class specifiers - cppreference.com The storage class specifie..
빌드 프로세스에서 가장 먼저 개입되는 부분. #include, #define, #ifdef ,#pragma once 등에 해당 https://en.cppreference.com/w/cpp/preprocessor Preprocessor - cppreference.com The preprocessor is executed at translation phase 4, before the compilation. The result of preprocessing is a single file which is then passed to the actual compiler. [edit] Directives The preprocessing directives control the behavior of the prepro..
c++ 빌드를 위해서 일반적으로 Header, cpp 파일로 나누는데, 그 이유는 무엇이고, 헤더 파일은 어떻게 사용하면 될까? 예제1: 잘못된 함수 호출 foo() 함수를 main() 아래로 내리면, main 함수는 foo()가 어디 있는지 알 수 없기 때문에 호출하지 못한다. 이 때 void foo()를 main 함수 위에 선언해주고 컴파일 해주면 해결된다. 위 부분을 선언 declaration 이라 하고, -즉 함수가 있음을 알려주고 아래 부분을 정의 definition/implementation 이라고 한다, -함수의 실제 내용을 채워주는 것이다. 만약 이처럼 foo()함수를 선언해준 다음 정의해주지 않는다면 linking error가 된다. 그림으로 보면, main.cpp 파일은 있고 컴파일에 ..
*C++의 특징 1) 헤더 파일, CPP 파일이 나누어져 있다. 2) static library, dynamic library, header only library 3) assembler, compilation, Linker C++ 빌드 프로세스 1. pre processor : 코드에서 #include, #define 과 같은 키워드를 찾아서 치환해준다. 프리 프로세서는 .h 파일을 .cpp 파일에 하나의 translation unit을 만들어 준다. 2. compiler : translation unit을 전부 가져와서 object file로 만들어 준다. objet file에는 code와 data들이 들어있다. 3. linker : object file이 만들어 진 후 linker가 개입되어 추가적..