티스토리 뷰
시작하기 전에...
* 표준 라이브러리
: 특정언어의 표준 라이브러리 = 해당 언어의 개발 환경에 기본적으로 포함된 모든 기능들. 쉽게 생각해서 해당 언어로 구현된 모든 함수와 변수 등등은 다 표준 라이브러리에 포함되어있다.
* 런타임 라이브러리
: 프로그램이 실행되기 위해 필요한 모듈들의 모음. 표준 라이브러리에서 필요한 것들을 모아놓은 것이라고 생각하면 편하다.
입출력, 메모리관리, 연산, 예외 처리 등 공통적으로 필요로 하는 기능들을 별도의 라이브러리 형태로 묶어서 제공하는 것
01. 헤더파일
.h 확장자를 가진 파일을 헤더 파일이라고 한다.
헤더 파일에는 컴파일러와 함께 제공되는 헤더파일이 있고, 직접 작성한 헤더파일이 있을 수 있다.
전자는 #include < filename> 으로 include 하고, 후자는 #include "filename" 으로 include 한다.
#include <filename>
#include "filename"
전자는 C++ *런타임 라이브러리의 헤더파일로, 운영체제의 특별한 위치에 존재한다.
후자는 전처리기(preprocesser)에게 디렉토리에서 .h 파일을 include하라고 지시한다.
+ 객체 지향에선 클래스를 주로 헤더 파일안에 정의한다. 그리고 헤더파일이름은 클래스와 동일하게 한다.
따라서 우리가 string 타입을 사용하기 위해서 <string> 헤더파일을 include 해야한다고 말하는 것은 해당 헤더파일에 정의되어있는 string 클래스를 사용하겠다는 말과 같다. 그리고 그 클래스 안에는 우리가 string타입에 사용 가능한 다양한 함수들이 들어있을 것이다.
02. 네임스페이스
01. 네임스페이스란?
두개의 헤더파일에 같은 이름의 함수가 존재한다고 예를 들어보자.
// a.h
void function(){ return 1; }
// b.h
void function(){ return 0; }
만약 .cpp파일에서 두 헤더를 모두 include하고, function 함수를 호출하면 .cpp파일은 어느 헤더의 function을 사용해야하는지 모른다. 이런 상황을 위해 네임스페이스(namespace)라는 개념을 도입한 것이다.
//a.h
// a라는 헤더파일 내의 a라는 네임스페이스 안에있는 function()함수
namespace a{
int function(){return 0;}
}
//b.h
// b라는 헤더파일 내의 b라는 네임스페이스 안에있는 function()함수
namespace b{
int function(){return 0;}
}
위와 같이 각 헤더파일에 namespace를 도입하면 .cpp 파일에서 두 헤더 파일을 모두 include 해도, function()함수를 호출할 때 namespace를 사용해서 어느 헤더의 function을 사용할 건지 정해줄 수 있다.
02. 네임스페이스 내의 식별자 사용방법 (with. 스코프 분석 연산자)
어느 네임스페이스에서 식별자를 찾을 것인지는 :: (스코프 분석 연산자) 를 통해 정할 수 있다.
[namespace name] :: [func or someting else inside the namespace]
아래는 a 네임스페이스 내의 function() 함수를 사용하는 코드이다.
// test.cpp
#include <iostream>
#include "a"
#include "b"
int main(){
std::cout << a::function(); // std에 도 네임스페이스의 하나로 뒤에 설명하겠다.
return 0;
}
03. 중첩 네임스페이스
네임스페이스 안에 또 네임스페이스를 선언할 수 있다.
//head.h
namespace a{
namespace b{
int function(){return 0;}
}
namespace c{
int function2(){return 0;}
}
}
위 코드는 namespace a 안에 namespace b와 c를 선언하고있다.
이 경우도 마찬가지로 .cpp 에서 namespace 를 사용할 때 :: 를 사용하면된다.
//test.cpp
#include <iostream>
#include "head.h"
int main(){
std::cout << a::b::function(); // a안의 b를 사용한다.
return 0;
}
04. std 네임스페이스
C++은 계속해서 업데이트를 하고있다. 여러 버전이 나왔고 앞으로도 업데이트 될 지도 모른다.
매번 새로운 버전이 나올 때 마다 C++의 표준 라이브러리들의 위치가 계속 변하면 사용하는데 어려움이 생길 것이다.
이를 위해서 C++는 iostream.h 헤더파일 내의 std 라는 네임스페이스 안에 모든 표준 라이브러리의 모든 기능을 넣어놨다.
//iostream.h
namespace std{
// 모든 표준 라이브러리 기능들
}
그래서 우리는 C++에서 cout, cin string, endl 등을 사용할 때 무조건 std::cin, std::cout, std::string 이런식으로 사용한다.
std 네임스페이스의 경우, 우리가 표준라이브러리를 너무 많이 사용하기 때문에 아래와 같이 네임스페이스를 미리 선언하고 시작한다.
using namespace [namespace name];
//test.cpp
#include <iostream>
using namespace std;
int main(){ // ... }
'C++' 카테고리의 다른 글
[C++] std::ios_base::sync_with_stdio(false); (0) | 2022.02.16 |
---|---|
[C++] 직접 정의한 헤더파일 사용해보기 (네임스페이스와 클래스) (0) | 2022.02.11 |
[C++] 배열 초기화하는 방법 (0) | 2022.02.03 |
[C++] 표준 입력함수와 입력버퍼 관리 : cin / cin.getline / getline / cin.get / cin.fail / cin.clear / cin.ignore (0) | 2022.02.03 |
[C++] 배열 초과 입력에 관하여 (0) | 2022.02.02 |
- Total
- Today
- Yesterday
- Mac
- select
- mac unity vscode autocomplete
- 컨셉때문에킹받으셨나요..죄송합니다..제가 봐도 킹받네요
- androidstudio
- Unity
- Winform
- mac Unity vscode 자동완성
- Flutter
- flutterdoctor
- apt-get
- Unity vs code
- gridContorl
- multiple Column
- =
- ubuntu
- 트리
- VirtualBox
- ()
- 버추얼박스
- 우분투
- GIT
- VS Code
- Tree
- DevExpress
- QO
- apt
- DataSource
- 해마코딩
- Query
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |