1694876
147
433
관리자새글쓰기
태그위치로그방명록
별일없다의 생각
dawnsea's me2day/2010
색상(RGB)코드 추출기(Color...
Connection Generator/2010
최승호PD, '4대강 거짓말 검...
Green Monkey**/2010
Syng의 생각
syng's me2DAY/2010
천재 작곡가 윤일상이 기획,...
엘븐킹's Digital Factory/2010
C언어에서 함수 Overloading
리눅스/리눅스 프로그래밍 | 2010/08/27 14:39

가변인자를 넘겨받아 다시 가변인자를 넘겨받는 함수로 포워딩 시킬수 있는 문제에 대해 여전히 고민중에 있던 도중, 해당 소스를 전부 C++로 포팅을 해볼까 하는 고민이 있었지만, C언어의 함수 선언 형태와 C++의 함수 선언형태의 많은 차이점(?)으로 인해 포팅을 보류하고 있는중이다. 양이 많기도 하고... --;;

C언어 가변인자의 처리 방법 : http://dolba.net/tt/k2club/entry/Variable-Argument-And-Printf-Wrapping-Function

C 프로그래밍(C가 아닌 다른 프로그램에서도 유효한 이야기임)을 하다보면, 하나의 함수에서 인자의 갯수만 각각 다른 형태의 함수를 필요로 하는 경우가 있다.

이런 경우 함수의 파라미터만 달리해서 해당 함수를 구현하는데, 이를 Function Overloading Overriding이라고 한다.

아래와 같은 형태를 원했지만, C언어에서 아래와 같은 형태는 구현이 안되는것 같다. (방법이 있다면 제보를 ㅠㅠ)
자료를 찾아본 결과 아래의 형태는 가변인자를 이용하여 구현한 방법이라고 한다.


#include <unistd.h>
#include <fcntl.h>

int fcntl(int fd, int cmd);
int fcntl(int fd, int cmd, long arg);
int fcntl(int fd, int cmd, struct flock *lock);



아무튼 비슷하게나마 Overloading Overriding 비슷하게 구현하고자 한다면, 다음과 같이 구현할 수 있다. 썩 마음에는 안들지만 말이다. 그리고 C++과 호환이 되지도않는다.

#include <stdio.h>

void func(); <- ※ 함수 파라미터를 명시하지 않았다.

int main(void)
{
  func(1);
  func(17, 5);

  return 0;
}

void func(int a, int b)
{
  if(a == 1)
    puts("하나의 파라미터만 넘겨받았음.");
  else
    printf("두개의 파라미터의 합은 : a = %d, b = %d\n", a, b);
}

함수 오버라이딩을 설명하기 위한 예이므로 func라는 함수는 인자를 두개까지 받아서 처리할 수 있도록 구성하여 보았다.

최대 2개의 파라미터를 넘겨받아 처리할 수 있는 이 함수는 첫번째 인자가 1인 경우 지정한 문자를 출력하고, 그렇지 않은경우 넘겨받은 2개의 파라미터의 함을 출력해주고 있다.


겐도 님께서 제가 오버라이딩이라고 본문에서 잘못 설명하였던 내용을 지적해주셔서 수정합니다.
    오버라이딩은 상속의 개념인데, 잠시 제가 늦더위를 먹은것 같습니다. -_-;
2010/08/27 14:39 2010/08/27 14:39
Article tag list Go to top
View Comment 3
Trackback URL :: 이 글에는 트랙백을 보낼 수 없습니다
From. 구차니 2010/08/27 00:05
답글달기삭제
그러고 보니 가변인자도 한번 구현을 안해봤네요 ㅠ.ㅠ
음.. 아무튼 이런 면에서는 확실히 C++과 C가 차이가 생기는것 같아요.
타입체크라던가 변수 갯수 확인한다던가 이런류의 컴파일러나 실행환경적 차이가 말이죠..
From. 겐도 2010/08/27 14:23
답글달기삭제
overloading 아닌가요?

http://en.wikipedia.org/wiki/Function_overloading

폴리모피즘 지원하는 언어에서 사용하는...
From. 그리움 2010/08/27 14:36
삭제
-_-; 감사합니다.
오버로딩과 오버라이딩을 가끔 헷갈려 하는... -_-;;;;

복받으실거예요. ㅎ
PREV : [1] : NEXT
 
 
 
 
: [1] ... [506][507][508][509][510][511][512][513][514] ... [1180] :
«   2017/07   »
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          
전체 (1180)
출판 준비 (0)
My-Program (41)
여행 (16)
사는 이야기 (759)
블로그 이야기 (25)
My Library (32)
게임 이야기 (23)
개발관련 Tool Ma... (3)
Smart Phone (1)
C Builder (0)
Object C++ (0)
VC, MFC, C++ (9)
Windows API (1)
Open API (3)
Visual Basic (0)
Java, JSP (2)
ASP.NET (0)
PHP (4)
리눅스 (28)
Windows (26)
Device Driver (DDK) (1)
Embedded (1)
게임 프로그래밍 (0)
Web Server (2)
Web, Script (19)
잡다한 지식 (4)
프로젝트 (0)
대통령 노무현 (9)
Link (2)
Delphi (96)
Reference (1)
OpenSource (5)
Apache (2)
Database (20)
프로그램 (0)
2017/07(20)
2017/06(28)
2017/05(31)
2017/04(21)
2017/03(23)