Ну, могло б .
Наприклад, в діалекті C, використовуваному в операційній системі Plan 9main , зазвичай оголошується voidфункцією, але статус виходу повертається в середовище виклику шляхом передачі вказівника рядка на exits()функцію. Порожній рядок позначає успіх, а будь-який не порожній рядок позначає певний збій. Це може бути реалізовано при наявності mainповертати char*результат.
І, безумовно, можна було б запровадити систему зі статусом floatабо doubleвихід.
То чому int? Це лише питання конвенції - і величезна цінність у тому, щоб операційні системи та програми, що працюють під ними, дотримувалися загальної конвенції.
Угода Unix полягає у використанні цілого коду статусу з 0, що позначає успіх і ненульове позначення провалу (тому що зазвичай існує лише один спосіб досягти успіху, але є кілька способів відмови). Я не знаю, що ця конвенція виникла з Unix; Я підозрюю, що він з'явився з попередніх операційних систем.
Плаваюча точка буде складнішою умовою, оскільки (a) підтримка з плаваючою комою не є універсальною; (b) складніше визначити відображення між значеннями з плаваючою комою та умовами помилок; (c) різні системи використовують різні плаваючі представлення точок та (d) просто уявіть собі задоволення відслідковувати помилку округлення у статусі виходу програми. Цілі особи, з іншого боку, дуже добре піддаються перерахуванню кодів помилок.
Як я вже згадував, план 9 використовує рядки, але це накладає певну складність для управління пам'яттю, кодування символів тощо. Наскільки я знаю, це була нова ідея, коли План 9 реалізував її, і вона не замінила існуючої поширена конвенція.
(До речі, на C ++ mainможна повертатися лише тодіint , а на C void mainдозволено лише в тому випадку, якщо компілятор спеціально його підтримує. Багато компіляторів не скаржаться дуже голосно, якщо ви пишете void main, але це лише невелике перебільшення, якщо сказати, що це неправильно .)