预处理器 #define 带参数,但没有函数体

Pre-processor #define with argument, but no function body

本文关键字:函数体 参数 处理器 #define 预处理      更新时间:2023-10-16

所以我想知道#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的核心SDK。

具有"无正文"(无替换列表(的宏只是具有主体。这意味着代码中对该宏的每次"调用"都将替换为的标记序列,即对该宏的引用将消失而没有任何效果。

在上面的示例中,代码的作者只是希望在某些情况下(即,如果之前未定义__success(从代码中消失所有对__success(epxr)的调用。仅此而已。

宏也是如此__nvapi_success即您的宏是否有参数在这方面没有任何区别。

在其他一些情况下,此宏可能会以不同的方式定义,使用非空替换列表。如果您浏览源代码的其余部分,您可能会发现其他地方以不同的方式定义__success(epxr)以及发生它的条件。