我有一个很长的常量列表,我需要在多个使用不同语言(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