在阅读chromium源码的时候,在\blink render core的base\check.h头文件中,发现了这个定义:
#define CHECK(condition, ...) \
LOGGING_CHECK_FUNCTION_IMPL( \
::logging::CheckError::Check(#condition __VA_OPT__(, ) __VA_ARGS__), \
condition)
#define PCHECK(condition) \
LOGGING_CHECK_FUNCTION_IMPL(::logging::CheckError::PCheck(#condition), \
condition)
其中 __VA_OPT__
引起了我的注意。
什么是__VA_OPT__
__VA_OPT__
被设计用于处理可变参数宏(variadic macros)中的逗号插入或移除问题。
这个宏是在C++20标准中引入的,用于解决在可变参数宏中逗号操作的不确定性,特别是在需要条件性地添加或去除逗号的情况下。
可变参数宏简介
在C++中,可变参数宏允许宏接受不定数量的参数。它们由 _VA_ARGS_
标识符标识,代表了宏调用中传递的所有额外参数。在C++11中,我们可以这样定义一个可变参数宏: