Как делать на C (Си) функции с произвольным количеством аргументов • Live Coding

…а заодно и дебаггинг случился. Поэтому видео такое длинное. Баг нашли, всё кончилось хорошо :) Впредь урок и мне тоже — в конце концов, это же учебное видео. Теперь по сути. Функция printf() умеет принимать сколько угодно аргументов — нам тоже надо! Сделаем. А чтобы не улетать в теоретический космос, напишем за час конкретный проект: микробиблиотеку для сборки менюшек программы на C. Ну там «Нажмите R, чтобы стартовать игру», такое. Таймлайн: 00:00 — Вступление. Сегодня меньше теории, больше кода 01:20 — Тема: функции с произвольным числом аргументов 01:43 — Постановка задачи: динамическое меню 02:28 — Краткий обзор: будет конспект 03:04 — Начинаем кодить с нуля 03:48 — Репозиторий на GitHub, работа в отдельной ветке 04:19 — Цель: выполнение разных команд по вводу 05:00 — Заготовка функции, подключение библиотек 06:20 — Набор действий: удвоение, квадрат, смена знака 07:55 — Реализация функций действий 09:53 — Структура: указатели на функции 10:51 — Создание функций: dbl, sqr, print 12:30 — Превращение числа в строку 14:41 — План: действия по введённым командам 15:26 — Связка символов с функциями 16:27 — Создание библиотеки меню 18:08 — menu.h: структура пункта меню 20:12 — Структура Menu: массив пунктов и длина 21:59 — Создание псевдонима типа для пункта меню 23:10 — Указатель на функцию в структуре 24:46 — Связь символа с функцией через структуру 27:30 — Описание структуры Menu 30:17 — Хранение длины меню 32:12 — Объявление пунктов меню (d, p, s, q) 35:01 — Создание массива указателей на пункты 37:07 — Создание динамического меню 40:11 — Использование va_args для переменного количества аргументов 44:05 — Преобразование аргументов в массив 47:02 — Получение и обработка аргументов 50:15 — Добавление функций в массив 53:07 — Обработка команд: MenuProcess 56:04 — Поиск команды в меню 59:02 — Вызов функции из меню 1:01:01 — Главное: создание гибкого меню 1:03:07 — Подключение меню к main 1:06:09 — Парсинг строки: извлечение числа 1:10:01 — Финальная сборка 1:13:08 — Последние исправления 1:15:14 — Успешная компиляция 1:16:06 — Первые успешные вызовы функций 1:18:55 — Обработка ошибок: segmentation fault 1:23:00 — Диагностика проблем с памятью 1:34:51 — Финальное исправление: всё работает 1:36:09 — Итого: программа работает 1:41:33 — Ретроспектива: что пошло не так 1:47:06 — Советы: как не ошибиться снова 1:49:03 — Перспективы: использование макросов 1:52:02 — Объектный стиль: небольшие элементы 1:53:24 — Завершение стрима. Спасибо! Конспект:

Смотрите также