๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
C++ ๊ธฐ์ดˆ

[C/C++] 0. ์‹คํ–‰ํŒŒ์ผ์ด ๋งŒ๋“ค์–ด์ง€๋Š” ๊ตฌ์กฐ(feat. ์ปดํŒŒ์ผ๋Ÿฌ)

by ์„œ์•„๋ž‘๐Ÿ˜ 2021. 3. 10.

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋Š” ๋งŒ๋“ค์–ด์ง€๋Š” ๊ณผ์ •์— ๋”ฐ๋ผ์„œ ํฌ๊ฒŒ

 

  • ์ปดํŒŒ์ผ ์–ธ์–ด(Compile Laguage)
  • ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์–ธ์–ด(Interpreter Laguage)

๋กœ ๋‚˜๋‰œ๋‹ค.

 

์ปดํŒŒ์ผ ์–ธ์–ด์˜ ๊ฒฝ์šฐ, ์†Œ์Šค๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์ปดํŒŒ์ผ ๊ณผ์ •์„ ๊ฑฐ์ณ์„œ ์‹คํ–‰ํŒŒ์ผ์ด ๋งŒ๋“ค์–ด์ง€๋Š” ๊ตฌ์กฐ์ด๋‹ค.

์ธํ„ฐํ”„๋ฆฌํ„ฐ ์–ธ์–ด์˜ ๊ฒฝ์šฐ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ์†Œ์Šค์˜ ๋ผ์ธ ๋‹จ์œ„๋กœ ํ•ด์„ํ•ด์„œ ์‹คํ–‰ํ•˜๋Š” ๊ตฌ์กฐ์ด๋‹ค.

 

C/C++์€ ์ปดํŒŒ์ผ ์–ธ์–ด์— ํ•ด๋‹น๋˜๊ณ , 

 

์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ ์“ฐ๋Š” '๋นŒ๋“œ'๊ฐ€ ์ปดํŒŒ์ผ ๊ณผ์ •์„ ํ†ต์นญํ•˜๋Š” ๋‹จ์–ด์ด๋‹ค.

(์œˆ๋„์šฐ์˜ ๊ฒฝ์šฐ Visual Studio ๋นŒ๋“œ, ๋ฆฌ๋ˆ…์Šค์˜ ๊ฒฝ์šฐ gcc/g++ or Make ๋ช…๋ น์–ด)

 

 

์ฐธ๊ณ ๋กœ, Visual Studio์€ ๋ฒ„์ „์— ๋งž๊ฒŒ ์ปดํŒŒ์ผ๋Ÿฌ๋„ ๊ฐ™์ด ์„ค์น˜๋˜๋ฉฐ, ๋นŒ๋“œ ๋ฐ ๋””๋ฒ„๊ทธ๊นŒ์ง€ ๊ฐ™์ด ์ง„ํ–‰ ํ•  ์ˆ˜ ์žˆ๋‹ค.

(VS๋ฒ„์ „๊ณผ ์ปดํŒŒ์ผ๋Ÿฌ ๋ฒ„์ „์ด ๋งž์ง€ ์•Š์œผ๋ฉด ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค..)

 

 

๊ทธ๋ž˜์„œ ์ปดํŒŒ์ผ์ด๋ž€ ๊ฒฐ๊ตญ ๋ฌด์—‡์ธ๊ฐ€?

- ์‚ฌ๋žŒ์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ปดํ“จํ„ฐ๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” 2์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์„ ๋œปํ•œ๋‹ค.

- ์ปดํŒŒ์ผ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ปดํŒŒ์ผ๋Ÿฌ ๋ผ๊ณ  ํ•œ๋‹ค.

 

์ปดํŒŒ์ผ ๊ณผ์ •

1. ์†Œ์Šค ์ปดํŒŒ์ผ(Source Compile)

2. ๋งํ‚น(Linking)

 

 

์ปดํŒŒ์ผ ๋ฐ ๋งํ‚น

 

์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋ฒˆ์—ญํ•˜๋Š” ๊ณผ์ •์„ ์†Œ์Šค ์ปดํŒŒ์ผ์ด๋ผ๊ณ  ํ•˜๋ฉฐ c/cppํŒŒ์ผ์„ ๊ธฐ์ค€์œผ๋กœ ๋ฒˆ์—ญํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ๊ฐ€๊ณต ๊ณผ์ •์„ ๊ฑฐ์น˜๋Š”๋ฐ, cpp์—์„œ ํ—ค๋”ํŒŒ์ผ์„ includeํ•˜๋ฉด, ์ปดํŒŒ์ผ๋Ÿฌ๋Š” include๋œ ํ—ค๋”๋ฅผ ์ฐพ์•„์„œ ๋ฒˆ์—ญํ•˜๊ณ  ์žˆ๋Š” ์†Œ์Šค์˜ ์•ž๋ถ€๋ถ„์— ๋ถ™์—ฌ๋„ฃ๋Š”๋‹ค.

 

๊ฐ€๊ณต ๊ณผ์ •์„ ๊ฑฐ์ณ ๋ฒˆ์—ญ์ด ๋๋‚˜๋ฉด, ์˜ค๋ธŒ์ ํŠธ ํŒŒ์ผ(Object file)์ด ๊ฒฐ๊ณผ๋ฌผ๋กœ ์ƒ์„ฑ๋œ๋‹ค. ์˜ค๋ธŒ์ ํŠธ ํŒŒ์ผ์€ cpp๋งˆ๋‹ค ์ƒ์„ฑ ๋œ๋‹ค.

 

์ดํ›„ cpp๋งˆ๋‹ค ์ƒ์„ฑ๋œ ์˜ค๋ธŒ์ ํŠธ ํŒŒ์ผ์„ ๋ชจ์•„ ํ•˜๋‚˜์˜ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํŒŒ์ผ์„ ๋งŒ๋“œ๋Š” ๋ฐ, ์ด๋ฅผ ๋งํฌ(link) ํ˜น์€ ๋งํ‚น(linking)์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

๋งํฌ ๊ณผ์ •์„ ๊ฑฐ์นœ ๊ฒฐ๊ณผ๋ฌผ๋กœ๋Š” ์‹คํ–‰ํŒŒ์ผ(exe)์ด ๋งŒ๋“ค์–ด์ง„๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ์‹คํ–‰ํŒŒ์ผ์€ ๊ธฐ๊ณ„๊ฐ€ ๋ฒˆ์—ญํ•  ์ˆ˜ ์žˆ๋Š” ์ˆซ์ž๋กœ ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์‹คํ–‰ํ•˜๋ฉด ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  ์†Œ์Šค์ฝ”๋“œ์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

 

 

์ปดํŒŒ์ผ ๊ณผ์ •์—์„œ ์ƒ๊ธด ์—๋Ÿฌ๋ฅผ ์ปดํŒŒ์ผ ์—๋Ÿฌ(Compile Error)๋ผ๊ณ  ํ•˜๋ฉฐ, ๋งํฌ ๊ณผ์ •์—์„œ ์ƒ๊ธด ์—๋Ÿฌ๋ฅผ ๋งํฌ ์—๋Ÿฌ(Link Error)๋ผ๊ณ  ํ•œ๋‹ค. ์ปดํŒŒ์ผ๊ณผ ๋งํฌ ๋ชจ๋‘ ์„ฑ๊ณตํ•ด์•ผ ์‹คํ–‰ํŒŒ์ผ์ด ๋งŒ๋“ค์–ด์ง„๋‹ค.

 

๋˜ํ•œ ์ปดํŒŒ์ผ๊ณผ ๋งํฌ ๊ณผ์ •์—์„œ ์ƒ๊ธด ์–ธ์–ด๋ฅผ ์ปดํŒŒ์ผ ํƒ€์ž„ ์—๋Ÿฌ(Complie Time Error) ํ˜น์€ ์ •์  ์—๋Ÿฌ(Static Error)๋ผ๊ณ  ํ•˜๋ฉฐ, ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰ํ•˜๋ฉด์„œ ์ƒ๊ธด ์—๋Ÿฌ๋ฅผ ๋Ÿฐ ํƒ€์ž„ ์—๋Ÿฌ(Run Time Error) ํ˜น์€ ๋™์  ์—๋Ÿฌ(Dynamic Error)๋ผ๊ณ  ํ•œ๋‹ค.

 

// ๋นŒ๋“œ๋Š” ์ปดํŒŒ์ผ๊ณผ ๋งํฌ๋ฅผ ํ•ฉ์นœ ๋ง๋กœ ์“ฐ์ธ๋‹ค.

๋Œ“๊ธ€