-
[C Language] 25. 함수 - 리턴 값 여러 개 받기 - C 언어CSE/C Language 2015. 6. 13. 10:22
1. 전역변수를 이용한 리턴 값 받기
가장 간단하지만 가장 위험한 전역변수를 이용한 리턴 값 받기를 살펴보자.
1234567891011121314151617181920212223242526272829303132333435/** global.c** Created on: 2015. 5. 17.* Author: root*/#include <stdio.h>int add, subtract, multiply, divide;void calculate(int, int);int main(void) {int x = 7, y = 5;calculate(x, y);printf("%d + %d = %d\n", x, y, add);printf("%d - %d = %d\n", x, y, subtract);printf("%d * %d = %d\n", x, y, multiply);printf("%d / %d = %d\n", x, y, divide);return 0;}void calculate(int x, int y) {add = x + y;subtract = x - y;multiply = x * y;divide = x / y;}cs 위 프로그램은 간단해 보여서 좋아보이지만, 최악의 프로그램이다. 이런 프로그래밍은 자제하자.
2. 포인터를 이용한 리턴 값 받기
포인터를 이용한 방법은 전역변수에 비해 까다롭지만 가장 많이 이용되는 방식이다.
아래 예제를 통해 살펴보자.
123456789101112131415161718192021222324252627282930313233343536/** pointerreturn.c** Created on: 2015. 5. 17.* Author: root*/#include <stdio.h>void calculate(int, int, int *, int *, int *, int *);int main(void) {int x = 7, y = 5;int add, sub, mul, div;calculate(x, y, &add, &sub, &mul, &div);printf("%d + %d = %d\n", x, y, add);printf("%d - %d = %d\n", x, y, sub);printf("%d * %d = %d\n", x, y, mul);printf("%d / %d = %d\n", x, y, div);return 0;}void calculate(int x, int y, int *add, int *sub, int *mul, int *div) {*add = x + y;*sub = x - y;*mul = x * y;*div = x / y;}cs 3. 구조체를 이용한 리턴 값 받기
구조체를 이용한 방법은 기본적으로 복사가 이루어지기 때문에 많이 사용되지는 않지만 여러모로 유용하므로 알아두자.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647/** structReturn.c** Created on: 2015. 5. 17.* Author: root*/#include <stdio.h>struct calc_t {int add;int sub;int mul;int div;};struct calc_t calculate (int, int);int main(void) {struct calc_t value;int x = 7, y = 5;value = calculate(x, y);printf("%d + %d = %d\n", x, y, value.add);printf("%d - %d = %d\n", x, y, value.sub);printf("%d * %d = %d\n", x, y, value.mul);printf("%d / %d = %d\n", x, y, value.div);return 0;}struct calc_t calculate (int x, int y) {struct calc_t tmp;tmp.add = x + y;tmp.sub = x - y;tmp.mul = x * y;tmp.div = x / y;return tmp;}cs 4. 구조체 포인터를 이용한 리턴 값 받기
123456789101112131415161718192021222324252627282930313233343536373839/** structPointer.c** Created on: 2015. 5. 17.* Author: root*/#include <stdio.h>struct calc_t {int add;int sub;int mul;int div;};void calculate(int, int, struct calc_t *);int main(void) {int x = 7, y = 5;struct calc_t tmp;calculate(x, y, &tmp);printf("%d + %d = %d\n", x, y, tmp.add);printf("%d - %d = %d\n", x, y, tmp.sub);printf("%d * %d = %d\n", x, y, tmp.mul);printf("%d / %d = %d\n", x, y, tmp.div);return 0;}void calculate(int x, int y, struct calc_t * tmp) {tmp->add = x + y;tmp->sub = x - y;tmp->mul = x * y;tmp->div = x / y;}cs * Programming in C 서적을 참고하여 작성하였습니다
'CSE > C Language' 카테고리의 다른 글
[C Language] 28. 배열 개요 - C 언어 (0) 2015.07.16 [C Language] 27. 시간함수 - C 언어 (0) 2015.07.16 [C Language] 26. 함수 - 재귀함수(Recursive) - C 언어 (0) 2015.06.13 [C Language] 24. 함수 - 참조에 의한 호출(Call By Reference) - C 언어 (0) 2015.06.13 [C Language] 23. 함수 - 값에 의한 호출(Call By Value) - C 언어 (0) 2015.06.13 [C Language] 22. 함수(function)의 기본 - C 언어 (0) 2015.06.13