我很抱歉这个糟糕的头衔,但除了&#34之外,没有什么比这更好了。我不明白这个代码"。请随意提出修改。
我正在阅读this代码。我从来没有见过像这样的C函数:
static void
VL_XCAT(_vl_vlad_encode_, SFX)
(TYPE * enc,
TYPE const * means, vl_size dimension, vl_size numClusters,
TYPE const * data, vl_size numData,
TYPE const * assignments,
int flags)
{
// function body
}
特别是我对(_vl_vlad_encode_, SFX)
感到困惑。最重要的是,我见过的所有功能标题只有一对"圆括号" (函数的参数),这里有两对。
第一个是什么意思?我认为这与之后的电话_vl_vlad_encode_f
和_vl_vlad_encode_d
有关,这些电话不会出现在图书馆代码的其他任何地方,但我无法理解他们是如何联系的
答案 0 :(得分:2)
For each drRow as Datarow in DbaseDataSet.Devices.Rows
....
'DrRow("colname") = something
Next
和VL_XCAT
类似函数的宏位于VL_CAT
中(与您链接的vl/host.h
文件相同的目录。)
vlad.c
简单地连接它的参数,VL_CAT(x,y)
是相同的,除了它的参数是宏扩展的:
VL_XCAT(x,y)
#define VL_CAT(x,y) x##y
#define VL_XCAT(x,y) VL_CAT(x, y)
会产生VL_XCAT(_vl_vlad_encode_, SFX)
或_vl_vlad_encode_f
,具体取决于_vl_vlad_encode_d
的定义方式。
所以你最终得到这个,例如,当使用SFX
时(注意#define SFX d
同时处于活动状态):
#define TYPE double
现在看起来像普通的功能定义,不是吗?