C Programming Language/C++

C++ mainํ•จ์ˆ˜, ์‹คํ–‰ ๊ณผ์ •, ๋ฉ”๋ชจ๋ฆฌ, ์ €์žฅ ํด๋ž˜์Šค(Storage Class)

567Rabbit 2024. 8. 25. 19:46

 

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 ๋•Œ๋ฌธ์— ์ˆ˜์ • ๊ฐ€๋Šฅ
}