문제

이전 프로그래머는 즉시 값을 계산하기보다는 런타임 CPU 사이클을 절약하기 위해 큰 조회 테이블 (상수 배열)을 생성하는 것을 선호했습니다. 그는 각 개별 조회 테이블에 대해 고유 한 사용자 정의 시각적 C ++ 프로젝트를 만들어이를 수행했습니다.이 파일은 완전히 별도의 ANSI-C 마이크로 컨트롤러 (Renesas) 프로젝트로 포함 된 배열 파일을 생성합니다.

이 접근법은 그의 원래 계산 가정에 적합하지만 입력 매개 변수를 수정해야 할 때 지루해 졌으므로 모든 시각적 C ++ 프로젝트를 다시 컴파일하고 해당 파일을 ANSI-C 프로젝트에 다시 가져와야합니다. 내가하고 싶은 것은 Visual C ++ 소스를 ANSI-C 마이크로 컨트롤러 프로젝트에 직접 포트하고 컴파일러가 배열 테이블을 생성하도록하는 것입니다.

따라서 내 질문은 다음과 같습니다. ANSI-C 컴파일러가 컴파일 시간 동안 조회 배열을 계산하고 생성 할 수 있습니까? 그렇다면 어떻게해야합니까?

도와 주셔서 미리 감사드립니다!

도움이 되었습니까?

해결책

코드 생성 아키텍처를 빌드 시스템으로 가져올 수없는 이유가 있습니까?

내 말은, 나는 다음과 같은 것을 고려할 수 있습니다.

TABLES:=$(wildcard table_*)
TABLE_INCS:=$(foreach dir,$TABLES,$dir/$dir.h)
include $(foreach dir,$TABLES,dir/makefile.inc)

$MAIN: $(SRS) $(TABLE_INCS)

각각 table_* 유일한 목적이있는 완전한 코드 생성 프로젝트가 포함되어 있습니다. table_n/table_n.h. 또한 각 테이블 디렉토리에 Makefile 조각이 명명되었습니다 makefile.inc 파일이 포함 된 생성 된 종속성 라인을 제공하며 이제 재귀력을 제거했습니다.

올바른 완료 (그리고이 구현이 완료되지 않았습니다. 부분적으로 요점이 더 명확하지만 대부분 게으르기 때문에) 편집 할 수 있습니다. table_3/table_3.input, 유형 make 기본 디렉토리 및 GET TABLE_3/TABLE_3.H 재건축 및 프로그램이 점진적으로 재 컴파일되었습니다.

다른 팁

나는 그것이 당신이 찾아야 할 가치의 유형에 달려 있다고 생각합니다. 각 값을 계산하기위한 처리가 예를 들어, 일정한 표현력 평가보다 더 많은 요구를 요구하면 문제가있을 것입니다.

Boost Preprocessor 라이브러리를 확인하십시오. C ++를 위해 작성되었지만 내가 아는 한, 두 전처리 기는 거의 동일하며 이런 종류의 일을 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top