C有两个圆括号对吗?

时间:2016-12-04 22:44:11

标签: c vlfeat

我很抱歉这个糟糕的头衔,但除了&#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有关,这些电话不会出现在图书馆代码的其他任何地方,但我无法理解他们是如何联系的

1 个答案:

答案 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

现在看起来像普通的功能定义,不是吗?