C/C++中#define的不同语法,包括许多语句

Different syntax for #define in C/C++ including many statements

本文关键字:语法 包括许 语句 C++ #define      更新时间:2023-10-16

我理解#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__是一个特殊的预定义符号,它扩展到正在编译的当前函数的名称,因此无论宏在哪里扩展,它都将使用封闭函数的名称。