[완료]C에서 특정 함수만 재정의하고 싶습니다.
글쓴이: halfsmart / 작성시간: 토, 2009/06/06 - 11:52오전
다음 처럼 a 라는 함수에서 b를 호출하고 있을때,
a.c 파일에 수정을 가하지 않고,
b 함수를 재정의하고 싶습니다.
c++ 처럼 상속과 재정의를 하면 좋겠는데,
우선 원본 파일이 c로 작성되어 있고, 수정을 하면 안 됩니다.
/** a.c **/ a() { b(); }
좋은 방법이 없을까요?
결국 제가 하고 있는 방법은 파일을 새로 만들어 a()함수를 복사한 다음
b() 함수대신 다른 함수를 호출하도록 하고 있습니다.
문제는 제가 재정의하고 싶은 함수가 call depth가 깊으면 그 함수를 호출하는 함수들까지 다시 copy & paste를 해야하는건지..
조언부탁드립니다.
Forums:
???
.a 로 라이브러리로 제공되는 것도 아니고, 소스를 수정할 수가 없다는 게 이상하군요
그냥 copy & paste 하면 안되는 이유가 있나요? call depth 따지기 전에 만들고자 하는 함수를 설계부터 잘하시는게 중요할듯
-----
안녕하세요 소프트웨어 공학센터 장원석 책임입니다.
http://www.software.kr
define문으로...
define문으로 함수명을 변경하면 되는것 같은데요.
현재 제가 작업중인
현재 제가 작업중인 게 두가지 module로 나누어져 있습니다.
A module은 제가 지금 수정을 하고 있구요.
B module은 제공받는 것으로 소스는 있지만, library로 만들어서 사용하고 있습니다.
B module은 version이 여러 개 있어서 직접 소스를 수정하면 매번 B module이 바뀔 때마다 수정을 해야해요.
B module에 파일을 추가하거나 하는건 괜찮은데, 직접 기존 소스를 수정하고 싶지 않습니다.
#define으로 바꾸는 것도 결국 소스를 건드리는 건데..
조언 감사드립니다.
음.. 엽기적이려나..
음.. 엽기적이려나.. 함수명을 동일하게 유지하고싶어서 그러시는거면.. 함수 포인터 정의하고 함수 포인터를 바꿔가면서 쓰시는방법은 어떠련지 =333
그런 방법이 있습니다만, 쉽지 않습니다.
예로,
통신회사의 기지국 서버 프로그램에 버그가 발생했을 경우에 운영 중인 서버를 중단하는 것은 회사에 입장에서 수익이나 신뢰가 떨어지는 일이므로, 라이브 패치로 해당 함수의 주소를 새로운 함수의 주소를 변경해서 서비스 운영의 장해 발생을 최소로 합니다.
보통 상당한 고가의 소프트웨어가 있습니다.
그렇다고 모든 경우에 가능한 것도 아닙니다.
아래와 같이, 제품의 메뉴얼을 보면 제약조건이 나열되어 있더군요.
1.헤더화일의 인라인 금지
2.함수 주소크기
3.전역변수 사용의 주의점 등등
왜 사용하는지 의구심이 생길 정도로 되는 것보다 안 된다는 내용이 더 많습니다.
halfsmart님의 프로젝트 특성에 의해서 라이브 패치가 필요한지 아니면, 설계의 변경으로도 대응이 되는지를 먼저 고려해 보시기 바랍니다.
phonon 님이 말씀하신
phonon 님이 말씀하신 라이브패치는 아니지만
제가 원하는 게 비슷한 내용인거 같습니다.
다른 방법으로 해결 할 수 있는지 생각해 보겠습니다.
감사합니다.
댓글 달기