сигнатуры мейна выдают ошибку?
https://eel.is/c++draft/basic.start.main#1 Exactly one
Так вопрос же не в этом, я понимаю почему перегрузка мейна запрещена. Я не понимаю почему компилятор явно не жалуется на это?
Спроси у разработчиков компилятора
не обязан потому что
Кстати возможно все гораздо проще и проверка перегрузок идет просто раньше проверок мейна, вот он на этой ошибке в первую очередь и валится
clang вполне себе диагностирует это <source>:5:5: error: conflicting types for 'main' int main(int, char**) { ^ <source>:1:5: note: previous definition is here int main() { ^
Но... в С++ же можно перегружать :(
Вот человек и жалуется, что там не как в мсвц. Явно про main не написано <source>(6): error C2731: 'main': function cannot be overloaded <source>(6): note: see declaration of 'main'
в формулировке shall без оговорок про диагностики, так что должен
А как ты себе это представляешь то? Стартовой же функции плевать какие аргументы на самом деле у мейна, поддерживает, к примеру, компиль 3 аргумента, значит кинет она в мейн 3 аргумента в любом случае. Поэтому не особо понимаю твою демагогию по данному вопросу.
Я скорее про то, что стандарт явно запрещает перегрузку мейна, а два компиля ведут себя так, будто это просто какая-то сишная функция
Так это и есть си функция))
Компиляторы себя ведут в строгом соответствии со стандартом. Если вам это не нравится - ищите другой язык. Зачем тут флудить-то?🤬
Почему строго? Некоторые компиляторы не реализуют фишки новых стандартов и тд
Main - не функция!
Ну я даже рекурсию на ней сделать могу
Выше читай
Не можешь, стандарт запрещает использовать main в программе как я угодно
Ну, технически можно даже на ноль делить, только результат будет не совсем тот.
https://godbolt.org/z/o94v935bP
Ah, yes... Классическое "мое уб собралось и запустилось" Можно и нуллптр разыменовать и все будет работать
Это UB, компилятор не обязан его детектировать
В стандарте прямо написано что так нельзя, так почему оно компилируется? При чем всей большой троицей. Стандартом такое запрещено, но компилируется. И даже запускается.
https://t.me/supapro/1084456
UB оно такое. И собирается, и работает, вот только незадача, стандарт больше на вашу программу не распространяется. Совсем. На всю.
Уб компилируется ТК это уже становится кодом на конкретной машине
Компилятор имеет право делать что хочет вообще, если у вас хоть где-то UB. И никто не знает, что произойдет
Это от компилятора зависит
gcc старается нормально, а clang делает что хочет
Они все делают что хотят, просто вам повезло, что один сделал "правильно", как вам кажется
Нет, я создал уб поставил флаг оптимизации и там где должно быть всегда тру кланг кидает лож
потому что это - UB!
Обсуждают сегодня