Local, Global Variables

Local Variables

  • ํ•จ์ˆ˜ ์•ˆ์—์„œ๋งŒ ๋™์ž‘ํ•˜๊ณ  ํ•จ์ˆ˜๊ฐ€ ๋๋‚˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์‚ญ์ œ๋œ๋‹ค.
  • mainย ํ•จ์ˆ˜์•ˆ์—์„œ ๊ณ„์† ์‚ด์•„์žˆ๋Š” ๋…€์„์ด ์•„๋‹ˆ๋‹ค!
  • mainย ํ•จ์ˆ˜๋„ย ํ•จ์ˆ˜ย ์ด๊ธฐ ๋•Œ๋ฌธ์—ย mainย ํ•จ์ˆ˜ ์ข…๋ฃŒํ›„ย mainย ํ•จ์ˆ˜ ์•ˆ์—์„œ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ์‚ฌ๋ผ์ง„๋‹ค.

Global Variables

  • ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „์— ์„ ์–ธ๋˜๋Š” ๋ณ€์ˆ˜
  • ํ”„๋กœ๊ทธ๋žจ์˜ ์ฃผ๊ฐ€ ๋˜๋Š”ย mainย ํ•จ์ˆ˜๊ฐ€ ๋๋‚˜๊ธฐ ์ „๊นŒ์ง€ ํ•ญ์ƒ ์‚ด์•„์žˆ๋Š” ๋ณ€์ˆ˜์ด๋‹ค.

Example #1

#include <iostream>
 
using namespace std;
int x = 10;				// ์ „์—ญ๋ณ€์ˆ˜
 
int makeDouble(int param){		// 4
    int x;				// 5 	makeDouble ํ•จ์ˆ˜ ์•ˆ์˜ ์ง€์—ญ๋ณ€์ˆ˜
    cout << "02: " << x << '\n';	// 6
    
    x = param;				// 7
    cout << "03: " << x << '\n';	// 8
    return param * 2;			// 9
}					// 10
 
int main(){				// 1	
    cout << "01: " << x << '\n';	// 2
    
    x = makeDouble( x );		// 3 // 11
    cout << "04: " << x << '\n';	// 12
    return 0;				// 13
}
์ถœ๋ ฅ
// [Output]
// 01: 10
// 02: -1031346592 (Garbage)
// 03: 10
// 04: 20

ํ•จ์ˆ˜์•ˆ์— ์ ์–ด๋‘” ์ˆซ์ž ์ˆœ์„œ๋Œ€๋กœ ์ž‘๋™ํ•œ๋‹ค. ์‹คํ–‰์ ˆ์ฐจ๋ฅผ ์ ์–ด๋ณด์ž.

์—ฌ๊ธฐ์„œ ์ฃผ์˜๊นŠ๊ฒŒ ๋ด์•ผํ•˜๋Š” ๊ฒƒ์€ ๊ฐ’์„ ๊ฐ™๋‹ค๊ณ  ๋†จ์„ ๋•Œ,ย ๋ณต์‚ฌย ํ•œ๋‹ค๋Š” ์ . ๊ทธ๋ฆฌ๊ณ ย ์ „์—ญ ๋ณ€์ˆ˜, ์ง€์—ญ ๋ณ€์ˆ˜ย ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋Œ์•„๊ฐ€๋Š”์ง€์— ๋Œ€ํ•œย ๊ตฌ์กฐย ์ด๋‹ค.

  1. mainย ํ•จ์ˆ˜ ์•ˆ์œผ๋กœ ๋“ค์–ด๊ฐ„๋‹ค.
  2. ์ „์—ญ๋ณ€์ˆ˜ย xย ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
    • 01: 10
  3. ์ „์—ญ ๋ณ€์ˆ˜ย x์˜ 10์„ย makeDoubleย ํ•จ์ˆ˜๋กœ ๋ณต์‚ฌํ•œ๋‹ค.
  4. ๊ทธ ๊ฐ’์„ย makeDoubleย ํ•จ์ˆ˜์˜ย paramย ์œผ๋กœ ๋ณต์‚ฌํ•œ๋‹ค.
  5. makeDoubleย ํ•จ์ˆ˜์˜ ์ง€์—ญ ๋ณ€์ˆ˜ย xย ๋ฅผ ๋งŒ๋“ ๋‹ค. ๊ฐ’์€ ์ €์žฅ๋˜์ง€ ์•Š์•˜๋‹ค.
  6. ์ด ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค. ๊ฐ’์„ ํ• ๋‹นํ•˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ์“ฐ๋ ˆ๊ธฐ๊ฐ’์ด ์ถœ๋ ฅ๋œ๋‹ค.
    • 02: -1031346592 (Garbage)
  7. makeDoubleย ํ•จ์ˆ˜์˜ย xย ์— ๋„˜์–ด์˜จย paramย ๊ฐ’์„ ๋ณต์‚ฌํ•œ๋‹ค.
  8. ๋ณต์‚ฌ๋œย xย ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
    • 03: 10
  9. param * 2ย ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.ย paramย ์€ย makeDoubleย ํ•จ์ˆ˜๊ฐ€ ์•„์ง ๋๋‚˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ์‚ด์•„์žˆ๋‹ค.
  10. ํ•จ์ˆ˜๊ฐ€ ์ข…๋ฃŒ๋˜๊ณ ,ย makeDoubleย ์˜ย xย ,ย paramย ์€ ์‚ฌ๋ผ์ง€๊ณ ย param * 2ย ๋งŒ ์ž„์‹œ ์ €์žฅ์†Œ์— ์ €์žฅ๋œ๋‹ค.
  11. ๋ฐ˜ํ™˜๋œย param * 2ย ์„ย mainย ํ•จ์ˆ˜ย xย ์— ๋„ฃ๋Š”๋‹ค.ย param * 2ย ์€ ์‚ฌ๋ผ์ง„๋‹ค.
  12. mainย ํ•จ์ˆ˜์˜ย xย ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
    • 04: 20
  13. mainย ํ•จ์ˆ˜๊ฐ€ ๋๋‚˜๊ณ  0 ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  14. ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋œ๋‹ค.

Example #2

์œ„์˜ ์˜ˆ์ œ๋ฅผ ์ดํ•ดํ–ˆ๋‹ค๋ฉด, ์•„๋ž˜ ์ฝ”๋“œ์˜ ๊ฒฐ๊ณผ๊ฐ’๋„ ์ดํ•ด๋  ๊ฒƒ์ด๋‹ค.

#include <iostream>
 
void increment(int x){
    std::cout << "ํ•จ์ˆ˜ ์ฆ๊ฐ€์ „, x = " << x << '\n';
    x++;
    std::cout << "ํ•จ์ˆ˜ ์ฆ๊ฐ€ํ›„, x = " << x << '\n';
}
 
int main(){
    int x = 5;
    std::cout << "์ฆ๊ฐ€์ „, x = " << x << '\n';
    increment(x);
    std::cout << "์ฆ๊ฐ€ํ›„, x = " << x << '\n';
}
์ถœ๋ ฅ
// ์ฆ๊ฐ€์ „, x = 5
// ํ•จ์ˆ˜ ์ฆ๊ฐ€์ „, x = 5
// ํ•จ์ˆ˜ ์ฆ๊ฐ€ํ›„, x = 6
// ์ฆ๊ฐ€ํ›„, x = 5

incrementย ํ•จ์ˆ˜ ํ†ต๊ณผํ›„ ์‚ฌ์šฉ๋˜์—ˆ๋˜ ์ง€์—ญ๋ณ€์ˆ˜๋Š” ๋ชจ๋‘ ์‚ฌ๋ผ์กŒ๊ธฐ์—, mainย ํ•จ์ˆ˜์—์„œ์˜ย xย ๋Š” ๊ทธ๋Œ€๋กœ 5 ์ด๋‹ค.

๋งŒ์•ฝย mainย ํ•จ์ˆ˜์—์„œย xย ๊ฐ’์„ ๋ณ€ํ™”์‹œํ‚ค๊ณ  ์‹ถ๋‹ค๋ฉด, incrementย ํ•จ์ˆ˜์—์„œ ๋ฐ˜ํ™˜๊ฐ’์„ ๋งŒ๋“ค์–ดย xย ์— ๋Œ€์ž…ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ผ์–ด์•ผ ํ–ˆ๋‹ค.