Следующая программа отлично компилируется без ошибок или предупреждений (даже с -Wall
) в g++, но сбой немедленно.
#include <cstdio>
int stuff(void)
{
puts("hello there.");
return 0;
}
int (*main)(void) = stuff;
Это (явно ужасно ошибочная) попытка запуска программы на С++ без явного объявления main как функции. Это было мое намерение для программы выполнить stuff
, привязывая ее к символу main
. Я был очень удивлен, что это скомпилировано, но почему именно он терпит неудачу, скомпилировав? Я посмотрел на сгенерированную сборку, но я не знаю достаточно, чтобы понять ее вообще.
Я полностью понимаю, что существует множество ограничений о том, как main
можно определить/использовать, но я не понимаю, как моя программа прерывает любую из них. Я не перегружал main или называл его в своей программе... так точно, какое правило я нарушаю, определяя main
таким образом?
Примечание: это не то, что я пытался сделать в реальном коде. На самом деле это было началом попытки написать Haskell в С++.