2017-09-08 27 views
-2

我對C編程並不陌生,但我沒有機會觸摸它很多時間。從配置文件中定義數據結構

我想你的建議定義在配置文件中定義的數據結構(結構)的方式。目前,我還沒有定義配置文件的結構,但我猜它會像ini文件一樣。

基本上我在Windows和Linux上工作,所以我很想爲這兩個操作系統的答案。

+0

不要自己寫。那裏有很多這樣的東西。一個例子可能是JSON格式的配置文件。然後你可以在網上找到代碼,爲你做所有的分析。 – 4386427

+0

您是否計劃將配置文件轉換爲結構定義或運行時進程的預編譯器?後者會更混亂。 –

+0

@JonathanLeffler ...前者也可以處理後者(編輯:* handle *,我的意思是可以構建一個包裝器)。 – Sebivor

回答

0

我想上的方式你的意見,以限定其在配置文件中

的最簡單的方法中定義的,通過遠數據結構(結構),是使用報頭(.h)文件作爲您的配置文件。您可以包括他們進入你的項目,像這樣:

#include CONFIG_FILE 

...並且,像這樣在編譯過程中向他們介紹:如果你包你所有的配置值到從功能樣宏

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

一開始,這應該很好,很靈活;你應該沒有問題從你的INI文件生成清潔的struct

我猜它會像ini文件

我要指出的是,在C的世界,定義非常嚴格意義,並定義數據結構體(結構體)只能在C源文件(或稍後包含在源文件中的頭文件)中完成。

適合自己!我的建議是給你一個接口,允許你在稍後(很多)的時間點(即,當你有時間編寫一個完整的INI-to-C-header編譯器時)放置解析/解析,因爲這就是你所要求的),並給你一個接口,以填充空格,這樣說。

+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),[here](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)**等等。根據標準,* definition *不是執行環境中發生的進程。 – Sebivor

+0

@ PeterJ_01這樣的模塊應該進行分區,以便像程序的其餘部分一樣,可以對其進行隔離測試,並且與配置模塊一樣,可以在沒有它的情況下測試程序的其餘部分。 – Sebivor

相關問題