본문 바로가기
프로그래밍/C

6. C언어 (사용자 정의 함수)

by Choraengyi 2017. 1. 19.
728x90

  C언어 사용자 정의 함수를 알아보겠습니다.


C언어에서는 미리 정의되어 있는 함수 말고도(printf, scanf etc..) 사용자가 직접 함수를 정의하여 사용할 수가 있습니다.


 사용방법은 

함수타입 함수이름(인자들)


과 같이 하면되는데 예를 들어서 하면 더 편합니다.



위의 코드는 두 수를 입력받아 평범한 사칙연산을 수행하여 값을 출력하는 코드입니다. 이 사칙연산을 각 함수를 선언하여 코딩을 다시 해보겠습니다.



 4가지 함수를 각 선언하여 보았습니다. 2번라인을 예를 들면, 


int plus(int x, int y);

반환타입 함수이름(인자);


반환타입은 이 함수를 수행하고 나서 반환할 값의 타입을 지정해 주는 것입니다. 함수 이름은 말 그대로 정의하는 함수의 이름이 되고, 인자 부분에는 함수가 입력 받는 인자값이 오게 되는데, 인자를 굳이 안넣어줘도 됩니다. 그러나 위의 경우 두 값을 넣어주어서 계산결과를 출력하고자 하기 때문에 인자가 필요하게 됩니다. 인자의 타입을 입력 후 변수이름을 넣어주게 되는데 변수이름 같은경우 해당함수 안에서만 쓰이기 때문에, 중복해서 사용하여도 되고, 함수내에 변수를 선언하더라도, 함수내에서만 사용되기 때문에 다른함수에 같은 이름을 써주어도 무방하게 됩니다. 



또한 선언만 안하더라도 선언과 함수내용을 동시에 쓸 수 있습니다. 다만, 호출부분의 위에 써주어야 합니다.



해당 코드의 경우 main() 의 밑에 함수를 선언 및 할당하게 되면, 실행오류가 나게 됩니다.


또한, 위의 함수 선언 및 할당 부분을 보게 되면, return 반환값 이 각 함수에 할당되어 있는데,


sub()를 제외한 나머지처럼 바로 연산을 넣어주어도 되고, 연산결과를 할당한 값을 넣어주어도 됩니다. 


하지만 return 값을 잘설정해주어야 하는게, return 값을 잘못설정하게 되면 멀쩡한 기능을 하는 함수라 하더라도, 원치않는 값이 출력되게 됩니다.


sub()의 return 값을 바꾸어서 실행해 보겠습니다.


int sub(int x, int y){

int a;

a=x-y;

return 100;

}


실행결과 입니다.



그림과 같이 return 값을 반환하게 되어 a-b는 그냥 100이 출력되게 됩니다. 또한 return 값과 함수의 타입도 맞아야 합니다.


 덫붙여서 main() 함수에서 return 값을 쓰는 경우가 있는데, main() 은 다른 함수와는 다르게 반환값을 OS로 보내어 실행하는 것이기 때문에 return 값이 중요합니다.


main() 에서 쓰는 return 0; 는 정상 실행이라는 뜻으로 쓰이게 되고, 0을 제외한 나머지 값은 각 에러코드의 값이 되게 됩니다. 물론 Dev C++ 환경에서는 그냥 실행되지만 bat(배치파일) 로 실행하게 되면 실행오류를 확인할 수가 있습니다.


또한 void 를 함수 이름앞에 써서 선언하는 경우가 있는데, 


void main()


으로 쓰게 되면 반환값이 없다는 뜻 입니다. 이는 반환값을 넣어주게 되면 오류가 발생한다는 것입니다.


 사용자 정의 함수에 대해서 알아보았는데, 사용자 정의 함수를 적절히 활용하게 되면, 불필요한 CPU, MEM 의 자원을 줄일 수 있고, 설계 방식에 따라 다르겠지만 사용효율을 높여주게 됩니다. 함수를 적절히 활용함에 따라 불필요한 변수 선언을 줄이고, 가독성을 높여주게 됩니다.



728x90
반응형

'프로그래밍 > C' 카테고리의 다른 글

7. C언어(배열_1)  (0) 2017.01.26
5. C언어 (데이터)  (0) 2017.01.14
4. C언어 (문자/문자열 입출력)  (0) 2017.01.13
3. C언어 (상수)  (0) 2017.01.11
2. C언어 (변수)  (0) 2017.01.10

댓글