我正在从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
这是正确的做法吗?
答案 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中你会为此编写一个函数。替换T
,U
和V
。正确的类型。
T GSL_FN_EVAL(U* F, V x) { return F.function(x, F.params); }