[C์–ธ์–ด] ํ•จ์ˆ˜์™€ ๊ธฐ์–ต ํด๋ž˜์Šค(2)

2025. 10. 15. 18:37ยท๐Ÿ› ๏ธBackend/โš™๏ธC

โœ… 1. ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•œ ์ž๋ฃŒ ์ „๋‹ฌ

(1) ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ๊ณผ ์ž๋ฃŒ ์ „๋‹ฌ

  • ํ•จ์ˆ˜ ํ˜ธ์ถœ: ์ฒ˜๋ฆฌ์— ํ•„์š”ํ•œ ์ž๋ฃŒ๋ฅผ ํ”ผํ˜ธ์ถœ ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ „๋‹ฌํ•จ -> sum(10, 20); 
  • ๋ณต๊ท€: ์ฒ˜๋ฆฌ ๊ฒฐ๊ด๊ฐ’์„ ํ•จ์ˆ˜ ํ˜ธ์ถœ์‹์˜ ๊ฐ’์œผ๋กœ ๋ฐ˜ํ™˜ํ•จ -> return z;

(2) ๊ฐ’์— ์˜ํ•œ ์ž๋ฃŒ ์ „๋‹ฌ

  • C ์–ธ์–ด์˜ ๊ธฐ๋ณธ์ ์ธ ์ž๋ฃŒ ์ „๋‹ฌ ๋ฐฉ์‹์ด๋‹ค.
  • C ์–ธ์–ด๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ์‹œ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ „๋‹ฌ์€ ์‹ค ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ํ˜•์‹ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋ณต์‚ฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•จ.
  • ์ด์œ ๋Š”, ์‹ค ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ํ˜•์‹ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ณต๊ฐ„์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ’๋งŒ ๋ณต์‚ฌํ•ด์„œ ๋„ฃ์–ด์ฃผ๋Š” ๊ฒƒ์ž„. ์ฆ‰, ์ฃผ์†Œ๊ฐ’์ด ๋‹ฌ๋ผ์„œ์ž„.
  • ์ฆ‰, ๋ณ€์ˆ˜๊ฐ„์˜ ์ฃผ์†Œ๊ฐ’์ด ๋‹ค๋ฅธ๋ฐ, ์„œ๋กœ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ณต์‚ฌ๋ฅผ ํ•˜๋Š” ๊ฒƒ์ž„.

(3) ์ฐธ์กฐ์— ์˜ํ•œ ์ž๋ฃŒ ์ „๋‹ฌ

#include <stdio.h>

void modify(int *ptr) {
    *ptr = 99;   // ptr์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฃผ์†Œ(์›๋ณธ ๋ณ€์ˆ˜)์— 99 ์ €์žฅ
}

int main() {
    int num = 5;
    modify(&num);   // num์˜ ์ฃผ์†Œ๋ฅผ ์ „๋‹ฌ
    printf("num = %d\n", num);
    return 0;
}
  • C ์–ธ์–ด์—์„œ๋Š” ์ง์ ‘ ์ง€์›ํ•˜์ง€๋Š” ์•Š์ง€๋งŒ, ํฌ์ธํ„ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ์œ ์‚ฌํ•œ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Œ.
  • ์‹ค ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐ’์ด ๋“ค์–ด ์žˆ๋Š” ๊ณณ์˜ ์ฃผ์†Œ๋ฅผ ํ˜•์‹ ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์ž„.
  • ์ฃผ์†Œ๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ํ˜•์‹ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ 'ํฌ์ธํŠธ' ํ˜•์œผ๋กœ ์„ ์–ธ์„ ํ•ด์•ผ ๋จ.
  • ํ”ผํ˜ธ์ถœ ํ•จ์ˆ˜์—์„œ ํ˜•์‹ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์‹ค ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•˜๊ฒŒ ๋จ.
  • ์ฆ‰, ์›๋ณธ ์ฃผ์†Œ๊ฐ’์„ ํ˜•์‹ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜์ •์ด ์ผ์–ด๋‚˜๋ฉด ์‹ค ๋งค๊ฐœ๋ณ€์ˆ˜์—๋„ ์˜ํ–ฅ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Œ.

  • ์‰ฝ๊ฒŒ๋งํ•ด, ๊ตฌ์กฐ์ฒด๋Š” ์—ฌ๋Ÿฌ ์ž๋ฃŒ๋ฅผ ํฌํ•จํ•œ ๊ตฌ์กฐ์ธ๋ฐ, ์šฉ๋Ÿ‰์ด ํด ์ˆ˜ ์žˆ์Œ.
  • ๊ทธ๋ž˜์„œ ์šฉ๋Ÿ‰์ด ํฐ ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•  ๋•Œ ๊ฐ’์ด ์•„๋‹Œ ์ฐธ์กฐ์— ์˜ํ•œ ์ž๋ฃŒ ์ „๋‹ฌ ์ฆ‰, ์ฃผ์†Œ๋ฅผ ์ „๋‹ฌํ•จ์œผ๋กœ์จ ํšจ์œจ์„ ์˜ฌ๋ฆด ์ˆ˜ ์žˆ์Œ.

โœ… 2. ์œ ํšจ๋ฒ”์œ„

(1) ์œ ํšจ๋ฒ”์œ„ ( scope ) ๋ž€?

  • ์œ ํšจ๋ฒ”์œ„๋Š” ๋ณ€์ˆ˜๋‚˜ ํ•จ์ˆ˜ ๋“ฑ์˜ ๋ช…์นญ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์˜์—ญ์„ ์˜๋ฏธํ•œ๋‹ค.
  • ์œ ํšจ๋ฒ”์œ„์— ๋Œ€ํ•œ ์„ธ๋ถ€์ ์ธ ํŒ๋‹จ ๊ธฐ์ค€์€ ์ง€์—ญ๋ณ€์ˆ˜, ์ „์—ญ๋ณ€์ˆ˜ ๋กœ ๋‚˜๋‰œ๋‹ค.

[ ์ง€์—ญ๋ณ€์ˆ˜ (loccal variable) ]

  • ํŠน์ • ๋ฒ”์œ„ ๋‚ด์—์„œ๋งŒ ํ†ต์šฉ๋˜๋Š” ๋ณ€์ˆ˜๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, ์„ ์–ธ๋œ ๋ธ”๋ก์ด๋‚˜ ํ•จ์ˆ˜ ๋‚ด์—์„œ๋งŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ ๋ณ€์ˆ˜๋ฅผ ์˜๋ฏธํ•จ.
  • ๋ธ”๋ก์ด๋‚˜ ํ•จ์ˆ˜ ๋‚ด๋ถ€์— ์„ ์–ธ๋œ ๋ณ€์ˆ˜, ํ•จ์ˆ˜ ํ—ค๋”์— ์„ ์–ธ๋œ ํ˜•์‹ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋˜ํ•œ ํฌํ•จ

[ ์ „์—ญ๋ณ€์ˆ˜ (global variable) ]

  • ํ”„๋กœ๊ทธ๋žจ ์ „์ฒด์— ๊ฑธ์ณ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
  • ํ•จ์ˆ˜ ์™ธ๋ถ€์— ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋กœ ๋ณผ ์ˆ˜ ์žˆ์Œ.
  • ๋™์ผ ํŒŒ์ผ ๋‚ด ๋˜๋Š” ๋‹ค๋ฅธ ํŒŒ์ผ์— ์„ ์–ธ๋  ์ˆ˜ ์žˆ์Œ
  • ๋ช…์‹œ์ ์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•˜์ง€ ์•Š์œผ๋ฉด 0์œผ๋กœ ์ž๋™ ์ดˆ๊ธฐํ™” ๋จ.

[ ์ง€์—ญ๋ณ€์ˆ˜์™€ ์ „์—ญ๋ณ€์ˆ˜ ์‚ฌ์šฉ ํŒ ]

  • ๊ฐ€๊ธ‰์ ์ด๋ฉด ์ง€์—ญ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•จ.
  • ์ด์œ ๋Š” ํ•จ์ˆ˜์˜ ๋…๋ฆฝ์„ฑ ํ–ฅ์ƒ, ๋””๋ฒ„๊น…์ด ์šฉ์ดํ•จ, ๊ธฐ์–ต๊ณต๊ฐ„ ์ ˆ์•ฝ, ์žฌ๊ท€ํ˜ธ์ถœ์„ ํ•˜๋Š” ํ•จ์ˆ˜์˜ ์ž‘์„ฑ ๋“ฑ์˜ ์šฉ์ดํ•จ.
  • ์ „์—ญ๋ณ€์ˆ˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์„ ๋‘์— ์„ ์–ธํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•จ.

โœ… 3. ๊ธฐ์–ต ํด๋ž˜์Šค

(1) ๊ธฐ์–ต ํด๋ž˜์Šค ( storage class ) ๋ž€?

  • ๊ธฐ์–ต ํด๋ž˜์Šค๋ž€, ๋ณ€์ˆ˜๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ์–ด๋””์— ์ €์žฅ๋˜๋Š”์ง€, ์–ธ์ œ ์ƒ์„ฑ๋˜๊ณ  ์–ธ์ œ ์‚ฌ๋ผ์ง€๋Š”์ง€(์ƒ๋ช…์ฃผ๊ธฐ), ๊ทธ๋ฆฌ๊ณ  ์–ด๋””์„œ ์ ‘๊ทผ์„ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ (๋ฒ”์œ„)๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ์†์„ฑ์„ ์˜๋ฏธํ•จ.
  • ์‰ฝ๊ฒŒ๋งํ•ด, ๋ณ€์ˆ˜์˜ ์กด์†๊ธฐ๊ฐ„(์ƒ๋ช…์ฃผ๊ธฐ), ์œ ํšจ๋ฒ”์œ„, ์ €์žฅ์œ„์น˜ ๋“ฑ์„ ๊ฒฐ์ •ํ•˜๋Š” ๊ฐœ๋…์ด๋‹ค.
  • ๋˜ํ•œ, ๋ณ€์ˆ˜๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์–ด๋–ป๊ฒŒ ๊ธฐ์–ต๋˜๋Š”๊ฐ€๋ฅผ ๋ถ„๋ฅ˜ํ•˜๋Š” ๊ธฐ์ค€์œผ๋กœ ๊ธฐ์–ต ํด๋ž˜์Šค๋ผ๋Š” ์ด๋ฆ„์„ ๊ฐ€์ง.
  • C์–ธ์–ด์—๋Š” ๋Œ€ํ‘œ์ ์œผ๋กœ ์ž๋™๋ณ€์ˆ˜, ์ •์ ๋ณ€์ˆ˜, ์™ธ๋ถ€๋ณ€์ˆ˜, ๋ ˆ์ง€์Šคํ„ฐ ๋ณ€์ˆ˜ 4๊ฐ€์ง€ ๊ธฐ์–ต ํด๋ž˜์Šค๊ฐ€ ์žˆ์Œ.

  • ์ž๋™๋ณ€์ˆ˜: ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์—ญ๋ณ€์ˆ˜๊ฐ€ ์ž๋™๋ณ€์ˆ˜์— ํ•ด๋‹น์ด ๋˜๋ฉฐ, ์ง€์—ญ๋ณ€์ˆ˜์— ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋ฉด ๊ธฐ๋ณธ๊ฐ’์ธ auto ๋กœ ์ทจ๊ธ‰ํ•จ.
  • ๋ ˆ์ง€์Šคํ„ฐ ๋ณ€์ˆ˜: CPU์˜ ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅํ•˜์—ฌ ์ ‘๊ทผ ์†๋„๋ฅผ ์ตœ๋Œ€ํ•œ ๋น ๋ฅด๊ฒŒ ํ•˜๊ณ ์ž ํ•˜๋Š” ์ง€์—ญ ๋ณ€์ˆ˜์ž„.
  • ์ •์  ๋ณ€์ˆ˜: ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ๋™์•ˆ ๊ณ„์† ์œ ์ง€๋˜๋Š” ๋ณ€์ˆ˜๋ฅผ ์˜๋ฏธํ•จ.
  • ์™ธ๋ถ€ ๋ณ€์ˆ˜: ๋‹ค๋ฅธ ํŒŒ์ผ์ด๋‚˜ ๋‹ค๋ฅธ ๋ธ”๋ก์—์„œ ์„ ์–ธ๋œ ์ „์—ญ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ณ€์ˆ˜์ด๋‹ค.

(2) ์ž๋™๋ณ€์ˆ˜

#include <stdio.h>
int sum(int, int);
int main() {
    int result = sum(1, 2);
    printf("%d", result);
}
int sum(int a, int b) {
    auto int result = a + b; // auto ์ƒ๋žต์ด ๊ฐ€๋Šฅํ•จ.
    return result;
}
  • ์ง€์—ญ๋ณ€์ˆ˜์— ์ ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ๊ธฐ์–ต ํด๋ž˜์Šค์ด๋‹ค.
  • ์˜ˆ์•ฝ์–ด 'auto' ๋ฅผ ์ง€์ •ํ•˜์—ฌ ์„ ์–ธํ•ด ์‚ฌ์šฉ์„ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋””ํดํŠธ๊ฐ€ auto ์ด๋ฏ€๋กœ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ์Œ.
  • ์กด์†๊ธฐ๊ฐ„(์ƒ๋ช…์ฃผ๊ธฐ): ์†Œ์† ํ•จ์ˆ˜ ๋˜๋Š” ๋ธ”๋ก์— ์ง„์ž…ํ•  ๋•Œ ์ƒ์„ฑ๋˜๊ณ , ๋น ์ ธ๋‚˜๊ฐˆ ๋•Œ ์ œ๊ฑฐ๊ฐ€ ๋จ.
  • ์œ ํšจ๋ฒ”์œ„(์ ‘๊ทผ๋ฒ”์œ„): ์†Œ์† ํ•จ์ˆ˜๋‚˜ ๋ธ”๋ก ๋‚ด๋ถ€
  • ๋ช…์‹œ์ ์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฏธ์ง€์˜ ๊ฐ’์„ ๊ฐ–๊ฒŒ ๋˜๋ฉฐ, ์ ์ ˆํ•œ ์ดˆ๊ธฐํ™”๋ฅผ ํ•  ํ•„์š”๊ฐ€ ์žˆ์Œ.
  • ์ •๋ฆฌํ•˜๋ฉด, ํ•ด๋‹น ์ž๋™ ๋ณ€์ˆ˜๋Š” ์ง€์—ญ๋ณ€์ˆ˜ ๋‚ด์—์„œ ์„ ์–ธ ๋œ ๋ชจ๋“  ๋ณ€์ˆ˜์— ๋””ํดํŠธ๋กœ ๋ถ™๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ž˜์„œ ์ƒ๋žต์ด ๊ฐ€๋Šฅํ•จ.

(3) ์ •์ ๋ณ€์ˆ˜

  • ์˜ˆ์•ฝ์–ด 'static' ์„ ์ง€์ •ํ•˜์—ฌ ์„ ์–ธ ํ•  ์ˆ˜ ์žˆ์Œ.
  • ์กด์†๊ธฐ๊ฐ„(์ƒ๋ช…์ฃผ๊ธฐ): ํ”„๋กœ๊ทธ๋žจ์„ ์‹œ์ž‘ํ•  ๋•Œ ์ƒ์„ฑ๋˜์–ด ํ”„๋กœ๊ทธ๋žจ์„ ๋งˆ์น  ๋•Œ๊นŒ์ง€ ์œ ์ง€๊ฐ€ ๋จ.
  • [ ์„ ์–ธ ์œ„์น˜๋ณ„ ์œ ํšจ๋ฒ”์œ„ ]
  • ํ•จ์ˆ˜๋‚˜ ๋ธ”๋ก์— ์„ ์–ธ: ์†Œ์† ํ•จ์ˆ˜ ๋˜๋Š” ๋ธ”๋ก ๋‚ด์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ. ( ๋‚ด๋ถ€์—์„œ๋งŒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์˜๋ฏธ์ž„. )
  • ํ•จ์ˆ˜ ์™ธ๋ถ€์— ์„ ์–ธ: ์†Œ์† ํŒŒ์ผ์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ
  • ์ดˆ๊ธฐ๊ฐ’์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์ž๋™์ ์œผ๋กœ 0์œผ๋กœ ์ดˆ๊ธฐํ™”๊ฐ€ ๋จ.

  • ์œ„์™€ ๊ฐ™์ด static ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ์ •์  ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•ด์„œ ์‚ฌ์šฉ์„ ํ•  ์ˆ˜ ์žˆ์Œ.
  • ํ•ด๋‹น ์ฝ”๋“œ๋Š” test() ํ•จ์ˆ˜ ๋‚ด๋ถ€์— auto(์ž๋™๋ณ€์ˆ˜) ์™€ static(์ •์ ๋ณ€์ˆ˜) ๋‘ ๊ฐœ๋ฅผ ์„ ์–ธํ•˜์—ฌ ๋น„๊ต๋ฅผ ํ•œ ๊ฒƒ์ด๋‹ค.
  • auto ๋Š” ์ƒ๋ช…์ฃผ๊ธฐ๊ฐ€ ํ•จ์ˆ˜๊ฐ€ ๋๋‚  ๋•Œ ์‚ฌ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋ณต์˜ ๊ฒฐ๊ณผ๋Š” ๋‹ค 0์ด ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค.
  • ๋ฐ˜๋ฉด static ์€ ํ•จ์ˆ˜ ๋‚ด์—์„œ ์„ ์–ธ์ด ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ ‘๊ทผ ๋ฒ”์œ„๋Š” ํ•ด๋‹น ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ๋งŒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ํ•˜์ง€๋งŒ, ์ƒ๋ช…์ฃผ๊ธฐ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ๋๋‚  ๋•Œ ๊นŒ์ง€ ์œ ํšจํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ œ๊ฑฐ๊ฐ€ ๋˜์ง€ ์•Š๊ณ  ์œ ์ง€๊ฐ€ ๋˜๊ฒŒ ๋œ๋‹ค.
  • ์ฆ‰, ๊ฒฐ๊ณผ๋Š” auto 0,0,0 static 0,1,2 ๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค.

(4) ์™ธ๋ถ€๋ณ€์ˆ˜

// file1.c
#include <stdio.h>
int count = 10;   // ์ „์—ญ ๋ณ€์ˆ˜ ์ •์˜ (์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ์ƒ์„ฑ)
void increase() {
    count++;
}

// file2.c
#include <stdio.h>
extern int count;   // ๋‹ค๋ฅธ ํŒŒ์ผ์˜ count๋ฅผ ์ฐธ์กฐ (์„ ์–ธ)
void increase();    // ๋‹ค๋ฅธ ํŒŒ์ผ์˜ ํ•จ์ˆ˜ ์›ํ˜• ์„ ์–ธ
int main() {
    printf("์ดˆ๊ธฐ count = %d\n", count); // 10 ์ถœ๋ ฅ
    increase(); // file1.c์— ์žˆ๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ → count ์ฆ๊ฐ€
    printf("์ฆ๊ฐ€ ํ›„ count = %d\n", count); // 11 ์ถœ๋ ฅ
    return 0;
}

// ์‹คํ–‰ ๊ฒฐ๊ณผ
// ์ดˆ๊ธฐ count = 10
// ์ฆ๊ฐ€ ํ›„ count = 11
  • ์˜ˆ์•ฝ์–ด 'extern' ์„ ์ง€์ •ํ•˜์—ฌ ์„ ์–ธํ•ด์„œ ์‚ฌ์šฉ์„ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ•จ์ˆ˜ ์™ธ๋ถ€์—์„œ ์ •์˜๋œ ๋ณ€์ˆ˜๋ผ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•จ.
  • ์‰ฝ๊ฒŒ๋งํ•ด, ์ „์—ญ๋ณ€์ˆ˜์™€ ์™ธ๋ถ€๋ณ€์ˆ˜๋Š” ๊ฑฐ์˜ ๋™์ผํ•œ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Œ.
  • ์ „์—ญ ๋ณ€์ˆ˜์—๋Š” extern ํ‚ค์›Œ๋“œ ๋˜ํ•œ, auto ์ง€์—ญ๋ณ€์ˆ˜์— ๋””ํดํŠธ๋กœ ๋„ฃ์–ด์ง„๊ฒƒ๊ณผ ๋™์ผํ•˜๊ฒŒ ์ž๋™์œผ๋กœ extern์ด ๋ถ™์Œ.
  • ์ฆ‰, ์ „์—ญ ๋ณ€์ˆ˜๋Š” ์ž๋™์œผ๋กœ extern์ด ๋ถ™๋Š”๋‹ค”๋Š” ๋ง์€ ๊ฐœ๋…์ ์œผ๋กœ๋Š” ๋งž์ง€๋งŒ, ์–ธ์–ด์ ์œผ๋กœ extern์ด ์ถ”๊ฐ€๋œ๋‹ค๋Š” ๋œป์€ ์•„๋‹ˆ๊ฒŒ ๋œ๋‹ค.
  • ์กด์†๊ธฐ๊ฐ„(์ƒ๋ช…์ฃผ๊ธฐ): static๊ณผ ๋™์ผํ•˜๊ฒŒ, ํ”„๋กœ๊ทธ๋žจ์„ ์‹œ์ž‘ํ•  ๋•Œ ์ƒ์„ฑ๋˜์–ด ํ”„๋กœ๊ทธ๋žจ์„ ๋งˆ์น  ๋•Œ๊นŒ์ง€ ์œ ์ง€๋จ.
  • ์œ ํšจ๋ฒ”์œ„: ํ”„๋กœ๊ทธ๋žจ ์ „์ฒด ๋ฒ”์œ„ ( static ์€ ์†Œ์† ํŒŒ์ผ ๋‚ด๋ถ€์—์„œ๋งŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•จ. )
  • ๋‹ค๋ฅธ ํŒŒ์ผ์— ์™ธ๋ถ€๋ณ€์ˆ˜๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ.
  • ์ดˆ๊ธฐ๊ฐ’์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์ž๋™์ ์œผ๋กœ 0์œผ๋กœ ์ดˆ๊ธฐํ™”๊ฐ€ ๋จ.

  • ์œ„์™€ ๊ฐ™์€ ๊ณผ์ •์„ ํ†ตํ•ด ์ปดํŒŒ์ผ์ด ์ง„ํ–‰ ๋˜๊ณ , ๋ง์ปค๊ฐ€ ๋งํ‚น์„ ํ•ด์ฃผ๊ฒŒ ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด file1, file2๊ฐ€ ํ•ฉ์ณ์ง€๊ฒŒ ๋จ.
void increase();    // ํ•จ์ˆ˜ ์›ํ˜• ์„ ์–ธ

 

  • file2 ์˜ ํ•จ์ˆ˜ ์›ํ˜•์„ ์„ ์–ธ ํ•ด๋†“์€ ๋ถ€๋ถ„์€ "์ด๋Ÿฐ ํ•จ์ˆ˜๊ฐ€ ์–ด๋”˜๊ฐ€ ์žˆ์„ ๊ฑฐ์•ผ" ๋ผ๊ณ  ์•ฝ์†๋งŒ ํ•˜๋Š” ์„ ์—„์ž„.
  • ์ฆ‰, ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์‹ค์ œ ํ•จ์ˆ˜ ์ •์˜๋ฅผ ๋ชฐ๋ผ๋„ ์ผ๋‹จ "์ด๋Ÿฐ ํ•จ์ˆ˜๊ฐ€ ์กด์žฌํ•œ๋‹ค"๊ณ  ๋ฏฟ๊ณ  ๊ธฐ๊ณ„์–ด๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ๋œ๋‹ค.
  • ๊ทธ๋ž˜์„œ ์ปดํŒŒ์ผ์€ ํ†ต๊ณผํ•˜๊ฒŒ ๋จ. ๊ทธ ํ›„, ๋ง์ปค๊ฐ€ ์‹คํ–‰๋  ๋•Œ file1.o ์•ˆ์—์„œ ์‹ค์ œ๋กœ ์ •์˜๋œ increase() ๋ฅผ ์ฐพ์•„ ์—ฐ๊ฒฐ(link) ํ•˜๊ฒŒ ๋จ.
  • ๊ทธ๋Ÿผ์—๋„, #include ๋ฅผ ํ†ตํ•ด ํ—ค๋”ํŒŒ์ผ์„ ์“ฐ๋Š” ์ด์œ ๋Š”, ํ—ค๋” ํŒŒ์ผ์— ์„ ์–ธ ๋œ ํ•จ์ˆ˜๋“ค์„ ์—ฌ๋Ÿฌ ์ปดํŒŒ์ผ ๋˜๋Š” ํŒŒ์ผ์—์„œ ํ—ค๋”๋งŒ ๋“ฑ๋กํ•จ์œผ๋กœ์จ ๋ชจ๋“  ์ปดํŒŒ์ผ ๋˜๋Š” ํŒŒ์ผ๋“ค์ด ์„ ์–ธ ์—†์ด ์ด์šฉ์ด ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ, ์œ ์ง€๋ณด์ˆ˜ ๋ฐ ํšจ์œจ์ด ์ฆ๊ฐ€ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž„.
  • #include ํ—ค๋” ํŒŒ์ผ์€ ๊ฒฐ๊ตญ, ์„ ์–ธ๋ฌธ๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค์˜ ์—ญํ• ์ž„. ์ฆ‰, ๊ตฌํ˜„์ฒด๋Š” ๊ฒฐ๊ตญ ๋งํฌ ๊ณผ์ •์„ ํ†ตํ•ด ์—ฐ๊ฒฐ์ด ๋จ.

  • ๋˜ํ•œ, ์œ„์™€ ๊ฐ™์ด extern ํ‚ค์›Œ๋“œ๋ฅผ main() ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉ ์ฆ‰, ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉ์„ ํ•  ์ˆ˜ ์žˆ์Œ.
  • ์œ„์˜ extern int i; ๋Š” ๊ตณ์ด extern ์ด ์—†์ด๋„ ์ „์—ญ๋ณ€์ˆ˜๋กœ ๋งŒ๋“ค์–ด์ง„ i ๋ฅผ ์œ„์— ์„ ์–ธ๊ณผ ์ดˆ๊ธฐํ™”๊ฐ€ ๋˜์–ด์žˆ๊ธฐ์— ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•จ.
  • ํ•˜์ง€๋งŒ, ์•„๋ž˜์˜ extern int k; ๋Š” extern ์ด ์—†๋Š” ๊ฒฝ์šฐ ์˜ค๋ฅ˜๊ฐ€ ๋‚จ.

(5) ๋ ˆ์ง€์Šคํ„ฐ ๋ณ€์ˆ˜

  • ์˜ˆ์•ฝ์–ด 'register' ๋ฅผ ์ง€์ •ํ•˜์—ฌ ์„ ์–ธ ํ•  ์ˆ˜ ์žˆ์Œ.
  • CPU์˜ ๋ ˆ์ง€์Šคํ„ฐ์— ์ž๋ฃŒ๋ฅผ ์ €์žฅํ•  ๊ฒƒ์„ ์š”์ฒญํ•จ
  • ๋งค์šฐ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ณ€์ˆ˜์— ์ง€์ •ํ•˜์—ฌ ์‹คํ–‰ ์†๋„๋ฅผ ๋†’์ด๋ ค๋Š” ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ์ด ๋จ.
  • ์˜ˆ์‹œ๋กœ๋Š” ๋ฐ˜๋ณต๋ฌธ์˜ ์นด์šดํ„ฐ ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ์Œ.
  • ์กด์†๊ธฐ๊ฐ„ ๋ฐ ์œ ํšจ๋ฒ”์œ„, ์ดˆ๊ธฐ๊ฐ’: ์ž๋™๋ณ€์ˆ˜์™€ ๋™์ผํ•จ

'๐Ÿ› ๏ธBackend > โš™๏ธC' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[C์–ธ์–ด] ๋ฐฐ์—ด๊ณผ ํฌ์ธํ„ฐ(2)  (0) 2025.10.17
[C์–ธ์–ด] ๋ฐฐ์—ด๊ณผ ํฌ์ธํ„ฐ(1)  (0) 2025.10.16
[C์–ธ์–ด] ํ•จ์ˆ˜์™€ ๊ธฐ์–ต ํด๋ž˜์Šค(1)  (0) 2025.10.15
[C์–ธ์–ด] ์„ ํƒ ์ œ์–ด๋ฌธ๊ณผ ๋ฐ˜๋ณต ์ œ์–ด๋ฌธ  (0) 2025.10.13
[C์–ธ์–ด] ์ž…์ถœ๋ ฅ ํ•จ์ˆ˜์™€ ์—ฐ์‚ฐ์ž(2)  (0) 2025.10.03
'๐Ÿ› ๏ธBackend/โš™๏ธC' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [C์–ธ์–ด] ๋ฐฐ์—ด๊ณผ ํฌ์ธํ„ฐ(2)
  • [C์–ธ์–ด] ๋ฐฐ์—ด๊ณผ ํฌ์ธํ„ฐ(1)
  • [C์–ธ์–ด] ํ•จ์ˆ˜์™€ ๊ธฐ์–ต ํด๋ž˜์Šค(1)
  • [C์–ธ์–ด] ์„ ํƒ ์ œ์–ด๋ฌธ๊ณผ ๋ฐ˜๋ณต ์ œ์–ด๋ฌธ
junbin2
junbin2
java.lang.NullPointerException
  • junbin2
    bin's Development Diary
    junbin2
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ์ „์ฒด๋ณด๊ธฐ (195) N
      • ๐ŸŽ“๋ฐฉ์†กํ†ต์‹ ๋Œ€ํ•™๊ต (51) N
        • โš™๏ธ์ปดํ“จํ„ฐ์˜ ์ดํ•ด (11)
        • ๐Ÿ’ป์ปดํ“จํ„ฐ๊ณผํ•™ ๊ฐœ๋ก  (15)
        • ๐Ÿ”ข์ž๋ฃŒ๊ตฌ์กฐ (13) N
        • ๐ŸŒ์œ ๋น„์ฟผํ„ฐ์Šค ์ปดํ“จํŒ… (11)
        • ๐Ÿ–ฅ๏ธ์ปดํ“จํ„ฐ๊ณผํ•™๊ณผ (1)
      • ๐Ÿ› ๏ธBackend (68)
        • ๐Ÿ“š๋ฐฑ์—”๋“œ ๊ณต๋ถ€ (4)
        • โ˜•Java (23)
        • ๐ŸŒณSpring (13)
        • โš™๏ธC (12)
        • โšกPython (13)
        • JavaScript (1)
        • ๐Ÿ›ข๏ธDatabase (0)
        • Algorithm Problem Solving (2)
      • ๐ŸŒ Network (7)
        • ๐Ÿ“œHTTP (7)
      • ๐Ÿš€DevOps (1)
      • โ›บ์ŠคํŒŒ๋ฅดํƒ€์ฝ”๋”ฉํด๋Ÿฝ (64)
      • ์ •๋ณด (2)
      • ์ •๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๊ธ€ (2)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

    • GitHub
  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ์ปดํŒŒ์ผ๋Ÿฌ
    ๋ฐฐ์—ด
    spring
    ์œ ๋น„์ฟผํ„ฐ์Šค ์ปดํ“จํŒ…๊ฐœ๋ก 
    C์–ธ์–ด
    Python
    ์ž…์ถœ๋ ฅ
    ์ž๋ฐ”
    ํ•จ์ˆ˜
    ์œ ๋น„์ฟผํ„ฐ์Šค
    ๋ฐฉํ†ต๋Œ€
    ์ž๋ฃŒ๊ตฌ์กฐ
    C
    C ์–ธ์–ด
    Java
    ๋ฐฉ์†กํ†ต์‹ ๋Œ€ํ•™๊ต
    ์ปดํ“จํ„ฐ์˜ ์ดํ•ด
    ์ปดํ“จํ„ฐ๊ณผํ•™ ๊ฐœ๋ก 
    ํŒŒ์ด์ฌ
    ๋ฐฉ์†ก๋Œ€
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.1
junbin2
[C์–ธ์–ด] ํ•จ์ˆ˜์™€ ๊ธฐ์–ต ํด๋ž˜์Šค(2)
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”