2017-09-08 1 views
-2

저는 C 프로그래밍에 익숙하지는 않지만 많은 시간 동안 만져 볼 기회를 얻지 못했습니다.구성 파일로부터 데이터 구조를 정의하십시오.

구성 파일에 정의 된 데이터 구조 (구조체)를 정의하는 방법에 대한 조언을 받고 싶습니다. 현재 구성 파일의 구조를 정의하지는 않았지만 ini 파일과 같을 것으로 추측하고 있습니다.

기본적으로 저는 Windows와 Linux에서 작업 중이므로 두 운영 체제 모두에 대한 대답을 좋아합니다.

+0

직접 쓰지 마십시오. 거기에 그런 것들이 많이 있습니다. 한 가지 예가 JSON 형식의 구성 파일 일 수 있습니다. 그러면 모든 파싱을 수행하는 코드를 인터넷에서 찾을 수 있습니다. – 4386427

+0

구성 파일을 구조 정의 또는 런타임 프로세스로 변환하는 프리 D 파일러를 계획하고 있습니까? 후자는 더 복잡 할 것이다. –

+0

@JonathanLeffler ... 그리고 전 또한 후자를 처리 할 수 ​​있습니다 (편집 : * 핸들 *, 나는 래퍼를 만들 수 있음을 의미합니다). – Sebivor

답변

0
내가 지금까지, 구성 파일

간단한 방법에 정의 된 데이터 구조 (구조체)를 정의 할 수있는 방법에 대한 조언을하고 싶습니다

는, 헤더를 사용하는 ( .h을) 것 파일을 구성 파일로 사용하십시오.

#include CONFIG_FILE 

을 ... 그래서 같이 컴파일시를 소개 : 당신은 너무처럼 프로젝트로 포함 할 수

cc -D'CONFIG_FILE="path/to/config.h"' path/to/source/files.c 

을 당신의 기능과 같은-매크로로 설정 값을 모두 감싸는 경우 아주 시작, 이것은 좋고 가동 가능해야한다; INI 파일에서 깨끗한 struct을 생성하는 데 문제가 없어야합니다.

나는 그것이

가 가

내가 C의 세계에서, 을 정의하는 것이 지적해야 INI 파일과 같은 것 같은데요은 매우 엄격한 의미를 가지고 있으며, 데이터를 정의하려면 구조체 (구조체)은 C 소스 파일 (또는 나중에 소스 파일에 포함되는 헤더 파일)에서만 수행 할 수 있습니다.

스스로 정하십시오! 필자가 추천 한 것은 나중에 (많은) 나중에 (즉 완전한 INI-to-C 헤더 컴파일러를 작성할 시간이있을 때까지) 렉싱/파싱을 보류 상태로 둘 수있는 인터페이스를 제공 할 것이기 때문입니다. 그게 당신이 물어 보는거야) 그리고 에 공백을 채우는 인터페이스를 제공합니다.입니다.

+0

그는 컴파일 타임이 아니라 런타임에 대해 묻습니다. –

+0

@ PeterJ_01 이미 언급했듯이, * define *은 매우 엄격한 의미입니다. 그 의미는 [여기]에서 찾을 수 있습니다 (http://port70.net/~nsz/c/c11/n1570.html#6.7p5). 예제는 [여기] (http://port70.net/~nsz/c/c11/n1570.html#6.7.6.1p4), [여기] (http://port70.net/~nsz/c/)에서 찾을 수 있습니다. c11/n1570.html # 6.7.9p26), ** [여기] (http://port70.net/~nsz/c/c11/n1570.html#6.7.9p28) ** 및 ** [전체 섹션 제목은 "외부 개체 정의"] (http://port70.net/~nsz/c/c11/n1570.html#6.9.2) **입니다. 표준에 따르면 * 정의 *는 실행 환경에서 발생하는 프로세스가 아닙니다. – Sebivor

+0

@ PeterJ_01 이러한 모듈은 나머지 프로그램과 마찬가지로 별도로 테스트 할 수 있도록 구성되어야하며 구성 모듈과 마찬가지로 나머지 프로그램도 모듈없이 테스트 할 수 있어야합니다. – Sebivor

관련 문제