#include <stdio.h>
#define main() main(){printf("hi");}int i()
main()
{//empty main
}
int i()
答案 0 :(得分:3)
这是一个相当愚蠢的程序,但int i()
的目的是为了编译 - 最后的括号:
{//empty main
}
如果#define
语句中没有包含函数声明,将导致错误。如果我删除它,gcc会给出错误:
testfile.c:4: error: expected identifier or ‘(’ before ‘{’ token
你可以使用-E
标志来查看为什么int i()
是必要的 - 它会在不编译的情况下显示预处理器的输出。
答案 1 :(得分:3)
考虑一下如果在程序中展开宏main()
,你会得到什么:
#include <stdio.h>
main(){printf("hi");}int i()
{//empty main
}
需要int i()
来创建语法上有效的函数定义的剩余{ ... }
部分。
至于意图,我只能猜测宏的重点是用存根替换现有的main
。这是一个有点icky IMO。
答案 2 :(得分:3)
在该代码中,main()
将被展开,结果将以
int i()
{//empty main
}
的用途是什么?
int i()
它使得一个非常奇怪且破碎的宏的输出可编辑
答案 3 :(得分:-4)
#include <stdio.h>
#define main() main(){printf("hi");}int i()
main()
{//empty main
}
I guess int i() is another preprocessor directive which should be called in the program after main.