在清除预处理器滥用和由goto语句和一些狡猾注释导致的未使用代码的残骸后,你最终得到了以下幸存的代码(如果我错了,请纠正我!):
#include <stdio.h> //used to suppress warnings
#include <math.h> //used to suppress warnings
extern int fl00r; //renamed to not clash with floor from math.h - unless it's part of the trickery???
int b, k['a'] = {
sizeof(int(*)()),
};
struct tag {int x0,*xO;}
*main(int i, int dup, int signal) { //int added to suppress warnings
for(signal=0;*k *= * __FILE__ *i;) {
printf(&*"'\",=); /*\n\\", (*((int(*)())&fl00r))(i)); //see line 3
if(b&&k+sin(signal)/ * ((main) (b)-> xO));
}
}
还有一个编译错误需要解决:
decot.c: In function 'main':
decot.c:12:28: error: too few arguments to function 'main'
12 | if(b&&k+sin(signal)/ * ((main) (b)-> xO));
| ^
decot.c:9:2: note: declared here
9 | *main(int i, int dup, int signal) {
| ^~~~
我怀疑编译器在从前的工作方式下,即使在特定情况下main被定义为3个参数,你也可以只使用1个参数调用它。
这个说法准确吗?我有什么遗漏吗?现在使这段代码能够编译的最小更改是什么?
我使用了GCC 9.2.0和Makefile中建议的构建命令。
提前感谢,如果我忽略了什么非常明显的问题,请谅解!