История изменений
Исправление hummer, (текущая версия) :
Ну, в команде с такими как ты я точно не стал бы работать.
Да ты вообще в команде работать не можешь.
Проблемы вызывает расчёт кода на отрицательные числа там, где их быть не должно. И, повторюсь, такие баги я видел (в публичном популярном софте) и не один раз. В том числе и потому, что переполнение signed int наступает в два раза раньше того, что могло бы быть, а unsigned даже если переполнится, то во многих (не во всех - и программист разумеется должен это всё предусматривать) случаях это произойдёт прозрачно и без багов (не надо делать спец. ветки кода для обработки).
Целочисленное переполнение возникает либо из-за неправильной реализации алгоритма, либо из-за недостаточной разрядности числа (и речь вовсе не о недостатке в один сраный бит). Ни в первом ни во втором случае unsigned не является панацеей и нужно либо исправлять алгоритм кода, либо переходить на long или long long (в зависимости от дата модели LP64 или LLP64). Твоё утверждение о том, что целочисленное переполнение unsigned менее болезненно, чем signed - просто враньё.
Ошибки конечно у всех бывают, но сравнивать не надо. Код многократно перепроверяется перед попаданием в рабочую версию.
Ещё как надо сравнивать, потому что в таком лихом и плохочитаемом кода такая бага может сидеть незамеченной годами. Статическую типизацию придумали как раз для выявления как можно большего числа подобных проблем на этапе компиляции, но ты считаешь себя умнее и просто отключаешь надоедливые предупреждения компилятора о несоответствии типов.
Это в дурацком clang-е нельзя. А так, разумеется, можно.
Да что ты говоришь? Ты вообще знаешь, что такое прототип функции в Си? Где находятся прототипы вариантов функции main()?
И разницы вобщем-то никакой - и то и то это всего лишь соглашение с используемой libc.
Ты просто нахально пользуешься отсутствие перегрузки функций в Си. И ты до сих пор не смог внятно объяснить зачем тебе так хочется именно unsigned int argc, что аж зудит.
Если других источников ориентации нет - то остаётся только так, да. Но это ж не всегда так.
Расскажи про свои источники ориентации на unsigned int argc.
Плевать.
Гораздо логичнее плевать на твои странные хотелки.
Тем более что оно не про Си.
А в чём принципиальная разница? В C++ эти типы ведут себя как-то иначе или компилируются в какой-то другой машинный код?
Хорошо, перефразирую - в «win32 native проге с стандартной ms библиотекой есть WinMain и нету main». А entry point не будет ни одно из них. Entry point - в статически слинкованной части rtl, он уже, среди прочего, вызывает одну из этих трёх обычных функций. Да, можно перенастроить линкер чтобы он сделал entry point’ом какую-то самописную функцию, но обычно так не делают. И argc argv ей точно никто не передаст, она должна будет сама их получать с помощью winapi.
Entry Point - это точка входа в код твоего приложения. Если ты написал виндовое приложение на Си, точкой входа может быть один из трёх вариантов, которые я перечислил выше. Какой код инициализации его вызывает никакого значения не имеет. В случае нативного консольного виндового приложения будет вызвана функция инициализации mainCRTStartup, которая вызовет main(). Есть и другие *CRTStartup функции инициализации, вызывающие другие точки входа в приложении на Си.
Исходная версия hummer, :
Ну, в команде с такими как ты я точно не стал бы работать.
Да ты вообще в команде работать не можешь.
Проблемы вызывает расчёт кода на отрицательные числа там, где их быть не должно. И, повторюсь, такие баги я видел (в публичном популярном софте) и не один раз. В том числе и потому, что переполнение signed int наступает в два раза раньше того, что могло бы быть, а unsigned даже если переполнится, то во многих (не во всех - и программист разумеется должен это всё предусматривать) случаях это произойдёт прозрачно и без багов (не надо делать спец. ветки кода для обработки).
Целочисленное переполнение возникает либо из-за неправильной реализации алгоритма, либо из-за недостаточной разрядности числа (и речь вовсе не о недостатке в один сраный бит). Ни в первом ни во втором случае unsigned не является панацеей и нужно либо исправлять алгоритм кода, либо переходить на long или long long (в зависимости от дата модели LP64 или LLP64). Твоё утверждение о том, что целочисленное переполнение unsigned менее болезненно, чем signed - просто враньё.
Ошибки конечно у всех бывают, но сравнивать не надо. Код многократно перепроверяется перед попаданием в рабочую версию.
Ещё как надо сравнивать, потому что в таком лихом и плохочитаемом кода такая бага может сидеть незамеченной годами. Статическую типизацию придумали как раз для выявления как можно большего числа подобных проблем на этапе компиляции, но ты считаешь себя умнее и просто отключаешь надоедливые предупреждения компилятора о несоответствии типов.
Это в дурацком clang-е нельзя. А так, разумеется, можно.
Да что ты говоришь? Ты вообще знаешь, что такое прототип функции в Си? Где находятся прототипы вариантов функции main()?
И разницы вобщем-то никакой - и то и то это всего лишь соглашение с используемой libc.
Ты просто нахально пользуешься отсутствие перегрузки функций в Си. И ты до сих пор не смог внятно объяснить зачем тебе так хочется именно unsigned int argc, что аж зудит.
Если других источников ориентации нет - то остаётся только так, да. Но это ж не всегда так.
Расскажи про свои источники ориентации на unsigned int argc.
Плевать.
Гораздо логичнее плевать на твои странные хотелки.
Тем более что оно не про Си.
А в чём принципиальная разница? В C++ эти типы ведут себя как-то иначе или компилируются в какой-то другой машинный код?
Хорошо, перефразирую - в «win32 native проге с стандартной ms библиотекой есть WinMain и нету main». А entry point не будет ни одно из них. Entry point - в статически слинкованной части rtl, он уже, среди прочего, вызывает одну из этих трёх обычных функций. Да, можно перенастроить линкер чтобы он сделал entry point’ом какую-то самописную функцию, но обычно так не делают. И argc argv ей точно никто не передаст, она должна будет сама их получать с помощью winapi.
Entry Point - это точка входа в код твоего приложения. Если ты написал виндовое приложение на Си, точкой входа может быть один из трёх вариантов, которые я перечислил выше. Какой код инициализации его вызывает никакого значения не имеет. В случае нативного консольного виндового приложения будет вызвана функция инициализации mainCRTStartup, которая вызовет main(). Есть и другие *CRTStartup функции инициализации, вызывающие другие точки входа в приложение на Си.