C에서 함수명 중복에 관한 질문입니다.
글쓴이: runafter / 작성시간: 월, 2005/12/26 - 5:04오전
제가 하나의 프로그램에서
데이터형만 다른 스택을 2개 사용하려고 합니다.
처음 스택 구현할때
데이터형을 매크로로 저의 해 놔서
따로따로 사용할때에는 매크로변수면 변경하면
다른 코드들은 거의 변경없이 사용할수 있었습니다.
그런데!!
하나의 프로그램에서 같이 사용하다보니
매크로변수부터 시작해서 모든 함수명이 겹칩니다.
이것을 해결할 방법이 없을까요?
데이터형마다 다른 이름의 함수들을 다 만들어줘야 하나요?
다음은 제가 만들고 있는 프로그램에서 스택이 필요한 부분입니다
쓰레드풀을 만들고 있는데
쓰레드풀에는 쓰레드정보를 갖고있는 스택과
메모리풀이 필요합니다.
그런데 메모리풀안에
할당 가능한 주소값을 저장하는 스택이 또 존재합니다.
두가지 스택에서의 차이점은 데이터형밖에 없습니다.
좋은 해결책 부탁드립니다. ㅠㅠ
Forums:
음..
쓰신 글만 읽어서는 잘 감이 안오는데..
처음부터 데이터 타입을 void * 형으로만 되는 것 아닌가요?
그리고, type 에 대한 값을 담아두는 변수를 하나 추가해서 처리하면 될 것 같은데요..
A few Good Man
Re: C에서 함수명 중복에 관한 질문입니다.
C에서 C++의 템플릿을 흉내 낼려고 하시나요???
거의 같은 코드를 함수이름때문에 다시 작성하는것이 너무 비효율적으로
거의 같은 코드를 함수이름때문에
다시 작성하는것이 너무 비효율적으로 생각되서요..
제가 두가지 방법을 생각해 봤는데요 실제로는 구현해 보지않았고
검증도 되지 않은것입니다.
첫번째는 #define와 ##를 이용해 함수 이름앞이나 뒤에
추가되는 이름을 붙여주는 것이고요
두번째는 스택관련코드와 실재로 사용하는코드를 같은 파일에 넣고
함수명앞에 static을 넣어 extern이 안되게 하는것입니다
밑에 코드를 추가합니다
이것이 쓰레드 정보를 저장할 스택입니다
void*형을 저장합니다
실제로는 다른 구조체의 포인터가 사용됩니다.
이것은 메모리풀에서 사용되는 스택입니다.
내부구현코드는 전혀 변경된 것이 없습니다.
mpooldef.h 파일입니다
tpooldef.h 파일입니다.
여기에서 주석은 무시해주시고;;(제가 까먹을까봐 적어논 것입니다)
실제로 사용될때에는 union안에 여러 구조체나 변수가 들어갑니다.
(메모리풀에서 쓰일 실제데이터들입니다.)
그리고 코퍼스님의 말대로 void*형으로 하면 되지만
저는 다음과 같은 코드를 사용하고 싶습니다. ㅠㅠ
결국 방법이 없다면 이런방식의 코딩은 포기하고 그냥
void*형으로 써야겠네요.
C++의 template나 namespace의 필요성을 절실히 느끼는군요 ㅠㅠ
잘생각해보니 제가 잘못 생각한듯 하네요
일단 사과드립니다.
스택에서 쓰는것과 제가 마지막에 올린 코드는 상관이 없네요.
그래도 이왕에 글을 올렸으니
동일함수명을 피하는 방법이라던지
거의 비슷한 코드를 최대한 코드수정없이 사용할수 있는 방법이
있다면 가르쳐 주셨으면 합니다.
(큐, 스택, 리스트 등)
...
문의하신 내용이 void형 포인터가 존재하는 이유입니다. void형 포인터를 사용해서 서로 다른 데이터형간에도 적용할 수 있는 범용 인터페이스를 만드시는게 정석입니다. ANSI-C 표준인지는 모르겠으나.. 볼랜드사의 Turbo-C 컴파일러에는 void *형으로 정의된 각종 자료구조와 정렬,탐색 알고리즘이 이미 인터페이스로 명시되어 있습니다. 아마 Gnu Compiler Collection 에도 있지 않을까 추정되네요.
답변 감사합니다.
제가 한동안 C++쪽만 공부하다보니
너무 template과같은 편리한 것에만 길들여져있어
void*의 좋은 기능을 잠시 잊고 있었던것 같습니다.
Re: ...
혹시 qsort나 bsearch 같은 건가요? 그럼 ANSI C에도 있습니다. 단 실제 형식을 알고 있는 callback 함수가 있어야 하고 한 element가 몇 바이트인지는 알아야 합니다. C에서 C++ 비슷하게 쓰기 위한 일종의 방법이죠.
- 토끼군
댓글 달기