跨语言共享常量

时间:2010-08-23 18:01:46

标签: c# c++ c constants verilog

我有一长串常量,我需要访问几个不同语言的项目(Verilog,C,C ++和C#)。不是用每种语言重复它们,有没有一种很好的方式来分享这些?

我唯一能想到的是文本文件和预处理脚本? 这是最好的解决方案还是有更容易/更优雅的东西?

6 个答案:

答案 0 :(得分:9)

自动更新代码中的常量的预处理脚本可能是最好的方法。使用您的项目提交代码以确保正确性并将其作为构建脚本的一部分。

答案 1 :(得分:6)

您可以将它们保存在XML文档中,并为每种语言编写XSLT脚本,以在每个构建中生成相应的源文件。

答案 2 :(得分:1)

您可以使用makefile(或等效的)来定义这些常量吗?对于C和C ++。您可以使用编译器的CLI选项来定义常量的预处理器值。我没有为Verilog做过多的构建定制,但我怀疑那里也可能存在类似的东西。

答案 3 :(得分:1)

您可以以

的形式编写一个简单的文件
const1 = value1
const2 = value2
const3 = value3

然后对c:

应用类似的东西

s/\([a-zA-Z][a-zA-Z1-9_]*\)[ \t]*=[ \t]*\(.*\)/#define \1 \2/

值得注意的是,您可能需要指定类型,因为并非所有语言都允许您使用不关心类型的前准备器宏。

或者,您可以在Flex / Bison中创建词法分析器/解析器来解析配置文件。这将更清晰,更容易扩展。

答案 4 :(得分:0)

您可能有一个XML文件,其中包含要共享的常量,并使用每种语言对其进行解析。

答案 5 :(得分:0)

对于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