C宏gsl库代码转换为D

时间:2016-01-06 12:43:59

标签: c macros d c-preprocessor

我正在从gsl数值库中的C头文件到linux ubuntu下的D进行代码转换。我想知道宏是什么:

/* 1 */ #define GSL_VAR extern // gsl types.h file
/* 2 */ #define GSL_RANGE_COND(x) (x) // gsl_inline.h file
/* 3 */ #define GSL_FN_EVAL(F,x) (*((F)->function))(x,(F)->params)

做。

我怀疑特别是GSL_VAR给我带来了一些问题。其使用的一个例子是

GSL_VAR const gsl_rng_type *gsl_rng_borosh13; //gsl_rng.h

我转换为

gsl_rng_borosh13 const(gsl_rng_type)*; // D Code

这是正确的做法吗?

1 个答案:

答案 0 :(得分:1)

/* 1 */ #define GSL_VAR extern // gsl types.h file

如果您要将C代码转换为D,则可以完全删除,因为D使用模块。如果您正在编写绑定,那么您应该使用extern(C)

/* 2 */ #define GSL_RANGE_COND(x) (x) // gsl_inline.h file

这是身份功能。在D中,您将编写一个函数而不是使用宏(例如int GSL_RANGE_COND(int x) { return x; })。但是,我想编译时标志会改变这个宏的行为;在D中,您将使用version语句。

/* 3 */ #define GSL_FN_EVAL(F,x) (*((F)->function))(x,(F)->params)

同样,在D中你会为此编写一个函数。替换TUV。正确的类型。

T GSL_FN_EVAL(U* F, V x) { return F.function(x, F.params); }