함수의 정의


반환값의_자료형 함수의 이름 ( 매개변수 ) 


1. 전달인자가 있고 , 반환값이 있는경우


int Add ( int a , int b)

{

return a+b;

}


2. 전달인자가 있고 , 반환값이 없는경우


void ShowAddResult(int a)

{

printf(" 값 : %d\n",a);

}


3. 전달인자가 없고 , 반환값이 있는경우


int GetNum( void )

{

int num;

scanf("%d",&num);

return num;

}


4. 전달인자가 없고 , 반환값이 없는경우


void InitProgram( void )

{

printf(" 프로그램 시작\n " );

// void 여도 return; 이런식으로 return 의 두가지기능중 하나인 함수 종료기능을 사용하여 함수를 종료시킬 수 있다

}


함수의 선언


함수는 main 함수에서 컴파일되기전에 컴파일된 상태여야한다. 따라서 main 함수 위에 선언되어야 하는데, 함수의 정의 내용이 클때는 함수의 선언만 앞에서 하고 뒤로 정의를 뺄 수 있다.


ex)

int Add(int , int ); // 함수를 선언만 할 때에는 매개변수의 자료형만 써도된다.


int main ( void )

{

//

}

int Add ( int a , int b)

{

return a+b;

}


지역변수


지역변수는 중괄호 내에 선언되는 모든 변수를 말하며 , 이 변수들은 중괄호를 벗어나게되면 자동으로 소멸되게된다.

지역변수는 스택(stack) 이라는 메모리 영역에 할당된다.

지역변수는 반복문이나 조건문에도 선언이 가능하다.

지역변수는 변수의 이름이 같을때 가장 나중에 컴파일된 변수가 앞에컴파일된 변수를 가린다.


전역변수 


전역변수는 중괄호 내에 선언되지않는다.

전역변수는 프로그램의 시작과 동시에 메모리 공간에 할당되어 종료시까지 존재한다

전역변수는 별도의 값으로 초기화하지 않으면 0 으로 초기화된다.

전역변수는 프로그램 전체 영역 어디서든 접근이 가능하다.

전역변수와 동일한 이름의 지역변수가 선언되면 지역변수가 전역변수를 가린다.

전역변수는 프로그램의 구조를 복잡하게만들기때문에 가급적 사용을 자제해야한다.


static변수


지역변수에 static 선언을 하게되면 , 전역변수의 성격을 지니는 변수가된다.

1. 선언된 함수 내애서만 접근이 가능하다( 지역변수 특성 )

2.딱1회 초기화되고, 프로그램 종료시까지 메모리 공간에 존재한다 ( 전역변수 특성 )

static 지역변수는 프로그램 종료시까지 사라지지않지만, 접근범위를 선언된 함수 내로 제한하기때문에 전역변수를 사용하는것보다 안정적이다.


register 변수


register 로 지역변수를 선언하면 CPU내의 레지스터라는 메모리공간에 저장될 확률이 높아진다.

레지스터는 CPU내에 존재하는 아주 크기가 작은 메모리이다. 하지만 연산속도가 매우 빠르다 . 따라서 연산을 자주필요로하는 변수는 register 변수를 이용해 빠른 연산을 기대할 수 있다. ( 하지만 변수를 레지스터에 저장하기로 결정하는것은 컴파일러기때문에 반드시 레지스터에 저장된다고는 할 수 없다.  register 선언을 하지 않아도 컴파일러가 그래야겠다고 결정하면 레지스터에 저장된다 )


재귀함수


재귀함수란 함수 내에서 자기자신을 다시 호출하는 함수이다.


ex) 


int Factorial( int n)

{

if(n<2)

return 1;

else

return n*Factorial(n-1);

}


하나의 함수는 하나의 기능을 지녀야한다

 

'C언어 > 열혈C' 카테고리의 다른 글

C : Chapter-10 포인터  (0) 2018.03.22
C : Chapter-9 배열  (0) 2018.03.22
C : Chapter -7 조건문  (0) 2018.03.19
C : Chapter -6 반복문  (0) 2018.03.19
C : Chapter -5 상수와 기본자료형  (0) 2018.03.17

+ Recent posts