Ответы пользователя по тегу C
  • Что вы думаете насчет книги Брайана Кернигана "Язык программирования С"?

    saboteur_kiev
    @saboteur_kiev Куратор тега Книги
    software engineer
    По какой книге вы изучили ну хотя бы всю математику в школе?
    Или у вас по алгебре одна, по геометрии другая, по черчению третья, и при этом это только за один класс?

    Так и тут - если вы собираетесь изучать язык программирования только по одной книге, вы изучите чуть-чуть. Не парьтесь и читайте все книги. А если вам кажется, что это много - лучше сразу ищите другую профессию.
    Ответ написан
    1 комментарий
  • Как научиться реверсингу?

    saboteur_kiev
    @saboteur_kiev Куратор тега C++
    software engineer
    Если вам попадает чужой продукт, и в нем нужно что-то исправить - читаете код, разбираетесь в нем и исправляете.
    Реверс инженеринг - это тоже самое, только исходников нет, приходится разбираться с готовыми исполняемыми файлами, пользуясь дебаггерами, дизассемблерами, анализаторами.

    А следовательно нужно учить как работают операционные системы, стандартные библиотеки, протоколы, глубже ассемблер.

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

    P.S. Если посмотреть ваши вопросы, то есть сомнения, что С и Ассемблер у вас пройденный этап.
    Ответ написан
    2 комментария
  • Как перевести на си в HEX код(bmp)?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Выводите не строку %s, а числа (%03d или %02x) в цикле.
    Ответ написан
  • Что лучше для новичка в программировании C или C++?

    saboteur_kiev
    @saboteur_kiev Куратор тега C++
    software engineer
    Ассемблер - для новичка нужен не он, а базовое понимание что такое машинные коды, чтобы иметь представление чем отличаются платформы на аппаратном уровне. Будет полезно понимание регистров и разрядности. Понимать размерность и архитектуру памяти.

    Учить Си - сейчас не нужно. Во-первых на чистом С вам, как новичку, писать не придется, а как опытному программисту - выучите потом.

    Учить С++ - полезно, чтобы вы могли написать что-то. Популярный язык для embedded.

    Но еще важнее для системного программиста - технологии.
    Возьмите ардуино и сделайте свое устройство, например простейшую управляемую розетку. Чтобы работала по usb, затем добавьте по wifi, придумайте веб-морду с API, вот уже и системно-запрограммированный готовый продукт, а вы будет знакомы с технологиями.
    Ответ написан
    1 комментарий
  • Что подразумевается под данным заданием?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Просто первая функция считывает строки, в памяти сохраняет строки, разделяя их символом \0
    После последней строки ставится еще один \0, заканчивая последовательность строк.

    Задание слегка оторванное от реальности.
    Ответ написан
    2 комментария
  • Нужно ли перед C++ учить С?

    saboteur_kiev
    @saboteur_kiev Куратор тега Программирование
    software engineer
    "даже компилятор ставится очень странно (эмулируется Terminal, а там запускается gcc, как я понял)."

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

    Учить С перед С++ не обязательно. Но можно парралельно простенькие задачи решать так, как они решаются в С.
    Ответ написан
    Комментировать
  • Как создать ОС на C ( Для практики )?

    saboteur_kiev
    @saboteur_kiev Куратор тега C++
    software engineer
    На С будет тоже самое, что на асме, поскольку ваш подход некорректен.
    Вдобавок, Си будет навязывать вам использование библиотек, а поскольку ОС своя, то библиотек не будет и придется вставлять кучу вставок на ассемблере.
    Практически все современные ОС в своем загрузчике реализуют простейшую поддержку файловой системы, чтобы можно было уже грузить основное ядро. Правда активно используются прерывания BIOS.

    А вообще, возьмите и разберите GRUB, исходники открыты - https://www.gnu.org/software/grub/grub-download.html
    Ответ написан
    Комментировать
  • Что значит выражение "выстрелить себе в ногу?" (в виде кода)?

    saboteur_kiev
    @saboteur_kiev Куратор тега Программирование
    software engineer
    Это означает, что на языке можно написать команду или конструкцию, которая сломает нормальное поведение программы или системы (или будет выполняться совершенно не так, как можно было бы логически предположить), и при этом компилятор/интерпретатор это скомпилирует и не ругнется.

    Почитайте тут:
    lurkmore.to/%D0%92%D1%8B%D1%81%D1%82%D1%80%D0%B5%D...
    Ответ написан
    Комментировать
  • Как обрабатывать поток в реальном времени?

    saboteur_kiev
    @saboteur_kiev Куратор тега Программирование
    software engineer
    Многопоточность. Один поток ждет ввода с клавиатуры, другой проверяет и подсвечивает синтаксис, третий часики в углу рисует, четвертый на фоне сохраняет текущее во временный файл...
    Ответ написан
    4 комментария
  • Как на C писать ядро для минимальной ОС?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Сперва было неплохо бы научиться писать просто программы, а затем уже целую операционную систему.
    Или вы думаете, что ядро это самое простое, что есть в операционной системе?
    Ответ написан
    2 комментария
  • Есть ли книжка, или какой другой ресурс, в которой описывается СИ максимально подробно?

    saboteur_kiev
    @saboteur_kiev Куратор тега Программирование
    software engineer
    На уровне процессора все работает не на Си, а на машинных кодах, на ассемблере, поэтому если вы хотите нюансы - изучаете ассемблер, а затем изучаете работу компилятора Си, чтобы смотреть как и во что он компилирует ваш код.
    В зависимости от версии компилятора, от платформы, от опций оптимизации компилятора, результат может быть разный.
    Ответ написан
    5 комментариев
  • Нуборазмышления по поводу интерпретируемых Java\python\c# и компилируемых с++\с итп?

    saboteur_kiev
    @saboteur_kiev Куратор тега Python
    software engineer
    С чего вы взяли, что в игре 90% это текстуры?
    Что значить "делать текстуры"? Видеокарта наштампует вам текстур, а что с ними делать? Кто будет вычислять что выводить, в каком порядке, почему?
    Как именно java связывается в видеокартой? Она же не может слать в нее напрямую, как минимум ваша программа должна общаться с драйвером видеокарты.
    А до драйвера видеокарты можно использовать графический фреймворк, иначе вам нужно изучть оптику, 3д моделирование, геометрию на таком уровне, что начать писать игру вы начнете лет через 10-15.
    А для C++ под винду есть готовый DirectX, который сделает за вас 90% работы. А под java нет DirectX...

    В общем, вы не совсем то пытаетесь посчитать.
    Ответ написан
    Комментировать
  • Обязательно ли знать ассемблер и архитектуру ЕВМ разработчику C++?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    Даже поверхностное понимание ассемблера и архитектуры повышает ваш уровень разработчика. Но оно не является обязательным.

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

    Поэтому просто нужно почитать и освоить принципы (то есть поверхностно суть) работы процессора, регистры, такты, машинный код, прерывания . Работа с данными в защищенном режиме и с портами уже будет продвинутая часть. Но попробовать вставить в С++ код небольшую вставку на ассемблере, чтобы оптимизировать какой-то простенький алгоритм, будет полезно для саморазвития.
    Ответ написан
    Комментировать
  • Почему всегда срабатывает else?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Все корректно работает. Просто после ввода буквы у вас еще первод строки захватывает

    C:\MinGW\bin>test.exe
    a
    "a" является буквой!
    Ее номер: 1
    [10]
    1
    [49]
    [10]
    3
    [51]
    [10]
    a
    "a" является буквой!
    Ее номер: 1
    [10]
    b
    "b" является буквой!
    Ее номер: 2
    [10]

    #include <stdio.h>
    #include <ctype.h>
    int main(void) {
        int ch;
        
        while ((ch = getchar()) != EOF) {
    	if (ch=='\n' || ch=='\r') continue;
            if (isalpha(ch)) {
                printf("[%c] является буквой, ее номер: %d\n", ch, ch-96);
            }
            else {
                printf("[%d] это не буква\n", ch);
            }
        }
        return 0;
    }
    Ответ написан
    8 комментариев
  • Как организовать параллельное изучение языков и написание приложения?

    saboteur_kiev
    @saboteur_kiev Куратор тега IT-образование
    software engineer
    Не думаю, что переключаться проблематично.

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

    Кроме того, изучая два языка сразу, вы будете видеть недостатки и достоинства каждого.
    Джава и Си отличаются весьма заметно, чтобы не путаться в голове.
    Ответ написан
    Комментировать
  • Почему C всё еще актуален?

    saboteur_kiev
    @saboteur_kiev Куратор тега Программирование
    software engineer
    С++ заменил С во все областях, где он эффективнее (ентерпрайз, прикладное программирование).

    Но в системном программировании С не хуже, в embedded он лучше.
    Ответ написан
    Комментировать
  • Какую IDE используют для промышленной разработки на C/C++?

    saboteur_kiev
    @saboteur_kiev Куратор тега Программирование
    software engineer
    что угодно используют.
    VIM, Eclipse, vi, far, Visual Studio,
    Ответ написан
    Комментировать
  • Востребованы ли системные программисты для встраиваемых систем?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    В основном сейчас embedded это C++

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

    saboteur_kiev
    @saboteur_kiev Куратор тега Программирование
    software engineer
    Читал недавно биографию Кармака.
    Человек еще в школе уже программировал лучше большинства взрослых.
    Может дело не в том, что учебники тяжелые, а в том, что вы не интересуетесь компьютерами, и хотите чтобы знания просто внезапно появились в голове?
    Хороший программист воспитывается с детства.
    Ответ написан
    Комментировать