2011-10-20 5 views
6

가능한 중복 :
function overloading in CANSI C와 기능 과부하

ANSI C (나는 C99 확실하지 않습니다) 함수 오버로드를 허용하지 않습니다. 예

:

char max(char x, char y); 
short max(short x, short y); 
int max(int x, int y); 
float max(float x, float y); 

유효한 ANSI C의 소스 코드 아니다.

ANSI C의 함수 오버로딩 문제에 어떤 기술 (또는 아이디어)을 사용해야합니까?

:

는 대답이 기능을 이름을 변경하지만, 어떤 패턴은 이름 변경을 위해 사용되어야한다, 그 함수 이름은 '좋은 함수 이름' 남아? 예를 들어

:

char max1(char x, char y); 
short max2(short x, short y); 
int max3(int x, int y); 
float max4(float x, float y); 

좋은 이름에 대한 max 기능 이름이 아닙니다. 데이터 유형을 사용

+1

아마도 '최대'매크로를 정의 할 수 있습니까? ;-) –

+0

@DidierTrosset : 최대 값은보기에 지나지 않지만 이미지는 매우 복잡한 함수입니다. –

+2

함수 오버로딩이 중요하다면 아마도 C 대신 C++을 사용할 것을 고려해야 할 것입니다. –

답변

11

예시 예

char max_char(char x, char y); 
short max_short(short x, short y); 
int max_int(int x, int y); 
float max_float(float x, float y); 
+1

이것은 표준 라이브러리가하는 것입니다. 예를 들어'atoi()','atol()','atof()'및'atod()'가 있습니다. – caf

0

위한 함수 이름을 평가하기 위해, 적절한 용액 매크로를 사용한다. 가능한 가장 큰 정수 또는 부동 소수점 유형을 취하는 인라인 함수를 사용하고 인수가 더 작을 때 컴파일러가이를 최적화하도록 할 수도 있습니다. 서명과 관련하여 고려해야 할 몇 가지 모서리 사례가 있습니다. 그러나 어쨌든 그러한 경우가 발생합니다.