是一个没有main()标准的C或C ++程序吗?

时间:2011-08-21 19:42:42

标签: c++ c

我参与了与我的一位同事的讨论,他说可以在没有主要的情况下在C和C ++中“运行程序”,在托管环境中也是如此。我说根据标准,这是完全错误的。然后他让我看到提及

this链接
  

几年来,提交的条目显然非常荒谬,需要对明年的某些规则作出新的定义。这被视为一种崇​​高的荣誉。一个例子是世界上最短的自我复制计划。该条目是一个零字节长度的程序,如果在屏幕上打印零字节(只是一个空文件)。

我认为根据C和C ++标准,解决方案不正确。你们怎么看待这个?

另请查看this链接。

3 个答案:

答案 0 :(得分:11)

据说有些编译器接受了没有main()的程序,并从库中提供了自己的无操作回退main()。但是,这些程序并不符合要求。

您所指的事件是1994年IOCCC的smr条目。但是,正如竞赛所公布的那样,它根本没有使用C编译器!它的Makefile节包含:

smr: smr.c
    @${RM} -rf smr
    ${CP} smr.c smr
    ${CHMOD} +x smr

所以它没有编译它,只是将空的.c复制到一个空的shell脚本中。

法官之所以没有因为完全无意义和偏离主题而被抛弃的原因一定是空文件(至少在传统上)是C中的合法编译单元并编译成一个如果您愿意,.o没有问题 - 仅仅形成一个完整的程序是不够的。

答案 1 :(得分:8)

main肯定是C程序的标准入口点,但非标准C程序可能从其他地方开始,例如Windows GUI应用程序往往从WinMain开始,或者链接器有/ENTRY指令,因此您可以完全绕过CRT并使用自定义函数启动应用程序。

答案 2 :(得分:4)

如果托管环境中的程序没有主程序,则根据标准,它不是C或C ++。