LINUX.ORG.RU

Thalassa 0.3.50

 , , , thalassa,


0

4

Выпущена новая версия Thalassa CMS под номером 0.3.50.

В этой версии переписан фильтр HTML-тегов для комментариев.

Разработчиком CMS является Андрей Викторович Столяров, также известный как @Croco.

>>> Подробности



Проверено: hobbit ()
Последнее исправление: leave (всего исправлений: 3)
Ответ на: комментарий от opcode

Учебник свой не пиши, не надо

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

откуда у тебя мысли о таком «всемогуществе» чтоб решать кого студентам слушать, кто калечит умы и т. д. Планета Земля не замрёт на месте без твоего участия? Не?

Как я уже говорил, это называется «профессиональное мнение». Ни больше, ни меньше. Не хотите слушать? Ради бога. Хотите? Давайте обсуждать. Но вы же не хотите. У вас столяров авторитет, а все остальные ему просто завидуют, и вообще тараканы ничтожные, не имеющие права критиковать вашего светоча.

liksys ★★★★
()
Ответ на: комментарий от MOPKOBKA

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

liksys ★★★★
()
Ответ на: комментарий от liksys

Ввод нормального assert дело лишь пары строчек, проще делать сразу хорошо!

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

MOPKOBKA ★★★★★
()
Последнее исправление: MOPKOBKA (всего исправлений: 2)
Ответ на: комментарий от MOPKOBKA

Ввод нормального assert дело лишь пары строчек, проще делать сразу хорошо!

Несколько ассертов в этом проекте за более чем пять лет мне ни разу не понадобилось. Не плоди сущности без необходимости.

потому что в assert у тебя выполняются не просто проверки, а код нужный для работы приложения.

Чушь не пори. Без ассертов у меня всё прекрасно работает. Просто я кидаю #error, если вижу NDEBUG, потому что код не должен делать что-то непонятное, лучше пусть падает и громко орет.

liksys ★★★★
()
Последнее исправление: liksys (всего исправлений: 1)
Ответ на: комментарий от liksys

Несколько ассертов в этом проекте за более чем пять лет мне ни разу не понадобилось. Не плоди сущности без необходимости.

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

Зачем тогда вообще проверять результат malloc? Нужно просто запретить запускаться с неправильным sysconf! Я помню ты жаловался когда об этом речь заходила, а свои проблемы исправлять не хочешь, лол.

Без ассертов у меня всё прекрасно работает.

Конечно нет, у тебя выражения вида assert(EXPR) где в EXPR например выделение памяти, а значит что без assert выделения памяти не будет, логика программы нарушается. Ты наверное думаешь что assert это функция, прочти мануал glibc, это макрос, и выражение внутри с NDEBUG не анализируется.

MOPKOBKA ★★★★★
()
Ответ на: комментарий от MOPKOBKA

Классное оправдание!

Клоунский нос сними.

Ты наверное думаешь что assert это функция

Нет, просто вместо чтения твоего поста я думал о чем-то своем, и отвечал мыслям в своей голове, вспоминая про выходы ассертами.

В общем, да. Ничего работать не будет, поэтому там и стоит #error.

liksys ★★★★
()
Ответ на: комментарий от liksys

Зачем ты пытаешься нарушить стандартное поведение стандартного макроса? Зачем ты игнорируешь советы из мануалов, нарушаешь принцип наименьшего удивления? Зачем ты ломаешь его базовую функциональность? Потому что тебе лень было сделать одну-две строчки с #define my_assert?

Можно еще макросом переопределить exit, что бы при пустом аргументе он был return; для выхода из void функции, как тебе идея? Попробуй, тебе вижу нравится «не плодить лишних сущностей», а ломать и изменять старые %)

MOPKOBKA ★★★★★
()
Последнее исправление: MOPKOBKA (всего исправлений: 1)
Ответ на: комментарий от liksys

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

Лол, ну это типичное поведение неумелого сишника, чет падает, надо буфер побольше выделить, ну ка ща нолик в конец размера добавлю!

Ты же понимаешь насколько это «защита» смешна? Один раз прокатить может, второй раз если будешь вычислять размер буфера, то и спасающий байт затрется.

Делай тогда уж как в Oberon, 3 страницы, две по бокам защитные ловушки, средняя для работы, при выходе segfault. Лучше конечно запомнить правила измерения размера, и писать код так, что бы не вычислять его постоянно, xsprintf как пример выше дал, можно string builder общий сделать, и даже не надо будет постоянно выделять на стеке буферы разных размеров.

MOPKOBKA ★★★★★
()
Последнее исправление: MOPKOBKA (всего исправлений: 2)
Ответ на: комментарий от vM

Конечно легко перепрыгнет если работа с большими индексами, но при линейной/строковой операции хотя бы будет segfault. С защитным байтом будет просто перезапись байта и вытекание в другие структуры.

MOPKOBKA ★★★★★
()
Последнее исправление: MOPKOBKA (всего исправлений: 1)
Ответ на: комментарий от MOPKOBKA

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

Лол, ну это типичное поведение неумелого сишника, чет падает

Клоунский нос сними, еще раз говорю. Объяснения про меры безопасности и длину по месту ты, видимо, тупо не понял.

liksys ★★★★
()
Последнее исправление: liksys (всего исправлений: 1)
Ответ на: комментарий от liksys

Мы уже выяснили что ты даже о поведении assert не догадывался, не надо пытаться съехать на то что я якобы мало понимаю.

Я пользуюсь макросом так, как мне нужно в этом проекте.

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

MOPKOBKA ★★★★★
()
Последнее исправление: MOPKOBKA (всего исправлений: 1)
Ответ на: комментарий от MOPKOBKA

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

Согласен, так оно и есть, однако этот факт никак не влияет на то что ты не осилил простой макрос…

Ты почему до сих пор не снял клоунский нос?

liksys ★★★★
()
Ответ на: комментарий от liksys

Мы уже выяснили, что я просто читаю твои бредни через слово.

Так же ты читаешь и мануалы %) Дислексия, я знаю какая тебе среда программирования нужна, зря ты так негативно о метапроге отзывался.

MOPKOBKA ★★★★★
()
Последнее исправление: MOPKOBKA (всего исправлений: 1)
Ответ на: комментарий от MOPKOBKA

И ты продолжаешь клоунаду. Всё, технической дискуссии больше не будет, помимо рассуждения о конях в вакууме?

liksys ★★★★
()
Ответ на: комментарий от liksys

Посредственно.

Это уже в плюс :) В том смысле, что многие не учат никак вообще. Это не такое простое дело на практике.

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

Он очень многое совремённое объявляет сортами дерьма и не хочет в нём разбираться, причём обосновывая почему. Такая позиция, схожая в радикализме со Столлмановской. Столлман, кстати, ещё радикальнее будет. Столяров только смартфоны не признаёт как средство коммуникации (хотя по собственному признанию имеет, но без симки), при этом пользуется сотовыми телефонами. Столлман умудряется как-то вовсе без них обходиться.

Я даже не уверен, что он не прав, если не на 100% то где-то во многом. Посуди сам. Вопросы с исполнением JS на машинах пользователей поднимал далеко не только Столяров, кажется на это впервые обратил внимание ещё Столлман или кто-то около него.

Но даже не думая с точки зрения информбезопасности совремённое веб-программирование таки ведь превратилось в какую-то невообразимую бредовую клоаку.

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

C# и Java - он называет не столько языками программирования, сколько средством завоевания мира. Хм, но если вдуматься, то разве не так?

Примерно тоже самое про аппаратную уже технологию USB. Не пользоваться ею не получится, но в чём он не прав, кроя нехорошими словами её создателей?

Это даже не говоря о том, что как программист он совершенный ламер, что можно видеть в его сабжевом коде. Буквально канонический пример того, что «кто не умеет - тот учит».

Не увидел сколько-то доказательного разбора его ламерства.

Баги с фильтрацией html - это ещё не ламерство. Ещё вроде уже не помню кто привёл пример с функцией, в которой len проверялась на -1 и что нечто аналогичное привело в баге в grub'e с сотней нажатий backspace. Ну так себе пример, надо ещё посмотреть, что такой сценарий с уязвимостью реализуем.

В остальном, что он пишет, используя своеобразное подмножество C++ на ламерство не тянут, коль он это совершенно сознательно делает.

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

Раньше не искал, но в ходе написания этого сообщения попробовал найти код такого гуру C++, как Скотта Майерса (кроме примеров в книгах), что-то им и не пахнет на его сайте https://www.aristeia.com/ (кстати, технически не далеко от столяровского ушёл, даже слабее). И даже гитхаба не нашёл, не считая реп его ревьюверов и сторонников с книжкой.

Так что в стиле обсуждения в данной теме, пока у меня больше оснований считать Скотта Майерса ламером как программиста, чем Столярова.

---

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

anonymous_incognito ★★★★★
()
Последнее исправление: anonymous_incognito (всего исправлений: 2)
Ответ на: комментарий от anonymous_incognito

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

Так и бейсик надо было отрицать в его времена.

с мегатонами совремённых библиотек, с чьей помошью очень серьёзные вещи делаются. Включая совремеённый ИИ, в которой без Питона просто не залесть сейчас.

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

firkax ★★★★★
()
Ответ на: комментарий от anonymous_incognito

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

Начальное обучение с помощью Бейсика всегда было ущербным. Что касается промышленной разработки, то Вы правы Питон это современный Вижуал Бейсик — клей для библиотек написанных настоящими разработчиками ПО.

sabacs
()
Ответ на: комментарий от firkax

Можно, можно. Да, придётся последовательно и трудолюбиво переписывать тонны всякого плохого кода в нормальный вид, но можно.

Что называется успехов, бро. Вот захотев войти в тему ИИ, найдя бесплатный курс от околоМФТИ-шных DLS, я вместо того, чтобы изучать предмет и выполнять домашние задания (чем кстати особенно ценен этот курс - наличием домзаданий и их проверкой peer review - можно ещё и чужие работы при этом глянуть и сравнить со своей), должен был бы параллельно с напряжением в изучении не самой простой темы своими уже, увы, далеко не молодыми мозгами, с фанатичным блеском в глазах пытаться всё на что, кстати, переписать?

C++ в плане манипулирования векторами и тензорами менее выразительный, чем Питон. В этом смысле Fortran лучше, чем C++, но боюсь он ещё ретрограднее кому-то показался бы.

Кроме того, Питон - это ещё и REPL-подход, когда можно в Jupyter-notebook потихоньку писать и изучать написанное, не отходя от кассы, так сказать. Что тоже для обучения чему-то сложному, вроде нейросеток, очень здорово помогает.

Для конкретных применений и так переписывают, есть же всякие llama.cpp или whisper.cpp - результат кстати неоднозначный, инференс на CPU быстрее, но добавляются баги, которых не было в исходных моделях.

anonymous_incognito ★★★★★
()
Ответ на: комментарий от anonymous_incognito

Вот пока будешь переписывать, всему и научишься. Подозреваю, что («изучать предмет и выполнять домашние задания») предмета как такового там практически нет, есть просто реализация известной математики. Математику - да, надо бы изучить заранее, это можно делать и без компа вообще. С курсами там скорее всего та же история как с вебом - научиться делать абы как абы что побыстрее, чтобы потом пытаться впарить это работодателям.

на что, кстати, переписать?

На C/C++ разумеется.

C++ в плане манипулирования векторами и тензорами менее выразительный, чем Питон.

Всё зависит от того, какую библиотеку для этого ты напишешь, и какого стиля кода будешь придерживаться.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от firkax

Вот пока будешь переписывать, всему и научишься.

Нет конечно, просто времени не хватит. Вот после того как научился, самому что-то с нуля реализовать неплохая идея. Я так и собирался поступить, но всё руки не доходят.

До Питона всякое ML и ИИ программировали обычно в матлабе.

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

Курсы конечно не заменят институтского обучения. Но из того, что есть бесплатного в интернете, они многими признаются чуть ли не лучшими. Рекомендую https://dls.samcs.ru/

На сам курс можно посмотреть, например, на https://stepik.org/course/181974/syllabus (вариант 2023 года, 1-й семестр), https://stepik.org/course/212797/syllabus (2-й семестр 2024) или https://www.youtube.com/@DeepLearningSchool - но там в неупорядоченном виде и много лишнего и нет домзаданий и некоторых ссылок на ноутбуки.

Всё зависит от того, какую библиотеку для этого ты напишешь, и какого стиля кода будешь придерживаться.

Библиотек для поддержки работы с математическим аппаратом ИИ на C++ на самом деле и так как собак нерезанных, в конце-концов, там где нужна реальная скорость работы Питон сам по себе не годится. Но как клей и как интерфейс к этим библиотекам он нашёл своё место.

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

Под капотом у PyTorch и других библиотек и так полно C и C++ кода, но не уверен, что для людей далёких от профессионального программирования: математикам, ML-инженерам, датасайентистам и тп. что-то кроме привычного уже им питона, будет лучше. А именно они развивают ИИ-тему.

anonymous_incognito ★★★★★
()
Последнее исправление: anonymous_incognito (всего исправлений: 2)
Ответ на: комментарий от anonymous_incognito

Курсы конечно не заменят институтского обучения. Но из того, что есть бесплатного в интернете, они многими признаются чуть ли не лучшими. Рекомендую https://dls.samcs.ru/

Вспоминая пары по программированию… Если сделать курс по аналитике (как разбивать проблему на составляющие) и курсы по поиску информации (анализу источников), то смысла в ВУЗовском образовании в его текущем виде будет немного.

gaylord
()
Ответ на: комментарий от anonymous_incognito

Он очень многое совремённое объявляет сортами дерьма и не хочет в нём разбираться, причём обосновывая почему.

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

Такая позиция, схожая в радикализме со Столлмановской. Столлман, кстати, ещё радикальнее будет.

Как я уже говорил, Столлман - публичный философ-аскет, а столяров - лишь посредственный преподаватель. Задача последнего - учить, а он вместо этого портит неокрепшие умы людей, вредя свободному ПО.

Вопросы с исполнением JS на машинах пользователей поднимал далеко не только Столяров

Именно поэтому у нас в браузерах существуют песочницы. JS - это возвращение тонких клиентов, онтогенез повторяет филогинез. Вот только наш пациент делает из этого катастрофу, и вместо того, чтобы показывать, как с этим жить и какую пользу из этого можно извлечь, засовывает голову в задницу и оттуда называет всех ламерами.

Питон с его экосистемой в этом смысле тоже не далеко ушёл

С питоном всё в порядке.

Не увидел сколько-то доказательного разбора его ламерства.

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

В остальном, что он пишет, используя своеобразное подмножество C++ на ламерство не тянут, коль он это совершенно сознательно делает.

Сознательное ламерство - все еще ламерство.

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

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

Можно отрицать Питон

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

liksys ★★★★
()
Последнее исправление: liksys (всего исправлений: 1)
Ответ на: комментарий от zabbal

Скорее всего потому что тупо не знал о его существовании.

У него весь ctype.h забанен оптом. Источник: http://thalassa.croco.net/doc/cpp_subset.html#libc_subset (это вроде ближайшая закладка, если сразу не увидишь – ищи слово ctype) Там много чего ещё забавного.

Кроме того, процитированный код же вроде не проверка, а вычисление значения.

frier
()
Ответ на: комментарий от frier

У него весь ctype.h забанен оптом.

Так isxdigit же не локалезависимый, он локалезависим только на винде, и может еще на каких-то системах, поклавших на стандарты.

Скорее всего не знал.

liksys ★★★★
()
Ответ на: комментарий от alysnix

вопрос - а с какими варнингами это компилируется?

У меня собралось без единого, при том что -Wall там везде вроде компилятору говорят. А чем тебе арифметический ноль не нравится? Это же кресты, а не чистый незамутнённый Це. Слово nullptr появилось аж в C++11, по меркам вселенной не так давно (а по меркам Столярова это, как он там выражается, ньюфажество и вообще международный терроризм). До той поры в крестах был именно арифметический ноль «каноническим» обозначением для не-адреса, точно помню, что Страуструп это ещё во втором издании «the language» настойчиво форсил, типа, никаких макросов, нолик и всё. Может, и в первом издании было, но первого я не видел.

странная манера выносить переменную цикла for наружу

Это не баг, это фича (пруф: http://thalassa.croco.net/doc/cpp_subset.html#novarinfor – он не поленился отдельный параграф для этого написать) Насколько я понимаю рациональ за этим, когда-то в доисторические времена описание переменной внутри for было видимо не только в этом for, а от него до конца блока. А потом придумали по-другому (более логично), что её должно быть видно только в самом цикле. В итоге код, в котором сначала for (int i = 0…), а потом просто for (i = 0…) компилился старыми компиляторами, но не компилился новыми, а код, в котором два подряд for (int i = 0…), наоборот, старые компиляторы не жрали из-за якобы повторного описания i.

Это всё давно было, ещё в середине девяностых, точнее не помню. Но Столяров, как в том анекдоте, «и постарше будет».

конструкторы желательно обозначать как explicit

А зачем, например, конструктор от двух или трёх параметров обозначать как explicit? Это я не к коду Столярова, просто интересно.

хидер, соответствующий данной единице компиляции, включается первым, а не последним

На эту тему есть ровно две школы: (1) которые считают, что нужно сначала свой хидер, потом хидеры своего проекта, потом системные, и (2) которые считают, что сначала нужно системные, потом проекта, потом свой собственный. Я видел аргументы в пользу обоих подходов.

излишнее использование указателей там, где нужно применять ссылку.

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

frier
()
Ответ на: комментарий от alysnix

0 подходит просто по дефолтнтой совместимости с числом

Попробуй как-нибудь на досуге указателю присвоить любое другое число (спойлер: компилятор тебя пошлёт). А ещё попробуй ноль присвоить не напрямую, а через какую-нибудь переменную, ну там i = 0; p = i; (спойлер: он тебя опять пошлёт). А ещё попробуй перегрузить какую-нибудь функцию, чтоб одна версия принимала int, а вторая какой-нибудь указатель вроде const char *, и попробуй эту функцию вызвать как f(0) в смысле вот прямо чтобы параметром был литерал нолик (спойлер: ты не поверишь, он тебя опять пошлёт, потому что ambiguity).

Я к тому, что нет там никакой «совместимости с числом» и никогда не было, ни в крестах, ни в чистом Це (ну хотя за K&R не поручусь, пожалуй).

На стандарты плевать – это Столяров бы одобрил, только он сюда больше не ходит, как я понял. Но это не стандарт, это Страуструп с самого начала так придумал, чтобы не надо было применять NULL (это всё потому что Страуструп ненавидит макропроцессор лютейшей ненавистью). Типа, буквально литерал 0 (не какой-то другой, а вот конкретно этот) обозначает и число типа int, и не-адрес.

frier
()
Ответ на: комментарий от praseodim

Автор использует ansi c, он же C89, в нем объявление переменной допустимо только в начале блока. С указанием -ansi компилятор выдаст Error на такое объявление.

Так это ж плюсы, при чём тут C89?

frier
()
Ответ на: комментарий от frier

Попробуй как-нибудь на досуге указателю присвоить любое другое число (спойлер: компилятор тебя пошлёт). А ещё попробуй ноль присвоить не напрямую, а через какую-нибудь переменную, ну там i = 0; p = i; (спойлер: он тебя опять пошлёт).

Не посылает почему-то.

#include<stdio.h>
int main()
{
   void *p;
   p = 0;
   printf("p = %ld\n",(long)p);
   p = (void*)1;
   printf("p = %ld\n",(long)p);
   return 0;
}

В 7-й строчке, если присвоить единицу без кастинга (void*) выдаст предупреждение, но программа всё-равно откомпилируется.

$ gcc -o pointer_num pointer_num.c 
pointer_num.c: In function ‘main’:
pointer_num.c:7:3: warning: assignment to ‘void *’ from ‘int’ makes pointer from integer without a cast [-Wint-conversion]
    7 | p = 1;
      |   ^

В любом случае программа нормально выполняется:

$ ./pointer_num 
p = 0
p = 1

Версия gcc.

$ gcc --version
gcc (Debian 12.2.0-14) 12.2.0

Более новую версию не ставил. Но даже если там будет ошибка, она скорее всего, вылечится указанием в std более старой версии.

anonymous_incognito ★★★★★
()
Ответ на: комментарий от Zhbert

Ну странно сравнивать CMS с генератором статики.

Ну ваще для хуго уже накрутили визуальных редакторов и прочего. Так что не так уж он и неправ.

AP ★★★★★
()
Ответ на: комментарий от anonymous_incognito

Не посылает почему-то.

Не, погоди, это чистый це, ты же его как чистый це и компилишь, там да, только предупреждение (кстати, что меня несколько удивляет – с чего вдруг в режиме чистого це оно ноль внезапно стало допускать, тут я, видимо, что-то упустил)

frier
()
Ответ на: комментарий от frier

Не, погоди, это чистый це, ты же его как чистый це и компилишь, там да, только предупреждение (кстати, что меня несколько удивляет – с чего вдруг в режиме чистого це оно ноль внезапно стало допускать, тут я, видимо, что-то упустил)

В C++ тоже самое:

#include <iostream>
int main()
{
   void *p;
   p = 0;
   std::cout << "p = " << (long)p << "\n";
   p = (void*)1;
   std::cout << "p = " << (long)p << "\n";
   return 0;
}

Компилируется без звука и с тем же результатом, что и си-шная работает.

anonymous_incognito ★★★★★
()
Ответ на: комментарий от frier

с чего вдруг в режиме чистого це оно ноль внезапно стало допускать, тут я, видимо, что-то упустил

емнип там смысл, что на каких-то системах нулевой указатель не обязательно ноль как число, поэтому был введён макрос NULL

anonymous_incognito ★★★★★
()
Ответ на: комментарий от anonymous_incognito

Компилируется без звука и с тем же результатом, что и си-шная работает.

С явным преобразованием понятно, что работает. Ты оператор конверсии-то убери. У меня вот так получилось:

one.cpp:7:8: error: invalid conversion from ‘int’ to ‘void*’ [-fpermissive] p = 1;

При том что ноль, естественно, жрёт.

frier
()
Ответ на: комментарий от anonymous_incognito

емнип там смысл, что на каких-то системах нулевой указатель не обязательно ноль как число, поэтому был введён макрос NULL

Он вроде всю жизнь был ((void*)0), а не просто ноль. Да и сейчас вроде так:

#ifndef __cplusplus #define NULL ((void )0) #else / C++ / #define NULL 0 #endif / C++ */

Вот мне и интересно, чего это оно внезапно стало нолик кушать без преобразования и при этом без предупреждения. У меня тоже жрёт, только что проверил.

frier
()
Ответ на: комментарий от frier

Пардон, дрогнула рука

#ifndef __cplusplus
#define NULL ((void )0)
#else / C++ /
#define NULL 0
#endif / C++ */
frier
()
Ответ на: комментарий от frier

Он вроде всю жизнь был ((void*)0), а не просто ноль.

Я проверил с -std=c89 - тоже самое. Потом заглянул в ANSI стандарт 1989/90 года, там написано следующее в параграфе 6.2.2.3:

An integral constant expression with the value 0, or such an expression cast to type void * is called a null pointer-constant. If a null pointer constant is assigned to or compared for equality to a pointer the constant is converted to a pointer of that type. Such a pointer called a null pointer is guaranteed to compare unequal to a pointer to any object or function.

Two null pointers. converted through possibly different sequences of casts to pointer types. shall compare equal.

Так что как минимум с Ansi C оно так.

anonymous_incognito ★★★★★
()
Ответ на: комментарий от frier

С явным преобразованием понятно, что работает. Ты оператор конверсии-то убери. У меня вот так получилось:

Ну да, компилятор C++ в целом более строгий, чем Си. При желании, кстати, можно отключить ошибку в этом месте, если компилировать с опцией -fpermissive о чём в тексте ошибки прямо сообщается.

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

Но я тоже чего-то думал, что NULL это и страховка для систем, где имеет смысл другое число использовать вместо нуля.

anonymous_incognito ★★★★★
()
Ответ на: комментарий от anonymous_incognito

у Хувянина и второго фина в двухтомнике «мир лиспа» в начальных главах поясняется что присвоение символу 2 значения отличного от 2 доставляет незабываемые переживания

в Ся 0 при указателеприсвоении константы может (и должно) выставлять в указатель значение доставляющее указатель на не что и это не обязательно безбитие — частности реализации

хотя в 999%% это (0)

qulinxao3 ★★
()
Ответ на: комментарий от liksys

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

Офигеть, столярик пхп освоил?!

zabbal ★★★★★
()
Ответ на: комментарий от zabbal

До создания сабджа его ресурсы были на старом Drupal’е.

Zeev
() автор топика
Ответ на: комментарий от zabbal

Ага. Показное выпячивание знания си (на самом деле нет) и код на пхп. Перед нами типичный быдлокодер.

liksys ★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.