3

我按照在线教程,想用它#undef来设计我的调试输出功能。我写了一个debugOut.h文件。内容如下:</p>

#include <stdio.h>

#define NOOP //(void(0))

#undef DEBUG_PRINT

#if DEBUG_OUT
#define DEBUG_PRINT printf
#else 
#define DEBUG_PRINT(...) NOOP
#endif 

#undef DEBUG_OUT

然后我写了一个main函数来测试我的设计是否正确。

#include<iostream>
#include "Header/debug_out.h"
#define DEBUG_OUT
int main(){
    DEBUG_PRINT("module1 debug...\n");
    printf("hello,world");
}

但输出结果只有hello, world. 为什么我定义#define DEBUG_OUT,为什么DEBUG_PRINT不替换为printf

我是根据在线教程编写的。我想基于此为 c++ 编写一个输出函数。但是在句子#define DEBUG_PRINT(...) NOOP中,(...)代表什么?有什么办法可以输出宏定义被替换的内容吗?

4

2 回答 2

7

预处理器基本上从上到下扫描输入。所以它首先处理#if DEBUG_OUT包含的 from然后#include "Header/debug_out.h"才处理。#define DEBUG_OUT

您需要确保在处理DEBUG_OUT内容之前已定义Header/debug_out.h。以下应该有效:

#include<iostream>
#define DEBUG_OUT             // first define DEBUG_OUT 
#include "Header/debug_out.h" // when this is processed DEBUG_OUT is defined
int main(){
    DEBUG_PRINT("module1 debug...\n");
    printf("hello,world");
}

此外,“Header/debug_out.h”中有一个错字:

#if DEBUG_OUT

应该

#ifdef DEBUG_OUT
于 2020-11-18T07:07:56.660 回答
2
#include <stdio.h>

#define NOOP //(void(0))

#undef DEBUG_PRINT

#if DEBUG_OUT      ///////////should be #ifdef
#define DEBUG_PRINT printf
#else 
#define DEBUG_PRINT(...) NOOP
#endif 

#undef DEBUG_OUT

以下是从投票最多的复制而来。

#include<iostream>
#define DEBUG_OUT             // first define DEBUG_OUT 
#include "Header/debug_out.h" // when this is processed DEBUG_OUT is defined
int main(){
    DEBUG_PRINT("module1 debug...\n");
    printf("hello,world");
}
于 2020-11-18T07:20:33.007 回答