example.c
#include <stdio.h>
int number = 5;
main.c
#include <stdio.h>
extern int number;
int main(void)
{
printf("%d", number);
return 0;
}
๊ฒฐ๊ณผ๋ ์ด๋ป๊ฒ ๋ ๊น์?
1. 5๊ฐ ์ถ๋ ฅ๋๋ค.
2. ๋งํฌ ์ค๋ฅ๊ฐ ๋ฌ๋ค.
3. ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฌ๋ค.
4. ์ด๊ธฐํ๊ฐ ์๋๋ค๊ณ ๋ฌ๋ค.
์ ๋ต์ธ ๋ฒํธ๋ฅผ ์ ์ด์ฃผ์๊ณ ๊ทธ ์ด์ ๊น์ง ์ ์ด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
๋งํนํด์ค์ผํ๋๋ฐ ๋ฐ๋ก ์ปดํ์ผ ์ปค๋งจ๋ ์์ ์์ผ๋ ๋งํน์ํ๋ค๊ณ ๋ณด๊ณ 2๋ฒ
ํ๋ ธ์ด์ง!
๊ทธ๋กฌ 4์ธ๊ฐ. ๋ชจ๋ฅด๊ฒ ๋ค
๋ต์ ์ ๊ธฐํ๊ฒ๋ 1๋ฒ ์ ๋๋ค!
์...
์๋์๋ค ์ค๋ช ์จ๋จ์ด์ฉ
2๋ฒ extern ์ผ๋๋ฐ ํค๋ ๋ฐ๋ก ์๊ธฐ ๋๋ฌธ
๋ํ .cํ์ผ์ ์ ์ธ๋ ๋ณ์๋ ํค๋ ํฌํจํด๋ดค์ ๋ค๋ฅธ ์ฝ๋์์ ์ ๊ทผํ ์ ์์
๊ทผ๋ฐ ๋ ์๋ฌด๋๋ ํค๋ ์์ ์ ๊ฑฐ ์ค์ํ์ ๊ฒ ๊ฐ์?
ํ๋ ธ์ด์ฉ! ๋ต์ 1๋ฒ ์ด์์
ใด ์? ๋ญ์ง. ๊ทธ๋ผ c์์๋ ์บก์ํ ๊นจ๋จ๋ฆด ์ ์์?
์ ์ดํด๋๋ค ใ ใ extern ํค์๋๊ฐ ์ ์ด์ .c ํ์ผ์ ์๋ ์ ์ญ๋ณ์๊น์ง ์ฐธ์กฐํ ์ ์๊ฒ ํด์ฃผ๋ ๊ฑฐ์๋ค์.
๋ง์! ์ค๋ช ํ์๋ฉด ์ ํํ ์ดํด๋ฅผ ์ํด์๋ผ๋ฉด ๋น๋ ๊ณผ์ ์ ์ดํด๊ฐ ํ์ํ๊ธดํ๋ฐ ๊ฐ๋จํ๊ฒ ํ๋ฉด ํค๋ํ์ผ์ ์ ์ธ ๋ถ๋ถ์ extern์ด ํด์ฃผ๋๊ฑฐ์ฃ ๊ทธ๋ผ ๊ฐ๋จํ๊ฒ ํ๋ ํด์ฆ ๋ด์๋ฉด ์ ๋ ๊ฒ extern ์ผ๋ก ์ ์ญ๋ณ์ ์ ๊ทผ์ ๋ชปํ๊ฒ ํ ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น์ ?
static์ผ๋ก ํ๋ฉด ๋์ง ์๋์
๋ง์์ด์ ํน์ ์ด์ ๊ฐ ๋ญ์ง ์์๋์ฉ ?
ํ์ผ ๋ฐ์์ ์ ๊ทผ ๋ชปํ๊ฒ ํ๋ ๊ฑฐ? ์ฏค๋ฐ์ ๋ชจ๋ฅด๋๋ฐ
๋ง์ ์ ์ญ๋ณ์์ static ๋ถ์ด๋ฉด ๊ทธ ์ ์ญ๋ณ์๋ ์ดํ์ผ์์์๋ง ์ธ์์๊ณ ์ธ๋ถ์์๋ ์ธ์์๊ฒ ๋๋๊ฑฐ์ฃ , ๊ทธ๋ฌ๊ธฐ์ static ์ ์ญ๋ณ์๋ ์ ์ธ์ด ํ์๊ฐ์์
์ ์๋ง ๋ง๋ค์ด๋ ์ ์๊ฐ ๊ณง ์ ์ธ์ด ๋๊ธฐ๋๋ฌธ
ใด ์คํธ ํฅ๋ฏธ๋ก์ด ์ค๋ช ์ด๋ค์
์ข ๋ ๊น๊ฒ ๋ค์ด๊ฐ์๋ฉด ๋น๋ ๊ณผ์ ์ ์ ์ฒ๋ฆฌ - ์ปดํ์ผ - ์ด์ ๋ธ - ๋งํฌ ์์ ์ ์งํํ๋๋ฐ ๊ฐ๋จํ๊ฒ ์ค๋ช ํ์๋ฉด ์ ์ฒ๋ฆฌ์์ ์์ค ์ฝ๋๋ค์ #include ์ ๋งคํฌ๋ก ๋ฑ๋ฑ์ ์ฝ๋๋ฅผ ๋ณต๋ถ์ ํจ ์ด๊ฑธ ํธ๋์ฌ๋ ์ด์ ์ ๋ ( ๋์ถฉ ํ์ฅ๋ ์ฝ๋ ) ๋ผ๊ณ ๋ถ๋ฆ ์ด๊ฑธ ์ปดํ์ผ ์์ ์ผ๋ก ๋ค์ด๊ฐ๋๋ฐ ์ปดํ์ผ๋ฌ๋ ์ฝ๋๋ฅผ ์ฐ์ฝ ๋ณด๋ฉด์ ์ ์ธ ๋ถ๋ถ์ ๋ณด๊ณ ๊ทธ ์ ์ธํ ๋ณ์, ํจ์ ์ด๋ฆ๊ณผ ๋๊ฐ์ '๋ ์ด๋ธ'์ ์์ฑํ๊ฒ ๋จ ์ด์ ์ด๋ ๊ฒ ๋ง๋ ์ฝ๋๋ฅผ ์ด์ ๋ธ๋ฆฌ์ด๋ก ๋ฐ๊ฟ ์ด๊ฑธ ์ด์ ๋ธ ์์ ์์ ์ค๋ธ์ ํธ ํ์ผ๋ก ๋ฐ๊ฟ ์ด๊ฑธ ๋ชจ๋ ์์ค์ฝ๋๊ฐ ์ด ์์ ์ ์ํํ๊ณ ์ด์ ๋ชจ๋ ์์ค์ฝ๋๋ค์ด ์ค๋ธ์ ํ์ผ๋ก ๋ฐ๊พธ๋ฉด ์ด๊ฑธ ๋ค ๋ชจ์์ ๋งํฌ ์์ ์ ํจ ์์์ ์ ์ธํ ๋ณ์, ํจ์๋ฅผ ๋ ์ด๋ธ๋ก ๋ง๋ค๊ณ ์ฌ๊ธฐ๋ก ์ ํํ ์์๊ฒ ํด์ฃผ๋๋ฐ ์์ง '์ ์'๋ฅผ ๋ชจ๋ฅด๋์ํ์ธ๊ฑฐ
๊ทธ๋์ ๋งํฌ์์ ์์ ๋ ์ด๋ธ ์ด๋ฆ์ ๊ธฐ์ตํด๋๋ค๊ฐ ๋ ์ด๋ธ์ด ์ ์๋ ์ค๋ธ์ ํธ ์ฝ๋์ ์ฃผ์๋ก ์ ํํ๋๋ก ํด์ฃผ๋๊ฑฐ ๊ทธ๋ผ ์ ํค๋ํ์ผ์ด ์์ด๋ ์ ์ธ์ผ๋ก๋ง์ผ๋ก ๋ค๋ฅธ ํ์ผ์ ์ ์ ๋ถ๋ถ์ ์์์๋์ง ์๊ฒ๋๋๊ฑฐ ์ผ๋จ ์ ์ธ์ผ๋ก ' a ' ์ ๋ณ์๊ฐ ์๋ค๊ณ ์ผ๋จ ์ปดํ์ผ์๊ฒ ์๋ ค์ฃผ๊ณ ' a ' ๋ผ๋ ๋ ์ด๋ธ์ ๋ง๋๋๊ฑฐ ๊ทธ๋ฆฌ๊ณ ๋งํฌ ๋ถ๋ถ์์ a์ ๋ณ์๊ฐ ์์ผ๋ ๋ชจ์ ์ค๋ธ์ ํธํ์ผ์์ ์ ์๋ฅผ ์ฐพ๋๊ฑฐ๊ณ a.c ์ ์ ์๊ฐ ์๋ค ? ์ฌ๊ธฐ๋ก ์ ํํ๊ฒ ๋ง๋ค์ด์ผ ๊ฒ ๋ค. ์ด๋ ๊ฒ ๋๋๊ฑฐ
extern์ ์ main์ ์ ์ญ๋ณ์๋ weak symbol์ด๊ณ example์ ์ด๊ธฐํ๋ ์ ์ญ๋ณ์๋ผ strong symbol์ด๋ผ ๋งํฌ๊ณผ์ ์์ weak symbol์ด strong symbol์ ์ฐ๊ฒฐ๋์ 1๋ฒ