๐Ÿ•ท๏ธ Crawler Inspector

URL Lookup

Direct Parameter Lookup

Raw Queries and Responses

1. Shard Calculation

Query:
Response:
Calculated Shard: 138 (from laksa030)

2. Crawled Status Check

Query:
Response:

3. Robots.txt Check

Query:
Response:

4. Spam/Ban Check

Query:
Response:

5. Seen Status Check

โ„น๏ธ Skipped - page is already crawled

๐Ÿ“„
INDEXABLE
โœ…
CRAWLED
11 days ago
๐Ÿค–
ROBOTS SERVER UNREACHABLE
Failed to connect to robots server: Operation timed out after 2002 milliseconds with 0 bytes received

Page Info Filters

FilterStatusConditionDetails
HTTP statusPASSdownload_http_code = 200HTTP 200
Age cutoffPASSdownload_stamp > now() - 6 MONTH0.4 months ago
History dropPASSisNull(history_drop_reason)No drop reason
Spam/banPASSfh_dont_index != 1 AND ml_spam_score = 0ml_spam_score=0
CanonicalPASSmeta_canonical IS NULL OR = '' OR = src_unparsedNot set

Page Details

PropertyValue
URLhttps://modoocode.com/319
Last Crawled2026-03-30 00:21:58 (11 days ago)
First Indexed2020-10-20 11:02:01 (5 years ago)
HTTP Status Code200
Meta Title์”น์–ด๋จน๋Š” C++ - <20 - 1. ์ฝ”๋“œ ๋ถ€ํ„ฐ ์‹คํ–‰ ํŒŒ์ผ ๊นŒ์ง€ - ์ „์ฒด์ ์ธ ๊ฐœ์š”>
Meta Descriptionnull
Meta Canonicalnull
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++ ์ปดํŒŒ์ผ ๊ณผ์ •์˜ ์ „์ฒด์ ์ธ ๊ฐœ์š” - ์ „์ฒ˜๋ฆฌ๊ธฐ ์ž‘๋™ ๋ฐฉ์‹ ์— ๋Œ€ํ•ด์„œ ๋‹ค๋ฃจ์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ![](https://modoocode.com/img/ChewingCpplogo.webp) ์—ฌํƒœ๊นŒ์ง€ C++ ์„ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์ˆ˜ ๋„ ์—†์ด ๋งŽ์€ ํŒŒ์ผ๋“ค์„ ์ปดํŒŒ์ผ ํ•˜๊ณ , ์‹คํ–‰์‹œ์ผœ ๋ณด์•˜๊ฒ ์ง€๋งŒ, ์•„์ง๊นŒ์ง€ ์ •ํ™•ํžˆ ์ปดํŒŒ์ผ์ด ์–ด๋– ํ•œ ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰๋˜๊ณ , ๋˜ ๋‚˜์˜ ์ˆ˜ ๋งŽ์€ ์†Œ์Šค ์ฝ”๋“œ๋“ค์ด ์–ด๋–ป๊ฒŒ ํ•ฉ์ณ์ง€๋Š”์ง€์— ๋Œ€ํ•ด์„œ๋Š” ์ž์„ธํžˆ ๋‹ค๋ฃฌ ์ ์ด ์—†์Šต๋‹ˆ๋‹ค. ์•ž์œผ๋กœ ์—ฐ์žฌ๋  3 ๊ฐœ์˜ ๊ฐ•์ขŒ๋“ค์„ ํ†ตํ•ด์„œ C++ ์—์„œ ์ปดํŒŒ์ผ์„ ํ•œ๋‹ค ๋ผ๋Š” ๊ฒƒ์ด ์ •ํ™•ํžˆ ์–ด๋– ํ•œ ์ผ๋ จ์˜ ๊ณผ์ •์œผ๋กœ ์ด๋ฃจ์–ด์ง€๋Š” ๊ฒƒ์ธ์ง€, ๋˜ ์–ด๋–ป๊ฒŒ ์‹คํ–‰ ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ### C++ ์˜ ์ปดํŒŒ์ผ ๊ณผ์ • C++ ์—์„œ ์šฐ๋ฆฌ๊ฐ€ ์ž‘์„ฑํ•œ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์‹ค์ œ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์‹คํ–‰ ํŒŒ์ผ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ด 3 ๊ฐ€์ง€ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ์•ผ๋งŒ ํ•ฉ๋‹ˆ๋‹ค. 1. ๋จผ์ € \#include ์™€ \#define ์™€ ๊ฐ™์€ ์ „์ฒ˜๋ฆฌ๊ธฐ ๋งคํฌ๋กœ๋“ค์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ „์ฒ˜๋ฆฌ(Preprocessing) ๋‹จ๊ณ„ (๊ทธ๋ž˜์„œ ์ด๋ฆ„๋„ ์ „์ฒ˜๋ฆฌ ๋‹จ๊ณ„์ฃ ). 2. ๊ทธ ๋’ค์— ๊ฐ๊ฐ์˜ ์†Œ์Šค ํŒŒ์ผ๋“ค์„ ์–ด์…ˆ๋ธ”๋ฆฌ ๋ช…๋ น์–ด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ปดํŒŒ์ผ (Compile) ๋‹จ๊ณ„ 3. ๊ทธ ํ›„์— ์–ด์…ˆ๋ธ”๋ฆฌ ์ฝ”๋“œ๋“ค์„ ์‹ค์ œ ๊ธฐ๊ณ„์–ด๋กœ ์ด๋ฃจ์–ด์ง„ ๋ชฉ์  ์ฝ”๋“œ(Object file)๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์–ด์…ˆ๋ธ” (Assemble)๋‹จ๊ณ„ 4. ๋งˆ์ง€๋ง‰์œผ๋กœ ๊ฐ๊ฐ์˜ ๋ชฉ์  ์ฝ”๋“œ๋“ค์„ ํ•œ๋ฐ ๋ชจ์•„์„œ ํ•˜๋‚˜์˜ ์‹คํ–‰ ํŒŒ์ผ๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๋งํ‚น (Linking) ๋‹จ๊ณ„๋กœ ๋‚˜๋ˆ„์–ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ![](https://modoocode.com/img/cpp/20.1.1.png) ๊ฐ„๋‹จํžˆ ์œ„์™€ ๊ฐ™์€ ๊ณผ์ •์ด๋ผ ๋ณด์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋ณดํ†ต ์ „์ฒ˜๋ฆฌ ๋‹จ๊ณ„, ์ปดํŒŒ์ผ ๋‹จ๊ณ„, ์–ด์…ˆ๋ธ” ๋‹จ๊ณ„๋ฅผ ๋ชจ๋‘ ๋ญ‰๋œฝ๊ทธ๋ ค์„œ ์ปดํŒŒ์ผ ๋‹จ๊ณ„ ํ•˜๋‚˜๋กœ ์ƒ๊ฐํ•ด๋„ ๋ฌด๋ฐฉํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰ ๋งŽ์€ ๊ฒฝ์šฐ ์œ„ ๊ทธ๋ฆผ์—์„œ 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://modoocode.com/img/unknown_person.png) ๊ฐ•์ขŒ์— ๊ด€๋ จ ์—†์ด ๊ถ๊ธˆํ•œ ๋‚ด์šฉ์€ [์—ฌ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•ด์ฃผ์„ธ์š”](https://forum.modoocode.com/) ๋‹ค์Œ์œผ๋กœ ๋กœ๊ทธ์ธ ๋˜๋Š” ์ง์ ‘ ์ž…๋ ฅํ•˜์„ธ์š” (๋Œ“๊ธ€ ์ˆ˜์ •์‹œ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค) ๋Œ“๊ธ€ ๋‹ฌ๊ธฐ - ![ํ”„๋กœํ•„ ์‚ฌ์ง„ ์—†์Œ](https://modoocode.com/img/unknown_person.png) wusub2022-05-31 04:05:22.091 ์•ˆ๋…•ํ•˜์„ธ์š”? ๋ณธ๋ฌธ์„ ์ฝ๋‹ค ์งˆ๋ฌธ์‚ฌํ•ญ์ด ์กด์žฌํ•˜์—ฌ ๋ฌธ์˜๋“œ๋ฆฝ๋‹ˆ๋‹ค. "๋ผ๋Š” ๋ฌธ์žฅ์ด ์žˆ์„ ๋•Œ ์šฐ๋ฆฌ๋Š” bar ++ + ++baz ๋ฅผ ์˜๋„ํ•œ ๊ฒƒ์ด๊ฒ ์ง€๋งŒ" ๋ผ๋Š” ๋ฌธ์žฅ์—์„œ bar ++ + ++baz ๊ฐ€ ์•„๋‹Œ bar++ + ++baz ๋ฅผ ์˜๋„ํ•˜์‹ ๊ฒŒ ๋งž์„๊นŒ์š”? ๊ณต๋ฐฑ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋œ bar ++ ์ด ์˜คํƒ€์ด์‹ ๊ฑด์ง€ ์•„๋‹ˆ๋ฉด ์‹ค์ œ๋กœ ๊ณต๋ฐฑ์„ ํฌํ•จํ•œ bar ++ ์„ ์˜๋„ํ•˜์‹ ๊ฑด์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ๋‹ต๊ธ€ ๋‹ฌ๊ธฐ๋‹ต๊ธ€ ์‚ญ์ œ - ![ํ”„๋กœํ•„ ์‚ฌ์ง„ ์—†์Œ](https://modoocode.com/img/unknown_person.png) nano2020-10-21 03:37:32.583 5์ข…์˜ ๊ณต๋ฐฑ๋ฌธ์ž๋Š” ๊ณต๋ฐฑ, ์ˆ˜ํ‰ํƒญ, ์ˆ˜์งํƒญ, ํผ ํ”ผ๋“œ, ์ƒˆ ์ค„ ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.(์ถœ์ฒ˜: https://en.cppreference.com/w/cpp/language/translation\_phases) ํ˜น์‹œ ๊ถ๊ธˆํ•ด ํ•˜๋Š”๋ถ„ ๊ณ„์‹ค๊นŒ๋ดใ…Žใ…Ž ๋‹ต๊ธ€ ๋‹ฌ๊ธฐ๋‹ต๊ธ€ ์‚ญ์ œ - ![ํ”„๋กœํ•„ ์‚ฌ์ง„](https://lh3.googleusercontent.com/a-/AOh14GiGD6_xA3lRUslvzDd2zyR3cfeOYd0npkH2dOlp0A=s96-c) Jaebum Lee2020-12-01 06:53:18.073 ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค ใ…Žใ…Ž ๋‹ต๊ธ€ ๋‹ฌ๊ธฐ๋‹ต๊ธ€ ์‚ญ์ œ ๋Œ“๊ธ€ ๋” ๋ณด๊ธฐ
Readable Markdown
์ž‘์„ฑ์ผ : 2020-10-20 ์ด ๊ธ€์€ 24276 ๋ฒˆ ์ฝํ˜”์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ฐ•์ขŒ์—์„œ๋Š” - C++ ์ปดํŒŒ์ผ ๊ณผ์ •์˜ ์ „์ฒด์ ์ธ ๊ฐœ์š” - ์ „์ฒ˜๋ฆฌ๊ธฐ ์ž‘๋™ ๋ฐฉ์‹ ์— ๋Œ€ํ•ด์„œ ๋‹ค๋ฃจ์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ![](https://modoocode.com/img/ChewingCpplogo.webp) ์—ฌํƒœ๊นŒ์ง€ C++ ์„ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์ˆ˜ ๋„ ์—†์ด ๋งŽ์€ ํŒŒ์ผ๋“ค์„ ์ปดํŒŒ์ผ ํ•˜๊ณ , ์‹คํ–‰์‹œ์ผœ ๋ณด์•˜๊ฒ ์ง€๋งŒ, ์•„์ง๊นŒ์ง€ ์ •ํ™•ํžˆ ์ปดํŒŒ์ผ์ด ์–ด๋– ํ•œ ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰๋˜๊ณ , ๋˜ ๋‚˜์˜ ์ˆ˜ ๋งŽ์€ ์†Œ์Šค ์ฝ”๋“œ๋“ค์ด ์–ด๋–ป๊ฒŒ ํ•ฉ์ณ์ง€๋Š”์ง€์— ๋Œ€ํ•ด์„œ๋Š” ์ž์„ธํžˆ ๋‹ค๋ฃฌ ์ ์ด ์—†์Šต๋‹ˆ๋‹ค. ์•ž์œผ๋กœ ์—ฐ์žฌ๋  3 ๊ฐœ์˜ ๊ฐ•์ขŒ๋“ค์„ ํ†ตํ•ด์„œ C++ ์—์„œ ์ปดํŒŒ์ผ์„ ํ•œ๋‹ค ๋ผ๋Š” ๊ฒƒ์ด ์ •ํ™•ํžˆ ์–ด๋– ํ•œ ์ผ๋ จ์˜ ๊ณผ์ •์œผ๋กœ ์ด๋ฃจ์–ด์ง€๋Š” ๊ฒƒ์ธ์ง€, ๋˜ ์–ด๋–ป๊ฒŒ ์‹คํ–‰ ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. C++ ์—์„œ ์šฐ๋ฆฌ๊ฐ€ ์ž‘์„ฑํ•œ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์‹ค์ œ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์‹คํ–‰ ํŒŒ์ผ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ด 3 ๊ฐ€์ง€ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ์•ผ๋งŒ ํ•ฉ๋‹ˆ๋‹ค. 1. ๋จผ์ € \#include ์™€ \#define ์™€ ๊ฐ™์€ ์ „์ฒ˜๋ฆฌ๊ธฐ ๋งคํฌ๋กœ๋“ค์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ „์ฒ˜๋ฆฌ(Preprocessing) ๋‹จ๊ณ„ (๊ทธ๋ž˜์„œ ์ด๋ฆ„๋„ ์ „์ฒ˜๋ฆฌ ๋‹จ๊ณ„์ฃ ). 2. ๊ทธ ๋’ค์— ๊ฐ๊ฐ์˜ ์†Œ์Šค ํŒŒ์ผ๋“ค์„ ์–ด์…ˆ๋ธ”๋ฆฌ ๋ช…๋ น์–ด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ปดํŒŒ์ผ (Compile) ๋‹จ๊ณ„ 3. ๊ทธ ํ›„์— ์–ด์…ˆ๋ธ”๋ฆฌ ์ฝ”๋“œ๋“ค์„ ์‹ค์ œ ๊ธฐ๊ณ„์–ด๋กœ ์ด๋ฃจ์–ด์ง„ ๋ชฉ์  ์ฝ”๋“œ(Object file)๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์–ด์…ˆ๋ธ” (Assemble)๋‹จ๊ณ„ 4. ๋งˆ์ง€๋ง‰์œผ๋กœ ๊ฐ๊ฐ์˜ ๋ชฉ์  ์ฝ”๋“œ๋“ค์„ ํ•œ๋ฐ ๋ชจ์•„์„œ ํ•˜๋‚˜์˜ ์‹คํ–‰ ํŒŒ์ผ๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๋งํ‚น (Linking) ๋‹จ๊ณ„๋กœ ๋‚˜๋ˆ„์–ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ![](https://modoocode.com/img/cpp/20.1.1.png) ๊ฐ„๋‹จํžˆ ์œ„์™€ ๊ฐ™์€ ๊ณผ์ •์ด๋ผ ๋ณด์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋ณดํ†ต ์ „์ฒ˜๋ฆฌ ๋‹จ๊ณ„, ์ปดํŒŒ์ผ ๋‹จ๊ณ„, ์–ด์…ˆ๋ธ” ๋‹จ๊ณ„๋ฅผ ๋ชจ๋‘ ๋ญ‰๋œฝ๊ทธ๋ ค์„œ ์ปดํŒŒ์ผ ๋‹จ๊ณ„ ํ•˜๋‚˜๋กœ ์ƒ๊ฐํ•ด๋„ ๋ฌด๋ฐฉํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰ ๋งŽ์€ ๊ฒฝ์šฐ ์œ„ ๊ทธ๋ฆผ์—์„œ 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. ์ฝ”๋“œ ๋ถ€ํ„ฐ ์‹คํ–‰ ํŒŒ์ผ ๊นŒ์ง€ - ์ „์ฒด์ ์ธ ๊ฐœ์š”\>\> ์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ฐ•์ขŒ์˜ ๋ชจ๋“  ์˜ˆ์ œ๋“ค์˜ ์ฝ”๋“œ๋ฅผ ๋ณด์ง€ ์•Š๊ณ  ์งค ์ˆ˜์ค€๊นŒ์ง€ ๊ฐ•์ขŒ๋ฅผ ์ฝ์–ด ๋ณด์‹œ๊ธฐ ์ „๊นŒ์ง€ ๋‹ค์Œ ๊ฐ•์ขŒ๋กœ ๋„˜์–ด๊ฐ€์ง€ ๋ง์•„์ฃผ์„ธ์š”
Shard138 (laksa)
Root Hash9372826391188590538
Unparsed URLcom,modoocode!/319 s443