最近,当我在gcc spec基准测试中运行一些clang实现时,我发现以下是gcc spec源代码:
int main PARAMS ((int argc, char **argv));
从c编程的角度来看,究竟是什么意思?可能是什么原因使用它?
答案 0 :(得分:4)
这是为了与不支持函数原型的古代编译器兼容。
现代编译器接受:
int main (int argc, char **argv);
古代人需要:
int main ();
因此,为了支持可能没有可变参数的预处理器,您可以这样做:
#if __STDC__
/*all standard compliant compilers since the 1st version of the standard
must both define __STDC__ to a truthy value and support function prototypes*/
# define PARAMS(X) X
#else
# define PARAMS(X) ()
#endif
/*...*/
int main PARAMS ((int argc, char **argv));