2014-10-10 1 views
0

매우 큰 데이터 세트 (테라 바이트 단위)가있는 프로젝트에서 작업했습니다. 지금은 다른 버전의 코드를 테스트하고 싶습니다.C에서 코드 변형 관리 : 코드 전체에서 반복되는 변수 변경

특히 (가장 단순한 경우) 코드 전체에 반복되는 일부 변수의 유형을 변경 (함수에 전달)하고 해당 유형을 double에서 float (순서대로)로 변경하려고합니다 메모리 공간 절약).

내 질문은 :

코드의 두 가지 변화를 관리 할 수있는 (나는 현재 자식을 사용하고 있습니다) 가장 좋은 방법은 무엇입니까?

내 아이디어가 테스트 끝에 병합되지 않기 때문에 간단한 브랜칭을 사용하고 싶지 않습니다. 내 프로그램을 두 개 (또는 여러 개) 유지해야합니다. 그렇게하는 가장 좋은 방법은 무엇입니까? 코드 반복을 피하고 가장 확장 가능한 방식으로 수행하고 싶습니다.

#defines를 사용하는 것에 대해 생각해 보았습니다. 그러나 매우 적은 수의 변형에 대해서는 좋은 아이디어 일 수 있습니다. 확장 성이 좋아야합니다. 내가 C.

편집 프로그래밍 해요

가능한 : typedef이 경우에 유용 할 수 있습니다. 그러나 변수 유형에 따라 다른 함수를 사용하려면 어떻게해야합니까? C++에서는 템플릿을 사용할 수 있지만 C에서는 사용할 수 있습니까? 가장 좋은 방법은 무엇일까요?

+4

이것은'typedef'가 사용되는 것을 것은 정확히 어떤 것 같아 그것을 제어 할 수 있습니다. – cdhowie

+1

브랜치의 경우 (변형이 큰 경우)라고 생각합니다. 지점은 병합 할 필요가 없으며 워크 플로입니다. 지사의 장점은 일반적인 원래 코드로 되돌아가는 역사가 있다는 것입니다. 그렇지 않으면 포크가 작동 할 수 있습니다. – Niall

+2

"C/C++"라는 언어가 없으므로 C++로 프로그래밍하거나 C++로 프로그래밍 할 수 있습니다. 표면적으로는 비슷하지만 두 언어는 실제로 완전히 다릅니다. –

답변

2

typedef을 사용할 수 있습니다. 이 같은 프로젝트에 몇 가지 일반적인 낮은 수준의 헤더 파일에 넣어 :

typedef double real_t; 

그럼 당신은 신중하게, 한 번만, 그것은 의미가 모든 곳에서 real_tdouble을 대체 할 수있다 (당신은 반드시 그것을 대체 할 수 없습니다 어디서나, 어떤 장소에서는 이해가 안 될 수 있습니다. 예를 들어 외부 함수를 호출하는 곳이나 double과 관련없는 곳).

두 버전 간을 전환하려면 doublefloat으로 바꿉니다. 또는 :

typedef MY_REAL_TYPE real_t; 

그런 다음 당신은 당신의 메이크 등의 -DMYREAL_TYPE=double을 설정하여 빌드 시스템에서