预处理器 #define 带参数,但没有函数体
Pre-processor #define with argument, but no function body
所以我想知道#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)
以及发生它的条件。
相关文章:
- 用C++在单独的头文件中完成函数体
- 使用指向成员的指针将成员函数作为参数传递
- 当函数模板参数是具有默认参数的类模板时,函数模板参数的推导如何执行
- 如何制作一个将函数作为参数的类方法
- 我可以在 C++ 中的函数体之外进行操作吗?
- Arduino C++在构造函数中用参数声明对象数组
- C++线程中,没有重载函数接受 X 参数
- 如何将一个类的函数作为另一个类的另一个函数的参数传递
- 将可变参数函数的参数封装在类实例中
- 如何使用模板化标准::函数作为参数?
- 如何在 c++ 中将函数作为参数传递?
- SegFault 同时使用 std::string::operator+= 和函数作为参数
- 构造函数/函数声明参数列表中的统一初始化
- 有没有办法在不使用 #ifdef 的情况下不编译发布版本中的单元测试函数体?
- 将函数作为参数C++传递给类
- 如果未设置编译符号,如何排除方法?如何传递可变数量的参数并在函数体中格式化它们
- 在类定义之外的模板类成员函数体中,何时需要模板参数
- C++从模板参数类型生成包含开关/映射的函数体
- c++初始化列表——参数来自构造函数体本身
- 预处理器 #define 带参数,但没有函数体