The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Выпуск ControlFlag 1.0, инструмента для выявления ошибок в коде на языке Си

19.11.2021 16:39

Компания Intel опубликовала первый значительный релиз инструментария ControlFlag 1.0, позволяющего выявлять ошибки и аномалии в исходных текстах, используя систему машинного обучения, натренированную на большом объёме существующего кода. В отличие от традиционных статических анализаторов, ControlFlag не применяет готовых правил, в которых трудно предусмотреть все возможные варианты, а отталкивается от статистики использования всевозможных языковых конструкций в большом числе существующих проектов. Код ControlFlag написан на языке С++ и открыт под лицензией MIT.

Система обучается путём построения статистической модели имеющегося массива кода открытых проектов, опубликованных в GitHub и подобных публичных репозиториях. На стадии обучения система определяет типовые шаблоны построения конструкций в коде и строит синтаксическое дерево связей между этими шаблонами, отражающее поток выполнения кода в программе. В итоге формируется эталонное дерево принятия решений, объединяющее опыт разработки всех проанализированных исходных текстов. Для проверяемого кода выполняется похожий процесс определения шаблонов, которые сверяются с эталонным деревом принятия решений. Большие расхождения с соседними ветвями свидетельствуют о наличии аномалии в проверяемом шаблоне.

В качестве примера возможностей ControlFlag разработчиками был проведён анализ исходных текстов проектов OpenSSL и cURL:

  • В OpenSSL были выявлены аномальные конструкции "(s1 == NULL) ∧ (s2 == NULL)" и "(s1 == NULL) | (s2 == NULL)" , не соответствующие обычно используемому шаблону "(s1 == NULL) || (s2 == NULL)". В коде также были выявлены аномалии в выражениях "(-2 == rv)" (минус был опечаткой) и "BIO_puts(bp, ":") <= 0)" (в контексте проверки успешного завершения функции должно было быть "== 0").
  • В cURL выявлена незамеченная статическими анализаторами ошибка при использовании элемента структуры "s->keepon", который имел числовой тип, но сравнивался с булевым значением TRUE.

Из особенностей версии ControlFlag 1.0 отмечается полная поддержка типовых шаблонов для языка Си и возможность выявления аномалий в условных выражениях "if". Например, при анализе фрагмента кода "if (x = 7) y = x;" система определит, что обычно в операторе "if" для сравнения числовых значений используется конструкция "переменная == число", поэтому с большой вероятностью указание "переменная = число" в выражении "if" вызвано опечаткой. В комплекте предоставляется сценарий, позволяющий загрузить имеющиеся в GitHub репозитории на языке Си и использовать их для построения модели. Также доступны уже готовые модели, позволяющие сразу приступить к проверке кода.

  1. Главная ссылка к новости (https://github.com/IntelLabs/c...)
  2. OpenNews: Выпуск PHPStan 1.0, статического анализатора для кода на языке PHP
  3. OpenNews: Выпуск cppcheck 2.6, статического анализатора кода для языков C++ и С
  4. OpenNews: Facebook открыл код статического анализатора Mariana Trench
  5. OpenNews: Intel открыл код системы машинного обучения ControlFlag для выявления ошибок в коде
  6. OpenNews: Релиз свободного статического анализатора кода frama-clang 0.0.5
Лицензия: CC-BY
Тип: Программы
Короткая ссылка: https://opennet.ru/56187-controlflag
Ключевые слова: controlflag, intel
Поддержать дальнейшую публикацию новостей на OpenNET.


Обсуждение (200) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Урри (ok), 16:42, 19/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +17 +/
    Все, Rust больше не нужен?
     
     
  • 2.2, Аноним (2), 16:45, 19/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Программисты больше не нужны
     
  • 2.3, Урри (ok), 16:45, 19/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Сам себе отвечу - все еще нужен. Но только после того, как в него будет встроена обученная система (путём построения статистической модели имеющегося массива кода открытых проектов, опубликованных в GitHub и подобных публичных репозиториях) с парочкой новых синтаксических конструкций вроде $$&: и $$&:$.

    И главное(!) не забыть что-нибудь сломать. Чтобы новым компилятором старый код больше не собирался.

     
     
  • 3.10, Аноним (10), 17:07, 19/11/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Ты вроде описал только что Copilot.
     
  • 3.34, пох. (?), 19:42, 19/11/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > И главное(!) не забыть что-нибудь улучшить!

    поправил, не благодари.

    P.S. разумеется, немодный неулучшенный исходник улучшенным компилятором собираться не будет. Это, в конце-концов, просто небезопастно.


     
  • 3.65, Аноним (65), 21:32, 19/11/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    На чём обучать-то? Завершённого кода на Rust нет.
     
     
  • 4.85, Аноним (10), 07:30, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Там можно обучать на незавершенном.  А для тех кто научился проект всегда найдется например https://github.com/servo/servo давно бы пора уже дописать.
     
  • 4.89, anonymous (??), 09:56, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Доказать можете? Или это просто фантазии?
     
  • 3.181, freecoder (ok), 22:40, 21/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Вы описали бессмысленные и несуществующие в Rust синтаксические конструкции. Что же касается сборки старых проектов: у вас есть негативный опыт? Можете его описать подробне? Не встречал ни разу сколь либо значимых проблем с обратной совместимостью в Rust. Не за то критикуете.
     
  • 2.5, Андрей (??), 16:58, 19/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    ПМСМ и не нужен был, сразу со своего появления всё чем он тащил, так это рекламой, в остальном по мне код на расте ужасное нечитаемое Г, как будто раст развивают те же любители бесконтрольно пачками тащить в язык новомодные конструкции и плюшки, как в том же питоне и плюсах - как итог однородность кода падает и постоянные переключения в восприятии препятствуют накоплению устойчивого опыта в анализе кода, другими словами - лучше проще, но без крайностей.
     
     
  • 3.142, Прохожий (??), 23:46, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >по мне код на расте ужасное нечитаемое Г

    Или твои когнитивные способности оставляют желать лучшего. Ну не всем в жизни с интеллектом повезло, бывает.

     
  • 2.7, Enamel (ok), 17:02, 19/11/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    В Расте гораздо больше интересностей, чем почему-то рекламирумый один лишь safe.
    Сям до него далеко.

    Но старый код на си никто не отменял, к сожалению.

     
     
  • 3.11, Аноним (10), 17:08, 19/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Да всем честно говоря пофиг на твой раст.
     
     
  • 4.21, _ (??), 18:04, 19/11/2021 [^] [^^] [^^^] [ответить]  
  • +10 +/
    Три дня! Три дня я гналась за вами, чтобы сказать, как вы мне безразличны!
     
     
  • 5.134, Аноним (134), 17:15, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Да нет. Написать однострочный комментарий это дело максимум одной минуты. Тем более, ответить "да мне всё равно" на чей-нибудь рассказ и гнаться за кем-то, чтобы первым завести разговор это разные вещи.

    Но вот за всех говорить не есть хорошо.

     
  • 4.27, Аноним (27), 18:59, 19/11/2021 [^] [^^] [^^^] [ответить]  
  • –2 +/
    И это true
     
     
  • 5.97, Аноньимъ (ok), 13:03, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    #define true false
     
  • 4.66, Аноним (66), 22:19, 19/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Да, всем...
     
  • 4.81, anonymous (??), 04:18, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Тогда зачем было про него спрашивать изначально?
     
  • 4.84, Ordu (ok), 06:04, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Загляни в лог модерирования, чтобы заценить насколько "всем пофиг".
     
  • 3.28, Аноним (27), 19:02, 19/11/2021 [^] [^^] [^^^] [ответить]  
  • –3 +/
    проблема раст какраз в safe и unsafe

    без unsafe вы не можете ничего.

    А суть в чём? вы пытаетесь решить те проблемы которых в современном C++ не существует уже 100 лет в обед.

    Всё уже решено без вас, но вы же что, документацию осилить не в состоянии!

    smart pointers, range loop, etc, не не слышали?

     
     
  • 4.63, Аноним (-), 21:20, 19/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > проблема раст
    > Всё уже решено без вас, но вы же что, документацию осилить не в состоянии!
    > smart pointers,

    А ты самокритичный. Только зачем пишешь о себе в третьем лице?

     
  • 4.76, adolfus (ok), 00:50, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Речь идет о С. Каким боком тут С++?
    Кстати, пишу на C со времен Microsoft С 6.0. Что-то ни в какой safety и прочей нубо-херне не нуждаюсь. Да, на C писать занудно, долго, напряжно и, возможно, даже опасно, если не быть паранойиком, но на С++ косяков можно наделать на порядок больше, да и сами они будут гораздо убойнее. При этом програма будет зело тормозной.
    Не знаю за раст, но если там нет возможности управлять памятью, обращаясь для этого напрямую к операционке, то место его рядом с жаврой и решетками.
     
     
  • 5.77, Аноним (77), 01:16, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > Речь идет о С. Каким боком тут С++?

    Ты совершенно прав. Это именно так.

    Я думаю C++ сюда приплели тем-же боком каким приплели rust. Т.е. это был ответ тому вон пленному слоугному который приплёл сюда свой раст.

    Тем не менее C++ гораздо ближе к C чем раст. Так таки обоим + а расту -

     
  • 3.78, Аноним (77), 01:17, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Раст это тот который C--?
     
     
  • 4.148, Прохожий (??), 01:16, 21/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Евгений Ваганович, это вы?
     
  • 2.9, Аноним (9), 17:03, 19/11/2021 [^] [^^] [^^^] [ответить]  
  • –2 +/
    roosterы, всюду приплетающие rust, не нужны.
     
     
  • 3.150, Прохожий (??), 01:20, 21/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Да, в клубе ценителей г-на мамонта не нужны, тут ты прав.
     
  • 2.20, Корец (?), 17:58, 19/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А он разве нужен был?
     
  • 2.82, anonymous (??), 04:21, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Не спору ради, а просто уточнить: вы действительно думаете что вероятностная определялка локальных AST-паттернов (на основе обучения) заменяет safety-by-design от Rust?
     
     
  • 3.115, Урри (ok), 14:49, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Нет. И мне кажется, что мой троллинг должен быть вполне очевиден любому человеку с IQ больше 50.

    И еще: мне очень нравится идея safety-by-design от Rust, но очень не нравится сам Rust, который взял и навалил огромнейшую кучу гoвнa поверх жемчужины. При этом я искренне не могу понять тех, кто это гoвнeцo наворачивает с причмокиванием и хвалит.

    Жду, когда ту же идею реализуют в чем то, что будет иметь изначально продуманный дизайн, который не придятся ломать каждых три месяца ввиду "ой, а вот это мы не продумали, давайте навалим парочку новых заплаток".

     
     
  • 4.143, Прохожий (??), 23:53, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Можно больше подробностей про то, где в Расте что-то ломают каждые три месяца?
    Ну и про кучу Г в исполнении Раста, тоже хотелось бы понять, что вы там никак не осилите. Обычно человек ругает то, с чем не в состоянии разобраться.
     
     
  • 5.171, Урри (ok), 18:30, 21/11/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Обычно человек ругает то, с чем не в состоянии разобраться.

    "Я не жирная, меня все оговаривают потому что завидуют" (с)
    Обычно не надо разбираться в последних нюансах вкуса сортов говна и деталях запаха оного чтобы утверждать "это говно".

    Или вы действительно считаете, что раст - это такой недостижимый рокет-саенс, самый сложный и умный язык тысячелетия, с которым не судьба разобраться практикующим уже более 20 лет программирование на различных языках, начиная с ассемблера и заканчивая хаскелем? Поэтому они и плюются, ведь им так больно, что не смогли осилить то, что осилили вы с вашим iq 75?

    > тоже хотелось бы понять

    Тысячу раз уже перетирали, с большими и пространными простынями. Не вижу смысла делать то же самое тысячапервый.

     
     
  • 6.176, Аноним (-), 20:43, 21/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Или вы действительно считаете, что раст - это такой недостижимый рокет-саенс, самый
    > сложный и умный язык тысячелетия, с которым не судьба разобраться практикующим
    > уже более 20 лет программирование на различных языках, начиная с ассемблера
    > и заканчивая хаскелем? Поэтому они и плюются, ведь им так больно,
    > что не смогли осилить то, что осилили вы с вашим iq
    > 75?

    Ну вот ты - не осилил, на чем тебя пару раз и ловили. После чего ты предпочел писать поменьше конкретики, ограничивая обыкновенным словесным поносом "ни о чем".
    А судя по плаванию в терминологии с той же "хвостовой рекурсией" - и хаскель ты тоже "осилил" примерно на том же уровне.


     
     
  • 7.180, Урри (ok), 22:07, 21/11/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ээээ, щито? На чем там меня ловили?
    Вам, уважаемый, раст совсем мозги выел?

    ---
    Ахахахахах, растоманы действительно считают раст самым сложным языком, недоступным другим. Спасибо, я хорошо проржался. У меня появился еще один аргумент в троллинге растофанатиков.

     
     
  • 8.183, Аноним (-), 23:01, 21/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    О, в ход пошел самый аргументативный аргумент Впрочем, ничего нового У тебя ... текст свёрнут, показать
     
  • 2.141, Прохожий (??), 23:41, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Как только люди не извращаются, только бы не переходить на изначально нормальный, современный язык Rust, свободный от недостатков г-на мамонта под названием Си. Ещё больше чекеров богу чекеров. Уже до машинного обучения дошло там, где нормальный компилятор проверяет подобные ошибки легко и непринуждённо. А луддиты ликуют - им очередной костыль подарили. Инвалиды, что с них взять. Интеллектуальные инвалиды.
     
     
  • 3.175, Урри (ok), 19:25, 21/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > ... нормальный компилятор ...

    А-ха-ха-ха-ха-ха-ха.

     

     ....большая нить свёрнута, показать (37)

  • 1.4, Андрей (??), 16:52, 19/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +6 +/
    Вообще интересно, что на это скажут PVSники и находит ли их анализатор эти ошибки ?
     
     
  • 2.6, Старшина (?), 17:02, 19/11/2021 [^] [^^] [^^^] [ответить]  
  • –3 +/
    именем чебурнета нашаго, не задавай такие наивные вопросы. кому надо, тому доложено
     
  • 2.8, Аноним (8), 17:02, 19/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    присоединяюсь к вопросу. может быть достойных конкурент для них
     
     
  • 3.13, Аноним (10), 17:10, 19/11/2021 [^] [^^] [^^^] [ответить]  
  • +8 +/
    PVS и раньше не был единственный производителем анализаторов кода.  
     
     
  • 4.17, Аноним (8), 17:24, 19/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Тут, как я понимаю, принциально другой подход к поиску - с отличием от набора эвристик для поиска. таких не было
     
  • 2.12, Аноним (10), 17:09, 19/11/2021 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Да они опубликуют очередной пост на хабре. Это не компания производитель софта это компания производитель постов  на хабр.  
     
  • 2.15, Аноним (15), 17:14, 19/11/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Ну на эту тему они уже высказались на Хабре: https://habr.com/ru/company/pvs-studio/blog/484208/ и https://habr.com/ru/company/pvs-studio/blog/496536/

    И, что показательно, сами того не заметив, в качестве примера хорошего срабатывания DeepCode в первой статье привели неправильную рекомендацию (DeepCode не заметил неправильный Content-Type).

     
  • 2.197, Аноним (197), 13:59, 22/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Можно подумать это не они тут seo себе накручивают в комментах...
     
  • 2.209, Andrey_Karpov (ok), 11:25, 23/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Комментировал на тему ControlFlag здесь: https://habr.com/ru/company/pvs-studio/news/t/589247/comments/#comment_2372743
     

  • 1.18, Аноним (18), 17:34, 19/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Неужели эта поделка поможет решету стать менее дырявым? Лучше бы труЪ-сишников, у которых никогда ничего не падает, научились клонировать. Вот на опеньке сколько именных кандидатов - один 100 языков знает, другой всегда пишет без бэд-аксесов.
     
     
  • 2.144, Прохожий (??), 00:00, 21/11/2021 [^] [^^] [^^^] [ответить]  
  • –3 +/
    >Неужели эта поделка поможет решету стать менее дырявым?

    Нет, конечно. Но она поможет какое-то время верить луддитам в свою восстребованность без необходимости учить что-то более нормальное и адекватное (Rust). Мозг-то изначально интеллектом не блистал, только на Си их и хватило за всю жизнь. А к старости и усыхать начал. Обидно ведь за бортом рынка труда остаться.

     
     
  • 3.155, Аноним (155), 10:25, 21/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ох как только языком это раст’аманы могу. Это все что они могут - трепать языком. А теперь давай собирай свои растовые программы без libc. Если мозгов только хватает чтобы за тебя другие разработчики возились с памятью, указателями и процессором тебе бы лучше оставить профессию людям с IQ куда выше табуретки. Иди на надевай фуфайку и на завод работать, нечего делать тебе в офисе.
     
     
  • 4.165, DyadyushkaAU (ok), 13:08, 21/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > А теперь давай собирай свои растовые программы без libc

    Ты так пишешь, как будто ты - один из авторов libc. Хорош петросянить, займись уже чем-нибудь более полезным. ;)

     
  • 4.166, Аноним (-), 13:11, 21/11/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > А теперь давай собирай свои растовые программы без libc.

    Какой занятно-махровый ламеризм
    https://man7.org/linux/man-pages/man2/syscalls.2.html
    > System calls are generally not invoked directly, but rather via
    > wrapper functions in glibc (or perhaps some other library).

    Хотя да, сначала можно повозмущаться использованием программамаи на rust "системного апи", а если притащат свой рантайм - "опять у них синдром НИХ!" - вин-вин, че.

     

  • 1.22, Аноним (22), 18:14, 19/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    Т.е. если большинство делает какую-либо ошибку, которая приводит к дырым, эта вундервафля заставит и остальных так поступать? Это вы хитро придумали.
     
     
  • 2.31, Аноним (31), 19:11, 19/11/2021 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Она не отыскивает ошибки, а она определяет аномалии.
    И если все делают одну и ту же ошибку, то какая же это аномалия?  Это уже диалект.

    Поэтому надо быть готовым к ситуации, когда свободолюбивые западные программисты сочтут сообщения компилятора дискриминацией по ошибочному признаку и потребуют от производителей систем и/или железа исключить возникновение ряда распространённых ошибок (запись в NULL-поинтер, например).

    Для работы в таких условиях искать надо не ошибки, а именно аномалии.

     
     
  • 3.132, Аноним (134), 16:51, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Хватит приплетать. Сходите к врачу, не перекладывайте с больной головы на здоровые.
     

  • 1.23, ыы (?), 18:14, 19/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    >В качестве примера возможностей ControlFlag разработчиками был проведён анализ исходных текстов проектов OpenSSH и cURL:

    Гора родила мышь

     
  • 1.26, Аноним (31), 18:58, 19/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Чтобы научить ИИ отыскивать ошибки, нужен бы большой массив кода с уже кем-то найденными ошибками, помеченными и описанными, но ещё не исправленными, разве не?
     
     
  • 2.169, Аноним (169), 16:41, 21/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А оно ищет не ошибки, а аномалии. То есть всё, что выглядит необычно.
     

  • 1.64, Sw00p aka Jerom (?), 21:26, 19/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >>В cURL выявлена незамеченная статическими анализаторами ошибка при использовании элемента структуры "s->keepon", который имел числовой тип, но сравнивался с булевым значением TRUE.

    это где то я уже видел :)

     
  • 1.68, Аноним (31), 22:54, 19/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    > В cURL выявлена незамеченная статическими анализаторами ошибка при использовании элемента структуры "s->keepon", который имел числовой тип, но сравнивался с булевым значением TRUE.

    это чистой воды бюрократия.

    потому что cURL написан на сях, в которых тип _Bool появился только в C99 (bool есть его define), поэтому в stdbool.h и в lib/curl_setup_once.h, значение true во всех определениях сводится к 1, а false -- к 0;
    TRUE определён как define от true.

    поэтому ошибкой будет только ситуация, когда смысл в поле вкладывается не булевый.

    в текущей версии (7.80) данное поле определено как enum, поэтому теперь такая ситуация исключена.

     
     
  • 2.83, Ordu (ok), 04:31, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Почему бы алгоритму этот смысл не вычислить Ему ж это ещё проще будет, чем чело... большой текст свёрнут, показать
     
     
  • 3.90, Аноним (90), 10:16, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    по стандарту ложное значение 0, истинное не 0.
     
     
  • 4.91, Ordu (ok), 10:51, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    И что Глянь struct MyStruct int my_flag 1 int main struct My... большой текст свёрнут, показать
     
     
  • 5.92, n00by (ok), 11:12, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >> по стандарту ложное значение 0, истинное не 0.
    > И что?

    Он забыл процитировать стандарт.

    > В C bool должна быть 0 для false, и 1 для true.

    Так и есть. Из N1570:

    6.2.5 Types
    2 An object declared as type _Bool is large enough to store the values 0 and 1.

    6.3.1.2 Boolean type
    1 When any scalar value is converted to _Bool, the result is 0 if the value compares equal to 0; otherwise, the result is 1.

     
     
  • 6.93, Sw00p aka Jerom (?), 11:42, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >Так и есть. Из N1570:

    строгое значение, и что по вашему должен делать компилятор когда bool сравнивается с 2-ой?

    зачем анализатор должен об этом говорить если компилятор должен выдавать ошибку о несоответсвии типов? Делает он это?

     
     
  • 7.110, n00by (ok), 14:16, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    >>Так и есть. Из N1570:
    > строгое значение, и что по вашему должен делать компилятор когда bool сравнивается
    > с 2-ой?

    По-моему, меня пытаются убедить, что я должен за кого-то прочитать integer promotion rules.

    > зачем анализатор должен об этом говорить если компилятор должен выдавать ошибку о
    > несоответсвии типов? Делает он это?

    Это он ведущему программисту Rosa Tresh должен, у которого типизация в Си строгая.

     
     
  • 8.116, Sw00p aka Jerom (?), 14:50, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    ясно, все неявное становится явным ну раз не строгая, то зачем сравнение bool с ... текст свёрнут, показать
     
     
  • 9.119, n00by (ok), 14:58, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Да мне пофик на анализатор, кто-то наврал про стандарт, это недоразумение я и ис... текст свёрнут, показать
     
     
  • 10.123, Sw00p aka Jerom (?), 15:12, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    почему это наврал он написал по стандарту ложное значение 0, истинное не 0 а... текст свёрнут, показать
     
     
  • 11.153, n00by (ok), 10:15, 21/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Вероятно, потому что не читал стандарт Очевидно, не 0 и 1 это не одно и то же... текст свёрнут, показать
     
     
  • 12.167, Sw00p aka Jerom (?), 14:36, 21/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    очевидно у вас с англ проблемы ... текст свёрнут, показать
     
     
  • 13.168, n00by (ok), 15:21, 21/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Не волнуйтесь, ничего страшного Я тоже не нашёл Да и зачем Бремя доказательст... текст свёрнут, показать
     
     
  • 14.170, Sw00p aka Jerom (?), 17:56, 21/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    а if что делает любое не нулевое значение - истина ... текст свёрнут, показать
     
     
  • 15.187, n00by (ok), 08:50, 22/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Для поиска ответа надо всего лишь открыть стандарт и прочитать пункт The if stat... текст свёрнут, показать
     
     
  • 16.204, Sw00p aka Jerom (?), 21:38, 22/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    смотрим в книгу видим фигу, ясно ... текст свёрнут, показать
     
     
  • 17.206, n00by (ok), 07:45, 23/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    А я всё думаю, что же Вы там такое видите, что процитировать стесняетесь ... текст свёрнут, показать
     
     
  • 18.210, Sw00p aka Jerom (?), 11:40, 23/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    6 3 1 2 Boolean type 1 When any scalar value is converted to _Bool, the result i... текст свёрнут, показать
     
     
  • 19.211, n00by (ok), 12:03, 23/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Напоминаю, что обещали найти истинное не 0 -1 это не 0 2 это не 0 Это сложн... текст свёрнут, показать
     
     
  • 20.214, Sw00p aka Jerom (?), 13:21, 23/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    комент 3 90 по стандарту ложное значение 0, истинное не 0 так и есть, по стан... текст свёрнут, показать
     
  • 21.215, n00by (ok), 14:31, 23/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Но никто третий день не может привести цитату, тогда как _Bool определён как 0 и... текст свёрнут, показать
     
  • 22.216, Sw00p aka Jerom (?), 15:43, 23/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    так речь не об этом была, и никто это не оспаривал, что булевый тип есть множест... большой текст свёрнут, показать
     
  • 23.217, n00by (ok), 15:58, 23/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Дословно по стандарту ложное значение 0, истинное не 0 Нет цитаты с определе... текст свёрнут, показать
     
  • 24.218, Sw00p aka Jerom (?), 17:09, 23/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Утверждение по стандарту ложное значение 0, истинное не 0 вы себе надомули как... текст свёрнут, показать
     
  • 25.220, n00by (ok), 17:22, 23/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Остаётся недоказанным Вы автор Или читаете его мысли Буквально ложное значен... текст свёрнут, показать
     
  • 26.222, Sw00p aka Jerom (?), 17:45, 23/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    определения не доказываются, а используются в доказательстве, логическом выводе ... большой текст свёрнут, показать
     
  • 27.225, n00by (ok), 07:14, 24/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Вернул выкинутое при цитировании, что бы подмена была видна Ищите в стандарте о... большой текст свёрнут, показать
     
  • 26.224, Sw00p aka Jerom (?), 18:31, 23/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    http www open-std org jtc1 sc22 wg14 www docs n2310 pdf Раздел 6 8 4 1 The if ... большой текст свёрнут, показать
     
  • 27.226, n00by (ok), 07:16, 24/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Ну вот, уже освоили поиск по названиям пунктов, которые я давал Но это не про и... текст свёрнут, показать
     
  • 24.219, Sw00p aka Jerom (?), 17:15, 23/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    а если дословно, то тут можно придраться ко всему, и понимай как хочешь Вы поня... текст свёрнут, показать
     
  • 25.221, n00by (ok), 17:31, 23/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Это если не читать стандарт, тогда можно Стандарт в 100 раз более скрупулёзен ч... текст свёрнут, показать
     
  • 26.223, Sw00p aka Jerom (?), 17:49, 23/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    какой стандарт пошли уже придирки - вы же не телепат, с чего вы взяли что реч... текст свёрнут, показать
     
  • 27.227, n00by (ok), 07:23, 24/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Речь шла о языке Си, стандарт языка Си Где якобы по стандарту ложное значение ... текст свёрнут, показать
     
  • 28.228, Sw00p aka Jerom (?), 11:49, 24/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    ок, тогда выше есть выдержка определения условного оператора, там написано ровно... текст свёрнут, показать
     
  • 29.229, n00by (ok), 16:26, 24/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Не надоело Там даже слов true и false нет Я понимаю, что со стандартом надо ум... текст свёрнут, показать
     
  • 30.230, Sw00p aka Jerom (?), 21:07, 24/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    а что должно было быть, когда есть понятие нуля и не нуля ... текст свёрнут, показать
     
  • 31.231, n00by (ok), 07:38, 25/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Должно быть подтверждение заявления по стандарту ложное значение 0, истинное не... текст свёрнут, показать
     
  • 32.233, Sw00p aka Jerom (?), 18:23, 25/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Так и написано 6 3 1 2 Boolean type 1 When any scalar value is converted to _Boo... текст свёрнут, показать
     
  • 33.234, n00by (ok), 11:59, 26/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Дамы и господа, делайте ставки В левом углу ринга непревзойдённый натягиватель ... текст свёрнут, показать
     
  • 34.235, Sw00p aka Jerom (?), 14:06, 26/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    вот она истина, ну и замените 1 на 2 в своем макросе true и скормите оператору i... текст свёрнут, показать
     
  • 35.236, n00by (ok), 14:28, 26/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Упростим Балабол заявил, что в стандарте значение истинное не 0 В стандар... текст свёрнут, показать
     
  • 36.237, Sw00p aka Jerom (?), 16:03, 26/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    повторяю еще раз, истина как хранимое значение не равно истинное сравнива... текст свёрнут, показать
     
  • 37.238, n00by (ok), 08:06, 27/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Заявление балабола по стандарту значение истинное не 0 Содержимое ста... текст свёрнут, показать
     
  • 38.239, Sw00p aka Jerom (?), 11:49, 27/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    да именно истинное , а не истина это содержимое макроса истина , а истинно... текст свёрнут, показать
     
  • 39.240, n00by (ok), 13:16, 27/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Заявление балабола по стандарту значение истинное не 0 Содержимое ста... текст свёрнут, показать
     
  • 40.241, Sw00p aka Jerom (?), 14:25, 27/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    продолжайте в том же духе, ниже копипаста комента ... текст свёрнут, показать
     
  • 41.242, n00by (ok), 07:34, 28/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Что же заставило Sw00p aka Jerom, который впервые увидел выдержки из стандарта н... текст свёрнут, показать
     
  • 42.243, Sw00p aka Jerom (?), 12:45, 28/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    вы уже азбуку повторили ... текст свёрнут, показать
     
  • 43.244, n00by (ok), 17:20, 28/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Могу повторить последний фокус Есть ещё пара лишних недель ... текст свёрнут, показать
     
  • 44.245, Sw00p aka Jerom (?), 17:25, 28/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    продолжайте, флаг вам в руки... текст свёрнут, показать
     
  • 45.246, n00by (ok), 17:35, 28/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Хорошо Осталось уточнить один момент У тебя уже было такое, что администратор ... текст свёрнут, показать
     
  • 46.247, Sw00p aka Jerom (?), 00:28, 29/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    а с коих пор мат не должен пресекаться модераторами с моей стороны мат только в... текст свёрнут, показать
     
  • 47.248, n00by (ok), 07:51, 29/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Значит это ты матерился Вот отрицающему текст стандарта балаболу я обязательно... текст свёрнут, показать
     
  • 48.249, Sw00p aka Jerom (?), 11:20, 29/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    только щас дошло наивный эт на какое такое место чтобы заткнуть человека, ко... текст свёрнут, показать
     
  • 49.250, n00by (ok), 11:52, 29/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Ой, ой, полегче на поворотах с нотациями и попыткой списать дефекацию ганглия на... текст свёрнут, показать
     
  • 5.96, Аноним (31), 13:00, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    если ты проверяешь значение как if x , значит ты проверяешь его на не но... большой текст свёрнут, показать
     
     
  • 6.98, Аноньимъ (ok), 13:12, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >сишный стандарт -- он для людей, занимающихся разработкой системного или компактного ПО.

    Да вы издеваетесь?
    Вы сами только что простыню накатали о такой простой и одназначной вещи как булева переменная.
    Каким образом ЭТО для людей?

    Отсутствие системы типов как таковой это не для людей.

    И да, код с такими чудесами ниразу не переносимый и не кроссплатформенный.

     
     
  • 7.105, Аноним (-), 14:02, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Анон все правильно говорит, ну всмысле про сравнение на неноль. дальше читать лень. Кто не понимает сей - начинает толкать ахинею про стандарты и бульёны
     
  • 7.127, Аноним (31), 15:46, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Простыня имеет отношение не к "компактным программам на C",
    а к непонятливости некоторых комментаторов.

    Путающих к тому же предмет рассуждения дважды в пяти строках человечьего текста.
    Компилятор бы вас не понял.


    > Каким образом ЭТО для людей?

    Поинтересуйтесь на kernel.org.


    > И да, код с такими чудесами ниразу не переносимый и не кроссплатформенный.

    Не поверите, но только одной из задач C была переносимость кода первых UNIX на разные платформы, с совместимостью которых в 70-ых были большие проблемы.
    Также можете поинтерсоваться у любителей играть с ардуиной или писать для андройдов.

     
  • 6.118, Sw00p aka Jerom (?), 14:57, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    >если же ты присваиваешь значению 2, значит ты не считаешь значение булевым.

    значимость (значение) всегда предшествует истинности, машина ничего не знает об истинности, она работает со значениями. Истинность (какое из значений считать истиной) подразумевает человек,

    2 - истина, 3 - инверсия (отрицание) истины (пример из марсианского языка).

     
  • 6.145, Прохожий (??), 00:19, 21/11/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Думаю, это все-таки тебе надо поразмыслить вот над чем. Программирование чего-либо - это не процесс ради процесса. Программированием обычно какую-то конечную цель пытаются достичь. И если на языке А это делается с головой болью, бессонными ночами и нервотрепкой в попытке разобраться, где произошло некорректное приведение типов или обращение к не той области памяти, а на языке Б такие ошибки сведены к минимуму, то разумный рациональный человек выберет язык Б.
    А вот неосилятор языка Б будет орать на каждом углу о своей исключительности и гениальности: ведь он может на языке А написать за неделю то, что на языке Б делается спокойно за день. Только вопли его вряд ли кому-то будут интересны.
     
  • 5.172, Урри (ok), 18:43, 21/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Харош троллить детей.
    Ты пишешь в однобитовое поле двойку, теряя все биты переполнения. Ясное дело в сравнение уйдет ноль. Об этом, кстати, компилятор прямо говорит:

    warning: overflow in conversion from ‘int’ to ‘signed char:1’ changes value from ‘2’ to ‘0’

    --
    > если ты из указателя сделаешь bool, то ты рискуешь нарваться на ровно ту же самую проблему.

    А ты не делай bool, потому что это не правильно. И компилятор тебе об этом тоже совершенно недвусмысленно скажет. То, что С позволяет тебе по желанию стрелять в ногу не значит что ты обязан это делать. Просто пиши if (my_pointer) и не будет никаких проблем.

    _Bool x = (_Bool) &var;
    warning: the address of ‘var’ will always evaluate as ‘true’

     
     
  • 6.186, Ordu (ok), 23:46, 21/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Ты про principle of the least surprise слышал Так вот, этот принцип _требует_, ... большой текст свёрнут, показать
     
     
  • 7.188, n00by (ok), 09:07, 22/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > Ты про principle of the least surprise слышал? Так вот, этот принцип
    > _требует_, чтобы когда я выполнял бы в коде что-нибудь типа:
    > my_struc.field = does_sun_shines_now();
    > в этой самом my_struc.field оказывалось бы булевское значение.

    Упомянутый принцип в данном случае запрещает сохранять результат функции _now. Си язык императивный, значит команды выполняются последовательно. К моменту проверки my_struc.field тот момент "сейчас" уже в прошлом, Солнце могло зайти.

    Корректна следующая конструкция, где результат 2 вполне допустим

    if ( does_sun_shines_now() ) {

    }

     
     
  • 8.192, Ordu (ok), 09:53, 22/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Во-первых, тебя сейчас понесло в сторону Даже если ты прав, то ты описываешь _е... большой текст свёрнут, показать
     
     
  • 9.193, n00by (ok), 10:25, 22/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Ну да, когда состояние где-то сохраняется - это потенциальный источник ошибок Н... большой текст свёрнут, показать
     
     
  • 10.195, Ordu (ok), 12:33, 22/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Принцип наименьшего удивления, если присмотреться, субъективный в своей основе, ... большой текст свёрнут, показать
     
     
  • 11.198, n00by (ok), 14:28, 22/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Вот это хороший пример Это можно очень похоже написать на языке OCaml, который ... большой текст свёрнут, показать
     
  • 7.199, Урри (ok), 15:33, 22/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Не смешивай буль и бит. Это разные сущности.

    А второе элементарно решается с помощью #define bool _Bool или даже typedef _Bool bool;

     
  • 4.95, ng (ok), 12:42, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Почему-то многие это обстоятельство упускают из вида Основные философские положе... большой текст свёрнут, показать
     
     
  • 5.102, Аноним (102), 13:58, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Ну, и классический пример - безопасное копирование одной строки в другую

    только в хеловорлде оно безопасно

     
     
  • 6.111, ng (ok), 14:17, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > только в хеловорлде оно безопасно

    Эмоциональное замечание - читаем бездоказательное замечание.

    :-)

     
     
  • 7.117, n00by (ok), 14:51, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Ну вообще там два копирования, следующий вариант скомпилируется в ряде случаев 1 в 1 с исходным



        int main()
        {
            char pSrc[] = "Hello world!";
            char pDst[] = "Hello world!";

            puts( pDst );

            return 0;
        }



     
     
  • 8.131, ng (ok), 16:51, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    В исходном примере Одно копирование и Одна инициализация Пожалуйста, слегка моди... текст свёрнут, показать
     
     
  • 9.156, n00by (ok), 11:16, 21/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    А char ps pSrc не инициализация Копирование как таковое вроде в Си не опред... текст свёрнут, показать
     
     
  • 10.160, ng (ok), 12:06, 21/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Общее частное Физика изучает идеальный газ , представляемый бесконечно малы... большой текст свёрнут, показать
     
     
  • 11.161, n00by (ok), 12:14, 21/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Я не понял, при чём тут газ и лёд, и когда проходят болезни неофитов Вон в сосе... текст свёрнут, показать
     
     
  • 12.162, ng (ok), 12:33, 21/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Просто хочется избежать деструктивного перехода на личности, что отвлекает сути ... текст свёрнут, показать
     
     
  • 13.163, n00by (ok), 12:56, 21/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Так вот общий случай - это работа с памятью Частный случай - копирование Перед... текст свёрнут, показать
     
  • 5.106, Аноним (-), 14:03, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    >  позволяет писать лаконичный и безопасный код:

    "Халва, халва, халва, ... хм, чей-то во рту все еще не сладко - наверное недостаточно усердно повторял".

    > Ну, и классический пример - безопасное копирование одной строки в другую без
    > затрат на проверку указателей и размерностей массивов.
    > #include <stdio.h>

    ЧСХ - "безопасТно" оно только в таком вот хелловроте,
    а в реальности, отсутсвие размерности не позволит компилятору ускорить копирование в несколько раз векторизацией. Зато сэкономили "на спичках"^W проверку - да, это классический пример.

     
     
  • 6.112, Аноним (-), 14:22, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > а в реальности, отсутсвие размерности не позволит компилятору ускорить копирование в несколько раз векториза

    Что ты такое несешь ?! O_O

     
     
  • 7.121, Аноним (-), 15:06, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >> а в реальности, отсутствие размерности не позволит компилятору ускорить копирование в несколько раз векториза
    > Что ты такое несешь ?! O_O

    Зачем ты лезешь в обсуждение, не зная основ?



            movaps  xmm0, xmmword ptr [rip + .L__const.main.pSrc+16]
            movaps  xmmword ptr [rbp - 32], xmm0
            movaps  xmm0, xmmword ptr [rip + .L__const.main.pSrc]
            movaps  xmmword ptr [rbp - 48], xmm0



    vs.



    .L2:
            movzx   edx, BYTE PTR [rsi+rax]
            mov     BYTE PTR [rcx+rax], dl
            add     rax, 1
            test    dl, dl
            jne     .L2



     
  • 6.154, ng (ok), 10:18, 21/11/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Иногда лучше реально жевать, чем об этом говорить, когда нечего сказать Вероятн... большой текст свёрнут, показать
     
     
  • 7.164, Аноним (-), 12:57, 21/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > Иногда лучше реально жевать, чем

    чем сначала приводить "пример - безопасТное копирование строки", а затем придумывать отмазки ...

    > Джуниоры выбирают сладкий смузи
    > виски со льдом в ущерб приторной содовой.
    > В реальности будет по-взрослому на быстрых функциях memcpy, strcpy и т.п.
    > Прошу заметить, что понятия "лаконичность" и "безопасность" относятся к стилю кодирования
    > программ, исключая отдельные операторы или функции.
    > Наивно полагаясь на оптимизацию компилятора, джуниор просто перекладывает свою ответственность
    > на других программистов, создавших компилятор.

    То, что ты очередной опеннетный теоретик-балабол, стало понятно еще из предыдущего примера, не нужно подтверждать это почетное звание еще раз ...

     
     
  • 8.194, ng (ok), 12:25, 22/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Юпитер, ты злишься, а значит ты не прав - ... текст свёрнут, показать
     
  • 5.114, n00by (ok), 14:37, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Потому что такого обстоятельства нет На уровне АЛУ процессора есть флаги нул... большой текст свёрнут, показать
     
     
  • 6.137, ng (ok), 18:12, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > А в "классическом Си" никакого TRUE не было.

    Согласен, ибо "всё есть int", включая указатели. :-)

     
  • 5.135, Ordu (ok), 17:22, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > if ( pStr && *pStr )

    За венгерскую нотацию полагается стерилизация, чтобы избежать распространения вредоносных мутаций ДНК.

     
     
  • 6.139, Аноним (31), 18:47, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > За венгерскую нотацию полагается стерилизация, чтобы избежать распространения вредоносных мутаций ДНК.

    как, по-вашему, правильнее:

    if (the_pointer_to_the_string_with_our_QR_code_data && *the_pointer_to_the_string_with_our_QR_code_data) ...

    или

    // тут мы проверяем указатель на строку, в которой хранятся данные QR-кода
    if (p && *p)

    ?

    и чем вам не угодил лаконичный pStr?
    мешают вашим алгоритмам вычислять смысл содержимого?

     
     
  • 7.151, Ordu (ok), 03:34, 21/11/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >> За венгерскую нотацию полагается стерилизация, чтобы избежать распространения вредоносных мутаций ДНК.
    > как, по-вашему, правильнее:
    > if (the_pointer_to_the_string_with_our_QR_code_data && *the_pointer_to_the_string_with_our_QR_code_data)
    > ...

    Что ты бред несёшь? В C не бывает "string", только "pointer to string". Зачем вообще это писать сокращённо или развёрнуто, если это и так ясно? Назови переменную qr, и этого за глаза и за уши хватит.

    > и чем вам не угодил лаконичный pStr?

    Попробуй чтоль заглянуть в википедию и почитать что там написано про венгерскую нотацию. Мне кажется, там была описана история, и почему майкрософтовское использование этой, исходно неплохой идеи, вылилось в полный бред.

     
     
  • 8.173, Урри (ok), 19:01, 21/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Я бы за qr уши оторвал Вместе с пальцами ... текст свёрнут, показать
     
     
  • 9.182, Ordu (ok), 22:44, 21/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Почему Короткое и описательное имя переменной Вот если у тебя в коде полсотни ... текст свёрнут, показать
     
  • 7.157, n00by (ok), 11:22, 21/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > и чем вам не угодил лаконичный pStr?

    Префикс p в Венгерке означает указатель, а не массив.

     
  • 6.140, ng (ok), 18:58, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    >> if ( pStr && *pStr )
    > За венгерскую нотацию полагается стерилизация, чтобы избежать распространения вредоносных
    > мутаций ДНК.

    О трудах агронома Трофима Лысенко слышал, но не изучал. Селекция видов - не мой бизнес.

    Допуская, что разведение верблюдов - ответственное дело, буду признателен за демонстрацию влияния способа именования переменных на семантику условного оператора из примера.
    :-)

     
  • 3.94, Аноним (31), 12:25, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +3 +/
    У вас нет опыта разработки Если разработчик может допустить _любое_ значение ... большой текст свёрнут, показать
     
     
  • 4.99, Аноньимъ (ok), 13:20, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >Поэтому любой нормальный программист пишет код так, чтобы при малейшей ошибке, возникающей по вине внутренних переменных, программа упала сразу и со сброшенным на диск дампом.
    >Потому что источником неверных и некорректных значений может быть только внешняя среда -- пользователь, некорректные настройки, etc. -- "_любое_" значение может прийти только отсюда. Именно эти значения проверяются и исправляются, когда возможно.
    >Если "_любые_" значения появляются в других местах, значит программа генерирует неверные значения и работать корректно не может в принципе.

    Так, а как ТАК пишут код чтобы программа СРАЗУ упала при ошибке во внутренних переменных без проверок этих внутренних значений на корректность?

     
     
  • 5.120, Аноним (31), 15:05, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ну, например, если передать NULL в dest в strcpy , то будет ошибка сегментации ... большой текст свёрнут, показать
     
     
  • 6.122, Аноним (31), 15:08, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Пример с NULL в strcpy(), ессно, слишком толстый.
    Но он примерно показывает суть, когда надо падать, а когда -- проверять, корректировать или штатно завершать работу с кодом ошибки.
     
  • 6.124, Аноньимъ (ok), 15:15, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >Поэтому программа при _внутренних_ ошибках -- зависящих _только_ (подчёркиваю подчёркиваниями) от устройства программы и ни от чего больше -- должна упасть сразу.

    А она знает что она должна упасть?

     
  • 4.100, Ordu (ok), 13:42, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Если разработчик может допустить "_любое_" значение в переменных, имеющих конкретный смысл
    > и конкретный спектр принимаемых значений, то он немедленно признаётся профнепригодным
    > и увольняется.

    Хахахаха. Это ты так троллить пытаешься?

     
  • 4.107, _kp (ok), 14:06, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Да ну Оглянитесь Вне поделок на десктопе такое не допустимо Автомобили, пр... большой текст свёрнут, показать
     
     
  • 5.113, Аноним (31), 14:33, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Вы путаете падения релизов с падениями некорректных сборок и падениями дебажных ... большой текст свёрнут, показать
     
     
  • 6.136, _kp (ok), 17:58, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    В идеале, но это не значит, что сбои не возникнут, не смотря на все старания и т... большой текст свёрнут, показать
     
     
  • 7.138, Аноним (31), 18:38, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    ещё раз: у вас речь идёт о падениях релизов;
    речь про core dumped идёт в отношении дебажных версий;


    > Так ИНОГДА совсем нельзя. Последствия какие будут?

    вот об этом была и речь:

    >> Падения релизов не допустимы

     
  • 6.174, Урри (ok), 19:11, 21/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > А падения дебажных версий очень полезны -- это процесс разработки.

    Нет.

    > Так вот тут речь идёт именно о дебажных версиях: если проект серьёзный
    > и ошибку не заметят ни ваши тестеры, ни контрольная группа предзаказчиков,

    Если проект серьезный, то программисты расставляют везде где надо assert. А где не надо - обработку неправильных значений с возвратом ошибки.

    Программа НЕ ДОЛЖНА НИКОГДА падать. Это закон. Любое падение - ЧП и обязано быть рассмотрено в отдельном порядке.

    Сходите на полгодика в автомотив поработать, наберетесь неоценимого опыта.

     
  • 4.146, Прохожий (??), 01:10, 21/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    >Если разработчик может допустить "_любое_" значение в переменных, имеющих конкретный смысл и конкретный спектр принимаемых значений

    Ох уж этот мне юношеский максимализм. Давно в профессии? Подозреваю, что год-два, не более, раз такую ахинею несёшь.

    Возможность совершать ошибки заложено в нас природой. Мы - существа, живущие в вероятностном мире, и должны уметь выживать в этом мире, поэтому наше поведение тоже вероятностно. Когда человек ошибается - это нормально и точно не повод гнать из профессии.

    Отцу русской демократии помогут языки со строгой типизацией. Открой для себя достижения прогресса. Си к таковым, увы, не относится. Это Г давно уже следует похоронить и забыть, как о страшном сне.

     
     
  • 5.185, _kp (ok), 23:28, 21/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > следует похоронить и забыть, как о страшном сне.

    Есть такая поговорка, программист на Си может писать на Си на любом языке программирования.

    Если всякий язык сводить к Си и низкоровому мышлению, там где это не неуместно, без представления работы в целом, на более высоких уровнях, то на выходе два основных варианта, или "противотанковый" стиль программирования, но медленно и с атавизмами, или тормоза, жор памяти, отладочные дампы, и немедленные падения.

    Ну бывает, вроде бы и язык новый, а проблемы старые.

     

     ....большая нить свёрнута, показать (106)

  • 1.73, Аноним (73), 23:51, 19/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Если написать код на Vala, транслировать в С и скормить этому чуду - он прожует?
     
     
  • 2.74, mikhailnov (ok), 00:17, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Если найдёт аномалии, что вы с этим будете делать?
     
     
  • 3.86, Аноним (10), 07:31, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Выкинет вала и будет писать на С.
     
     
  • 4.147, Прохожий (??), 01:13, 21/11/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Так сделал бы только человек с удручающе низкими когнитивными способностями.
     
  • 3.88, n00by (ok), 09:41, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Для начала на тривиальном примере посмотрим, что будет делать с аномалиями ведущ... большой текст свёрнут, показать
     
     
  • 4.101, Аноним (-), 13:48, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    В чем прикол ? Один буфер на весь запуск или что-то не так ?
     
     
  • 5.109, n00by (ok), 14:14, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Прикол в том, что код написал "ведущий программист", как заявляет его работодатель. Значит он сам может ответить на достаточно простой вопрос, надо немножко подождать. В крайнем случае кого-то спросит. Они же как бэ разрабатывают операционную систему, а не тупо пилят? ;)
     
     
  • 6.126, mikhailnov (ok), 15:23, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > Прикол в том, что код написал

    Нет. Смотри историю коммитов: https://github.com/mikhailnov/bbb-load-tester/commits/49d1725/ondemandcam.c
    В первом коммите есть ссылка на источник.

    > "ведущий программист", как заявляет его работодатель.

    Это где такое написано? Вот чтоб прям программист и прям ведущий.

    > Внимание, вопрос: есть ли и где ошибка?

    Там open_vpipe() вызывается один раз и из main(), free() перед завершением программы смысла иметь не будет.

     
     
  • 7.158, n00by (ok), 11:53, 21/11/2021 [^] [^^] [^^^] [ответить]  
  • –3 +/
    А, ну да RPM-разработчики не отвечают за код под которым подписываются На сайт... большой текст свёрнут, показать
     
     
  • 8.178, mikhailnov (ok), 21:18, 21/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    один из ведущих разработчиков ведущий программист , как бы тебе ни хотелос... текст свёрнут, показать
     
     
  • 9.189, n00by (ok), 09:11, 22/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    То есть ты не умеешь программировать И спросить тебе некого, вокруг такие же ма... текст свёрнут, показать
     
     
  • 10.205, mikhailnov (ok), 22:10, 22/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Умерь свои фантазии о наличии каких-то там потуг и ЧСВ вместе с ними ... текст свёрнут, показать
     
     
  • 11.208, n00by (ok), 07:58, 23/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Обезьяньи потуги это твоё выражение Поскольку ты не способен объяснять свои д... текст свёрнут, показать
     
  • 8.179, mikhailnov (ok), 21:29, 21/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Этот код напоминает мою раннюю писанину на баше глобальные переменные, опериров... текст свёрнут, показать
     
     
  • 9.190, n00by (ok), 09:13, 22/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    То есть найти ошибку в приведённом фрагменте из 7 строчек ты не смог Я не счита... текст свёрнут, показать
     
  • 4.129, Аноним (31), 16:02, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    очевидно, что open_vpipe() используется только в этом C-файле -- это служебная внутренняя функция, её суть -- в подсчёте аргумента malloc'а из width и height, а также в понятном (разработчику) названии.

    результат её выполнения освобождается силами простого free(vpipe);
    никаких лишних аргументов для free() считать не надо, поэтому обёртка для него не нужна;

    и что не так?

     
     
  • 5.130, Аноним (31), 16:32, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    аа, увидел но сначала вопрос ёлки-палки, кто ж так код сокращает это ж непон... большой текст свёрнут, показать
     
     
  • 6.159, n00by (ok), 11:53, 21/11/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Про отсутствие free() я явно написал и лишнее не цитировал, поскольку вопрос касается только работы с памятью (и на мелочи вроде int для размера закрываем глаза). Программист операционных систем ответил в #126, что система за ним подчистит, а код вообще писал не он. :) То что Вы копали глубже и нашли close() лишь усугубляет ситуацию.


     
  • 6.191, n00by (ok), 09:20, 22/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    В итоге "ведущий разработчик" публично признал в #178, что он не программист. Вопрос "зачем там вообще allocated storage" снят. :)
     

     ....большая нить свёрнута, показать (18)

  • 1.103, . (?), 13:59, 20/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    работает без сети? база уже входит в поставку?
     
     
  • 2.104, Аноним (104), 14:01, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Рабтает. База как и раньше скачивается отдельно, три вида: Small, Medium, Large.
     
     
  • 3.108, . (?), 14:07, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    ага, прочёл уже. https://github.com/IntelLabs/control-flag

    нужно попробовать. надеюсь не будет тонны варнингов на отсутствие скобок в & ^ |

     
     
  • 4.133, . (?), 17:09, 20/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    попробовал medium. гиг в оперативке, на час - 10к строк кода/40 файлов. ничего не нашло. слабенький компьютер, маленький проект.
     

  • 1.152, Аноним (152), 05:37, 21/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А знаете, какой еще инструмент может определить аномалии и непохожести кода на чужой код? Любой антиплагиат. Если у меня свой интересный стиль написания кода, это не значит, что у меня там ошибки и аномалии. cppcheck, clang-analyzer и -fsanitize всякие, если научиться ими пользоваться, дадут хорошее определение ошибок. А если еще и вспомнить великое искусство использования отладчиком, так вообще красота.
     
  • 1.177, Урри (ok), 20:46, 21/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Прогнал свой хелловорлд, 5600 строк страшноватого С (главная функция одна занимает 2000 строк, знаю-знаю...) и т.д., достаточно хаков ибо надо быстро, а не понятно даже ребенку.

    Нашло чуть более 400 "Expression" вида "if (d < 0) {" и т.д., причем все "Expression is Okay".
    Ничего не понял, все закрыл.

     
     
  • 2.196, Аноним (-), 13:21, 22/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Ты Си плюс-плюсник, другого оттебя и не ожидаешь. Любой чистосишник знает, что при превышении количества строк выше ста, надо код выносить на новый файл. Тебя плюсовика этому видимо не учили.

    И не позорь сишный стан.

     
     
  • 3.201, Аноним (201), 16:38, 22/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Плюсплюсник не станет городить метод из 2000 строк.
     
     
  • 4.202, Урри (ok), 17:00, 22/11/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Плюсплюсник не станет городить метод из 2000 строк.

    Именно.
    И метод такой большой ради скорости - это реализация виртуальной машины с большим свичом.
    Разбиение на отдельные функции приводит к усложнению поддержки и меньшей читабельности.

    Но это все офтопик. А топик в том, что этот инструмент в таком говнокоде (с точки зрения общепринятых практик) не нашел проблем.

     
     
  • 5.203, Аноним (-), 17:51, 22/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    >Разбиение на отдельные функции приводит к усложнению поддержки и меньшей читабельности.

    Ты сам понимаешь какую чушь ты несёшь?

     
     
  • 6.207, n00by (ok), 07:52, 23/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Посмотрите, к примеру, ВМ OCaml, что бы не задавать глупых вопросов.
     
     
  • 7.212, Аноним (-), 12:06, 23/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Защищать рукожопых плохое занятие.
     
     
  • 8.213, n00by (ok), 12:11, 23/11/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Анон, а что сделал ты, что бы я прислушался к твоему мнению Задизайнил язык, ко... текст свёрнут, показать
     

  • 1.184, burjui (ok), 23:28, 21/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Бесполезный софт. Опеннетовские сишники пишут код без ошибок, надо просто их размножить. Это сложно, т.к. девушек здесь нет, но что поделать?
     
     
  • 2.232, Аноним (-), 09:37, 25/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Ногебайсо, бум размножаться. Но что поделать ?
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:
    При перепечатке указание ссылки на opennet.ru обязательно



    Спонсоры:
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2021 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру