如果未定义则忽略宏

Ignore macro if it is not defined

我在某些 C 文件中使用了以下宏:

DBGL_LOG_INFO(DBGL_UART_LOG_ENABLED, "UART is initialized");

如果定义 LOG_UART_ENABLED 为真,宏将调用我的日志记录模块。 如果 define 为 false,则不会编译日志代码,因此不会影响我在发布版本中的常规程序代码。

但是现在,我遇到了以下问题: 确实包含此宏调用的 C 文件也应该用于另一个不存在日志模块的项目。所以定义 DBGL_UART_LOG_ENABLED 在另一个项目中也不存在。

当然,当我在项目中使用这段代码编译文件时,出现以下错误:

'DBGL_UART_LOG_ENABLED' undeclared (first use in this function); did you mean '...'?

如果缺少宏和定义,是否可以告诉编译器应该忽略这段代码?

提前致谢。

这就是为什么这样的代码通常写成

#ifdef DBGL_UART_LOG_ENABLED

/* do stuff with DBGL_UART_LOG_ENABLED */

#endif

有条件地定义宏。例如,下面是一个常见的模式:

#ifndef DBGL_UART_LOG_ENABLED
#   define DBGL_UART_LOG_ENABLED 0
#endfif

您可能还需要处理 DBGL_LOG_INFO:

#ifndef DBGL_LOG_INFO
#   define DBGL_LOG_INFO(...) do {} while (false)
#endif

这将宏定义为一个包含其参数的空块。这样,您可以继续在代码中使用宏而不影响输出。