Lua库中的Strange C语法

jjm*_*jjm 3 c lua torch

我看到这样的功能整个火炬库的C代码:

long THTensor_(storageOffset)(const THTensor *self)
{
  return self->storageOffset;
}
Run Code Online (Sandbox Code Playgroud)

这是一个预处理器的东西,还是具体的lua?我认为这个想法与"类"中storageOffset的一种排序方法有关THTensor,但我从未见过这种语法.

Who*_*aig 8

它是一个预处理器宏

lib/TH/THTensor.h:
#define THTensor_(NAME)   TH_CONCAT_4(TH,Real,Tensor_,NAME)
Run Code Online (Sandbox Code Playgroud)

这导致...

lib/TH/THGeneral.h.in:
#define TH_CONCAT_4(x,y,z,w) TH_CONCAT_4_EXPAND(x,y,z,w)
Run Code Online (Sandbox Code Playgroud)

最后......

lib/TH/THGeneral.h.in:
#define TH_CONCAT_4_EXPAND(x,y,z,w) x ## y ## z ## w
Run Code Online (Sandbox Code Playgroud)

因此,

long THTensor_(storageOffset)(const THTensor *self)
Run Code Online (Sandbox Code Playgroud)

最终变成这样:

long THRealTensor_storageOffset(const THTensor *self)
Run Code Online (Sandbox Code Playgroud)

预处理器不是很盛大吗?