所以我想知道#define foo(bar)
是做什么的。它似乎有一个论点,但没有身体。让我给你一些背景信息:
#ifndef __success
#define __nvapi_success
#define __success(epxr)
#endif
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
最后,NVAPI_INTERFACE用于函数声明,如下所示:
NVAPI_INTERFACE NvAPI_Initialize();
这一切都取自我试图弄清楚的NVAPI Nvidia's Core SDK。
答案 0 :(得分:2)
一个带有"没有身体"的宏(没有替换列表)只有空正文。这意味着每一次"调用"该代码中的宏将被替换为一个空标记序列,即对该宏的引用将消失而没有任何影响。
在上面的示例中,代码的作者只是希望__success(epxr)
的所有调用在某些情况下从代码中消失(即,如果先前未定义__success
)。这就是它的全部内容。
__nvapi_success
宏也是如此。即你的宏是否有参数在这方面没有任何区别。
在某些其他情况下,此宏可能会以不同的方式定义,非空替换列表。如果您查看其余的源代码,您可能会发现以不同方式定义__success(epxr)
的其他位置以及发生这种情况的条件。