Ответ 1
Ранние реализации С++, основанные на переводе на C, реализовали глобальные конструкторы путем добавления вызова функции в начало main
. В такой реализации вызов main
снова заново запустит глобальные ctors, что приведет к хаосу, поэтому было просто запрещено это делать.
С, с другой стороны, не было причин запрещать звонить main
, и это всегда было традиционно возможным.
Что касается того, когда это полезно, я бы сказал "редко". Большинство программ, которые я видел, называемые main
, были записями IOCCC.