• Не работает структура объявленная в заголовочном файле?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    htype_t htval;
    htval.num = 10;

    А почему бы для разнообразия не писать по правилам языка, например так (если, таки, С):
    htype_t htval = {.num = 10};
    или так (если, таки, С++):
    htype_t htval = {10};
    или даже так:
    htype_t htval;
    
    int main(int argc, char* argv[]) {
        htval.num = 10;
    Ответ написан
    Комментировать
  • Кот прыгнул на закрытый монитор ноутбука.Будет ли что-то?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Кот прыгнул на закрытый монитор ноутбука.Будет ли что-то?

    Вижу в твоём будущем денежные траты.
    Ответ написан
    Комментировать
  • Как открыть dumps в gdb?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как открыть этот дамп в gdb ?

    man gdb: gdb -c *.core
    Ну, т.е., если это на самом деле coredump, т.е. если file *.core говорит что-то такое:
    ELF 64-bit LSB core file
    Ответ написан
    Комментировать
  • Где я допустил ошибку в цикле for?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    x=x1;
    for (;x <= x1;)

    Подозреваю, что должно быть
    x=x1;
    for (;x <= x2;)
    Ответ написан
    Комментировать
  • Перспективы в системном программировании?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Я например думаю, что в будущем это профессия будет востребована в больших компаниях

    Я тебе с уверенностью скажу, что эта профессия уже сейчас востребованна в больших компаниях соответствующего профиля.
    Ответ написан
    Комментировать
  • Можно ли задать всего один вопрос, чтобы узнать, какое из трёх чисел загадал игрок?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Какое минимальное количество вопросов, требующих однозначного ответа

    Т.е. ответа "да"/"нет". Иными словами, ответ на один вопрос даёт 1 бит информации. Если пространство посика имеет 3 независимых состояния, одного бита информации недостаточно для его описания, т.е. одним вопросом не обойтись.
    Ответ написан
    Комментировать
  • Почему при перегрузке функции через макрос, появляются предупреждение в _Generic на каст?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Хотелось бы знать причину предупреждений, это стандартное поведение или несовершенство препроцессора?

    Препроцессор-то тут ни при чём. Если посмотреть в
    препроцессированный код,

    _Generic((1), int : _Generic((2), int : fnk(1, 2,
    # 37 "generic.c" 3 4
       ((void *)0)
    # 37 "generic.c"
       ), char * : fnk(1, 0, 2)));
    
        printf("\n2.2)---------\n");
        _Generic((1), int : _Generic(("2"), int : fnk(1, "2",
    # 40 "generic.c" 3 4
       ((void *)0)
    # 40 "generic.c"
       ), char * : fnk(1, 0, "2")));

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

    Пофиксить можно было бы заведя две разные функции для int и char * и выбирая в _Generic только нужную функцию, а не всё выражение. Типа того:

    void fnk_int(uintmax_t A, uintmax_t B){
    ...
    }
    void fnk_pchar(uintmax_t A, char *B){
    ...
    }
    
    #define FFF_B(A, BC) \
            _Generic((A), \
                    int : _Generic((BC), \
                            int : fnk_int, \
                            char * : fnk_pchar)(A, BC))
    Ответ написан
    5 комментариев
  • Почему не переворачивает строку?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Что не так?
    char *str = "hello";

    Вот эта строчка не так. То, что компилятор разрешает так делать -- это анахронизм и отсутствие мало-мальской диагностики. "hello" может находиться (и в твоём случае, похоже, и находится) в области памяти доступной только для чтения, изменять эту строку нельзя. Правильно было бы написать так:
    char str[] = "hello";
    Если сделать эту замену, то код будет выделять место для массива str на стеке, менять такой массив можно.
    Ответ написан
    5 комментариев
  • Как практиковаться системному програмиисту?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как практиковаться

    Ввязываться в проекты интересующей тематики, решать их реальные проблемы.
    Если интересен линукс, наиболее на мой взгляд благоприятная точка входа для новичка -- через тестирование ядра.
    Ответ написан
    Комментировать
  • Как корректно подключить cinvoke в FASM под ELF64?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    include 'linInclude/proc64.inc'

    В стандартной поставке fasm нет ведь такого файла? Где ты его взял?

    У меня заработал вот такой код:
    format ELF64 executable 3
    
      include '/usr/share/fasm/examples/elfexe/dynamic/import64.inc'
      interpreter '/lib64/ld-linux-x86-64.so.2'
    
      needed  'libc.so.6'
    
      import  exit, printf
    
    segment readable executable
    entry $
    
            lea rdi, [fmtS]
            lea rsi, [msg]
            call [printf]
            call [exit]
    
    segment readable writeable
            msg db 'Hello, World!', 0xA, 0
            fmtS db '%s', 0xA, 0
    Ответ написан
    2 комментария
  • Предикаты. Логические предикаты. Тестирование?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    почему формула для вычисления ветвей предикатов 2^n а не 2*n, ведь количество путей ровно в два раза больше

    Количество путей удваивается на каждом предикате.

    2.По второму фото: почему самый верхний путь когда ветви разошлись на Истину и Ложь, Ложь пошла в Истину ?

    Явная ошибка на рисунке.
    Ответ написан
    Комментировать
  • Что лучше начать читать про API linux или про ядро Linux?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Linux API. Исчерпывающее руководство

    С него. Потому что это именно то, что нужно чтобы научиться "программировать под линукс".
    Ответ написан
    Комментировать
  • Почему не видит GPG ключ?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    gpg --list-keys
    pub 4096R/353AE8AA 2020-07-13

    Это публичный ключ. И команда выводит только публичные ключи. Приватные ключи можно посмотреть через gpg --list-secret-keys


    при попытке подписать rpm его не видит. Какие возможные причины?
    gpg: signing failed: No secret key

    Для подписи нужен приватный ключ, о чём gpg и говорит.
    Ответ написан
    1 комментарий
  • На Си функции не могут быть вложенными друг в друга?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    В соответствии со стандартами языка -- не могут. Но есть расширения (в частности, у gcc), позволяющие определять функции вложенные в другие функции.
    Зачем? Вложенные функции -- это лямбды, которые были до лямбд С++.
    Ответ написан
    Комментировать
  • Препроцессоры вставляют файл целиком через #include или частично?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Препроцессоры "глупые" и пихают весь код из подключенных заголовочных файлов, или только тот, что нужен программе после вставляет компоновщик?

    Да.

    Т.е. препроцессоры глупые и пихают весь код из подключенных заголовочных файлов. Но дело в том, что в заголовочных файлах C кода как такового почти нет. Обычно там определения типов и объявления функций. Определения функций скомпилированы и находятся в библиотеках. И компоновщик достаёт из библиотек и линкует только те функции, которые реально используются.

    P.S. Т.е. если перефразировать вопрос, то он бы звучал так: можно ли выборочно подключать только необходимые функции из подключаемых библиотек?

    Это происходит по умолчанию.

    Если первой строчкой кода записать #include <stdio.h>

    Загляни ради интереса в stdio.h и попробуй найти там определение (не объявление) функции printf.
    Ответ написан
    2 комментария
  • Как узнать версию c++?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    хотелось бы проверить как-то в компиляторе, какой версией языка я пользуюсь

    Предопределённый макрос __cplusplus имеет значение соответствующее версии языка. Например 199711 -- это С++98, а 202002 -- это С++20.
    std::cout << __cplusplus << std::endl;
    Ответ написан
    Комментировать
  • Как реализовать этот код на си?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как реализовать этот код на си?

    примерно так: https://godbolt.org/z/qMsqvx , строки 10 и 11. 0x18 == 24
    Ответ написан
    Комментировать
  • В чём причина ошибки с _Pnext в C++?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    В чём причина ошибки с _Pnext

    Отсюда не видно, но как минимум ты нигде не проверил, что входные файлы успешно открылись.
    Ответ написан
  • Какой язык программирования лучше подходит для встраиваемых решений с требованием к повышенной надёжности и безопасности?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Какой язык программирования лучше подходит для встраиваемых решений с требованием к повышенной надёжности и безопасности?

    Максимально выразительный, который подходит для встраиваемого решения по остальным параметрам (доступность для данной платформы/быстродействие/размер программы/...).
    Почему? Потому что (Steve McConnell, "Code Complete"):
    Industry average experience is about 1–25 errors per 1000 lines of code
    for delivered software. The software has usually been developed using a hodge-podge
    of techniques (Boehm 1981, Gremillion 1984, Yourdon 1989a, Jones 1998, Jones 2000,
    Weber 2003). Cases that have one-tenth as many errors as this are rare; cases that have
    10 times more tend not to be reported.


    Поразительно, как дружно Иван Шумов Владимир Коротенко и Developer отвечают на какой-то другой вопрос. Народ, ну? Вы серьёзно не видите разницы между "какой язык лучше подходит" и "какой язык решает проблемы"?
    Ответ написан
  • Как сделать хитрый reset с сохранением коммитов?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Мне бы каким-то магическим образом вычислить все изменения, которые нужно сделать в ветке 2, чтобы получить ровно такое же состояние, какое сейчас в ветке 1. И сделать новый коммит в ветку 2, чтобы получить состояние как в ветке 1.

    $ git checkout branch2 # перейти к ветке branch2
    $ git reset --hard branch1 # скопировать в неё историю и текущее состояние ветки branch1
    $ git reset --soft HEAD@{1} # восстановить историю ветки branch2, но не трогать текущее состояние
    $ git commit -m 'magic commit' # закоммитить текущее состояние (равное разности branch2 -> branch1) в branch2
    Ответ написан
    Комментировать