gpt4 book ai didi

c - 使用 C 预处理器宏进行多级调试

转载 作者:行者123 更新时间:2023-11-30 16:59:51 24 4
gpt4 key购买 nike

我有多级调试实现的代码摘录,但我不知道如何使其工作。

我已经尝试了此处发布的一些有关使用 do {...} while (0) 的建议,并且我还尝试声明一个名为 Debug 的全局变量,但它们似乎都不起作用。

我该怎么办?

#include <stdio.h>
#include <stdlib.h>

//#define DEBUG(fmt, ...) fprintf (stderr, fmt, __VA_ARGS__ )

#ifdef DEBON
#define DEBUG(level, fmt, ...) \
if (Debug >= level) \
fprintf (stderr, fmt, __VA_ARGS__)
#else
#define DEBUG(level, fmt, ...)
#endif

int process ( int i1, int i2)
{
int val;

DEBUG (1, "process (%i, %i)\n", i1, i2);
val = i1 * i2;
DEBUG (3, "return %i\n", val);

return val;
}

int main ( int argc, char *argv[])
{
int arg1 = 0, arg2 = 0;
if (argc > 1)
arg1 = atoi (argv[1]);
if ( argc == 3)
arg2 = atoi (argv[2]);

DEBUG (1, "processed %i arguments\n", argc -1 );
DEBUG (3, "arg1 = %i, arg2 = %i\n" , arg1, arg2);
printf ("%d\n", process (arg1, arg2));

return 0;
}

下面是我整理的一个更简单的文件,看看是否可以正常工作。还没有运气。

#define DEBUG(level, fmt, ...) if (Debug >= level ) fprintf (stderr, fmt, __VA_ARGS__)
#include <stdio.h>
int Debug;
int main()
{
int i1 = 1;
int i2 = 2;
DEBUG(3, "process (%i, %i)\n", i1, i2);

}

最佳答案

最后一个示例在稍作调整后即可运行。书中的想法是让您的程序解析命令行选项并设置名为 Debug 的全局变量的值。

#include <stdio.h>
#include <stdlib.h>
#define DEBUG(level, fmt, ...) do if (Debug >= level) fprintf(stderr, fmt, __VA_ARGS__); while (0)

int Debug = 1; // default debug level == 1

int main(int argc, char *argv[])
{
int i1 = 1;
int i2 = 2;

size_t i;
for(i = 1; i < argc; ++i)
if ((argv[i][0] == '-') && (argv[i][1] == 'd'))
Debug = strtol(argv[i] + 2, 0, 10);

DEBUG(3, "process (%i, %i)\n", i1, i2);
return 0;
}

关于c - 使用 C 预处理器宏进行多级调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37948829/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com