Я хочу копаться в C и обычно, когда я хочу выучить новый язык, я думаю о простой / достижимой цели проекта, которая имеет какое-то практическое назначение (использовать API, автоматизировать задачу и т. Д ...)
Мне труднее придумать один для C, в основном потому, что все, что я прочитал, указывает на тот факт, что C в настоящее время в основном используется во встроенных системах и более сложных программных проектах, таких как операционные системы.
Указывает ли это на то, что мне не нужно изучать это или что мне просто нужно быть немного более запутанным в своей стратегии обучения?
Ссылки на практические учебные ресурсы? (учебник / как это дает конечный результат, который имеет какую-то цель / выгоды)
Ответы:
Я бы просто порекомендовал взять копию Кернигана и языка программирования Ритчи Си (2-е издание) . В конце каждой главы есть ряд упражнений, которые вы можете выполнить, а также очень хорошее введение в язык Си. Это не сделает вас мастером языка, но в конце книги и упражнений у вас должно быть достаточно хорошее понимание, чтобы, возможно, найти проект с открытым исходным кодом, написанный на C, который вы могли бы прочитать и, возможно, внести свой вклад к.
Если вы хотите увидеть реальные реальные проекты с кодом на C в них. Становится все труднее - во многих проектах используется язык «более высокого уровня», но C все еще жив и здоров. Если вы хотите изучать C, не бойтесь изобретать велосипед, чтобы добиться обучения. Не очень хорошая идея изобретать решения в режиме реального времени, но это прекрасно для академического упражнения.
источник
Вы должны действительно понимать распределение памяти. Похоже, вы уже использовали другие языки, но есть вероятность, что эти другие языки скрыли от вас мрачные детали управления памятью. В C управление памятью всегда явно. В этом есть некоторые преимущества, но это означает, что вы должны быть осторожны, чтобы сделать это правильно, иначе весь ад вырвется на свободу.
Используйте все доступные средства отладки памяти для используемой вами платформы. Для Linux есть Electric Fence, для Mac OS X - Guard Malloc. Также есть Valgrind, который поддерживает ряд операционных систем.
Если вам не удастся освободить память, которая должна быть освобождена, у вас будет утечка памяти. Продолжайте делать это, и вам не хватит памяти. Даже с резервным хранилищем (то, что большинство людей называют виртуальной памятью), вы можете заставить систему чрезмерно загружать страницы или даже исчерпать пространство подкачки.
Если вы освободите память, которая уже была освобождена, вы испортите кучу и вылетите, но, вероятно, не сразу. Вы также испортите кучу, если переполните буфер. Инструменты отладки памяти помогут со всем этим.
Модульное тестирование также помогает.
источник
Я согласен с большинством людей здесь, что сегодня языки определяются поставленной задачей. Было время, когда у вас был ограниченный выбор в этом отношении. Сегодня C в основном используется в области встроенного / системного программирования, где требуется оптимизация кода. Вам нужно написать точные коды, чтобы получить максимум, потому что если вы когда-нибудь начнете использовать эту абстракцию, то базовый материал должен быть очень надежным. Я бы сказал, что вы пытаетесь обойти некоторые проекты с открытым исходным кодом GNU, такие как сам Linux или что-то, что требует разработчиков на Си. Попробуйте свои силы в этих проектах вместо того, чтобы писать что-то с нуля в C. Это, вероятно, лучший способ писать коды и изучать язык.
источник
Вы захотите сделать что-то, что может работать из командной строки. Программирование GUI на C - главная проблема в заднице, даже с хорошей структурой GUI.
Моим обычным предложением для практического изучения языка Си был список контактов или другое простое приложение для управления данными. Это будет охватывать большинство важных битов (ввод-вывод, управление памятью, обработка текста и т. Д.), И вам не придется ничего использовать за пределами стандартной библиотеки C для этого. C не имеет встроенной поддержки графики, сетей, звука и многого другого 1 , поэтому для вашего первого знакомства с программированием на C лучше избегать всего, что зависит от такого рода вещей.
C может использоваться для программирования общего назначения; вам просто нужно немного снизить свои ожидания (представьте, что сейчас 1983 год, и вы сидите перед VT52, подключенным к VAX 11/750, и вы будете в правильном настроении).
Просто помните, что у С нет защиты лезвия, и она не помешает вам сделать что-то глупое. Определения языка местами немного разболтаны, и есть некоторые операции, которые не являются недопустимыми как таковые, но также не имеют четкого определения.
1 - В последней редакции языкового стандарта (2011 г.) добавлена встроенная поддержка потоков
источник
Я рекомендую Project Euler . Я использовал это, чтобы улучшить мой C ++, и это здорово. Это здорово, потому что каждая задача - это небольшая задача, выполнение которой может занять менее часа (по крайней мере, первые).
Вам понадобится профилировщик и книга об оптимизации кода для скорости. Обязательно придерживайтесь правила 1 минуты: вы должны получить ответ в течение 1 минуты.
источник
Если вы УЖЕ программист, и ПРОСТО ДОЛЖНЫ изучать C, и не против изучения более старой версии языка (ядро все равно почти такое же), то «C для программистов» Леендерта Аммереала не может быть лучше , Пройдите через это, начиная с конца.
источник