2009-08-10 2 views
37

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

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

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

ответ

54

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

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

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

+3

Ресурсы для этого проекта находятся здесь: http://stackoverflow.com/questions/1669/learning-to-write-a-compiler – dmckee

+1

Попробуй. Хороший пример. : D –

3

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

4

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

+1

Это отличная забава с mcu: s, Atmel AVR: с хорошими. – Johan

+1

PIC18F - это тоже удовольствие для меня. – stanigator

26

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

7

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

14

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

3

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

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

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

0

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

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

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

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

+0

'for (int i = 0; i

+0

Я знал это. Это никогда не работало для меня. Thanx для этого. –

1

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

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-получить, я использую папуасский тоже команда есть # emerge dev-util/git

0

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

2

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

1

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

4

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

 Смежные вопросы

  • Нет связанных вопросов^_^