Как научиться программированию на языке Си для начинающих
Как научиться программированию на языке Си для начинающих
Что вы хотели делать в Windows? Я думаю, что это зависит от компилятора не меньше, чем от кода.
Я также порекомендую C++ FQAs [1]. Это C++, да, но во многих местах он имеет отношение к C, и поскольку сейчас многие системные программисты используют C++ как лингва франка, это хороший, развлекательный ресурс.
Я бы прочитал K&R, это право на прохождение. Посмотрите на некоторые крупные проекты с открытым исходным кодом, чтобы понять, как организовать и управлять большим проектом на Си.
И практикуйте указатели. Ознакомьтесь с тем, как работает память.
Я сам сейчас изучаю C, и кое-что, что я понял, это то, что часто труднее всего изучить не язык C, а область, в которой он используется.
Например, я пытаюсь изучить драйверы Linux или встраиваемое программирование, и я думал, что найду в книге по Си информацию о регистрах и тому подобном, но регистры на самом деле относятся не к области Си, а к области аппаратного обеспечения.
Таким образом, возможно, вам следует найти способ уточнить, для чего вы хотите использовать Си, а затем изучить проблемы этой области и то, как Си их решает.
Программирование на C требует от вас надлежащей ответственности за то, что вы пишете, но также позволяет получить взамен огромные возможности.
Я работаю над достаточно большим (и кроссплатформенным) проектом на C (https://domeengine.com) уже пару лет, и я обнаружил, что C в целом требует определенной дисциплины. Когда вы взаимодействуете с API, вам нужно прочитать документацию, выяснить их специфические предварительные условия и требования по обработке освобождений, определить, что вам принадлежит, а что нет.
Это также поможет убедиться, что если вы что-то выделяете, то очищаете после этого ясным и четко определенным способом.
Вы также должны хорошо познакомиться с отладчиками (LLDB/GDB) и другими инструментами разработчика, чтобы помочь, когда вы допустили ошибку.
В современную эпоху у вас есть несколько вариантов для запуска под Windows. C89 с помощью Visual Studio, инструментарий gcc MSYS2/MinGW2 или инструментарий gcc с помощью WSL. Я использую инструменты MSYS2 для DOME, потому что они требуют наименьших модификаций кода под конкретную платформу, но это зависит от конкретного случая.
Довольно очевидный ответ, но для тех, кто только начинает изучать язык программирования C, книга «Язык программирования C» Брайана Кернигана и Денниса Ричи — хорошее место для начала.
Важный вопрос, который следует задать себе, — зачем вы хотите изучать язык Си? Если вы хотите уметь читать большие кодовые базы на языке Си, это имеет смысл. Но если вы хотите писать встроенное программное обеспечение или системное программное обеспечение, rust или c++11 (ух), вероятно, лучшее место для начала. Я говорю это как человек, который изучал C, но перешел на c++ без сожаления. Хотя у меня есть серьезная зависть к rust 🙂
Хотя это и не окончательное руководство, https://matt.sh/howto-c — хороший пример того, как следует подходить к «современному» Си.
c99 полностью реализован в windo
Харбисон и Стил объясняют гораздо лучше, чем K&R. Книга Фьюра научила меня многому о декларациях языка Си. Декларации — это та часть языка Си, которая вызывает наибольшие неоправданные трудности.
Вы спросили о немного другом вопросе, о лучших практиках. Но в реальном мире вы столкнетесь с большим количеством кода, который практикуется ниже этого уровня.
В качестве примера мне нравится исходный код QEMU[1]. Он огромен, но стиль и практика, которые можно найти в любом файле, помогут вам освоить хороший C.
Это интересная книга для начала «Эксперт программирования на C Пит ван Линден» .
Определение в стандарте Си возможного расширения макроса NULL довольно свободное; это просто должна быть константа нулевого указателя. Поэтому компилятор языка Си может выбрать для него любое из следующих значений: 0U, 0, ‘