C/C++中#define的不同语法,包括许多语句
Different syntax for #define in C/C++ including many statements
我理解#define
的语法,比如
#define Pi 3.14
因此,很明显,我们可以在代码中的任何位置使用Pi
常量而不是3.14
,以使代码更具可读性。
但我遇到了如下语法。
这是指每当我调用宏时
doIT("hello world");
是否将调用{…}中的代码语句?
#define
允许给出这样的语法吗。?__FUNCTION__
、__VA_ARGS__
是什么意思?
#define doIT(str, ...)
{
if (pDoLog) pDoLog->LogMsg("[%s] Error: " str, LOG_WRONG, __FUNCTION__, ##__VA_ARGS__);
printf("[%s] Error: " str "n", __FUNCTION__, ##__VA_ARGS__);
}
您不会"调用"宏,它的扩展也不会被"调用"。在编译代码之前,预处理器只是用它的扩展来替换宏。
用括号(如doIt(str)
)定义的宏是一个"类似函数的宏",这意味着它接受可以在宏扩展中使用的参数。
参数列表中有...
的类似函数的宏表示它可以接受可变数量的参数。特殊的预定义符号__VA_ARGS__
扩展为传递给...
占位符的参数列表。
__FUNCTION__
是一个特殊的预定义符号,它扩展到正在编译的当前函数的名称,因此无论宏在哪里扩展,它都将使用封闭函数的名称。
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 助记符和指向成员语法的指针
- 有人能分解一下这个c++模板的语法吗
- C++避免重复声明的语法是什么
- QMetaObject invokeMethod的基于函数指针的语法
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- Windows 10-使用gtkmm-3.0库和g++[包括再现]的分段故障
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 为什么 cmake 许可证<>样式不包括?
- 计算平均值,不包括上次得分
- 为什么包含windows.h会产生语法错误,从而阻止类的实例化?(C2146,C2065)
- 从多个源构造一个对象,包括一个对象向量
- 单独定义模板化嵌套类方法的正确语法
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- 错误 C2760:语法错误:映射迭代器上意外的标记"标识符",预期的";"
- 为什么我会收到错误 C2143 语法错误:缺少"*"之前的';'?
- 奇怪的代码抛出编译错误模板< J,int aSize=10> C2143:语法错误:在"<"之前缺少";"
- C/C++中#define的不同语法,包括许多语句
- 为语法递归地包括头文件
- 包括头文件语法