우리는 수십 년에 걸쳐 개발 된 커다란 C 코드 기반을 가지고 있습니다. 이 코드의 기능 중 하나는 함수 포인터와 의사 상속에 크게 의존한다는 것입니다. 관용구는 (here를 바와 같이)과 같이 다음과C에서 상속 : 좋음, 나쁨 또는 기타?
typedef struct twod_ {
double x, y;
} twod;
typedef struct threed_ {
twod super;
double z;
} threed;
threed *point_3d;
twod *point_2d = (twod *)point3d;
되는 점과 point_2d->x
point_3d->x
는 동일한 메모리 블록이다.
내 질문은 :
- 이 관용구는 현대적인 생산 코드에서 여전히 인기인가? (권장되는 공개 소스 예제)
- 이 코드에는 성능 요구 사항이 있습니다.이 관용구가 속도 및/또는 메모리 사용에 도움이됩니까?
- 코드가 구현 된 방식 (또는 많은 코드가 부 풀림)으로 스파게티 코드와 같은 느낌이 들었습니다. 일반적으로 구현이나 이디엄에 문제가 있습니까? 또는 다른 말로하면 이상적인 세계에서이 관용구가있는 500k LOC가 빨리 이해 될까요?
당연히, "만약 문제가 해결되지 않았다면 고치지 마라."라는 명제는 계속 기억하는 것이 좋습니다. 그러나 그것은 현재 우리에게 도움이되지 않습니다. 그래서 우리는 리팩토링과 함께 더 깊이 들어가야 할 것이라고 생각합니다.
감사합니다!
"twod"변수를 역 참조하려고하면 정의되지 않은 동작이 발생하지만 마지막 행을'twod * point_2d = & point3d.super; '로 바꾸면 물의 상태가 양호합니다. –
관용구에 상관없이 500k LOC를 빨리 이해할 수 있다고 생각하지 않습니다. –
twod * point_2d = (threed *) point3d로 생각합니다. 당신은 실제로 twod * point_2d = (twod *) point3d를 의미합니다; – MetallicPriest