2012-02-04 4 views
2

나는 인자의 다른 유형을 2 개 initialiser 기능을 가진 구조체를 가지고있다. C는 서로 다른 매개 변수를 취하는 동일한 이름의 함수를 2 개 가질 수 없습니까? 아니면 다른 이유로입니까?C 충돌 유형

+2

C는 C++이 아니며 함수 오버로딩이 없습니다. –

답변

9

는 다른 파라미터

바로

아니 오버로딩을 2 개 동일한 이름의 기능을 갖는 C 할 아니다. 다른 이름을 사용하거나 다른 인수 (예 : 추가 인수 전달)를 선택해야합니다. 이 같은

#define DATA_TYPE_LONGLONGP 'm' 
#define DATA_TYPE_CHARP 's' 

및 사용 :

struct s_my_struct 
{ 
    void *data; 
    char data_type; 
} 

과 :

+1

예 : 자신의 이름을 망가뜨려보세요. – QuentinUK

0

다른 데이터 유형을 처리하는 가장 좋은 방법은 동일한 구조 유형에서 필요로하는 것은 이런 일을하는 것입니다

if (mystruct.data_type == DATA_TYPE_CHARP) 
{ 
    // use of ((char*)mystruct.data) 
} 
else if (mystruct.data_type == DATA_TYPE_LONGLONG) 
{ 
    // use of ((long long*)mystruct.data) 
} 

구조체가 포인터를 저장하기 때문에 항상 플랫 형식이 아닌 포인터를 사용해야하므로 조심하십시오 ze 데이터.

+0

나는 초기화 인자를 실제로 저장하지는 않기 때문에 실제로 그것의 타입과 함께'void * '로 유지할 필요는 없다. 주어진 값은 완전히 다른 구조로 처리되고 저장되지 않습니다. – Greg

+0

글쎄, 네가 준 코드 네 줄에서 이것을 얻지는 못할 것이다 ... – Eregrith

+0

나는 그것을 이해한다. (누가 너를 떨어 뜨렸는가?) – Greg