C์ธ์ด extern (์ค๊ธ)
C์ธ์ด์์ ํค๋ ํ์ผ์ ์ค๋ณต ํฌํจ์ ๋ค์ํ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์๋ค. ์๋ฅผ ๋ค์ด, ํ๋ก์ ํธ ๋จ์๊ฐ ์ปค์ ธ ๊ฐ์ ํค๋ ํ์ผ์ด ์ฌ๋ฌ ๋ฒ ํฌํจ๋๋ฉด ๋ณ์๋ ํจ์ ์ ์ธ์ด ์ค๋ณต๋์ด ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์๋ค. ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด "Include Guard"๋ผ๋ ๊ธฐ๋ฒ์ด ๋๋ฆฌ ์ฌ์ฉ๋๋ค. Include Guard๋ ์ ์ฒ๋ฆฌ๊ธฐ(preprocessor) ์ง์๋ฌธ์ ์ฌ์ฉํ์ฌ ํค๋ ํ์ผ์ด ํ ๋ฒ๋ง ํฌํจ๋๋๋ก ๋ณด์ฅํ๋ค. ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ #ifndef, #define, #endif ์ง์๋ฌธ์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
- ์ค๋ณต ํฌํจ ๋ฐฉ์ง: ํค๋ ํ์ผ์ด ์ฌ๋ฌ ๋ฒ ํฌํจ๋๋ ๊ฒ์ ๋ฐฉ์งํ์ฌ, ์ค๋ณต ์ ์ธ์ผ๋ก ์ธํ ์ปดํ์ผ ์ค๋ฅ๋ฅผ ์๋ฐฉํ๋ค.
- ํ๋ก๊ทธ๋จ ๊ตฌ์กฐ ๊ฐ์ : ์ฝ๋์ ๋ชจ๋ํ์ ์ฌ์ฌ์ฉ์ฑ์ ๋์ด๋ฉฐ, ํ๋ก๊ทธ๋จ์ ๊ตฌ์กฐ๋ฅผ ๋ช ํํ๊ฒ ํ๋ค.
- ์ปดํ์ผ ์๊ฐ ๋จ์ถ: ๋ถํ์ํ ํค๋ ํ์ผ์ ์ฌ์ฒ๋ฆฌ๋ฅผ ๋ฐฉ์งํจ์ผ๋ก์จ, ์ ์ฒด ์ปดํ์ผ ์๊ฐ์ ๋จ์ถํ ์ ์๋ค.
โญ์ฝ๋
๋ค์์ Include Guard๋ฅผ ์ฌ์ฉํ ํค๋ ํ์ผ์ ์์์ด๋ค.
myheader.h
#ifndef MYHEADER_H // MYHEADER_H๊ฐ ์ ์๋์ง ์์๋ค๋ฉด
#define MYHEADER_H // MYHEADER_H๋ฅผ ์ ์
// ์ฌ๊ธฐ์ ํจ์ ์ ์ธ, ํ์
์ ์, ๋งคํฌ๋ก ์ ์ ๋ฑ์ ํฌํจ
extern int sharedVariable;
void myFunction();
#endif // MYHEADER_H์ ๋
main.c
#include "myheader.h" // ์ฒซ ๋ฒ์งธ ํฌํจ
#include "myheader.h" // ๋ ๋ฒ์งธ ํฌํจ - Include Guard์ ์ํด ์ค์ ๋ก๋ ๋ฌด์๋จ
int main() {
sharedVariable = 5;
myFunction();
return 0;
}
์ด ์์์์ myheader.h ํค๋ ํ์ผ์ Include Guard์ ์ํด ํ ๋ฒ๋ง ํฌํจ๋๋ค. ๋ง์ฝ main.c ๋๋ ๋ค๋ฅธ ํ์ผ์์ myheader.h๋ฅผ ์ฌ๋ฌ ๋ฒ ํฌํจํ๋๋ผ๋, MYHEADER_H ๋งคํฌ๋ก๊ฐ ์ด๋ฏธ ์ ์๋์ด ์๊ธฐ ๋๋ฌธ์ ํค๋ ํ์ผ์ ๋ด์ฉ์ด ์ค๋ณต์ผ๋ก ์ฒ๋ฆฌ๋์ง ์๋๋ค.
- ํค๋ ํ์ผ ์ด๋ฆ์ ๊ธฐ๋ฐ์ผ๋ก ํ ๊ณ ์ ํ ๋งคํฌ๋ก ์ฌ์ฉ: Include Guard๋ฅผ ์ํ ๋งคํฌ๋ก ์ด๋ฆ์ผ๋ก ํ์ผ ์ด๋ฆ์ ๊ธฐ๋ฐ์ผ๋ก ํ ๊ณ ์ ํ ์ด๋ฆ์ ์ฌ์ฉํ๋ฉด ์ด๋ฆ ์ถฉ๋์ ๋ฐฉ์งํ ์ ์๋ค.
- ํ๋ก์ ํธ ์ ์ฒด์์ ์ผ๊ด๋ ๊ท์น ์ ์ฉ: ๋ชจ๋ ํค๋ ํ์ผ์ ๋ํด ์ผ๊ด๋ Include Guard ๊ท์น์ ์ ์ฉํ์ฌ ์ฝ๋์ ์ผ๊ด์ฑ์ ์ ์งํด์ผ ํ๋ค.
- ๋ชจ๋ C++์์๋ #pragma once ๊ณ ๋ ค: C++์์๋ #pragma once ์ง์๋ฌธ์ ์ฌ์ฉํ๋ ๊ฒ๋ ํ๋์ ์ต์ ์ด๋ค. ์ด ์ง์๋ฌธ์ ํค๋ ํ์ผ์ด ํ ๋ฒ๋ง ํฌํจ๋๋๋ก ํ๋ ๊ฐ๋จํ๊ณ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ง๋ง, C์์๋ ํ์ค์ด ์๋๋ฉฐ, ๋ชจ๋ ์ปดํ์ผ๋ฌ์์ ์ง์๋๋ ๊ฒ์ ์๋๋ค.
Include Guard๋ C ํ๋ก๊ทธ๋๋ฐ์์ ์ฝ๋๋ฅผ ์์ ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๋ฐ ํ์์ ์ธ ๊ธฐ๋ฒ์ด๋ค. ์ด๋ฅผ ํตํด ํ๋ก๊ทธ๋จ์ ์์ ์ฑ์ ๋์ด๊ณ ์ปดํ์ผ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํ ์ ์๋ค.
'๐ท C์ธ์ด 30๊ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C/C++ Tip] 18. C์ธ์ด ์กฐ๊ฑด๋ฌธ ๋ง์คํฐํ๊ธฐ : if๋ฌธ์ ๋ชจ๋ ๊ฒ! (0) | 2024.11.05 |
---|---|
[C/C++ Tip] 17. Static ๋ณ์์ Extern ๋ณ์์ ์ฐจ์ด์ (1) | 2024.11.02 |
[C/C++ Tip] 15. extern ๊ธฐ๋ณธ (0) | 2024.11.02 |
[C/C++ Tip] 14. ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น (0) | 2024.10.29 |
[C/C++ Tip] 13. MCU ์ ์ด๋ฅผ ์ํ ๋นํธ ์ฐ์ฐ (0) | 2024.10.29 |