我看到a snippet of code on CodeGolf这是一个编译器炸弹,其中main
被声明为一个巨大的数组。我尝试以下(无弹)版本:为什么将main声明为数组编译?
int main[1] = { 0 };
这似乎编译罚款锵之下,只有在GCC警告:
警告:“主”通常是一个函数[ - Wmain]
生成的二进制文件当然是垃圾文件。
但为什么它编译?它是否被C规范允许?我认为相关的部分说:
5.1.2.2.1计划启动
称为在程序启动的功能被命名为主力。该实现没有声明这个函数的原型。它应该用int类型的返回类型定义,并且不带任何参数或者带有两个参数,或者以某种其他实现定义的方式定义。
“某些其他实现定义的方式”是否包含全局数组? (在我看来,该规范仍然指代函数。)
如果不是,它是一个编译器扩展吗?或者是工具链的一个特征,用于其他目的,并且他们决定通过前端使其可用。
它**不**编译。 ISO C禁止零大小的数组。 – Jens
C规范不允许。编译器通常会执行规范未涵盖的内容。 –
相关问题:[一个全局变量的程序如何调用main而不是主函数?](http://stackoverflow.com/q/32851184/1708801)。我想也受到了一个codegolf问题的启发。 –