在 Lua 库中看到的奇怪的 C 语法

我在 torch 库的 C 代码中看到了像 这样 的函数:

long THTensor_(storageOffset)(const THTensor *self)
{
  return self->storageOffset;
}

这是一个预处理器的东西,还是只在 lua 中使用的特殊语法?我认为这个想法与 THTensor “类”上的一种方法 storageOffset 有关,但我从未见过这种语法。

点赞
用户1322972
用户1322972

这是一个预处理宏

lib/TH/THTensor.h:
#define THTensor_(NAME)   TH_CONCAT_4(TH,Real,Tensor_,NAME)

这导致...

lib/TH/THGeneral.h.in:
#define TH_CONCAT_4(x,y,z,w) TH_CONCAT_4_EXPAND(x,y,z,w)

最后是...

lib/TH/THGeneral.h.in:
#define TH_CONCAT_4_EXPAND(x,y,z,w) x ## y ## z ## w

因此,

long THTensor_(storageOffset)(const THTensor *self)

最终变成了:

long THRealTensor_storageOffset(const THTensor *self)

预处理器难道不是“伟大”的吗?

2015-05-24 07:01:23