โน๏ธ Skipped - page is already crawled
| Filter | Status | Condition | Details |
|---|---|---|---|
| HTTP status | PASS | download_http_code = 200 | HTTP 200 |
| Age cutoff | PASS | download_stamp > now() - 6 MONTH | 0.4 months ago |
| History drop | PASS | isNull(history_drop_reason) | No drop reason |
| Spam/ban | PASS | fh_dont_index != 1 AND ml_spam_score = 0 | ml_spam_score=0 |
| Canonical | PASS | meta_canonical IS NULL OR = '' OR = src_unparsed | Not set |
| Property | Value |
|---|---|
| URL | https://modoocode.com/319 |
| Last Crawled | 2026-03-30 00:21:58 (11 days ago) |
| First Indexed | 2020-10-20 11:02:01 (5 years ago) |
| HTTP Status Code | 200 |
| Meta Title | ์น์ด๋จน๋ C++ - <20 - 1. ์ฝ๋ ๋ถํฐ ์คํ ํ์ผ ๊น์ง - ์ ์ฒด์ ์ธ ๊ฐ์> |
| Meta Description | null |
| Meta Canonical | null |
| Boilerpipe Text | ์์ฑ์ผ : 2020-10-20
์ด ๊ธ์ 24276 ๋ฒ ์ฝํ์ต๋๋ค.
์ด๋ฒ ๊ฐ์ข์์๋
C++ ์ปดํ์ผ ๊ณผ์ ์ ์ ์ฒด์ ์ธ ๊ฐ์
์ ์ฒ๋ฆฌ๊ธฐ ์๋ ๋ฐฉ์
์ ๋ํด์ ๋ค๋ฃจ์ด ๋ณด๊ฒ ์ต๋๋ค.
์ฌํ๊น์ง C++ ์ ๊ณต๋ถํ๋ฉด์ ์ ๋ ์์ด ๋ง์ ํ์ผ๋ค์ ์ปดํ์ผ ํ๊ณ , ์คํ์์ผ ๋ณด์๊ฒ ์ง๋ง, ์์ง๊น์ง ์ ํํ ์ปดํ์ผ์ด ์ด๋ ํ ๋ฐฉ์์ผ๋ก ์งํ๋๊ณ , ๋ ๋์ ์ ๋ง์ ์์ค ์ฝ๋๋ค์ด ์ด๋ป๊ฒ ํฉ์ณ์ง๋์ง์ ๋ํด์๋ ์์ธํ ๋ค๋ฃฌ ์ ์ด ์์ต๋๋ค.
์์ผ๋ก ์ฐ์ฌ๋ 3 ๊ฐ์ ๊ฐ์ข๋ค์ ํตํด์ C++ ์์
์ปดํ์ผ์ ํ๋ค
๋ผ๋ ๊ฒ์ด ์ ํํ ์ด๋ ํ ์ผ๋ จ์ ๊ณผ์ ์ผ๋ก ์ด๋ฃจ์ด์ง๋ ๊ฒ์ธ์ง, ๋ ์ด๋ป๊ฒ ์คํ ํ์ผ์ด ์์ฑ๋๋ ๊ฒ์ธ์ง์ ๋ํด์ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
C++ ์์ ์ฐ๋ฆฌ๊ฐ ์์ฑํ ์์ค์ฝ๋๋ฅผ ์ค์ ๋ก ์คํํ ์ ์๋ ์คํ ํ์ผ๋ก ๋ณํํ๊ธฐ ์ํด์๋ ์ด 3 ๊ฐ์ง ๋จ๊ณ๋ฅผ ๊ฑฐ์ณ์ผ๋ง ํฉ๋๋ค.
๋จผ์ #include ์ #define ์ ๊ฐ์ ์ ์ฒ๋ฆฌ๊ธฐ ๋งคํฌ๋ก๋ค์ ์ฒ๋ฆฌํ๋ ์ ์ฒ๋ฆฌ(Preprocessing) ๋จ๊ณ (๊ทธ๋์ ์ด๋ฆ๋
์
์ฒ๋ฆฌ ๋จ๊ณ์ฃ ).
๊ทธ ๋ค์ ๊ฐ๊ฐ์ ์์ค ํ์ผ๋ค์ ์ด์
๋ธ๋ฆฌ ๋ช
๋ น์ด๋ก ๋ณํํ๋ ์ปดํ์ผ (Compile) ๋จ๊ณ
๊ทธ ํ์ ์ด์
๋ธ๋ฆฌ ์ฝ๋๋ค์ ์ค์ ๊ธฐ๊ณ์ด๋ก ์ด๋ฃจ์ด์ง ๋ชฉ์ ์ฝ๋(Object file)๋ก ๋ณํํ๋ ์ด์
๋ธ (Assemble)๋จ๊ณ
๋ง์ง๋ง์ผ๋ก ๊ฐ๊ฐ์ ๋ชฉ์ ์ฝ๋๋ค์ ํ๋ฐ ๋ชจ์์ ํ๋์ ์คํ ํ์ผ๋ก ๋ง๋ค์ด์ฃผ๋ ๋งํน (Linking) ๋จ๊ณ๋ก ๋๋์ด๋ณผ ์ ์์ต๋๋ค.
๊ฐ๋จํ ์์ ๊ฐ์ ๊ณผ์ ์ด๋ผ ๋ณด์๋ฉด ๋ฉ๋๋ค.
๋ณดํต ์ ์ฒ๋ฆฌ ๋จ๊ณ, ์ปดํ์ผ ๋จ๊ณ, ์ด์
๋ธ ๋จ๊ณ๋ฅผ ๋ชจ๋ ๋ญ๋ฝ๊ทธ๋ ค์ ์ปดํ์ผ ๋จ๊ณ ํ๋๋ก ์๊ฐํด๋ ๋ฌด๋ฐฉํฉ๋๋ค. ์ฆ ๋ง์ ๊ฒฝ์ฐ ์ ๊ทธ๋ฆผ์์ a.S ๋ b.S ์ ๊ฐ์ ํ์ผ๋ค์ ์์ฑํ์ง ์๊ณ ๋ฐ๋ก ๊ทธ๋ฅ ๋ชฉ์ ์ฝ๋๋ก ๋์ด๊ฐ๋ค๊ณ ๋ด๋ ๋ฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ๊ฐ ๋จ๊ณ์์ ์ด๋ ํ ์ผ์ด ์ผ์ด๋๋์ง ์ดํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
์ ์ฒ๋ฆฌ ๋จ๊ณ์ ์ปดํ์ผ ๋จ๊ณ๋ ๋ชจ๋ ์ปดํ์ผ๋ฌ ์์์ ์ํ๋๋๋ค.
C++ ํ์ค
์ ๋ฐ๋ฅด๋ฉด, ์ด ๋ ๋จ๊ณ๋ ์ด 8 ๊ฐ์ ์ธ๋ถ ๋จ๊ณ๋ค๋ก ์ชผ๊ฐ์ง ์ ์๋๋ฐ, 1 ๋ถํฐ 6 ์ธ๋ถ ๋จ๊ณ๊น์ง๊ฐ ์ ์ฒ๋ฆฌ ๊ณผ์ ์ผ๋ก ๋ณผ ์ ์๊ณ , ๋๋จธ์ง ์ธ ๊ฐ์ ๋จ๊ณ๋ฅผ ์ปดํ์ผ ๊ณผ์ ์ผ๋ก ๋ณผ ์ ์์ต๋๋ค. ์๋ฌดํผ ๊ทธ๋ ๋ค๋ฉด ์ ์ฒ๋ฆฌ ๋จ๊ณ์์ ์ด๋ ํ ์ผ์ด ๋ฒ์ด์ง๋์ง ์ดํด๋ด
์๋ค.
๊ฐ์ฅ ์ฒซ ๋ฒ์งธ ๋จ๊ณ๋ก ์์ค ํ์ผ์ ์๋ ๋ฌธ์๋ค์ ํด์ํ๋ ๊ฒ์
๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก C++ ์ฝ๋์์๋ ์ด 96 ๊ฐ์ ๋ฌธ์๋ค๋ก ์ด๋ฃจ์ด์ง
Basic source character set
์ด ์๋๋ฐ, ์ด๋ค์
5 ์ข
๋ฅ์ ๊ณต๋ฐฑ ๋ฌธ์๋ค (์คํ์ด์ค, ํญ, ๊ฐํ ๋ฌธ์ ๋ฑ๋ฑ)
10 ์ข
๋ฅ์ ์ซ์๋ค (0 ๋ถํฐ 9 ๊น์ง)
52 ์ข
๋ฅ์ ์ํ๋ฒณ ๋์๋ฌธ์
29 ์ข
๋ฅ์ ํน์ ๋ฌธ์๋ค (
_
,
{
,
+
๋ฑ๋ฑ)
์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค. ์ด ๊ธฐ๋ณธ ๋ฌธ์ ์
์ ํฌํจ๋์ด ์์ง ์์ ๋ค๋ฅธ ๋ชจ๋ ๋ฌธ์๋ค์
\u
๋ฅผ ํตํด ์ ๋์ฝ๋ ๊ฐ์ผ๋ก ์นํ๋๊ฑฐ๋, ์ปดํ์ผ๋ฌ์ ์ํด์ ๋ฐ๋ก ํด์๋ฉ๋๋ค. (์ ์ด๋ GCC ์ ๊ฒฝ์ฐ ์ ๋์ฝ๋๋ฅผ ์ง์ํ๋ฏ๋ก ๋ฐ๋ก ์นํ๋๋ ๊ฒ์ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.)
๋ง์ฝ์ ๋ฐฑ์ฌ๋์ (
\
) ๋ฌธ์๊ฐ ๋ฌธ์ฅ ๋งจ ๋ ๋ถ๋ถ์ ์์นํด์๋ค๋ฉด, ํด๋น ๋ฌธ์ฅ๊ณผ ๋ฐ๋ก ๋ค์์ ์ค๋ ๋ฌธ์ฅ์ด ํ๋๋ก ํฉ์ณ์ง๊ณ ๊ฐํ ๋ฌธ์๋ ์ญ์ ๋ฉ๋๋ค. ์ฝ๊ฒ ๋งํด
abc def
๋ก ๋ ์ฝ๋๋
abcdef
๋ก ๋ณ๊ฒฝ๋๋ค๊ณ ๋ณด์๋ฉด ๋ฉ๋๋ค.
์ด ๋จ๊ณ์์๋ ์์ค ํ์ผ์ ์ฃผ์ (comment), ๊ณต๋ฐฑ ๋ฌธ์,
์ ์ฒ๋ฆฌ ํ ํฐ(Preprocessing token)
๋ค๋ก ๋ถ๋ฆฌํ๋ ๋จ๊ณ์
๋๋ค.
์ ์ฒ๋ฆฌ ํ ํฐ
์ C++ ์์์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๋ฌธ๋ฒ ์์๋ก, ํ์ ์ปดํ์ผ๋ฌ๊ฐ ์ฌ์ฉํ๋
์ปดํ์ผ๋ฌ ํ ํฐ
์ ๊ทผ๊ฐ์ด ๋ฉ๋๋ค. ์๋ ํด๋นํ๋ ๊ฒ๋ค์ด ์ ์ฒ๋ฆฌ ํ ํฐ์ ํฌํจ๋ฉ๋๋ค.
ํค๋ ์ด๋ฆ (
<iostream>
๊ณผ ๊ฐ์ด)
์๋ณ์
๋ฌธ์/๋ฌธ์์ด ๋ฆฌํฐ๋ด
์ฐ์ฐ์๋ค (
+
,
##
)
์ด ๋จ๊ณ์์
raw string literal
์ ํ์ธํด์ ๋ง์ผ 1~2 ๋จ๊ณ์ ๊ฑฐ์น๋ฉด์ ํด๋น ๋ฌธ์์ด ์์ ๋ด์ฉ์ด ๋ฐ๋์๋ค๋ฉด ๊ทธ ๋ณ๊ฒฝ์ ์ทจ์๋ฉ๋๋ค.
๋ํ ์ฃผ์์ ๋ชจ๋ ๊ณต๋ฐฑ ๋ฌธ์ ํ๋๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค.
์ฐธ๊ณ ๋ก ์ปดํ์ผ๋ฌ๊ฐ ์ ์ฒ๋ฆฌ๊ธฐ ํ ํฐ์ ์ธ์ํ ๋์๋ ๊ฐ๋ฅํ ๊ฐ์ฅ ๊ธด ์ ์ฒ๋ฆฌ ํ ํฐ์ ๋ง๋๋ ค๊ณ ํฉ๋๋ค. ์ด๋ฌํ ๊ท์น์
maximal munch
๋ผ๊ณ ๋ถ๋ฆ
๋๋ค. ์๋ฅผ ๋ค์ด์
int
a
=
bar
+++++
baz
๋ผ๋ ๋ฌธ์ฅ์ด ์์ ๋ ์ฐ๋ฆฌ๋
bar ++ + ++baz
๋ฅผ ์๋ํ ๊ฒ์ด๊ฒ ์ง๋ง,
maximal munch
๊ท์น์ ๋ฐ๋ผ ์ปดํ์ผ๋ฌ๊ฐ๋ ๊ฐ์ฅ ๊ธด ์ ์ฒ๋ฆฌ ํ ํฐ์ ๊ตฌ์ฑํ๋ ค๊ณ ํ๊ธฐ ๋๋ฌธ์
bar++ ++ +baz
๋ก ํด์๋์ด์ ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก
int
bar
=
0xE
+
foo
์ญ์ ์ฐ๋ฆฌ๋
0xE + foo
๋ฅผ ์๋ํ ๊ฒ์ด๊ฒ ์ง๋ง ์ปดํ์ผ๋ฌ์ ๊ฒฝ์ฐ
0xE+ foo
๋ก ํด์ํด์ ์ค๋ฅ๊ฐ ๋ฉ๋๋ค. ๊ทธ ์ด์ ๋ ๋ถ๋ ์์์ ๋ฆฌํฐ๋ด์ ๊ฒฝ์ฐ E ๋ฅผ ํตํด์ ์ง์๋ฅผ ์ง์ ํ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค. (0xE+10 ๊ณผ ๊ฐ์ ์์ผ๋ก)
์ด์ ์ ์ฒ๋ฆฌ ํ ํฐ๋ค๋ก ๋ถ๋ฆฌํ์์ผ๋ฏ๋ก ์ ์ฒ๋ฆฌ๊ธฐ๋ฅผ ์คํํฉ๋๋ค. ์ ์ฒ๋ฆฌ๊ธฐ๊ฐ ํ๋ ์ผ๋ค๋ก๋
#include ์ ์ง์ ๋ ํ์ผ์ ๋ด์ฉ์ ๋ณต์ฌํฉ๋๋ค.
#define ์ ์ ์๋ ๋งคํฌ๋ก๋ฅผ ์ฌ์ฉํด์ ์ฝ๋๋ฅผ ์นํํฉ๋๋ค.
#if, #ifndef ์ ๊ฐ์ ๊ตฌ๋ฌธ๋ค์ ์คํํด์ ์ฝ๋๋ฅผ ์นํํฉ๋๋ค.
#pragma ์ ๊ฐ์ ์ปดํ์ผ๋ฌ ๋ช
๋ น๋ฌธ๋ค์ ํด์ํฉ๋๋ค.
์๋ฅผ ๋ค์ด์
#include<iostream>
์ ํ์๋ค๋ฉด ํด๋น ๋ถ๋ถ์
iostream
ํค๋ํ์ผ์ ๋ด์ฉ์ผ๋ก ์นํ๋ฉ๋๋ค. ์ค์ ๋ก ์๋์ ๊ฐ์ด ๊ฐ๋จํ ํ๋ก๊ทธ๋จ์ ์ดํด๋ด
์๋ค.
#include
<iostream>
int
main
() {}
์ค์ ๋ก ์ ์ฒ๋ฆฌ ๋จ๊ณ๊ฐ ๋๋ ์ดํ์ ์ปดํ์ผ๋ฌ๊ฐ ๋ณด๋ ์์ค ํ์ผ์ ๋ชจ์ต์ ์๋์ ๊ฐ์ต๋๋ค.
namespace
std
{
typedef
long
unsigned
int
size_t;
typedef
long
int
ptrdiff_t;
typedef
decltype
(
nullptr
) nullptr_t;
}
namespace
std
{
inline
namespace
__cxx11
__attribute__
((
__abi_tag__
(
"cxx11"
))) { }
}
namespace
__gnu_cxx
{
inline
namespace
__cxx11
__attribute__
((
__abi_tag__
(
"cxx11"
))) { }
}
// ... (์๋ต) ...
namespace
std
__attribute__
((
__visibility__
(
"default"
)))
{
extern
istream cin;
extern
ostream cout;
extern
ostream cerr;
extern
ostream clog;
extern
wistream wcin;
extern
wostream wcout;
extern
wostream wcerr;
extern
wostream wclog;
static
ios_base
::
Init __ioinit;
}
int
main
() {
}
์ ๊ฐ์ด ์๊ฒผ์ต๋๋ค. ๊ทธ ๊ธธ์ด๋
๋ฌด๋ ค 27312 ์ค
์
๋๋ค.
๋๋ค๋ฅธ ์์๋ก ์ฐ๋ฆฌ๋ ๋ณดํต ํค๋ํ์ผ์ด ์ฌ๋ฌ๋ถ ์ค๋ณต๋์ด์ include ๋๋๋ผ๋ ํ ๋ฒ๋ง ํฌํจ์ด ๋๊ฒ ์๋์ ๊ฐ์ ํค๋ ๊ฐ๋(Header guard) ๋ฅผ ์์ฑํฉ๋๋ค.
#ifndef
A_H
#define
A_H
class
A {};
#endif
์์ ๊ฐ์ ํค๋ ๊ฐ๋๊ฐ ์๋ํ๋ ์ด์ ๋ ์๋ฅผ ๋ค์ด์
#include
"a.h"
#include
"a.h"
int
main
() {}
์ ํ๋๋ผ๋ ์ ์ฒ๋ฆฌ๊ธฐ์ ์ํด์
#ifndef
A_H
#define
A_H
class
A {};
#endif
#ifndef
A_H
#define
A_H
class
A {};
#endif
int
main
() {}
์ ๊ฐ์ด ๋ณ๊ฒฝ๋๋๋ฐ, ์ฒซ ๋ฒ์งธ ifndef ์์๋
A_H
๊ฐ ์ ์๋์ด ์์ง ์๊ธฐ ๋๋ฌธ์ ์ฌ๋ผ์ง์ง ์์ง๋ง, ๋ ๋ฒ์งธ ifndef ์์๋
A_H
๊ฐ ์ ์๋์ด ์์ผ๋ฏ๋ก #ifndef ์ #endif ์ฌ์ด์ ๋ชจ๋ ๋ด์ฉ๋ค์ด ๊ฐํ ๋ฌธ์๋ก ์นํ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๊ทธ๋ฅ
class
A {};
int
main
() {}
์ด๋ ๊ฒ ๋ฉ๋๋ค.
์ฐธ๊ณ ๋ก #include ๋ก ๋ณต์ฌ๋ ํค๋ ํ์ผ์ ๋ค์ Phase 1 ๋ถํฐ 4 ๋จ๊ณ๊น์ง์ ๊ณผ์ ์ ๊ฑฐ์นฉ๋๋ค. ์ด ๊ณผ์ ์ ์์ค ํ์ผ์ ๋์ด์์ ์ ์ฒ๋ฆฌ๊ธฐ๋ฌธ์ด ์์ ๋ ๊น์ง ์ง์๋ฉ๋๋ค.
์ฐธ๊ณ ์ฌํญ
๊ฐ๋จํ ์๊ฐํด๋ด๋ ์ด์ ๊ฐ์ ๋ฐฉ์์ ๊ต์ฅํ ๋นํจ์จ์ ์ด๋ผ๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. ์์ ๋ณธ
#include <iostream>
์ ํฌํจํ๋ ๊ฐ๋จํ main ํจ์๋ง ๋ณด์๋ ์ฐ๋ฆฌ๊ฐ ์์ฑํ ์ฝ๋๋ ๋จ ๋ ์ค์ ๋ถ๊ณผํ์ง๋ง, ์ค์ ๋ก ์ปดํ์ผ๋ฌ๊ฐ ๋ณด๋ ์ฝ๋์ ๊ธธ์ด๋ ๋๋ต 2๋ง 7์ฒ์ค์ด๊ธฐ ๋๋ฌธ์ด์ฃ .
์ด์ ๊ฐ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐ ํ๊ธฐ ์ํด์ ๋ฏธ๋ฆฌ ์ปดํ์ผ๋ ํค๋ (Precompiled header) ๋ผ๋ ๊ฐ๋
์ด ๋์
๋ฌ์ง๋ง,
์ฌ์ฉ์์ ๋ช ๊ฐ์ง ์ ์ฝ
์ด ์์ต๋๋ค.
C++ 20 ์์๋ ๋ชจ๋(module) ์ด๋ผ๋ ๊ฐ๋
์ ๋์
ํด์ ์ด์ ๊ฐ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค. ๋ชจ๋์ ๋ค๋ฅธ ํ์ผ์ ํด๋์ค์ ํจ์๋ค์ ์ฐธ์กฐํ ์ ์์ง๋ง #include ๋ฅผ ํ ๋ ์ฒ๋ผ ํด๋น ํ์ผ์ ๋ชจ๋ ๋ด์ฉ์ ๋ถ๋ฌ์ค์ง๋ ์์ต๋๋ค. ๋ฌผ๋ก ์์ง (2020๋
10์ ํ์ฌ) ๋ชจ๋์ด ์ ์์ผ๋ก ์ปดํ์ผ๋ฌ์์ ๊ตฌํ๋ ๊ฒ์ ์๋๋ผ์ ์ด๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์กฐ๊ธ ์๊ฐ์ด ๊ฑธ๋ฆด ๊ฒ์ผ๋ก ๋ณด์
๋๋ค.
๋ชจ๋ ๋ฌธ์๋ค์ ์ด์ ์ ์์ค ์ฝ๋ ๋ฌธ์ ์
์์ ์คํ ๋ฌธ์ ์
(Execution character set) ์ ๋ฌธ์๋ค๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ์ด์ ์ Escaped ๋ ์๋ค๋ ์คํ ๋ฌธ์ ์
์ ๋ฌธ์๋ค๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค.
์ด ๋จ๊ณ์์ ์ธ์ ํ ๋ฌธ์์ด๋ค์ด ํ๋๋ก ํฉ์ณ์ง๋๋ค. ์๋ฅผ ๋ค์ด์
std
::
cout
<<
"abc"
"def"
;
์ ๊ฒฝ์ฐ
std
::
cout
<<
"abcdef"
;
๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค.
์ ์ฌ๊ธฐ๊น์ง๊ฐ ๋ฐ๋ก ์ ์ฒ๋ฆฌ๊ธฐ ๊ณผ์ ์ด๋ผ ๋ณด์๋ฉด ๋ฉ๋๋ค.
์ ์ฒ๋ฆฌ๊ธฐ ๊ณผ์ ์ด ๋๋๊ณ ๋๋ฉด ์ค์ ์ปดํ์ผ ๊ณผ์ ์ด ์ํ๋ฉ๋๋ค. ์ปดํ์ผ ๊ณผ์ ์์๋ ์์ ์์ฑ๋์๋ ์ ์ฒ๋ฆฌ๊ธฐ ํ ํฐ๋ค๋ก ๋ฐํ์ผ๋ก ์ค์ ์ปดํ์ผ ํ ํฐ์ ์์ฑํ์ฌ ๋ถ์ํ๊ฒ ๋ฉ๋๋ค.
์ค์ ๋ก ์ด ๋จ๊ณ์์ ์ฐ๋ฆฌ๊ฐ ์์ ๋งํ๋
์ปดํ์ผ
์ด ์ด๋ฃจ์ด์ง๋๋ค. ์ ์ฒ๋ฆฌ๊ธฐ ํ ํฐ๋ค์ด ์ปดํ์ผ ํ ํฐ์ผ๋ก ๋ณํ์ด ๋๊ณ , ์ปดํ์ผ ํ ํฐ๋ค์ ์ปดํ์ผ๋ฌ์ ์ํด ํด์๋์ด์ ํด์ ์ ๋ (Translation Unit - ์ค์ฌ์ ๋ณดํต TU) ์ ์์ฑํ๊ฒ ๋ฉ๋๋ค.
์ฐธ๊ณ ๋ก ์ด ํด์ ์ ๋์ ๊ฐ ์์คํ์ผ ๋ณ๋ก ํ๋ ์ฉ ์กด์ฌํ๊ฒ ๋ฉ๋๋ค.
์ปดํ์ผ๋ฌ๋ ์์ฑ๋ TU ๋ฅผ ๋ถ์ํด์ ํ์๋ก ํ๋ ํ
ํ๋ฆฟ ์ธ์คํด์ค๋ค์ ํ์ธํฉ๋๋ค. ํ
ํ๋ฆฟ๋ค์ ์ ์ ์์น๊ฐ ํ์ธ์ด ๋๋ฉด ํด๋น ํ
ํ๋ฆฟ๋ค์ ์ธ์คํด์คํ๊ฐ ์งํ์ด ๋๊ณ ์ด๋ฅผ ํตํด์ ์ธ์คํด์ค ์ ๋์ด ์์ฑ๋ฉ๋๋ค.
์ด ๋จ๊ณ๋ฅผ ๋ง์น๊ฒ ๋๋ฉด ์ปดํ์ผ๋ฌ๋ ๋น๋ก์ ๋ชฉ์ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๊ฒ ๋ฉ๋๋ค. ์ด ๋ชฉ์ ์ฝ๋๋ ๋ง์ง๋ง ๋จ๊ณ์ธ ๋งํน ๋จ๊ณ๋ฅผ ์ํด์ ๋ง์ปค๋ก ์ ๋ฌ๋ฉ๋๋ค.
์ฐธ๊ณ ์ฌํญ
์ฌ๊ธฐ์๋ ๊ฐ๋จํ๊ฒ ์ง๊ณ ๋์ด๊ฐ๊ฒ ์ง๋ง ์ด ๋ ๋จ๊ณ์์ ์ ํํ ๋ฌด์จ ์ผ๋ค์ด ๋ฒ์ด์ง๋์ง๋
๋ค์ ๊ฐ์
๋ฅผ ์ฐธ์กฐํ์๊ธฐ ๋ฐ๋๋๋ค.
๋ง์ง๋ง์ผ๋ก ๋งํน ๋จ๊ณ์์๋ ์ปดํ์ผ๋ฌ๊ฐ ์์ฑํ ๋ชฉ์ ํ์ผ๋ค๊ณผ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ๋ค์ ๋ชจ์์ ์คํ ํ์ผ์ ์์ฑํฉ๋๋ค.
์ด ๋งํน ๊ณผ์ ์ด ๋๋๊ฒ ๋๋ฉด, ์ฌ์ฉํ๋ ์์คํ
์ ๋ฐ๋ผ์ ๊ฐ๊ธฐ ๋ค๋ฅธ ํํ์ ํ์ผ๋ค์ ์์ฑํ๊ฒ ๋ฉ๋๋ค. ์๋์ฐ์ฆ ๊ณ์ด์์ ์ฃผ๋ก ์ฌ์ฉํ๋ ์คํ ํ์ผ ํํ๋ Portable Executable ์ด๋ผ ๋ถ๋ฆฌ๋ PE ํ์ผ ํ์์ ํ์ผ์ ์์ฑํ๊ฒ ๋๊ณ (์ฐ๋ฆฌ๊ฐ ํํ ์๊ฐํ๋ .exe ํ์ผ ์ด์ฃ ), ๋ฆฌ๋
์ค ๊ณ์ด์ ์์คํ
์ ๊ฒฝ์ฐ Executable and Linkable Format, ํํ ELF ๋ผ ๋ถ๋ฆฌ๋ ํํ์ ์คํ ํ์ผ์ ์์ฑํฉ๋๋ค.
์ด ๋ ์คํ ํ์ผ์ ํฌ๋งท์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๊ฐ์ ์ฝ๋๋ฅผ ์ปดํ์ผ ํ๋๋ผ๋ ์๋์ฐ์ฆ์ PE ์คํ ํ์ผ์ ๋ฆฌ๋
์ค์์ (์ผ๋ฐ์ ์ผ๋ก) ์คํํ ์ ์๊ณ , ๋ฐ๋๋ก ์๋์ฐ์ฆ์์ ๋ฆฌ๋
์ค์ ELF ํ์ผ์ ์คํํ ์ ์์ต๋๋ค.
์ฐธ๊ณ ์ฌํญ
๋ง์ปค์์ ์ ํํ ์ด๋ค ์ผ์ด ๋ฒ์ด์ง๋์ง๋
๋ค์ ๊ฐ์
๋ฅผ ์ดํด๋ด์ฃผ๊ธฐ ๋ฐ๋๋๋ค.
์ ๊ทธ๋ผ ์ด๊ฒ์ผ๋ก ๊ฐ๋จํ ์ฐ๋ฆฌ๊ฐ ํํ ์ด์ผ๊ธฐ ํ๋
์ปดํ์ผ
์ด๋ผ๋ ๊ณผ์ ์์ ์ ์ฒด์ ์ผ๋ก ์ผ๋ค์ด ์ผ์ด๋๋์ง ์ดํด๋ณด์์ต๋๋ค. ๋ค์ ๊ฐ์์์๋ ์ ๊ณผ์ ์ค 7,8 ๋จ๊ณ, ํํ ์ฐ๋ฆฌ๊ฐ ์๋ฏธํ๋ ์ปดํ์ผ ๋จ๊ณ์์ ์ด๋ ํ ์ผ๋ค์ด ์ผ์ด๋๋์ง ๋ค๋ฃจ์ด๋ณด๊ฒ ์ต๋๋ค.
๊ฐ์ข๋ฅผ ๋ณด๋ค๊ฐ ์กฐ๊ธ์ด๋ผ๋
๊ถ๊ธํ ๊ฒ์ด๋ ์ด์ํ ์ ์ด ์๋ค๋ฉด ๊ผญ ๋๊ธ
์ ๋จ๊ฒจ์ฃผ์๊ธฐ ๋ฐ๋๋๋ค. ๊ทธ ์ธ์๋ ๊ฐ์ข์ ๊ด๋ จ๋ ๊ฒ์ด๋ผ๋ฉด ์ด๋ ํ ๊ฒ๋ ์ง๋ฌธํด ์ฃผ์
๋ ์๊ด ์์ต๋๋ค. ์๊ฐํด ๋ณผ ๋ฌธ์ ๋ ์ ๋ชจ๋ฅด๊ฒ ๋ค๋ฉด ๋๊ธ์ ๋ฌ์์ฃผ์ธ์.
ํ์ฌ ์ฌ๋ฌ๋ถ์ด ๋ณด์ ๊ฐ์ข๋
<์น์ด๋จน๋ C++ - <20 - 1. ์ฝ๋ ๋ถํฐ ์คํ ํ์ผ ๊น์ง - ์ ์ฒด์ ์ธ ๊ฐ์>>
์
๋๋ค. ์ด๋ฒ ๊ฐ์ข์ ๋ชจ๋ ์์ ๋ค์ ์ฝ๋๋ฅผ ๋ณด์ง ์๊ณ ์งค ์์ค๊น์ง ๊ฐ์ข๋ฅผ ์ฝ์ด ๋ณด์๊ธฐ ์ ๊น์ง ๋ค์ ๊ฐ์ข๋ก ๋์ด๊ฐ์ง ๋ง์์ฃผ์ธ์ |
| Markdown | [๋ชจ๋์ ์ฝ๋](https://modoocode.com/)
๋ก๊ทธ์ธ
- [๋ชจ๋ ๊ธ](https://modoocode.com/category)
- [C ์ธ์ด](https://modoocode.com/category/C)
- [C ๋ ํผ๋ฐ์ค](https://modoocode.com/category/C%20Reference)
- [stdio.h](https://modoocode.com/category/C%20Reference/stdio.h)
- [stdlib.h](https://modoocode.com/category/C%20Reference/stdlib.h)
- [string.h](https://modoocode.com/category/C%20Reference/string.h)
- [time.h](https://modoocode.com/category/C%20Reference/time.h)
- [C++](https://modoocode.com/category/C++)
- [C++ ๋ ํผ๋ฐ์ค](https://modoocode.com/category/C++%20Reference)
- [Containers](https://modoocode.com/category/C++%20Reference/Containers)
- [algorithm](https://modoocode.com/category/C++%20Reference/algorithm)
- [array](https://modoocode.com/category/C++%20Reference/array)
- [iostream](https://modoocode.com/category/C++%20Reference/iostream)
- [string](https://modoocode.com/category/C++%20Reference/string)
- [string\_view](https://modoocode.com/category/C++%20Reference/string_view)
- [utility](https://modoocode.com/category/C++%20Reference/utility)
- [Rust](https://modoocode.com/category/Rust)
- [X86-64 ๋ช
๋ น์ด ๋ ํผ๋ฐ์ค](https://modoocode.com/category/X86-64%20%EB%AA%85%EB%A0%B9%EC%96%B4%20%EB%A0%88%ED%8D%BC%EB%9F%B0%EC%8A%A4)
- [์๊ณ ๋ฆฌ์ฆ](https://modoocode.com/category/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98)
- [์๋ฃ ๊ตฌ์กฐ](https://modoocode.com/category/%EC%9E%90%EB%A3%8C%20%EA%B5%AC%EC%A1%B0)
- [์ก๋ด](https://modoocode.com/category/%EC%9E%A1%EB%8B%B4)
- [ํ๋ก๊ทธ๋๋ฐ](https://modoocode.com/category/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D)
ยง ์นดํ
๊ณ ๋ฆฌ - [C++](https://modoocode.com/category/C++)
[โฎ(๋๋ณด๊ธฐ)](https://modoocode.com/category/C++)
- [์ด๋ณด์๋ฅผ ์ํ C++ ๊ฐ์ข - ์น์ด๋จน๋ C++ (์๊ฒฐ)](https://modoocode.com/310)
- [19 - 1. Make ์ฌ์ฉ ๊ฐ์ด๋ (Makefile ๋ง๋ค๊ธฐ)](https://modoocode.com/311)
- [19 - 2. C++ ํ๋ก์ ํธ๋ฅผ ์ํ CMake ์ฌ์ฉ๋ฒ](https://modoocode.com/332)
- [20 - 1. ์ฝ๋ ๋ถํฐ ์คํ ํ์ผ ๊น์ง](https://modoocode.com/319)
- [20 - 2.์ฝ๋ ๋ถํฐ ์คํ ํ์ผ ๊น์ง - ์ปดํ์ผ (Compile)](https://modoocode.com/320)
- [20 - 3. ์ฝ๋ ๋ถํฐ ์คํ ํ์ผ ๊น์ง - ๋งํน (Linking)](https://modoocode.com/321)
- [20 - 4. ์ฝ๋ ๋ถํฐ ์คํ ํ์ผ ๊น์ง - main ์ผ๋ก์ ์ฌ์ ](https://modoocode.com/322)
[(๋๋ณด๊ธฐ)โฎ](https://modoocode.com/category/C++)
๋ชฉ์ฐจ
1. C++ ์ ์ปดํ์ผ ๊ณผ์
2. ์ ์ฒ๋ฆฌ ๋จ๊ณ
1. Phase 1: ๋ฌธ์๋ค ํด์ํ๊ธฐ
2. Phase 2: \\ ๋ฌธ์ ํด์ํ๊ธฐ
3. Phase 3: ์ ์ฒ๋ฆฌ ํ ํฐ๋ค๋ก ๋ถ๋ฆฌํ๊ธฐ
4. Phase 4: ์ ์ฒ๋ฆฌ๊ธฐ ์คํ ๋จ๊ณ
5. Phase 5: ์คํ ๋ฌธ์ ์
์ผ๋ก ๋ณ๊ฒฝํ๊ธฐ
6. Phase 6: ์ธ์ ํ ๋ฌธ์์ด ํฉ์น๊ธฐ
3. ์ปดํ์ผ
1. Phase 7: ํด์ ์ ๋ ์์ฑ (Translation Unit)
2. Phase 8: ์ธ์คํด์ค ์ ๋ ์์ฑ (Instantitaion Unit)
4. ๋งํน (Linking)
ํ์ ๊ด๊ณ
## [๋ชจ๋์ ์ฝ๋](https://modoocode.com/ "Home") ์น์ด๋จน๋ C++ - \<20 - 1. ์ฝ๋ ๋ถํฐ ์คํ ํ์ผ ๊น์ง - ์ ์ฒด์ ์ธ ๊ฐ์\>
์์ฑ์ผ : 2020-10-20
์ด ๊ธ์ 24276 ๋ฒ ์ฝํ์ต๋๋ค.
์ด๋ฒ ๊ฐ์ข์์๋
- C++ ์ปดํ์ผ ๊ณผ์ ์ ์ ์ฒด์ ์ธ ๊ฐ์
- ์ ์ฒ๋ฆฌ๊ธฐ ์๋ ๋ฐฉ์
์ ๋ํด์ ๋ค๋ฃจ์ด ๋ณด๊ฒ ์ต๋๋ค.

์ฌํ๊น์ง C++ ์ ๊ณต๋ถํ๋ฉด์ ์ ๋ ์์ด ๋ง์ ํ์ผ๋ค์ ์ปดํ์ผ ํ๊ณ , ์คํ์์ผ ๋ณด์๊ฒ ์ง๋ง, ์์ง๊น์ง ์ ํํ ์ปดํ์ผ์ด ์ด๋ ํ ๋ฐฉ์์ผ๋ก ์งํ๋๊ณ , ๋ ๋์ ์ ๋ง์ ์์ค ์ฝ๋๋ค์ด ์ด๋ป๊ฒ ํฉ์ณ์ง๋์ง์ ๋ํด์๋ ์์ธํ ๋ค๋ฃฌ ์ ์ด ์์ต๋๋ค.
์์ผ๋ก ์ฐ์ฌ๋ 3 ๊ฐ์ ๊ฐ์ข๋ค์ ํตํด์ C++ ์์ ์ปดํ์ผ์ ํ๋ค ๋ผ๋ ๊ฒ์ด ์ ํํ ์ด๋ ํ ์ผ๋ จ์ ๊ณผ์ ์ผ๋ก ์ด๋ฃจ์ด์ง๋ ๊ฒ์ธ์ง, ๋ ์ด๋ป๊ฒ ์คํ ํ์ผ์ด ์์ฑ๋๋ ๊ฒ์ธ์ง์ ๋ํด์ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
### C++ ์ ์ปดํ์ผ ๊ณผ์
C++ ์์ ์ฐ๋ฆฌ๊ฐ ์์ฑํ ์์ค์ฝ๋๋ฅผ ์ค์ ๋ก ์คํํ ์ ์๋ ์คํ ํ์ผ๋ก ๋ณํํ๊ธฐ ์ํด์๋ ์ด 3 ๊ฐ์ง ๋จ๊ณ๋ฅผ ๊ฑฐ์ณ์ผ๋ง ํฉ๋๋ค.
1. ๋จผ์ \#include ์ \#define ์ ๊ฐ์ ์ ์ฒ๋ฆฌ๊ธฐ ๋งคํฌ๋ก๋ค์ ์ฒ๋ฆฌํ๋ ์ ์ฒ๋ฆฌ(Preprocessing) ๋จ๊ณ (๊ทธ๋์ ์ด๋ฆ๋ ์ ์ฒ๋ฆฌ ๋จ๊ณ์ฃ ).
2. ๊ทธ ๋ค์ ๊ฐ๊ฐ์ ์์ค ํ์ผ๋ค์ ์ด์
๋ธ๋ฆฌ ๋ช
๋ น์ด๋ก ๋ณํํ๋ ์ปดํ์ผ (Compile) ๋จ๊ณ
3. ๊ทธ ํ์ ์ด์
๋ธ๋ฆฌ ์ฝ๋๋ค์ ์ค์ ๊ธฐ๊ณ์ด๋ก ์ด๋ฃจ์ด์ง ๋ชฉ์ ์ฝ๋(Object file)๋ก ๋ณํํ๋ ์ด์
๋ธ (Assemble)๋จ๊ณ
4. ๋ง์ง๋ง์ผ๋ก ๊ฐ๊ฐ์ ๋ชฉ์ ์ฝ๋๋ค์ ํ๋ฐ ๋ชจ์์ ํ๋์ ์คํ ํ์ผ๋ก ๋ง๋ค์ด์ฃผ๋ ๋งํน (Linking) ๋จ๊ณ๋ก ๋๋์ด๋ณผ ์ ์์ต๋๋ค.

๊ฐ๋จํ ์์ ๊ฐ์ ๊ณผ์ ์ด๋ผ ๋ณด์๋ฉด ๋ฉ๋๋ค.
๋ณดํต ์ ์ฒ๋ฆฌ ๋จ๊ณ, ์ปดํ์ผ ๋จ๊ณ, ์ด์
๋ธ ๋จ๊ณ๋ฅผ ๋ชจ๋ ๋ญ๋ฝ๊ทธ๋ ค์ ์ปดํ์ผ ๋จ๊ณ ํ๋๋ก ์๊ฐํด๋ ๋ฌด๋ฐฉํฉ๋๋ค. ์ฆ ๋ง์ ๊ฒฝ์ฐ ์ ๊ทธ๋ฆผ์์ a.S ๋ b.S ์ ๊ฐ์ ํ์ผ๋ค์ ์์ฑํ์ง ์๊ณ ๋ฐ๋ก ๊ทธ๋ฅ ๋ชฉ์ ์ฝ๋๋ก ๋์ด๊ฐ๋ค๊ณ ๋ด๋ ๋ฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ๊ฐ ๋จ๊ณ์์ ์ด๋ ํ ์ผ์ด ์ผ์ด๋๋์ง ์ดํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
### ์ ์ฒ๋ฆฌ ๋จ๊ณ
์ ์ฒ๋ฆฌ ๋จ๊ณ์ ์ปดํ์ผ ๋จ๊ณ๋ ๋ชจ๋ ์ปดํ์ผ๋ฌ ์์์ ์ํ๋๋๋ค. [C++ ํ์ค](http://eel.is/c++draft/lex.phases) ์ ๋ฐ๋ฅด๋ฉด, ์ด ๋ ๋จ๊ณ๋ ์ด 8 ๊ฐ์ ์ธ๋ถ ๋จ๊ณ๋ค๋ก ์ชผ๊ฐ์ง ์ ์๋๋ฐ, 1 ๋ถํฐ 6 ์ธ๋ถ ๋จ๊ณ๊น์ง๊ฐ ์ ์ฒ๋ฆฌ ๊ณผ์ ์ผ๋ก ๋ณผ ์ ์๊ณ , ๋๋จธ์ง ์ธ ๊ฐ์ ๋จ๊ณ๋ฅผ ์ปดํ์ผ ๊ณผ์ ์ผ๋ก ๋ณผ ์ ์์ต๋๋ค. ์๋ฌดํผ ๊ทธ๋ ๋ค๋ฉด ์ ์ฒ๋ฆฌ ๋จ๊ณ์์ ์ด๋ ํ ์ผ์ด ๋ฒ์ด์ง๋์ง ์ดํด๋ด
์๋ค.
#### Phase 1: ๋ฌธ์๋ค ํด์ํ๊ธฐ
๊ฐ์ฅ ์ฒซ ๋ฒ์งธ ๋จ๊ณ๋ก ์์ค ํ์ผ์ ์๋ ๋ฌธ์๋ค์ ํด์ํ๋ ๊ฒ์
๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก C++ ์ฝ๋์์๋ ์ด 96 ๊ฐ์ ๋ฌธ์๋ค๋ก ์ด๋ฃจ์ด์ง Basic source character set ์ด ์๋๋ฐ, ์ด๋ค์
- 5 ์ข
๋ฅ์ ๊ณต๋ฐฑ ๋ฌธ์๋ค (์คํ์ด์ค, ํญ, ๊ฐํ ๋ฌธ์ ๋ฑ๋ฑ)
- 10 ์ข
๋ฅ์ ์ซ์๋ค (0 ๋ถํฐ 9 ๊น์ง)
- 52 ์ข
๋ฅ์ ์ํ๋ฒณ ๋์๋ฌธ์
- 29 ์ข
๋ฅ์ ํน์ ๋ฌธ์๋ค (`_`, `{`, `+` ๋ฑ๋ฑ)
์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค. ์ด ๊ธฐ๋ณธ ๋ฌธ์ ์
์ ํฌํจ๋์ด ์์ง ์์ ๋ค๋ฅธ ๋ชจ๋ ๋ฌธ์๋ค์ `\u` ๋ฅผ ํตํด ์ ๋์ฝ๋ ๊ฐ์ผ๋ก ์นํ๋๊ฑฐ๋, ์ปดํ์ผ๋ฌ์ ์ํด์ ๋ฐ๋ก ํด์๋ฉ๋๋ค. (์ ์ด๋ GCC ์ ๊ฒฝ์ฐ ์ ๋์ฝ๋๋ฅผ ์ง์ํ๋ฏ๋ก ๋ฐ๋ก ์นํ๋๋ ๊ฒ์ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.)
#### Phase 2: \\ ๋ฌธ์ ํด์ํ๊ธฐ
๋ง์ฝ์ ๋ฐฑ์ฌ๋์ (`\`) ๋ฌธ์๊ฐ ๋ฌธ์ฅ ๋งจ ๋ ๋ถ๋ถ์ ์์นํด์๋ค๋ฉด, ํด๋น ๋ฌธ์ฅ๊ณผ ๋ฐ๋ก ๋ค์์ ์ค๋ ๋ฌธ์ฅ์ด ํ๋๋ก ํฉ์ณ์ง๊ณ ๊ฐํ ๋ฌธ์๋ ์ญ์ ๋ฉ๋๋ค. ์ฝ๊ฒ ๋งํด
```
abc def
```
๋ก ๋ ์ฝ๋๋
```
abcdef
```
๋ก ๋ณ๊ฒฝ๋๋ค๊ณ ๋ณด์๋ฉด ๋ฉ๋๋ค.
#### Phase 3: ์ ์ฒ๋ฆฌ ํ ํฐ๋ค๋ก ๋ถ๋ฆฌํ๊ธฐ
์ด ๋จ๊ณ์์๋ ์์ค ํ์ผ์ ์ฃผ์ (comment), ๊ณต๋ฐฑ ๋ฌธ์, ์ ์ฒ๋ฆฌ ํ ํฐ(Preprocessing token)๋ค๋ก ๋ถ๋ฆฌํ๋ ๋จ๊ณ์
๋๋ค. [์ ์ฒ๋ฆฌ ํ ํฐ](https://eel.is/c++draft/lex.pptoken)์ C++ ์์์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๋ฌธ๋ฒ ์์๋ก, ํ์ ์ปดํ์ผ๋ฌ๊ฐ ์ฌ์ฉํ๋ ์ปดํ์ผ๋ฌ ํ ํฐ ์ ๊ทผ๊ฐ์ด ๋ฉ๋๋ค. ์๋ ํด๋นํ๋ ๊ฒ๋ค์ด ์ ์ฒ๋ฆฌ ํ ํฐ์ ํฌํจ๋ฉ๋๋ค.
- ํค๋ ์ด๋ฆ ([\<iostream\>](https://modoocode.com/143) ๊ณผ ๊ฐ์ด)
- ์๋ณ์
- ๋ฌธ์/๋ฌธ์์ด ๋ฆฌํฐ๋ด
- ์ฐ์ฐ์๋ค (`+`, `##`)
์ด ๋จ๊ณ์์ raw string literal ์ ํ์ธํด์ ๋ง์ผ 1~2 ๋จ๊ณ์ ๊ฑฐ์น๋ฉด์ ํด๋น ๋ฌธ์์ด ์์ ๋ด์ฉ์ด ๋ฐ๋์๋ค๋ฉด ๊ทธ ๋ณ๊ฒฝ์ ์ทจ์๋ฉ๋๋ค.
๋ํ ์ฃผ์์ ๋ชจ๋ ๊ณต๋ฐฑ ๋ฌธ์ ํ๋๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค.
์ฐธ๊ณ ๋ก ์ปดํ์ผ๋ฌ๊ฐ ์ ์ฒ๋ฆฌ๊ธฐ ํ ํฐ์ ์ธ์ํ ๋์๋ ๊ฐ๋ฅํ ๊ฐ์ฅ ๊ธด ์ ์ฒ๋ฆฌ ํ ํฐ์ ๋ง๋๋ ค๊ณ ํฉ๋๋ค. ์ด๋ฌํ ๊ท์น์ maximal munch ๋ผ๊ณ ๋ถ๋ฆ
๋๋ค. ์๋ฅผ ๋ค์ด์
```
int a = bar+++++baz
```
๋ผ๋ ๋ฌธ์ฅ์ด ์์ ๋ ์ฐ๋ฆฌ๋ `bar ++ + ++baz` ๋ฅผ ์๋ํ ๊ฒ์ด๊ฒ ์ง๋ง, maximal munch ๊ท์น์ ๋ฐ๋ผ ์ปดํ์ผ๋ฌ๊ฐ๋ ๊ฐ์ฅ ๊ธด ์ ์ฒ๋ฆฌ ํ ํฐ์ ๊ตฌ์ฑํ๋ ค๊ณ ํ๊ธฐ ๋๋ฌธ์ `bar++ ++ +baz` ๋ก ํด์๋์ด์ ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก
```
int bar = 0xE+foo
```
์ญ์ ์ฐ๋ฆฌ๋ `0xE + foo` ๋ฅผ ์๋ํ ๊ฒ์ด๊ฒ ์ง๋ง ์ปดํ์ผ๋ฌ์ ๊ฒฝ์ฐ `0xE+ foo` ๋ก ํด์ํด์ ์ค๋ฅ๊ฐ ๋ฉ๋๋ค. ๊ทธ ์ด์ ๋ ๋ถ๋ ์์์ ๋ฆฌํฐ๋ด์ ๊ฒฝ์ฐ E ๋ฅผ ํตํด์ ์ง์๋ฅผ ์ง์ ํ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค. (0xE+10 ๊ณผ ๊ฐ์ ์์ผ๋ก)
#### Phase 4: ์ ์ฒ๋ฆฌ๊ธฐ ์คํ ๋จ๊ณ
์ด์ ์ ์ฒ๋ฆฌ ํ ํฐ๋ค๋ก ๋ถ๋ฆฌํ์์ผ๋ฏ๋ก ์ ์ฒ๋ฆฌ๊ธฐ๋ฅผ ์คํํฉ๋๋ค. ์ ์ฒ๋ฆฌ๊ธฐ๊ฐ ํ๋ ์ผ๋ค๋ก๋
- \#include ์ ์ง์ ๋ ํ์ผ์ ๋ด์ฉ์ ๋ณต์ฌํฉ๋๋ค.
- \#define ์ ์ ์๋ ๋งคํฌ๋ก๋ฅผ ์ฌ์ฉํด์ ์ฝ๋๋ฅผ ์นํํฉ๋๋ค.
- \#if, \#ifndef ์ ๊ฐ์ ๊ตฌ๋ฌธ๋ค์ ์คํํด์ ์ฝ๋๋ฅผ ์นํํฉ๋๋ค.
- \#pragma ์ ๊ฐ์ ์ปดํ์ผ๋ฌ ๋ช
๋ น๋ฌธ๋ค์ ํด์ํฉ๋๋ค.
์๋ฅผ ๋ค์ด์ `#include<iostream>` ์ ํ์๋ค๋ฉด ํด๋น ๋ถ๋ถ์ [iostream](https://modoocode.com/143) ํค๋ํ์ผ์ ๋ด์ฉ์ผ๋ก ์นํ๋ฉ๋๋ค. ์ค์ ๋ก ์๋์ ๊ฐ์ด ๊ฐ๋จํ ํ๋ก๊ทธ๋จ์ ์ดํด๋ด
์๋ค.
```
#include <iostream>
int main() {}
```
์ค์ ๋ก ์ ์ฒ๋ฆฌ ๋จ๊ณ๊ฐ ๋๋ ์ดํ์ ์ปดํ์ผ๋ฌ๊ฐ ๋ณด๋ ์์ค ํ์ผ์ ๋ชจ์ต์ ์๋์ ๊ฐ์ต๋๋ค.
```
namespace std
{
typedef long unsigned int size_t;
typedef long int ptrdiff_t;
typedef decltype(nullptr) nullptr_t;
}
namespace std
{
inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { }
}
namespace __gnu_cxx
{
inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { }
}
// ... (์๋ต) ...
namespace std __attribute__ ((__visibility__ ("default")))
{
extern istream cin;
extern ostream cout;
extern ostream cerr;
extern ostream clog;
extern wistream wcin;
extern wostream wcout;
extern wostream wcerr;
extern wostream wclog;
static ios_base::Init __ioinit;
}
int main() {
}
```
์ ๊ฐ์ด ์๊ฒผ์ต๋๋ค. ๊ทธ ๊ธธ์ด๋ ๋ฌด๋ ค 27312 ์ค์
๋๋ค.
์ ์ฒ๋ฆฌ ๊ณผ์ ์ด ๋๋ ํ์ ํ์ผ์ ๋ชจ์ต์ ๋ณด๊ณ ์ถ๋ค๋ฉด -E ์ต์
์ผ๋ก ์ปดํ์ผ ํ๋ฉด ๋ฉ๋๋ค. ์ค์ ๋ก ์ถ๋ ฅ๋๋ ๊ฒ์ \# ํ ํฐ์ผ๋ก ํ์ผ์์์ ์์น๋ฅผ ๋ํ๋ด๋ ์ ๋ณด๊ฐ ๋ค์ด์์ง๋ง ์ด๋ค์ ์ปดํ์ผ๋ฌ์ ์ํด ๋ฌด์๋ฉ๋๋ค.
๋๋ค๋ฅธ ์์๋ก ์ฐ๋ฆฌ๋ ๋ณดํต ํค๋ํ์ผ์ด ์ฌ๋ฌ๋ถ ์ค๋ณต๋์ด์ include ๋๋๋ผ๋ ํ ๋ฒ๋ง ํฌํจ์ด ๋๊ฒ ์๋์ ๊ฐ์ ํค๋ ๊ฐ๋(Header guard) ๋ฅผ ์์ฑํฉ๋๋ค.
```
#ifndef A_H
#define A_H
class A {};
#endif
```
์์ ๊ฐ์ ํค๋ ๊ฐ๋๊ฐ ์๋ํ๋ ์ด์ ๋ ์๋ฅผ ๋ค์ด์
```
#include "a.h"
#include "a.h"
int main() {}
```
์ ํ๋๋ผ๋ ์ ์ฒ๋ฆฌ๊ธฐ์ ์ํด์
```
#ifndef A_H
#define A_H
class A {};
#endif
#ifndef A_H
#define A_H
class A {};
#endif
int main() {}
```
์ ๊ฐ์ด ๋ณ๊ฒฝ๋๋๋ฐ, ์ฒซ ๋ฒ์งธ ifndef ์์๋ `A_H` ๊ฐ ์ ์๋์ด ์์ง ์๊ธฐ ๋๋ฌธ์ ์ฌ๋ผ์ง์ง ์์ง๋ง, ๋ ๋ฒ์งธ ifndef ์์๋ `A_H` ๊ฐ ์ ์๋์ด ์์ผ๋ฏ๋ก \#ifndef ์ \#endif ์ฌ์ด์ ๋ชจ๋ ๋ด์ฉ๋ค์ด ๊ฐํ ๋ฌธ์๋ก ์นํ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๊ทธ๋ฅ
```
class A {};
int main() {}
```
์ด๋ ๊ฒ ๋ฉ๋๋ค.
์ฐธ๊ณ ๋ก \#include ๋ก ๋ณต์ฌ๋ ํค๋ ํ์ผ์ ๋ค์ Phase 1 ๋ถํฐ 4 ๋จ๊ณ๊น์ง์ ๊ณผ์ ์ ๊ฑฐ์นฉ๋๋ค. ์ด ๊ณผ์ ์ ์์ค ํ์ผ์ ๋์ด์์ ์ ์ฒ๋ฆฌ๊ธฐ๋ฌธ์ด ์์ ๋ ๊น์ง ์ง์๋ฉ๋๋ค.
์ฐธ๊ณ ์ฌํญ
๊ฐ๋จํ ์๊ฐํด๋ด๋ ์ด์ ๊ฐ์ ๋ฐฉ์์ ๊ต์ฅํ ๋นํจ์จ์ ์ด๋ผ๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. ์์ ๋ณธ `#include <iostream>` ์ ํฌํจํ๋ ๊ฐ๋จํ main ํจ์๋ง ๋ณด์๋ ์ฐ๋ฆฌ๊ฐ ์์ฑํ ์ฝ๋๋ ๋จ ๋ ์ค์ ๋ถ๊ณผํ์ง๋ง, ์ค์ ๋ก ์ปดํ์ผ๋ฌ๊ฐ ๋ณด๋ ์ฝ๋์ ๊ธธ์ด๋ ๋๋ต 2๋ง 7์ฒ์ค์ด๊ธฐ ๋๋ฌธ์ด์ฃ .
์ด์ ๊ฐ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐ ํ๊ธฐ ์ํด์ ๋ฏธ๋ฆฌ ์ปดํ์ผ๋ ํค๋ (Precompiled header) ๋ผ๋ ๊ฐ๋
์ด ๋์
๋ฌ์ง๋ง, [์ฌ์ฉ์์ ๋ช ๊ฐ์ง ์ ์ฝ](https://gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.html)์ด ์์ต๋๋ค.
C++ 20 ์์๋ ๋ชจ๋(module) ์ด๋ผ๋ ๊ฐ๋
์ ๋์
ํด์ ์ด์ ๊ฐ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค. ๋ชจ๋์ ๋ค๋ฅธ ํ์ผ์ ํด๋์ค์ ํจ์๋ค์ ์ฐธ์กฐํ ์ ์์ง๋ง \#include ๋ฅผ ํ ๋ ์ฒ๋ผ ํด๋น ํ์ผ์ ๋ชจ๋ ๋ด์ฉ์ ๋ถ๋ฌ์ค์ง๋ ์์ต๋๋ค. ๋ฌผ๋ก ์์ง (2020๋
10์ ํ์ฌ) ๋ชจ๋์ด ์ ์์ผ๋ก ์ปดํ์ผ๋ฌ์์ ๊ตฌํ๋ ๊ฒ์ ์๋๋ผ์ ์ด๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์กฐ๊ธ ์๊ฐ์ด ๊ฑธ๋ฆด ๊ฒ์ผ๋ก ๋ณด์
๋๋ค.
#### Phase 5: ์คํ ๋ฌธ์ ์
์ผ๋ก ๋ณ๊ฒฝํ๊ธฐ
๋ชจ๋ ๋ฌธ์๋ค์ ์ด์ ์ ์์ค ์ฝ๋ ๋ฌธ์ ์
์์ ์คํ ๋ฌธ์ ์
(Execution character set) ์ ๋ฌธ์๋ค๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ์ด์ ์ Escaped ๋ ์๋ค๋ ์คํ ๋ฌธ์ ์
์ ๋ฌธ์๋ค๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค.
#### Phase 6: ์ธ์ ํ ๋ฌธ์์ด ํฉ์น๊ธฐ
์ด ๋จ๊ณ์์ ์ธ์ ํ ๋ฌธ์์ด๋ค์ด ํ๋๋ก ํฉ์ณ์ง๋๋ค. ์๋ฅผ ๋ค์ด์
```
std::cout << "abc"
"def";
```
์ ๊ฒฝ์ฐ
```
std::cout << "abcdef";
```
๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค.
์ ์ฌ๊ธฐ๊น์ง๊ฐ ๋ฐ๋ก ์ ์ฒ๋ฆฌ๊ธฐ ๊ณผ์ ์ด๋ผ ๋ณด์๋ฉด ๋ฉ๋๋ค.
### ์ปดํ์ผ
์ ์ฒ๋ฆฌ๊ธฐ ๊ณผ์ ์ด ๋๋๊ณ ๋๋ฉด ์ค์ ์ปดํ์ผ ๊ณผ์ ์ด ์ํ๋ฉ๋๋ค. ์ปดํ์ผ ๊ณผ์ ์์๋ ์์ ์์ฑ๋์๋ ์ ์ฒ๋ฆฌ๊ธฐ ํ ํฐ๋ค๋ก ๋ฐํ์ผ๋ก ์ค์ ์ปดํ์ผ ํ ํฐ์ ์์ฑํ์ฌ ๋ถ์ํ๊ฒ ๋ฉ๋๋ค.
#### Phase 7: ํด์ ์ ๋ ์์ฑ (Translation Unit)
์ค์ ๋ก ์ด ๋จ๊ณ์์ ์ฐ๋ฆฌ๊ฐ ์์ ๋งํ๋ ์ปดํ์ผ ์ด ์ด๋ฃจ์ด์ง๋๋ค. ์ ์ฒ๋ฆฌ๊ธฐ ํ ํฐ๋ค์ด ์ปดํ์ผ ํ ํฐ์ผ๋ก ๋ณํ์ด ๋๊ณ , ์ปดํ์ผ ํ ํฐ๋ค์ ์ปดํ์ผ๋ฌ์ ์ํด ํด์๋์ด์ ํด์ ์ ๋ (Translation Unit - ์ค์ฌ์ ๋ณดํต TU) ์ ์์ฑํ๊ฒ ๋ฉ๋๋ค.
์ฐธ๊ณ ๋ก ์ด ํด์ ์ ๋์ ๊ฐ ์์คํ์ผ ๋ณ๋ก ํ๋ ์ฉ ์กด์ฌํ๊ฒ ๋ฉ๋๋ค.
#### Phase 8: ์ธ์คํด์ค ์ ๋ ์์ฑ (Instantitaion Unit)
์ปดํ์ผ๋ฌ๋ ์์ฑ๋ TU ๋ฅผ ๋ถ์ํด์ ํ์๋ก ํ๋ ํ
ํ๋ฆฟ ์ธ์คํด์ค๋ค์ ํ์ธํฉ๋๋ค. ํ
ํ๋ฆฟ๋ค์ ์ ์ ์์น๊ฐ ํ์ธ์ด ๋๋ฉด ํด๋น ํ
ํ๋ฆฟ๋ค์ ์ธ์คํด์คํ๊ฐ ์งํ์ด ๋๊ณ ์ด๋ฅผ ํตํด์ ์ธ์คํด์ค ์ ๋์ด ์์ฑ๋ฉ๋๋ค.
์ด ๋จ๊ณ๋ฅผ ๋ง์น๊ฒ ๋๋ฉด ์ปดํ์ผ๋ฌ๋ ๋น๋ก์ ๋ชฉ์ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๊ฒ ๋ฉ๋๋ค. ์ด ๋ชฉ์ ์ฝ๋๋ ๋ง์ง๋ง ๋จ๊ณ์ธ ๋งํน ๋จ๊ณ๋ฅผ ์ํด์ ๋ง์ปค๋ก ์ ๋ฌ๋ฉ๋๋ค.
์ฐธ๊ณ ์ฌํญ
์ฌ๊ธฐ์๋ ๊ฐ๋จํ๊ฒ ์ง๊ณ ๋์ด๊ฐ๊ฒ ์ง๋ง ์ด ๋ ๋จ๊ณ์์ ์ ํํ ๋ฌด์จ ์ผ๋ค์ด ๋ฒ์ด์ง๋์ง๋ [๋ค์ ๊ฐ์](https://modoocode.com/320)๋ฅผ ์ฐธ์กฐํ์๊ธฐ ๋ฐ๋๋๋ค.
### ๋งํน (Linking)
๋ง์ง๋ง์ผ๋ก ๋งํน ๋จ๊ณ์์๋ ์ปดํ์ผ๋ฌ๊ฐ ์์ฑํ ๋ชฉ์ ํ์ผ๋ค๊ณผ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ๋ค์ ๋ชจ์์ ์คํ ํ์ผ์ ์์ฑํฉ๋๋ค.
์ด ๋งํน ๊ณผ์ ์ด ๋๋๊ฒ ๋๋ฉด, ์ฌ์ฉํ๋ ์์คํ
์ ๋ฐ๋ผ์ ๊ฐ๊ธฐ ๋ค๋ฅธ ํํ์ ํ์ผ๋ค์ ์์ฑํ๊ฒ ๋ฉ๋๋ค. ์๋์ฐ์ฆ ๊ณ์ด์์ ์ฃผ๋ก ์ฌ์ฉํ๋ ์คํ ํ์ผ ํํ๋ Portable Executable ์ด๋ผ ๋ถ๋ฆฌ๋ PE ํ์ผ ํ์์ ํ์ผ์ ์์ฑํ๊ฒ ๋๊ณ (์ฐ๋ฆฌ๊ฐ ํํ ์๊ฐํ๋ .exe ํ์ผ ์ด์ฃ ), ๋ฆฌ๋
์ค ๊ณ์ด์ ์์คํ
์ ๊ฒฝ์ฐ Executable and Linkable Format, ํํ ELF ๋ผ ๋ถ๋ฆฌ๋ ํํ์ ์คํ ํ์ผ์ ์์ฑํฉ๋๋ค.
์ด ๋ ์คํ ํ์ผ์ ํฌ๋งท์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๊ฐ์ ์ฝ๋๋ฅผ ์ปดํ์ผ ํ๋๋ผ๋ ์๋์ฐ์ฆ์ PE ์คํ ํ์ผ์ ๋ฆฌ๋
์ค์์ (์ผ๋ฐ์ ์ผ๋ก) ์คํํ ์ ์๊ณ , ๋ฐ๋๋ก ์๋์ฐ์ฆ์์ ๋ฆฌ๋
์ค์ ELF ํ์ผ์ ์คํํ ์ ์์ต๋๋ค.
์ฐธ๊ณ ์ฌํญ
๋ง์ปค์์ ์ ํํ ์ด๋ค ์ผ์ด ๋ฒ์ด์ง๋์ง๋ [๋ค์ ๊ฐ์](https://modoocode.com/321) ๋ฅผ ์ดํด๋ด์ฃผ๊ธฐ ๋ฐ๋๋๋ค.
์ ๊ทธ๋ผ ์ด๊ฒ์ผ๋ก ๊ฐ๋จํ ์ฐ๋ฆฌ๊ฐ ํํ ์ด์ผ๊ธฐ ํ๋ ์ปดํ์ผ ์ด๋ผ๋ ๊ณผ์ ์์ ์ ์ฒด์ ์ผ๋ก ์ผ๋ค์ด ์ผ์ด๋๋์ง ์ดํด๋ณด์์ต๋๋ค. ๋ค์ ๊ฐ์์์๋ ์ ๊ณผ์ ์ค 7,8 ๋จ๊ณ, ํํ ์ฐ๋ฆฌ๊ฐ ์๋ฏธํ๋ ์ปดํ์ผ ๋จ๊ณ์์ ์ด๋ ํ ์ผ๋ค์ด ์ผ์ด๋๋์ง ๋ค๋ฃจ์ด๋ณด๊ฒ ์ต๋๋ค.
๊ฐ์ข๋ฅผ ๋ณด๋ค๊ฐ ์กฐ๊ธ์ด๋ผ๋ ๊ถ๊ธํ ๊ฒ์ด๋ ์ด์ํ ์ ์ด ์๋ค๋ฉด ๊ผญ ๋๊ธ์ ๋จ๊ฒจ์ฃผ์๊ธฐ ๋ฐ๋๋๋ค. ๊ทธ ์ธ์๋ ๊ฐ์ข์ ๊ด๋ จ๋ ๊ฒ์ด๋ผ๋ฉด ์ด๋ ํ ๊ฒ๋ ์ง๋ฌธํด ์ฃผ์
๋ ์๊ด ์์ต๋๋ค. ์๊ฐํด ๋ณผ ๋ฌธ์ ๋ ์ ๋ชจ๋ฅด๊ฒ ๋ค๋ฉด ๋๊ธ์ ๋ฌ์์ฃผ์ธ์.
ํ์ฌ ์ฌ๋ฌ๋ถ์ด ๋ณด์ ๊ฐ์ข๋ \<์น์ด๋จน๋ C++ - \<20 - 1. ์ฝ๋ ๋ถํฐ ์คํ ํ์ผ ๊น์ง - ์ ์ฒด์ ์ธ ๊ฐ์\>\> ์
๋๋ค. ์ด๋ฒ ๊ฐ์ข์ ๋ชจ๋ ์์ ๋ค์ ์ฝ๋๋ฅผ ๋ณด์ง ์๊ณ ์งค ์์ค๊น์ง ๊ฐ์ข๋ฅผ ์ฝ์ด ๋ณด์๊ธฐ ์ ๊น์ง ๋ค์ ๊ฐ์ข๋ก ๋์ด๊ฐ์ง ๋ง์์ฃผ์ธ์
[๋ค์ ๊ฐ์ข ๋ณด๋ฌ๊ฐ๊ธฐ](https://modoocode.com/135)
๋๊ธ์ด 3 ๊ฐ ์์ต๋๋ค\!

๊ฐ์ข์ ๊ด๋ จ ์์ด ๊ถ๊ธํ ๋ด์ฉ์ [์ฌ๊ธฐ๋ฅผ ์ฌ์ฉํด์ฃผ์ธ์](https://forum.modoocode.com/)
๋ค์์ผ๋ก ๋ก๊ทธ์ธ
๋๋ ์ง์ ์
๋ ฅํ์ธ์ (๋๊ธ ์์ ์ ๋น๋ฐ๋ฒํธ๊ฐ ํ์ํฉ๋๋ค)
๋๊ธ ๋ฌ๊ธฐ
- 
wusub2022-05-31 04:05:22.091
์๋
ํ์ธ์? ๋ณธ๋ฌธ์ ์ฝ๋ค ์ง๋ฌธ์ฌํญ์ด ์กด์ฌํ์ฌ ๋ฌธ์๋๋ฆฝ๋๋ค. "๋ผ๋ ๋ฌธ์ฅ์ด ์์ ๋ ์ฐ๋ฆฌ๋ bar ++ + ++baz ๋ฅผ ์๋ํ ๊ฒ์ด๊ฒ ์ง๋ง" ๋ผ๋ ๋ฌธ์ฅ์์ bar ++ + ++baz ๊ฐ ์๋ bar++ + ++baz ๋ฅผ ์๋ํ์ ๊ฒ ๋ง์๊น์? ๊ณต๋ฐฑ๋ฌธ์๊ฐ ํฌํจ๋ bar ++ ์ด ์คํ์ด์ ๊ฑด์ง ์๋๋ฉด ์ค์ ๋ก ๊ณต๋ฐฑ์ ํฌํจํ bar ++ ์ ์๋ํ์ ๊ฑด์ง ๊ถ๊ธํฉ๋๋ค.
๋ต๊ธ ๋ฌ๊ธฐ๋ต๊ธ ์ญ์
- 
nano2020-10-21 03:37:32.583
5์ข
์ ๊ณต๋ฐฑ๋ฌธ์๋ ๊ณต๋ฐฑ, ์ํํญ, ์์งํญ, ํผ ํผ๋, ์ ์ค ์ด๋ผ๊ณ ํฉ๋๋ค.(์ถ์ฒ: https://en.cppreference.com/w/cpp/language/translation\_phases) ํน์ ๊ถ๊ธํด ํ๋๋ถ ๊ณ์ค๊น๋ดใ
ใ
๋ต๊ธ ๋ฌ๊ธฐ๋ต๊ธ ์ญ์
- 
Jaebum Lee2020-12-01 06:53:18.073
๊ฐ์ฌํฉ๋๋ค ใ
ใ
๋ต๊ธ ๋ฌ๊ธฐ๋ต๊ธ ์ญ์
๋๊ธ ๋ ๋ณด๊ธฐ |
| Readable Markdown | ์์ฑ์ผ : 2020-10-20 ์ด ๊ธ์ 24276 ๋ฒ ์ฝํ์ต๋๋ค.
์ด๋ฒ ๊ฐ์ข์์๋
- C++ ์ปดํ์ผ ๊ณผ์ ์ ์ ์ฒด์ ์ธ ๊ฐ์
- ์ ์ฒ๋ฆฌ๊ธฐ ์๋ ๋ฐฉ์
์ ๋ํด์ ๋ค๋ฃจ์ด ๋ณด๊ฒ ์ต๋๋ค.

์ฌํ๊น์ง C++ ์ ๊ณต๋ถํ๋ฉด์ ์ ๋ ์์ด ๋ง์ ํ์ผ๋ค์ ์ปดํ์ผ ํ๊ณ , ์คํ์์ผ ๋ณด์๊ฒ ์ง๋ง, ์์ง๊น์ง ์ ํํ ์ปดํ์ผ์ด ์ด๋ ํ ๋ฐฉ์์ผ๋ก ์งํ๋๊ณ , ๋ ๋์ ์ ๋ง์ ์์ค ์ฝ๋๋ค์ด ์ด๋ป๊ฒ ํฉ์ณ์ง๋์ง์ ๋ํด์๋ ์์ธํ ๋ค๋ฃฌ ์ ์ด ์์ต๋๋ค.
์์ผ๋ก ์ฐ์ฌ๋ 3 ๊ฐ์ ๊ฐ์ข๋ค์ ํตํด์ C++ ์์ ์ปดํ์ผ์ ํ๋ค ๋ผ๋ ๊ฒ์ด ์ ํํ ์ด๋ ํ ์ผ๋ จ์ ๊ณผ์ ์ผ๋ก ์ด๋ฃจ์ด์ง๋ ๊ฒ์ธ์ง, ๋ ์ด๋ป๊ฒ ์คํ ํ์ผ์ด ์์ฑ๋๋ ๊ฒ์ธ์ง์ ๋ํด์ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
C++ ์์ ์ฐ๋ฆฌ๊ฐ ์์ฑํ ์์ค์ฝ๋๋ฅผ ์ค์ ๋ก ์คํํ ์ ์๋ ์คํ ํ์ผ๋ก ๋ณํํ๊ธฐ ์ํด์๋ ์ด 3 ๊ฐ์ง ๋จ๊ณ๋ฅผ ๊ฑฐ์ณ์ผ๋ง ํฉ๋๋ค.
1. ๋จผ์ \#include ์ \#define ์ ๊ฐ์ ์ ์ฒ๋ฆฌ๊ธฐ ๋งคํฌ๋ก๋ค์ ์ฒ๋ฆฌํ๋ ์ ์ฒ๋ฆฌ(Preprocessing) ๋จ๊ณ (๊ทธ๋์ ์ด๋ฆ๋ ์ ์ฒ๋ฆฌ ๋จ๊ณ์ฃ ).
2. ๊ทธ ๋ค์ ๊ฐ๊ฐ์ ์์ค ํ์ผ๋ค์ ์ด์
๋ธ๋ฆฌ ๋ช
๋ น์ด๋ก ๋ณํํ๋ ์ปดํ์ผ (Compile) ๋จ๊ณ
3. ๊ทธ ํ์ ์ด์
๋ธ๋ฆฌ ์ฝ๋๋ค์ ์ค์ ๊ธฐ๊ณ์ด๋ก ์ด๋ฃจ์ด์ง ๋ชฉ์ ์ฝ๋(Object file)๋ก ๋ณํํ๋ ์ด์
๋ธ (Assemble)๋จ๊ณ
4. ๋ง์ง๋ง์ผ๋ก ๊ฐ๊ฐ์ ๋ชฉ์ ์ฝ๋๋ค์ ํ๋ฐ ๋ชจ์์ ํ๋์ ์คํ ํ์ผ๋ก ๋ง๋ค์ด์ฃผ๋ ๋งํน (Linking) ๋จ๊ณ๋ก ๋๋์ด๋ณผ ์ ์์ต๋๋ค.

๊ฐ๋จํ ์์ ๊ฐ์ ๊ณผ์ ์ด๋ผ ๋ณด์๋ฉด ๋ฉ๋๋ค.
๋ณดํต ์ ์ฒ๋ฆฌ ๋จ๊ณ, ์ปดํ์ผ ๋จ๊ณ, ์ด์
๋ธ ๋จ๊ณ๋ฅผ ๋ชจ๋ ๋ญ๋ฝ๊ทธ๋ ค์ ์ปดํ์ผ ๋จ๊ณ ํ๋๋ก ์๊ฐํด๋ ๋ฌด๋ฐฉํฉ๋๋ค. ์ฆ ๋ง์ ๊ฒฝ์ฐ ์ ๊ทธ๋ฆผ์์ a.S ๋ b.S ์ ๊ฐ์ ํ์ผ๋ค์ ์์ฑํ์ง ์๊ณ ๋ฐ๋ก ๊ทธ๋ฅ ๋ชฉ์ ์ฝ๋๋ก ๋์ด๊ฐ๋ค๊ณ ๋ด๋ ๋ฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ๊ฐ ๋จ๊ณ์์ ์ด๋ ํ ์ผ์ด ์ผ์ด๋๋์ง ์ดํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
์ ์ฒ๋ฆฌ ๋จ๊ณ์ ์ปดํ์ผ ๋จ๊ณ๋ ๋ชจ๋ ์ปดํ์ผ๋ฌ ์์์ ์ํ๋๋๋ค. [C++ ํ์ค](http://eel.is/c++draft/lex.phases) ์ ๋ฐ๋ฅด๋ฉด, ์ด ๋ ๋จ๊ณ๋ ์ด 8 ๊ฐ์ ์ธ๋ถ ๋จ๊ณ๋ค๋ก ์ชผ๊ฐ์ง ์ ์๋๋ฐ, 1 ๋ถํฐ 6 ์ธ๋ถ ๋จ๊ณ๊น์ง๊ฐ ์ ์ฒ๋ฆฌ ๊ณผ์ ์ผ๋ก ๋ณผ ์ ์๊ณ , ๋๋จธ์ง ์ธ ๊ฐ์ ๋จ๊ณ๋ฅผ ์ปดํ์ผ ๊ณผ์ ์ผ๋ก ๋ณผ ์ ์์ต๋๋ค. ์๋ฌดํผ ๊ทธ๋ ๋ค๋ฉด ์ ์ฒ๋ฆฌ ๋จ๊ณ์์ ์ด๋ ํ ์ผ์ด ๋ฒ์ด์ง๋์ง ์ดํด๋ด
์๋ค.
๊ฐ์ฅ ์ฒซ ๋ฒ์งธ ๋จ๊ณ๋ก ์์ค ํ์ผ์ ์๋ ๋ฌธ์๋ค์ ํด์ํ๋ ๊ฒ์
๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก C++ ์ฝ๋์์๋ ์ด 96 ๊ฐ์ ๋ฌธ์๋ค๋ก ์ด๋ฃจ์ด์ง Basic source character set ์ด ์๋๋ฐ, ์ด๋ค์
- 5 ์ข
๋ฅ์ ๊ณต๋ฐฑ ๋ฌธ์๋ค (์คํ์ด์ค, ํญ, ๊ฐํ ๋ฌธ์ ๋ฑ๋ฑ)
- 10 ์ข
๋ฅ์ ์ซ์๋ค (0 ๋ถํฐ 9 ๊น์ง)
- 52 ์ข
๋ฅ์ ์ํ๋ฒณ ๋์๋ฌธ์
- 29 ์ข
๋ฅ์ ํน์ ๋ฌธ์๋ค (`_`, `{`, `+` ๋ฑ๋ฑ)
์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค. ์ด ๊ธฐ๋ณธ ๋ฌธ์ ์
์ ํฌํจ๋์ด ์์ง ์์ ๋ค๋ฅธ ๋ชจ๋ ๋ฌธ์๋ค์ `\u` ๋ฅผ ํตํด ์ ๋์ฝ๋ ๊ฐ์ผ๋ก ์นํ๋๊ฑฐ๋, ์ปดํ์ผ๋ฌ์ ์ํด์ ๋ฐ๋ก ํด์๋ฉ๋๋ค. (์ ์ด๋ GCC ์ ๊ฒฝ์ฐ ์ ๋์ฝ๋๋ฅผ ์ง์ํ๋ฏ๋ก ๋ฐ๋ก ์นํ๋๋ ๊ฒ์ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.)
๋ง์ฝ์ ๋ฐฑ์ฌ๋์ (`\`) ๋ฌธ์๊ฐ ๋ฌธ์ฅ ๋งจ ๋ ๋ถ๋ถ์ ์์นํด์๋ค๋ฉด, ํด๋น ๋ฌธ์ฅ๊ณผ ๋ฐ๋ก ๋ค์์ ์ค๋ ๋ฌธ์ฅ์ด ํ๋๋ก ํฉ์ณ์ง๊ณ ๊ฐํ ๋ฌธ์๋ ์ญ์ ๋ฉ๋๋ค. ์ฝ๊ฒ ๋งํด
```
abc def
```
๋ก ๋ ์ฝ๋๋
```
abcdef
```
๋ก ๋ณ๊ฒฝ๋๋ค๊ณ ๋ณด์๋ฉด ๋ฉ๋๋ค.
์ด ๋จ๊ณ์์๋ ์์ค ํ์ผ์ ์ฃผ์ (comment), ๊ณต๋ฐฑ ๋ฌธ์, ์ ์ฒ๋ฆฌ ํ ํฐ(Preprocessing token)๋ค๋ก ๋ถ๋ฆฌํ๋ ๋จ๊ณ์
๋๋ค. [์ ์ฒ๋ฆฌ ํ ํฐ](https://eel.is/c++draft/lex.pptoken)์ C++ ์์์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๋ฌธ๋ฒ ์์๋ก, ํ์ ์ปดํ์ผ๋ฌ๊ฐ ์ฌ์ฉํ๋ ์ปดํ์ผ๋ฌ ํ ํฐ ์ ๊ทผ๊ฐ์ด ๋ฉ๋๋ค. ์๋ ํด๋นํ๋ ๊ฒ๋ค์ด ์ ์ฒ๋ฆฌ ํ ํฐ์ ํฌํจ๋ฉ๋๋ค.
- ํค๋ ์ด๋ฆ ([\<iostream\>](https://modoocode.com/143) ๊ณผ ๊ฐ์ด)
- ์๋ณ์
- ๋ฌธ์/๋ฌธ์์ด ๋ฆฌํฐ๋ด
- ์ฐ์ฐ์๋ค (`+`, `##`)
์ด ๋จ๊ณ์์ raw string literal ์ ํ์ธํด์ ๋ง์ผ 1~2 ๋จ๊ณ์ ๊ฑฐ์น๋ฉด์ ํด๋น ๋ฌธ์์ด ์์ ๋ด์ฉ์ด ๋ฐ๋์๋ค๋ฉด ๊ทธ ๋ณ๊ฒฝ์ ์ทจ์๋ฉ๋๋ค.
๋ํ ์ฃผ์์ ๋ชจ๋ ๊ณต๋ฐฑ ๋ฌธ์ ํ๋๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค.
์ฐธ๊ณ ๋ก ์ปดํ์ผ๋ฌ๊ฐ ์ ์ฒ๋ฆฌ๊ธฐ ํ ํฐ์ ์ธ์ํ ๋์๋ ๊ฐ๋ฅํ ๊ฐ์ฅ ๊ธด ์ ์ฒ๋ฆฌ ํ ํฐ์ ๋ง๋๋ ค๊ณ ํฉ๋๋ค. ์ด๋ฌํ ๊ท์น์ maximal munch ๋ผ๊ณ ๋ถ๋ฆ
๋๋ค. ์๋ฅผ ๋ค์ด์
```
int a = bar+++++baz
```
๋ผ๋ ๋ฌธ์ฅ์ด ์์ ๋ ์ฐ๋ฆฌ๋ `bar ++ + ++baz` ๋ฅผ ์๋ํ ๊ฒ์ด๊ฒ ์ง๋ง, maximal munch ๊ท์น์ ๋ฐ๋ผ ์ปดํ์ผ๋ฌ๊ฐ๋ ๊ฐ์ฅ ๊ธด ์ ์ฒ๋ฆฌ ํ ํฐ์ ๊ตฌ์ฑํ๋ ค๊ณ ํ๊ธฐ ๋๋ฌธ์ `bar++ ++ +baz` ๋ก ํด์๋์ด์ ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก
```
int bar = 0xE+foo
```
์ญ์ ์ฐ๋ฆฌ๋ `0xE + foo` ๋ฅผ ์๋ํ ๊ฒ์ด๊ฒ ์ง๋ง ์ปดํ์ผ๋ฌ์ ๊ฒฝ์ฐ `0xE+ foo` ๋ก ํด์ํด์ ์ค๋ฅ๊ฐ ๋ฉ๋๋ค. ๊ทธ ์ด์ ๋ ๋ถ๋ ์์์ ๋ฆฌํฐ๋ด์ ๊ฒฝ์ฐ E ๋ฅผ ํตํด์ ์ง์๋ฅผ ์ง์ ํ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค. (0xE+10 ๊ณผ ๊ฐ์ ์์ผ๋ก)
์ด์ ์ ์ฒ๋ฆฌ ํ ํฐ๋ค๋ก ๋ถ๋ฆฌํ์์ผ๋ฏ๋ก ์ ์ฒ๋ฆฌ๊ธฐ๋ฅผ ์คํํฉ๋๋ค. ์ ์ฒ๋ฆฌ๊ธฐ๊ฐ ํ๋ ์ผ๋ค๋ก๋
- \#include ์ ์ง์ ๋ ํ์ผ์ ๋ด์ฉ์ ๋ณต์ฌํฉ๋๋ค.
- \#define ์ ์ ์๋ ๋งคํฌ๋ก๋ฅผ ์ฌ์ฉํด์ ์ฝ๋๋ฅผ ์นํํฉ๋๋ค.
- \#if, \#ifndef ์ ๊ฐ์ ๊ตฌ๋ฌธ๋ค์ ์คํํด์ ์ฝ๋๋ฅผ ์นํํฉ๋๋ค.
- \#pragma ์ ๊ฐ์ ์ปดํ์ผ๋ฌ ๋ช
๋ น๋ฌธ๋ค์ ํด์ํฉ๋๋ค.
์๋ฅผ ๋ค์ด์ `#include<iostream>` ์ ํ์๋ค๋ฉด ํด๋น ๋ถ๋ถ์ [iostream](https://modoocode.com/143) ํค๋ํ์ผ์ ๋ด์ฉ์ผ๋ก ์นํ๋ฉ๋๋ค. ์ค์ ๋ก ์๋์ ๊ฐ์ด ๊ฐ๋จํ ํ๋ก๊ทธ๋จ์ ์ดํด๋ด
์๋ค.
```
#include <iostream>
int main() {}
```
์ค์ ๋ก ์ ์ฒ๋ฆฌ ๋จ๊ณ๊ฐ ๋๋ ์ดํ์ ์ปดํ์ผ๋ฌ๊ฐ ๋ณด๋ ์์ค ํ์ผ์ ๋ชจ์ต์ ์๋์ ๊ฐ์ต๋๋ค.
```
namespace std
{
typedef long unsigned int size_t;
typedef long int ptrdiff_t;
typedef decltype(nullptr) nullptr_t;
}
namespace std
{
inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { }
}
namespace __gnu_cxx
{
inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { }
}
// ... (์๋ต) ...
namespace std __attribute__ ((__visibility__ ("default")))
{
extern istream cin;
extern ostream cout;
extern ostream cerr;
extern ostream clog;
extern wistream wcin;
extern wostream wcout;
extern wostream wcerr;
extern wostream wclog;
static ios_base::Init __ioinit;
}
int main() {
}
```
์ ๊ฐ์ด ์๊ฒผ์ต๋๋ค. ๊ทธ ๊ธธ์ด๋ ๋ฌด๋ ค 27312 ์ค์
๋๋ค.
๋๋ค๋ฅธ ์์๋ก ์ฐ๋ฆฌ๋ ๋ณดํต ํค๋ํ์ผ์ด ์ฌ๋ฌ๋ถ ์ค๋ณต๋์ด์ include ๋๋๋ผ๋ ํ ๋ฒ๋ง ํฌํจ์ด ๋๊ฒ ์๋์ ๊ฐ์ ํค๋ ๊ฐ๋(Header guard) ๋ฅผ ์์ฑํฉ๋๋ค.
```
#ifndef A_H
#define A_H
class A {};
#endif
```
์์ ๊ฐ์ ํค๋ ๊ฐ๋๊ฐ ์๋ํ๋ ์ด์ ๋ ์๋ฅผ ๋ค์ด์
```
#include "a.h"
#include "a.h"
int main() {}
```
์ ํ๋๋ผ๋ ์ ์ฒ๋ฆฌ๊ธฐ์ ์ํด์
```
#ifndef A_H
#define A_H
class A {};
#endif
#ifndef A_H
#define A_H
class A {};
#endif
int main() {}
```
์ ๊ฐ์ด ๋ณ๊ฒฝ๋๋๋ฐ, ์ฒซ ๋ฒ์งธ ifndef ์์๋ `A_H` ๊ฐ ์ ์๋์ด ์์ง ์๊ธฐ ๋๋ฌธ์ ์ฌ๋ผ์ง์ง ์์ง๋ง, ๋ ๋ฒ์งธ ifndef ์์๋ `A_H` ๊ฐ ์ ์๋์ด ์์ผ๋ฏ๋ก \#ifndef ์ \#endif ์ฌ์ด์ ๋ชจ๋ ๋ด์ฉ๋ค์ด ๊ฐํ ๋ฌธ์๋ก ์นํ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๊ทธ๋ฅ
```
class A {};
int main() {}
```
์ด๋ ๊ฒ ๋ฉ๋๋ค.
์ฐธ๊ณ ๋ก \#include ๋ก ๋ณต์ฌ๋ ํค๋ ํ์ผ์ ๋ค์ Phase 1 ๋ถํฐ 4 ๋จ๊ณ๊น์ง์ ๊ณผ์ ์ ๊ฑฐ์นฉ๋๋ค. ์ด ๊ณผ์ ์ ์์ค ํ์ผ์ ๋์ด์์ ์ ์ฒ๋ฆฌ๊ธฐ๋ฌธ์ด ์์ ๋ ๊น์ง ์ง์๋ฉ๋๋ค.
์ฐธ๊ณ ์ฌํญ
๊ฐ๋จํ ์๊ฐํด๋ด๋ ์ด์ ๊ฐ์ ๋ฐฉ์์ ๊ต์ฅํ ๋นํจ์จ์ ์ด๋ผ๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. ์์ ๋ณธ `#include <iostream>` ์ ํฌํจํ๋ ๊ฐ๋จํ main ํจ์๋ง ๋ณด์๋ ์ฐ๋ฆฌ๊ฐ ์์ฑํ ์ฝ๋๋ ๋จ ๋ ์ค์ ๋ถ๊ณผํ์ง๋ง, ์ค์ ๋ก ์ปดํ์ผ๋ฌ๊ฐ ๋ณด๋ ์ฝ๋์ ๊ธธ์ด๋ ๋๋ต 2๋ง 7์ฒ์ค์ด๊ธฐ ๋๋ฌธ์ด์ฃ .
์ด์ ๊ฐ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐ ํ๊ธฐ ์ํด์ ๋ฏธ๋ฆฌ ์ปดํ์ผ๋ ํค๋ (Precompiled header) ๋ผ๋ ๊ฐ๋
์ด ๋์
๋ฌ์ง๋ง, [์ฌ์ฉ์์ ๋ช ๊ฐ์ง ์ ์ฝ](https://gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.html)์ด ์์ต๋๋ค.
C++ 20 ์์๋ ๋ชจ๋(module) ์ด๋ผ๋ ๊ฐ๋
์ ๋์
ํด์ ์ด์ ๊ฐ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค. ๋ชจ๋์ ๋ค๋ฅธ ํ์ผ์ ํด๋์ค์ ํจ์๋ค์ ์ฐธ์กฐํ ์ ์์ง๋ง \#include ๋ฅผ ํ ๋ ์ฒ๋ผ ํด๋น ํ์ผ์ ๋ชจ๋ ๋ด์ฉ์ ๋ถ๋ฌ์ค์ง๋ ์์ต๋๋ค. ๋ฌผ๋ก ์์ง (2020๋
10์ ํ์ฌ) ๋ชจ๋์ด ์ ์์ผ๋ก ์ปดํ์ผ๋ฌ์์ ๊ตฌํ๋ ๊ฒ์ ์๋๋ผ์ ์ด๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์กฐ๊ธ ์๊ฐ์ด ๊ฑธ๋ฆด ๊ฒ์ผ๋ก ๋ณด์
๋๋ค.
๋ชจ๋ ๋ฌธ์๋ค์ ์ด์ ์ ์์ค ์ฝ๋ ๋ฌธ์ ์
์์ ์คํ ๋ฌธ์ ์
(Execution character set) ์ ๋ฌธ์๋ค๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ์ด์ ์ Escaped ๋ ์๋ค๋ ์คํ ๋ฌธ์ ์
์ ๋ฌธ์๋ค๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค.
์ด ๋จ๊ณ์์ ์ธ์ ํ ๋ฌธ์์ด๋ค์ด ํ๋๋ก ํฉ์ณ์ง๋๋ค. ์๋ฅผ ๋ค์ด์
```
std::cout << "abc"
"def";
```
์ ๊ฒฝ์ฐ
```
std::cout << "abcdef";
```
๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค.
์ ์ฌ๊ธฐ๊น์ง๊ฐ ๋ฐ๋ก ์ ์ฒ๋ฆฌ๊ธฐ ๊ณผ์ ์ด๋ผ ๋ณด์๋ฉด ๋ฉ๋๋ค.
์ ์ฒ๋ฆฌ๊ธฐ ๊ณผ์ ์ด ๋๋๊ณ ๋๋ฉด ์ค์ ์ปดํ์ผ ๊ณผ์ ์ด ์ํ๋ฉ๋๋ค. ์ปดํ์ผ ๊ณผ์ ์์๋ ์์ ์์ฑ๋์๋ ์ ์ฒ๋ฆฌ๊ธฐ ํ ํฐ๋ค๋ก ๋ฐํ์ผ๋ก ์ค์ ์ปดํ์ผ ํ ํฐ์ ์์ฑํ์ฌ ๋ถ์ํ๊ฒ ๋ฉ๋๋ค.
์ค์ ๋ก ์ด ๋จ๊ณ์์ ์ฐ๋ฆฌ๊ฐ ์์ ๋งํ๋ ์ปดํ์ผ ์ด ์ด๋ฃจ์ด์ง๋๋ค. ์ ์ฒ๋ฆฌ๊ธฐ ํ ํฐ๋ค์ด ์ปดํ์ผ ํ ํฐ์ผ๋ก ๋ณํ์ด ๋๊ณ , ์ปดํ์ผ ํ ํฐ๋ค์ ์ปดํ์ผ๋ฌ์ ์ํด ํด์๋์ด์ ํด์ ์ ๋ (Translation Unit - ์ค์ฌ์ ๋ณดํต TU) ์ ์์ฑํ๊ฒ ๋ฉ๋๋ค.
์ฐธ๊ณ ๋ก ์ด ํด์ ์ ๋์ ๊ฐ ์์คํ์ผ ๋ณ๋ก ํ๋ ์ฉ ์กด์ฌํ๊ฒ ๋ฉ๋๋ค.
์ปดํ์ผ๋ฌ๋ ์์ฑ๋ TU ๋ฅผ ๋ถ์ํด์ ํ์๋ก ํ๋ ํ
ํ๋ฆฟ ์ธ์คํด์ค๋ค์ ํ์ธํฉ๋๋ค. ํ
ํ๋ฆฟ๋ค์ ์ ์ ์์น๊ฐ ํ์ธ์ด ๋๋ฉด ํด๋น ํ
ํ๋ฆฟ๋ค์ ์ธ์คํด์คํ๊ฐ ์งํ์ด ๋๊ณ ์ด๋ฅผ ํตํด์ ์ธ์คํด์ค ์ ๋์ด ์์ฑ๋ฉ๋๋ค.
์ด ๋จ๊ณ๋ฅผ ๋ง์น๊ฒ ๋๋ฉด ์ปดํ์ผ๋ฌ๋ ๋น๋ก์ ๋ชฉ์ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๊ฒ ๋ฉ๋๋ค. ์ด ๋ชฉ์ ์ฝ๋๋ ๋ง์ง๋ง ๋จ๊ณ์ธ ๋งํน ๋จ๊ณ๋ฅผ ์ํด์ ๋ง์ปค๋ก ์ ๋ฌ๋ฉ๋๋ค.
์ฐธ๊ณ ์ฌํญ
์ฌ๊ธฐ์๋ ๊ฐ๋จํ๊ฒ ์ง๊ณ ๋์ด๊ฐ๊ฒ ์ง๋ง ์ด ๋ ๋จ๊ณ์์ ์ ํํ ๋ฌด์จ ์ผ๋ค์ด ๋ฒ์ด์ง๋์ง๋ [๋ค์ ๊ฐ์](https://modoocode.com/320)๋ฅผ ์ฐธ์กฐํ์๊ธฐ ๋ฐ๋๋๋ค.
๋ง์ง๋ง์ผ๋ก ๋งํน ๋จ๊ณ์์๋ ์ปดํ์ผ๋ฌ๊ฐ ์์ฑํ ๋ชฉ์ ํ์ผ๋ค๊ณผ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ๋ค์ ๋ชจ์์ ์คํ ํ์ผ์ ์์ฑํฉ๋๋ค.
์ด ๋งํน ๊ณผ์ ์ด ๋๋๊ฒ ๋๋ฉด, ์ฌ์ฉํ๋ ์์คํ
์ ๋ฐ๋ผ์ ๊ฐ๊ธฐ ๋ค๋ฅธ ํํ์ ํ์ผ๋ค์ ์์ฑํ๊ฒ ๋ฉ๋๋ค. ์๋์ฐ์ฆ ๊ณ์ด์์ ์ฃผ๋ก ์ฌ์ฉํ๋ ์คํ ํ์ผ ํํ๋ Portable Executable ์ด๋ผ ๋ถ๋ฆฌ๋ PE ํ์ผ ํ์์ ํ์ผ์ ์์ฑํ๊ฒ ๋๊ณ (์ฐ๋ฆฌ๊ฐ ํํ ์๊ฐํ๋ .exe ํ์ผ ์ด์ฃ ), ๋ฆฌ๋
์ค ๊ณ์ด์ ์์คํ
์ ๊ฒฝ์ฐ Executable and Linkable Format, ํํ ELF ๋ผ ๋ถ๋ฆฌ๋ ํํ์ ์คํ ํ์ผ์ ์์ฑํฉ๋๋ค.
์ด ๋ ์คํ ํ์ผ์ ํฌ๋งท์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๊ฐ์ ์ฝ๋๋ฅผ ์ปดํ์ผ ํ๋๋ผ๋ ์๋์ฐ์ฆ์ PE ์คํ ํ์ผ์ ๋ฆฌ๋
์ค์์ (์ผ๋ฐ์ ์ผ๋ก) ์คํํ ์ ์๊ณ , ๋ฐ๋๋ก ์๋์ฐ์ฆ์์ ๋ฆฌ๋
์ค์ ELF ํ์ผ์ ์คํํ ์ ์์ต๋๋ค.
์ฐธ๊ณ ์ฌํญ
๋ง์ปค์์ ์ ํํ ์ด๋ค ์ผ์ด ๋ฒ์ด์ง๋์ง๋ [๋ค์ ๊ฐ์](https://modoocode.com/321) ๋ฅผ ์ดํด๋ด์ฃผ๊ธฐ ๋ฐ๋๋๋ค.
์ ๊ทธ๋ผ ์ด๊ฒ์ผ๋ก ๊ฐ๋จํ ์ฐ๋ฆฌ๊ฐ ํํ ์ด์ผ๊ธฐ ํ๋ ์ปดํ์ผ ์ด๋ผ๋ ๊ณผ์ ์์ ์ ์ฒด์ ์ผ๋ก ์ผ๋ค์ด ์ผ์ด๋๋์ง ์ดํด๋ณด์์ต๋๋ค. ๋ค์ ๊ฐ์์์๋ ์ ๊ณผ์ ์ค 7,8 ๋จ๊ณ, ํํ ์ฐ๋ฆฌ๊ฐ ์๋ฏธํ๋ ์ปดํ์ผ ๋จ๊ณ์์ ์ด๋ ํ ์ผ๋ค์ด ์ผ์ด๋๋์ง ๋ค๋ฃจ์ด๋ณด๊ฒ ์ต๋๋ค.
๊ฐ์ข๋ฅผ ๋ณด๋ค๊ฐ ์กฐ๊ธ์ด๋ผ๋ ๊ถ๊ธํ ๊ฒ์ด๋ ์ด์ํ ์ ์ด ์๋ค๋ฉด ๊ผญ ๋๊ธ์ ๋จ๊ฒจ์ฃผ์๊ธฐ ๋ฐ๋๋๋ค. ๊ทธ ์ธ์๋ ๊ฐ์ข์ ๊ด๋ จ๋ ๊ฒ์ด๋ผ๋ฉด ์ด๋ ํ ๊ฒ๋ ์ง๋ฌธํด ์ฃผ์
๋ ์๊ด ์์ต๋๋ค. ์๊ฐํด ๋ณผ ๋ฌธ์ ๋ ์ ๋ชจ๋ฅด๊ฒ ๋ค๋ฉด ๋๊ธ์ ๋ฌ์์ฃผ์ธ์.
ํ์ฌ ์ฌ๋ฌ๋ถ์ด ๋ณด์ ๊ฐ์ข๋ \<์น์ด๋จน๋ C++ - \<20 - 1. ์ฝ๋ ๋ถํฐ ์คํ ํ์ผ ๊น์ง - ์ ์ฒด์ ์ธ ๊ฐ์\>\> ์
๋๋ค. ์ด๋ฒ ๊ฐ์ข์ ๋ชจ๋ ์์ ๋ค์ ์ฝ๋๋ฅผ ๋ณด์ง ์๊ณ ์งค ์์ค๊น์ง ๊ฐ์ข๋ฅผ ์ฝ์ด ๋ณด์๊ธฐ ์ ๊น์ง ๋ค์ ๊ฐ์ข๋ก ๋์ด๊ฐ์ง ๋ง์์ฃผ์ธ์ |
| Shard | 138 (laksa) |
| Root Hash | 9372826391188590538 |
| Unparsed URL | com,modoocode!/319 s443 |