20140321 (함수, 지역변수)
25일차
--------------------
Function ( 함 수 )
--------------------
- 어제 보았듯이 어떤 기능을 하는 역할.
- int Add(); 이런 형태는 함수의 원형( prototype, interface ) 라고 한다.
- int Add() { A } 이런 형태는 함수의 정의이다.
뭐 설명은 어려운데 예제를 보면 쉽다.
예제를 보자.
#include <stdio.h>
int Add(int iNum1, int iNum2); // 함수 선언, 원형
/*
int Add(int iNum1, int iNum2) // 이렇게 main 위에 와도 괜찮다.
{ // 선언, 정의? 다 같이 한다?
int iResult = iNum1 + iNum2;
return iResult;
}
*/
int main()
{
int iNum;
iNum = Add(10, 20);
printf("%d \n", iNum);
return 0;
}
int Add(int iNum1, int iNum2) // 함수 정의
{
int iResult = iNum1 + iNum2;
return iResult;
}
프로그램 진행 순서가
이렇게 흘러간다.
10, 20 이란 인수를 받아서 Add 함수에서 그 값만 받는다.
받은 값을 iResult에 넣어서 반환한다.
위에서 본 바와 같이
어떤 일정한 반복된 코드나,
역할을 나눌때
함수를 만들어 사용한다.
여기서 잠깐,
printf, scanf 등등 가져다 쓰는 함수들을 모아서
라이브러리 라고 부르고 컴파일 과정 중 링크때 연결된다.
우리가 만든 함수는 전처리 과정 중에 불러온다.
-------------
지역변수
-------------
- { 에서 } 까지가 지역변수의 수명.
ex) 예제 소스
#include <stdio.h>
main()
{
int iNum; // main 의 지역변수 iNum
iNum = 0;
if(0 == iNum)
{
int iNum = 1; // if 의 지역변수 iNum
} // if 의 지역변수 iNum 소멸
printf("iNum : %d \n", iNum); // main 의 지역변수 iNum
while(2 > iNum) // main 의 지역변수 iNum
{
int iTemp = 0; // while 의 지역변수 iTemp 생성
// while문이 반복할 때마다 iTemp 생성, 소멸 반복
++iTemp;
++iNum;
printf("iTemp : %d \n", iTemp);
printf("iNum : %d \n", iNum);
} // while문 지역이 끝나면서 iTemp도 소멸
{
int iNum = 0; // 이름없는 지역의 지역변수 iNum
iNum = 1000;
} // 지역이 끝나면서 iNum도 소멸
printf("iNum : %d \n", iNum); // main 의 지역변수 iNum
return 0;
}
출력 화면
위에서 보았듯이 지역변수끼리 이름만 같았지
서로 다른 주소를 사용하기 때문에 서로 영향을 끼칠 수 없다.
변수 이름이 같을 경우
더 작은 지역의 변수의 이름을 사용하고
없을 경우 한층 위 지역의 변수를 사용한다.