The OpenNET Project / Index page

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



Создать новую тему
 - Свернуть нити
Пометить прочитанным
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Архив | Избранное | Мое | Новое | | |  
Форум Программирование под UNIX
Селектор и повторитель-запускатель команд из .bash_history, !*! dcc0, (C/C++) 24-Янв-25, 01:25  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Сложное вычисление на Python и засовывание результата в Ansible, !*! xintrea, (Python) 24-Ноя-20, 15:34  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Программирование объектов на Си в стиле Go, !*! zionist, (C/C++) 03-Янв-26, 03:04  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
  • RAII лучше реализуй Автоматическое или полуавтоматическое Оно полезнее будет , й (?), 14:36 , 04-Янв-26 (1) !*!
  • typedef woman и struct woman - лучше чтоб различались по имени Композиции методо, Аноним (2), 19:27 , 04-Янв-26 (2) !*!
    • Они всё равно в разных пространствах имён и перепутать их трудно В чём разница Т, !*! zionist (ok), 00:42 , 05-Янв-26 (3)
      > typedef woman и struct woman - лучше чтоб различались по имени.

      Они всё равно в разных пространствах имён и перепутать их трудно.

      > Композиции методов я не увидел, только инсталляцию методов.

      В чём разница?

      > Сокрытие закрытых полей ... Тут есть доступ к полю w, и через
      > него можно повредить данные в w.

      Только через грязные хаки с адресной арифметикой. Нормального доступа к его полям нет.

      > Think different - это не проблема, но лучше так не делать. Для
      > программирования объектов на С лучше применяйте традиционный способ - модульное программирование,
      > как в Modula-2.

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

      сообщить модератору +/ответить
      • Идея понятна и макрос fn выглядит аккуратно, но цена 8212 лишняя сложность и , !*! arvenia (ok), 14:52 , 05-Янв-26 (4)
        Идея понятна и макрос fn выглядит аккуратно, но цена — лишняя сложность и риск поломать инварианты. Для C модульный подход всё же читается и сопровождается проще😊


        сообщить модератору +/ответить
      • В глобальном пространстве имен ничего плохого нет Ты столкнулся с синтаксически, !*! Аноним (5), 17:29 , 05-Янв-26 (5)
        > Основная мотивация прикрепить функцию к объекту - перенести её из глобального пространства имён в пространство имён конкретно[го инстанса]

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

        Подход с прикреплением функций к структу -- распространен. Есть сценарии, где такой подход разумен. Например, библиотека по парсингу XML может получать от тебя структ, который ты заполнишь функциями типа open_tag, data, close_tag и т. д., а библиотека далее будет твои функции вызывать в процессе парсинга XML. Но в твоем случае ничего такого нет. Единственное, что ты тут преследуешь -- это синтаксическое удобство. Не надо так. Применяй инструменты сообразно задачам.

        сообщить модератору +/ответить
        • Да, после таких языков как Java и теперь Go писать чисто процедурно как-то неудо, !*! zionist (ok), 18:21 , 05-Янв-26 (6)
          > Ты столкнулся с синтаксическим неудобством. Синтаксические проблемы должны решаться на уровне синтаксиса, а не на уровне рантайма.

          Да, после таких языков как Java и теперь Go писать чисто процедурно как-то неудобно. Хотя когда-то я начинал вообще с Паскаля, где программа по Вирту - это всего лишь алгоритмы и структуры данных.

          > "Достать указатель на функцию, а затем ее вызвать" -- это дороже, чем просто "вызвать уже известную функцию".

          Практически все языки, оперирующие объектами так делают, например C++.

          > Подход с прикреплением функций к структу -- распространен. Есть сценарии, где такой подход разумен. Например, библиотека по парсингу XML может получать от тебя структ, который ты заполнишь функциями типа open_tag, data, close_tag и т. д., а библиотека далее будет твои функции вызывать в процессе парсинга XML. Но в твоем случае ничего такого нет. Единственное, что ты тут преследуешь -- это синтаксическое удобство. Не надо так. Применяй инструменты сообразно задачам.

          Ну да, мне выше уже посоветовали модули, то есть, если я правильно понял, единые блоки трансляции (SCU). Но API любого такого модуля всё равно попадёт в глобальное пространство имён и какая нибудь функция open() тут же начнёт конфликтовать с одноимёнными функциями из других модулей или даже из libc. Для того, чтобы это обойти можно использовать префикс, например abc_open() где abc - название модуля. Но это же неудобно и менее читаемо. В том же C++ помимо методов класса есть просто пространства имён, внутри которых можно определить функции с любыми именами, не опасаясь конфликта этих имён. К сожалению в Си этого нет. Возможно я просто пытаюсь перенести свои привычки из других языков в Си, но согласись, что префиксы - это действительно неудобно.

          сообщить модератору +/ответить
          • Всё верно Просто язык С предназначен только лишь для написания эффективных проц, !*! Аноним (7), 19:02 , 05-Янв-26 (7)
            Всё верно. Просто язык С предназначен только лишь для написания эффективных процедур по обработке байтов, машинных слов и их последовательностей, а не для создания целых программ.
            сообщить модератору +/ответить
            • Как раз целые программы на Си раньше писали Например первый веб браузер NCSA Mo, !*! zionist (ok), 22:14 , 05-Янв-26 (9)
              > Всё верно. Просто язык С предназначен только лишь для написания эффективных процедур
              > по обработке байтов, машинных слов и их последовательностей, а не для
              > создания целых программ.

              Как раз целые программы на Си раньше писали. Например первый веб браузер NCSA Mosaic или почтовый сервер Sendmail. Поколение программистов сменилось, а с ним и популярность парадигм программирования, но в последнее время наметился отход от ООП, что немного прибавляет популярности и чистому Си.

              сообщить модератору +/ответить
              • Но ведь это было очень давно Тогда не было современных крутых инструментов В, !*! Аноним (14), 20:15 , 13-Янв-26 (14)
                > Как раз целые программы на Си раньше писали.

                Но ведь это было очень давно ... Тогда не было современных крутых инструментов.


                > от ООП, что немного прибавляет популярности и чистому Си.

                Вы считаете что популярность Си растёт? Рейтинги популярности говорят что нет.
                На Си сейчас приложения пишут только любители программирования, а корпоративные разработки на других языках: C++, Go, Rust, Java и т.д.
                Эти языки обеспечивают бо́льшую продуктивность, как сейчас говорят.

                сообщить модератору +/ответить
          • Именно в C , дефолтным является вариант вызвать уже известную функцию , без вы, !*! Аноним (5), 20:59 , 05-Янв-26 (8)
            > все языки, оперирующие объектами так делают, например C++

            Именно в C++, дефолтным является вариант "вызвать уже известную функцию", без вычисления ее адреса в рантайме, даже если со стороны выглядит как вызов функции-в-структе (dog->bark()). Гуглить static dispatch vs. dynamic dispatch. В расте примерно то же самое. В таких языках компилятор решает проблему на уровне синтаксиса, не жертвуя скоростью в рантайме.

            > это же неудобно и менее читаемо

            Да. За удобством лучше сразу идти в другие языки, например в раст. Неудобный и нечитабельный вариант с префиксами -- это стандарт де-факто в примерно всех сишных библиотеках. Рантайм-скорость там просто ценят выше, чем удобство разработки.

            сообщить модератору +/ответить
            • Я имел в виду виртуальные функции , !*! zionist (ok), 22:14 , 05-Янв-26 (10)
              >> все языки, оперирующие объектами так делают, например C++
              > Именно в C++, дефолтным является вариант "вызвать уже известную функцию", без вычисления
              > ее адреса в рантайме, даже если со стороны выглядит как вызов
              > функции-в-структе (dog->bark()).

              Я имел в виду виртуальные функции.

              сообщить модератору +/ответить
  • gt оверквотинг удален https github com hirrolot interface99, !*! pavel_simple. (?), 16:55 , 13-Янв-26 (13)
    >[оверквотинг удален]
    > You're kissing Miranda
    > Miranda say: How dare you?
    > You're hugging Miranda
    > Miranda say: Get off me, butch!
    > You're kissing Miranda
    > Miranda is calling the police!
    > The dreaming workflow:
    > No woman allocated!
    > No woman allocated!
    > No woman allocated!

    https://github.com/hirrolot/interface99

    сообщить модератору +/ответить


Вайб-кодинг и замена программистов на AI, !*! zionist, (Средства разработки) 28-Апр-25, 15:41  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]


Баг в QColorDialog на Qt 5.15.8 ?, !*! xintrea, (GUI, XWindow, Qt, GTK) 25-Ноя-25, 12:56  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Oathtool  и liboath - отличаются результаты генерации кодов., !*! Anonymus, (C/C++) 15-Ноя-25, 19:41  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
V или Nim, !*! Анонин, (C/C++) 27-Янв-21, 12:47  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]


Сборка vhci_hcd для ядра 6.6, !*! Анон70, (C/C++) 03-Янв-24, 17:19  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Базис S, K на плюсах, !*! Аноним, (C/C++) 04-Июн-24, 22:21  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Код нейронной сети, !*! BuxarNET, (Библиотеки, функции) 12-Авг-23, 04:32  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
вопросы по crosstools-ng, !*! microbash, (C/C++) 19-Авг-25, 12:30  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
  • А как по-вашему должен выглядеть вывод ldd На мой взгляд всё правильно в нём По, !*! DasKolbass (?), 23:45 , 23-Авг-25 (2)
    >зачем он лезет в системные либы, а не использует свои внутренние.

    А как по-вашему должен выглядеть вывод ldd? На мой взгляд всё правильно в нём.

    >не совсем понимаю его логику

    Почитайте документацию.  https://crosstool-ng.github.io/docs/toolchain-usage/
    Там прочитайте на варианты создания root fs для вашей target системы (первый вариант не рекомендуется).

    А зачем вы решили использовать crosstool-ng? Если вам надо создавать программы для компьютера arm или risc-v, то для этого лучше использовать кросскомпилятор, уже встроенный в дистрибутив. Например в debian пакет с кросскомпилятором для arm называется g++-arm-linux-gnueabihf. Просто установите этот пакет и вызывайте компилятор как arm-linux-gnueabihf-g++. Однако компилятору нужно передавать опцию --sysroot=  , в которой указывается директория на вашем компьютере, в которую надо предварительно скопировать содержимое /lib и /usr из target системы (например из armbian, если вы используете raspberry с armbian).

    сообщить модератору +/ответить
Ошибка сегментирования (код 139) ПОСЛЕ завершения работы., !*! Just friend, (GUI, XWindow, Qt, GTK) 07-Фев-21, 05:13  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
  • Может быть стоит почитать более глубоко что и как возвращают программы и для чег, !*! Аноним (-), 07:23 , 07-Фев-21 (1)
    > Я только начинаю познавать разработку. К сожалению

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

    сообщить модератору +/ответить
  • gt оверквотинг удален Запустите под отладчиком, поставьте точку остановки на з, !*! ыы (?), 09:52 , 07-Фев-21 (2)
    >[оверквотинг удален]
    > что и планировалось, ошибок никаких, но среда QtCreator выводит сообщение не
    > об успешном завершении с кодом 0, а что приложение было завершено
    > с ошибкой и его работа была аварийно остановлена.
    > При завершении работы (по воле пользователя) присутствует ошибка сегментирования (код
    > ошибки 139).
    > На данный момент это совершенно не затрагивает работоспособность программы, однако боюсь,
    > что это может повлиять в дальнейшем. Очень хочется знать в чем
    > может быть источник проблемы.
    > Я только начинаю познавать разработку, по-этому не судите строго. К сожалению поиск
    > в гугл не увенчался успехом. Рассчитываю на вашу помощь.

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

    сообщить модератору +/ответить
  • 1000 строк это ниочем базовыe методы поиска и локализации ошибки для данног, !*! nekto (?), 11:15 , 07-Фев-21 (3) +1
    > Доброго времени суток, к сожалению не могу привести пример кода, поскольку проект
    > уже разросся на 1000+ строк, а причина так и не найдена.

    ...
    1000 строк это ниочем...
    базовыe методы поиска и локализации ошибки для данного случая:

    - методом половинного деления коментируем, пересобираем, выполняем код - до просветления или офигивания.
    - ставим множественные вызовы printf/std::cout/qWarn/etc...

    > Я только начинаю познавать разработку, по-этому не судите строго. К сожалению поиск
    > в гугл не увенчался успехом. Рассчитываю на вашу помощь.

    ...
    все когда-то начинали

    В дальнейшем указывется:
    - OS, version
    - copmiler, version
    - минимальный воспроизводимый пример кода с ошибкой

    сообщить модератору +1 +/ответить
  • gt оверквотинг удален В твоей программе вызывается уничтожение объекта по нева, !*! деанон (ok), 00:10 , 20-Фев-23 (4)
    >[оверквотинг удален]
    > что и планировалось, ошибок никаких, но среда QtCreator выводит сообщение не
    > об успешном завершении с кодом 0, а что приложение было завершено
    > с ошибкой и его работа была аварийно остановлена.
    > При завершении работы (по воле пользователя) присутствует ошибка сегментирования (код
    > ошибки 139).
    > На данный момент это совершенно не затрагивает работоспособность программы, однако боюсь,
    > что это может повлиять в дальнейшем. Очень хочется знать в чем
    > может быть источник проблемы.
    > Я только начинаю познавать разработку, по-этому не судите строго. К сожалению поиск
    > в гугл не увенчался успехом. Рассчитываю на вашу помощь.

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

    сообщить модератору +/ответить
bash Buffer Overflow?, !*! BUMP, (Shell скрипты) 24-Апр-25, 11:05  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Схема Как понять Продолжения?, !*! noname nobody, (Языки программирования) 02-Янв-25, 16:26  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Материалы по gdb, !*! torsar, (Отладка и профилирование) 22-Мрт-25, 09:29  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Rust: Как разделить типаж на части?, !*! Ан Оним, (Rust) 16-Фев-25, 00:32  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
ассемблерные вставки в код Линукса 'это другое'?, !*! Анонимище, (Rust) 20-Фев-25, 12:00  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Как сгенерировать заданный код выхода/exit code одной командой?, !*! xintrea, (Shell скрипты) 26-Апр-23, 14:53  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]


Проблема при сборке Linux From Scratch, пакет Gettext-0.22, !*! vvm13, (Компиляция) 14-Сен-23, 13:35  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Как непросто учится СИ, !*! dcc0, (C/C++) 17-Сен-16, 15:38  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]


Какой язык функционального программирования учить?, !*! Аноним, (Средства разработки) 11-Мрт-21, 12:32  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]


Атомарная замена 'файлов', !*! Аноним, (Разное) 16-Дек-24, 06:07  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Нужно записать видео/аудио Telegram-трансляции , !*! strannik7j, (Разное) 04-Дек-23, 02:33  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Bash regex, !*! Sarge, (Shell скрипты) 19-Дек-24, 16:26  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
проблемы с точностью команды at, !*! AS, (Shell скрипты) 07-Ноя-24, 12:57  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Ошибка понимания списка Python: неожиданный вывод, !*! Jeevan11, (Языки программирования) 01-Сен-23, 13:47  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Команда time вывод в мс., !*! evi, (Shell скрипты) 04-Сен-24, 12:23  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]


Подскажите по замене строки с помощью sed, !*! danswano, (Shell скрипты) 04-Июл-24, 14:44  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
psycopg2 не может вернуть текущую схему через команду SHOW, !*! xintrea, (PostgreSQL) 20-Июн-24, 16:44  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
GDB. Команда 'step' не входит в функцию., !*! Tsorion, (Отладка и профилирование) 12-Май-24, 19:37  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
 
Пометить прочитанным Создать тему
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Архив | Избранное | Мое | Новое | | |



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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