main() ํจ์
main() ํจ์๋ C++ ํ๋ก๊ทธ๋จ์ ์์์ ์ด๋ค.
ํ๋ก๊ทธ๋จ์ด ์คํ๋ ๋ ๊ฐ์ฅ ๋จผ์ ํธ์ถ๋๋ ํจ์์ด๋ฉฐ, ์ปดํ์ผ๋ฌ์ ์ด์ ์ฒด์ ๋ ํ๋ก๊ทธ๋จ์ ์ง์ ์ ์ผ๋ก main() ํจ์๋ฅผ ์ธ์
- main() ํจ์๋ ํ๋ก๊ทธ๋จ์ ์์์ ์ด๋ฉฐ, ๋ฐ๋์ ์กด์ฌํด์ผ ํจ
- ํ๋ก๊ทธ๋จ ์คํ ์ ๊ฐ์ฅ ๋จผ์ ํธ์ถ๋๋ฉฐ, ์ข ๋ฃ ์ํ๋ฅผ ๋ฐํํจ
- ๋ช ๋ น์ค ์ธ์๋ฅผ ์ฒ๋ฆฌํ๋ ค๋ฉด main(int argc, char* argv[]) ํํ๋ฅผ ์ฌ์ฉํ ์ ์์
- main() ํจ์๋ ๋ณดํต int๋ฅผ ๋ฐํํ๋ฉฐ, ๋ฐํ๊ฐ์ ํตํด ํ๋ก๊ทธ๋จ์ ์ฑ๊ณต ์ฌ๋ถ๋ฅผ ์๋ฆด ์ ์์
์คํ ๊ณผ์

Memory Layout

์ ์ฅ ํด๋์ค(Storage Class)
๋ณ์๋ ํจ์์ ์๋ช ๊ณผ ๋ฒ์๋ฅผ ์ ์ํ๋ ๋ฐ ์ฌ์ฉ๋๋ค
์ ์ฅ ํด๋์ค๋ ๋ณ์๊ฐ ์ธ์ ํ ๋น๋๊ณ ํด์ ๋๋ฉฐ, ์ด๋์์ ์ ๊ทผํ ์ ์๋์ง๋ฅผ ๊ฒฐ์ ํ๋ค
์ ์ฅ ํด๋์ค๋ ๋ณ์์ ํจ์์ ์๋ช , ๋ฒ์, ๊ทธ๋ฆฌ๊ณ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ๋ํ ์ค์ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ฉฐ ์ด๋ฅผ ํตํด C++ ํ๋ก๊ทธ๋จ์ ๋ฉ๋ชจ๋ฆฌ์ ์ฑ๋ฅ์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ค.
auto(์ง์ญ๋ณ์):
- ์๋ ์ ์ฅ ํด๋์ค๋ก, ๋ก์ปฌ ๋ณ์์ ๊ธฐ๋ณธ ์ ์ฅ ํด๋์ค๋ก ์ฌ์ฉ
- C++11๋ถํฐ๋ ์๋ ํ์ ์ถ๋ก ์ ์๋ฏธํ๊ฒ ๋์์
- ์์: auto x = 10; // x์ ํ์ ์ int๋ก ์ถ๋ก
register:
- CPU ๋ ์ง์คํฐ์ ์ ์ฅ๋๊ธฐ๋ฅผ ์์ฒญํ๋ ์ ์ฅ ํด๋์ค. ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ๋ณด๋ค ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค.
- ํ๋ ์ปดํ์ผ๋ฌ๋ ์ต์ ํ๋ฅผ ์๋์ผ๋ก ์ํํ๋ฏ๋ก, register๋ ๊ฑฐ์ ์ฌ์ฉ๋์ง ์๋๋ค
- ์์: register int counter = 0;
static:
- ์ ์ ์ ์ฅ ํด๋์ค๋ก, ๋ณ์์ ์๋ช ์ ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋ ๋๊น์ง ์ฐ์ฅ์ํจ๋ค
- ๋ก์ปฌ ๋ณ์์์ ์ฌ์ฉํ๋ฉด ํจ์๊ฐ ์ข ๋ฃ๋์ด๋ ๋ณ์๊ฐ ์๋ฉธ๋์ง ์๊ณ , ๊ณ์ ์ ์ง๋๋ค
- ์ ์ญ ๋ณ์ ๋๋ ํจ์์์ ์ฌ์ฉํ๋ฉด, ๋ณ์๊ฐ ๋ค๋ฅธ ํ์ผ์์ ์ฐธ์กฐ๋์ง ์๋๋ก ์ ํํ ์ ์๋ค.
- ์์:
void func() {
โโโโstatic int counter = 0; // ํจ์ ํธ์ถ ์๋ง๋ค ๊ฐ์ ์ ์งํจ
โโโโcounter++;
โโโโstd::cout << counter << std::endl;
}
extern(๋ชจ๋ ํจ์, ํ์ผ๋ฒ์ ๋ณ์):
- ์ธ๋ถ์์ ์ ์ธ๋ ๋ณ์๋ ํจ์๋ฅผ ์ฐธ์กฐ
- ์ธ๋ถ ๋งํฌ๋ฅผ ์ง์ ํ์ฌ ๋ณ์๋ ํจ์๊ฐ ๋ค๋ฅธ ํ์ผ์์ ์ ์ธ๋์ด ์์์ ๋ํ๋
- ์ ์ญ ๋ณ์๋ ํจ์์ ์ ์๋ฅผ ์ฌ๋ฌ ํ์ผ์์ ๊ณต์ ํ ๋ ์ฌ์ฉ
- ์์ :
// file1.cpp
int x = 10;
// file2.cpp
extern int x; // file1.cpp์ x ๋ณ์๋ฅผ ์ฌ์ฉ
mutable:
- const ๊ฐ์ฒด์์๋ ์์ ํ ์ ์๋ ๋ฉค๋ฒ๋ฅผ ์ง์ ํจ
- const ๊ฐ์ฒด ๋ด์์ ํน์ ๋ฉค๋ฒ ๋ณ์์ ์์ ๊ฐ๋ฅ์ฑ์ ํ์ฉํ๋ ์ ์ฅ ํด๋์ค
- const๋ก ์ ์ธ๋ ํด๋์ค ๊ฐ์ฒด ๋ด์์๋ mutable๋ก ์ ์ธ๋ ๋ณ์๋ ๋ณ๊ฒฝํ ์ ์๋ค.
- ์์ :
class MyClass {
public:
โโโโmutable int counter;
};
int main() {
โโโโconst MyClass obj;
โโโโobj.counter = 10; // mutable ๋๋ฌธ์ ์์ ๊ฐ๋ฅ
}
