Интересный проект изучить C? [закрытый]

Мое предположение: избегать таких ужасных и ненужных конструкций. Также это использовало бы 2 операции (2x INC) вместо одного (1x ADD 2).

Да, я знаю..., "но я хочу увеличиться на два, и я - l33t g33k!"

ну, не будьте фанатом и пишите что-то, что не похоже на непреднамеренную ошибку, как это:

i += 2;
41
задан Javier 10 August 2009 в 22:14
поделиться

15 ответов

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

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

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

64
ответ дан 27 November 2019 в 00:09
поделиться

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

0
ответ дан 27 November 2019 в 00:09
поделиться

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

1
ответ дан 27 November 2019 в 00:09
поделиться

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

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

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

Получите немного оборудования, например, от Microchip, Atmel или Freescale, и проверьте их встроенную поддержку RTOS.

0
ответ дан 27 November 2019 в 00:09
поделиться

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

2
ответ дан 27 November 2019 в 00:09
поделиться

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

4
ответ дан 27 November 2019 в 00:09
поделиться

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

5
ответ дан 27 November 2019 в 00:09
поделиться

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

7
ответ дан 27 November 2019 в 00:09
поделиться

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

16
ответ дан 27 November 2019 в 00:09
поделиться

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

28
ответ дан 27 November 2019 в 00:09
поделиться

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

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

Да,

4
ответ дан 27 November 2019 в 00:09
поделиться

Взломайте ядро ​​

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

1
ответ дан 27 November 2019 в 00:09
поделиться

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

4
ответ дан 27 November 2019 в 00:09
поделиться

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

1
ответ дан 27 November 2019 в 00:09
поделиться

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

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

0
ответ дан 27 November 2019 в 00:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: