我刚刚编译了NIST RS274NGC G-Code Interpreter并看到来自 gcc 的令人难以置信的 890 警告。
其中 200 个是由这个数组引起的:
char * _rs274ngc_errors[] = {
/* 0 */ "No error",
/* 1 */ "No error",
/* 2 */ "No error",
/* 3 */ "No error",
/* 4 */ "A file is already open", // rs274ngc_open
<...>
根据我的基本理解,应该是const char *
.
然后我看到了这些宏(它们实际上在不同的 .cc 文件中出现了好几次):
#define AND &&
#define IS ==
#define ISNT !=
#define MAX(x, y) ((x) > (y) ? (x) : (y))
#define NOT !
#define OR ||
#define SET_TO =
然后我看到了很多suggest braces around empty body in an 'else' statement [-Wempty-body]
由非常奇怪的控制流改变宏引起的警告(是的,还有悬空的其他!):
#define PRINT0(control) if (1) \
{fprintf(_outfile, "%5d \n", _line_number++); \
print_nc_line_number(); \
fprintf(_outfile, control); \
} else
报告表明
A.5 解释器错误
解释器没有已知的错误
所有这一切都让我想知道——为什么它写得这么奇怪?我可以理解 PRINT0 之类的宏 - C 中的错误处理可能会很痛苦 - 但为什么有人会使用SET_TO
而不是=
呢?
我可以相信所有这些代码都是生成的,但不能以无警告的方式生成吗?
无论如何,我不是专家,我只是很好奇。