我有一个宏定义如下.用于将调试信息打印到控制台.现在,我必须在不干扰现有代码的情况下将此调试发送到套接字.我在想 更改此设置,以便Debug_Print宏将判断其是否处于套接字模式,并调用不同的宏来通过套接字发送它.我试了dprintf,它对我来说很管用.我如何更改这个Debug_Print宏,使其通过判断is_in_socket_mode()来调用printf(...)而不是dprintf(fd, ...)

bool is_in_socket_mode()函数将告诉它是否处于套接字模式.

现有宏:

#define Debug_Print(label, ...) ( Is_Enabled(label) ? (void)printf(__VA_ARGS__) : (void)0 )

我try 在现有宏中使用is_in_socket_mode(),但我不知道如何操作.我认为我必须引入另一个宏,并在Debug_Print宏中调用它.

推荐答案

关于术语:宏是在编译时实例化的.在运行时,它们不再存在,因此不可能在调用函数的意义上"调用宏".

由于is_in_socket_mode()是一个运行时函数,这应该是一个在宏中判断其值的问题:

#define Debug_Print(label, ...) ( Is_Enabled(label) ? ((is_in_socket_mode()) ? (void)dprintf(fd, __VA_ARGS__) : (void)printf(__VA_ARGS__)) : (void)0 )

C++相关问答推荐

为什么静态说明符为内联函数生成外部定义?

为什么getchar()挂起了,尽管poll()返回了一个好的值?""

如何将已分配的数组(运行时已知的大小)放入 struct 中?

C:二进制搜索和二进制插入

为什么在函数内部分配内存空间时需要添加符号?

如果包含路径不存在,我的编译器可以被配置为出错吗?(GCC、MSVC)

在没有动态内存分配的情况下,用C语言最快地将各种数组复制到单个较大的数组中

是什么让numpy.sum比优化的(自动矢量化的)C循环更快?

在循环中复制与删除相同条件代码的性能

在C语言中,指针指向一个数组

将数组插入数组

用C++高效解析HTTP请求的方法

如何使crc32的结果与cksum匹配?

C 语言中 CORDIC 对数的问题

(GNU+Linux) 多个线程同时调用malloc()

10 个字节对于这个 C 程序返回后跳行的能力有什么意义

使用复合文字数组初始化的指针数组

创建 makefile 来编译位于不同目录中的多个源文件

为什么需要struct in_addr

获取 struct 中匿名 struct 的大小