LINUX.ORG.RU

Как понять чистый С (без библиотек), awk и sed за 10 минут?

 , , ,


2

2

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

Посмотрел их задания, а там что-то типа алгоритмов и вначале программирование без библиотечных функций. Выводят через write в буфер, кодят аналоги функций в стандартной библиотеке, мыслят алгоритмически и т.д. Все по канонам CS.

У меня же от чистого С с поинтерами и низкоуровневыми алгоритмами взрывается мозг. Очевидно книжки по обычному С с его библиотечными функциями не подходят. Попробовал книгу столлмана по С, но там скорее справочная информация и вглубь, да не туда. В какие-то темы вроде математики над указателями вообще не вижу смысла сейчас углубляться.

Ко всему прочему, видел пару заданий на знание awk и sed. И вообще в целом умение распарсить строки из терминала. По времени есть где-то месяц.

Вопрос, как можно подготовиться к такому? Откуда черпать информацию? Может есть уже золотая классика? Информации слишком много и она плохо отсортирована, прошу совета.

Перемещено hobbit из general

Ответ на: комментарий от James_Holden

В виндовсе тоже можно дергать syscall, некоторые программы так делают, единственное что они не имеют совместимости как в DOS или Linux.

Зубодробительным я бы API не назвал, если есть макросы invoke, import, struct.

MOPKOBKA ★★★★
()
Ответ на: комментарий от myredeyes

Ох ты ж, не думал, что Столлман вообще что-то помнит про C, учитывая сколько лет назад он последний раз что-то коммитил в проекты GNU…

Ну раз так, попробуй трёхтомник Столярова. Только начинай с первого тома, где паскаль.

По его методике как раз таки требуется вначале разобраться с каким-нибудь более упорядоченным императивным языком (и кроме Pascal тут оказывается ничего подходящего и нет) и понять важнейшие базовые вещи, в том числе различие функций и процедур, типы данных, указатели и тд, затем разобраться с уровнем машинного кода, а уже потом переходить к C, где всего этого уже толком как такового нет. Нет и строк как таковых и массивов ([] это всего лишь арифметическая операция) и процедур с функциями. Таким образом ты не пропустишь важнейшие концепции, а уже переходя на C сможешь их использовать, не смотря на их отсутствие в языке в явном виде.

Xenius ★★★★★
()

По-настоящему C поймешь только после ассемблера.

Язык Си предполагает, что программист осознает, как работает память и ОС.

Классикой считается книга авторов языка «The C programming language», но она описывает очень старый «стандарт» языка – K&R (это в общем-то и не стандарт никакой, это «как Брайан Керниган и Деннис Ритчи написали в своей книге «The C programming language» так и правильно.») и предполагает, что читатель знает неплохо computer science.

В новых стандартах то, что описано в этой книге, будет либо явно запрещено, либо будет вызывать неопределенной поведение (undefined behaviour).

Можете прочитать стандарт языка, который вам нужен: ANSI, C99, C11, C17… Это реально, в отличие от стандартов С++, которые просто неприличного объема.

Если вы знакомы с алгоритмами и структурами данных, можете попробовать почитать второй том трехтомника Столярова («Программирование: Введение в профессию. Том 2. Системы и сети»). Там описан язык Си, системное и стевое программирование под *NIX-системы.

Если же нет, то сначала придется прочитать первый том, собственно на примере Паскаля автор объясняет указатели, структуры данных (массив, список, двоичное дерево), а потом и i386 ассемблер и тот же самый Паскалевский код на ассемблере.

Короче, это история большая и сложная. Не за 10 минут.

zx_gamer ★★★
()