본문 바로가기

Today I Learned

23.01.09 - 컴파일러, 네임 스페이스

컴파일러는 번역기이자 실행파일 생성기이다.

 

번역기

컴퓨터는 전기 스위치가 켜져 있는지 꺼져 있는지로만 알아 들을 수 있다.

그것을 0과 1로 표기하고 그 상태로 된 코드를 이진(바이너리) 코드라고 한다.

 

실행 파일 생성기

컴파일러는 exe파일을 생성한다. 

이진 코드를 해석하기 위해 ALU에게 한꺼번에 보내기 위해 묶어둔 파일이 exe 파일이다.

 

 

컴파일러는 컴파일(번역)을 시작하기 전에 전처리기 과정을 거친다.

#include <헤더파일>과 같은 코드가 전처리기 과정이다. 

컴파일 과정에서 컴파일러는 한 줄에서 세미콜론(;)을 만나기 전까지 코드를 어셈블리어로 바꾸는데

전처리기는 컴파일 동작 이전 시점이기 때문에  세미콜론을 찍을 필요가 없다

 

컴파일을 통해 코드를 어셈블리어로 번역한다. 그래도 컴퓨터는 여전히 0과 1로만 알아들을 수 

있기 때문에 어셈블러가 어셈블리어에서 바이너리 코드(기계어)로 번역한다.

 

소스파일은 컴파일 하고 나면 목적파일(obj)이 된다.

목적파일은 링커에 의해 링크되어 최종적으로 실행 가능한 실행파일이 된다.

이렇게 컴파일과 링크를 통해 실행 파일을 만드는 과정빌드라고 한다.

 

코드 작성 -> 전처리기 -> 컴파일 -> 어셈블러 -> 링크

 

 

 

네임 스페이스

네임 스페이스는 말 그대로 이름들을 담는 통이다.

개발자 A와 B가 공동개발을 하고 있는데 함수 이름이 겹쳐버린다면 오류가 발생할 것이다.

그런 일을 방지하기 위해 나는 A의 함수이다라고 선언하는 것이다.

 

using namespace std;
//using 선언을 통해 다른 네임스페이스를 가져온다.

int main(){
	cout<<"Hello World"; 
    //네임스페이스 선언이 없다면 std::cout으로 작성해야 함(c++는 이방식을 권장)
}

 

위 코드는 std 네임스페이스를 통째로 가져왔지만

네임스페이스의 일부 함수들만 using 선언을 통해 가져올 수도 있다.

 

using namespace std::cout;

int main(){
	cout << "Hello World!";
}

 

 

'Today I Learned' 카테고리의 다른 글

23.01.16 - 디버깅 고급  (0) 2023.01.17
23.01.13 - 분기문, 난수 생성  (0) 2023.01.13
23.01.12 - 연산자2, 분기문  (0) 2023.01.12
23.01.11 - char, bool , 연산자  (0) 2023.01.11
23.01.10 - 메모리, 정수형, 실수형  (0) 2023.01.10