我有一個很長的常量列表,我需要在多個使用不同語言(Verilog,C,C++和C#)的項目中訪問這些常量。與其用每種語言重複它們,是否有一種很好的方式來分享這些內容?跨語言共享常量
我能想到的唯一的事情是文本文件和預處理腳本? 這是最好的解決方案,還是有更容易/更優雅?
我有一個很長的常量列表,我需要在多個使用不同語言(Verilog,C,C++和C#)的項目中訪問這些常量。與其用每種語言重複它們,是否有一種很好的方式來分享這些內容?跨語言共享常量
我能想到的唯一的事情是文本文件和預處理腳本? 這是最好的解決方案,還是有更容易/更優雅?
你可能會有一個XML
文件與常量共享,並在每種語言中解析它。
這會給你運行時值,而不是編譯時常量。 – 2010-08-23 18:05:09
XML就像暴力:如果它不起作用,就用更多。 – 2010-08-23 18:06:39
在您的代碼中自動更新這些常量的預處理腳本可能是最好的方法。將代碼與您的項目一起提交以確保正確性,並將其作爲構建腳本的一部分。
這是我以前的工作(混合C,VHDL,彙編器和Matlab)所做的工作。注意,如果你想做比簡單的整型常量更復雜的任何事情(例如,能夠用十六進制指定事物,用其他方法定義的常量),則特殊情況會很快安裝。 – 2010-08-23 20:01:21
M4宏處理器可能是一個不錯的選擇。 – caf 2010-08-24 01:16:11
您可以將它們保存在XML文檔中,併爲每種語言編寫XSLT腳本,以在每個構建中生成相應的源文件。
我認爲這是一個非常好的解決方案 - 它也可以處理特殊情況。它是可擴展的。 – JBRWilkinson 2010-08-23 22:16:34
你可以使用你的makefile(或等價物)來定義這些常量嗎?對於C和C++。您可以使用編譯器的CLI選項爲常量定義預處理器值。我沒有爲Verilog做過多的構建定製,但我懷疑在那裏也可能存在類似的東西。
您可以在
const1 = value1
const2 = value2
const3 = value3
形式寫一個簡單的文件,然後應用類似,爲C:
s/\([a-zA-Z][a-zA-Z1-9_]*\)[ \t]*=[ \t]*\(.*\)/#define \1 \2/
其值得注意的是,您可能需要指定類型,因爲不是所有的語言都可以讓你使用一個不關心類型的prerossessor宏。
或者,您可以使用Flex/Bison中的詞法分析器來解析配置文件。這將變得更加清晰和容易。
對於Verilog(至少對於系統的Verilog)和C++可以都常數描述爲一個列表(假設全部都是相同類型的),如下所示:
a=0, b= 1, c = 2, ..;
在C + +你會使用
const int
#include <myconsts>
的Verilog(至少在系統的Verilog),你可以使用這個
parameter int
`include "myconsts"
我猜c#沒有包含。所以,你至少需要一個pre-pcocessing腳本來將你的常量包含在一個類中。你可能可以使用'cpp'。對不起,對c#不太瞭解。
其實,讓所有類似我可能會使用cpp生成我需要的文件:的
#ifdef CPP
const int
#elsif VERILOG
parameter int
#elsif CSHARP
class Constants {
const int
#endif
a = 0,
c = 1,
d = 2;
#ifdef(CSHARP)
};
#endif
部分受騙者:http://stackoverflow.com/questions/954321/is-it-possible- to-share-an-enum-declaration-between-c-and-unmanaged -c – 2010-08-23 18:09:29