Подтвердить что ты не робот

Интересный проект по изучению C?

У меня есть некоторые базовые знания C (и немного больше С++). Я получил копию K & R, и я хочу использовать ее, чтобы помочь мне углубиться в язык. Что является хорошей идеей, которая будет включать использование большинства функций C и стандартной библиотеки? Кроме того, какие важные отличия между C89 и C99 я должен знать?

РЕДАКТИРОВАТЬ: Вспомните, что это должно быть в основном выполнимо для новичка. Я не прошу написать учебник по программированию; скорее, нечто среднее. Я понимаю, что материал ОС - одна из основных целей C, но не слишком ли это было бы сложно?

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

4b9b3361

Ответ 1

Внедрение языка программирования. Это не должно быть ужасно тяжело - я язык, который не должен называться - но это заставит вас многому научиться важные части C. Если вы не хотите сами писать лексер и/или парсер, вы можете использовать lex/flex и yacc/bison, но если вы планируете, что вы можете начать с несколько меньшего проекта.

Возьмите какую-нибудь программу на языке более высокого уровня и перепишите ее. Если у вас есть Perl/Python/Ruby/ Bash script, который вы используете много, и вы заметили время задержки во время его запуска, перепишите его на C с акцентом на производительность.

Это мое мнение, однако, что если вы пишете программу для изучения C, лучше изобрести колесо. Программирование на C - это создание и настройка колесика, и если вы изучаете только C, используя библиотеки, которые абстрагируют колесо для вас, ну, вы действительно не изучаете C. Это может быть быстрее - и когда вы работаете на реальном проекте в C, во что бы то ни стало, не изобретайте колесо, но если вы это изучаете, то непременно узнаете, как работает колесо.

Ответ 2

Чтение и ответ на вопросы C по StackOverflow - хороший способ узнать тонкие детали языка.

Ответ 3

Я бы рекомендовал проделать следующие действия: http://projecteuler.net/. Конечно, иногда это помогает сделать некоторые из них неэффективно на C, чтобы понять, сколько времени занимает грубая сила. Тогда попробуйте придумать более умный способ и действительно увидеть красоту C хорошо сделанным!

Ответ 4

Переводчик для простого языка грамматики. Конечно, никакие генераторы лексера/парсера не должны использоваться, чтобы сделать его интересным.

Ответ 5

Оборудование (встроенная микропроцессорная система) и коды ядра операционной системы?

Ответ 6

Постройте игру в шахматы. Это может быть довольно тривиально, так как вы даже можете сделать это с помощью простой консоли. Это позволяет вам реализовать некоторую логику, использовать структуры данных, работать с указателями и т.д. Хранить счет, чтобы вы могли работать с постоянством.

Ответ 7

В зависимости от того, насколько глубоко вы хотите пойти, возможно Doom?

Ответ 8

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

Например, вы можете написать программу, которая, начиная с указанного каталога, будет поперек вниз, строя список всех файлов и сделав что-нибудь с ними. Как и дать вам простой список всех файлов, размер которых превышает указанный размер. Затем выясните, как добавить фильтры, чтобы по завершении вы могли использовать его для очистки каталогов. Он может искать слово "резервное копирование" или файлы, содержащие tmp. Не забывайте иметь хотя бы одну функцию, которая передает указатель на указатель, чтобы получить хорошее представление о них.

Да, я знаю, что вы можете сделать это как script, но вы также можете настроить что-то конкретное для вас.

Ответ 9

Моя любимая программа для реализации в подобных ситуациях - это программа соответствия Regex, которая использует довольно простой синтаксис, но использует множество низкоуровневых функций языка (и учитывая, что C - довольно низкоуровневый язык, большинство из них).

Ответ 10

У некоторых хакеров ядра

sudo apt-get install git-core
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git linux-2.6

Я использую ubuntu, поэтому я сделал apt-get, я тоже использую gentoo, команда # emerge dev-util/git

Ответ 11

Простое приложение базы данных (список контактов, фильмы, альбомы и т.д.) также может быть хорошим проектом; это будет включать ввод/вывод файлов, интерактивный ввод-вывод, управление памятью, разумно мясистые структуры данных и т.д.

Ответ 12

Как насчет http://projecteuler.net/, выполненный с помощью c? Это должно вызвать некоторые брелки:)

Ответ 13

Различие в языках не очень много. Их не так много, но все же. (я пишу c в течение 2 лет, но до сих пор не знаю, что такое stadard, если у меня есть неуправляемый комплимент, для исправления кода требуется несколько минут)

Одна из самых неприятных вещей, которые могут произойти, обычно определяет значения в середине кода, например in for (int i; я < 2; я ++); который считается только спецификацией С++. Это то, с чем я столкнулся. В кросс-компиляции вы найдете другую вещь, намного более увлекающую эту стандартную разницу.

Для начала в c я предлагаю учебные алгоритмы и операционные системы или встроенную систему (c по-прежнему остается наиболее распространенным языком для встроенных систем с низким/средним уровнем)

Получите некоторый набор аппаратных средств, например, от микрочипов, atmel или freescaleand и проверьте их встроенную поддержку RTOS.

Ответ 15

Возможно, см. (& улучшить) файл bigfiles.c и использование человека 3 fts (перемещение иерархии файлов):

http://codesnippets.joyent.com/posts/show/1888