带有两个圆括号对的 C 函数?

jus*_*rld 4 c vlfeat

我很抱歉标题不好,但除了“我不明白这段代码”之外,我没有想到更好的东西。请随时提出修改建议。

我正在阅读这段代码。我从未见过这样的 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
}
Run Code Online (Sandbox Code Playgroud)

特别是我对(_vl_vlad_encode_, SFX). 据了解,我见过的所有函数头都只有一对“圆括号”(函数的参数),而这里有两对。

第一个是什么意思?我认为这是与以后的调用_vl_vlad_encode_f_vl_vlad_encode_d等不出现其他地方在库中的代码,但我不明白它们是如何连接的。

小智 5

VL_XCAT是一个通常用于连接两个标记的宏。( A ## B) 这意味着它将从两个参数创建一个标记,即: _vl_vlad_encode_SFX- 可能是为使用的浮点变量类型定义的 ( double/ float)

我会说这将在 double 和 float 函数之间进行选择以使用和使用_vl_vlad_encode_f_vl_vlad_encode_d基于定义。

因此,如果

#define SFX d
Run Code Online (Sandbox Code Playgroud)

它将_vl_vlad_encode_d在处理此行后创建。