3. Глава 29: Быстрая справка (Cheat Sheets)

В этом разделе вы найдёте компактные справочные материалы по часто используемым функциям, конструкциям и концепциям языка C, а также по ключевым компонентам библиотеки GTK. Эти «шпаргалки» призваны стать быстрым источником информации во время разработки, помогая освежить в памяти синтаксис и назначение различных элементов.

3.1. Cheat Sheet: Основы языка C

Концепция

Ключевые слова/Пример

Описание

Объявление переменных

int x = 10;

Объявление переменной определённого типа и опциональная инициализация.

Типы данных

int, float, double, char, void

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

Указатели

int *ptr;, &x, *ptr

Переменные, хранящие адреса памяти. & - оператор взятия адреса, * - оператор разыменования.

Массивы

int arr[10];, arr[0]

Фиксированные коллекции элементов одного типа, доступ по индексу.

Строки

char str[] = «Hello»;, char *s = «World»;

Массивы символов, заканчивающиеся нулевым символом (0).

Структуры

struct Point { int x, y; };

Пользовательский тип данных, объединяющий переменные различных типов под одним именем.

Условные операторы

if, else if, else, switch

Управление потоком выполнения в зависимости от условий.

Циклы

for, while, do-while

Повторное выполнение блока кода.

Функции

return_type func_name(params) { … }

Блоки кода, выполняющие определённую задачу; могут принимать аргументы и возвращать значение.

Ввод/Вывод (базовый)

printf(), scanf(), getchar(), putchar()

Функции для взаимодействия с консолью.

Комментарии

// однострочный, /* многострочный */

Пояснительный текст в коде, игнорируемый компилятором.

Подключение библиотек

#include <stdio.h>

Включение содержимого заголовочных файлов.

3.2. Cheat Sheet: Основные функции C (Standard Library)

Функция

Заголовок

Описание

printf(format, …)

<stdio.h>

Выводит форматированный текст на стандартный вывод (консоль).

scanf(format, …)

<stdio.h>

Читает форматированный ввод со стандартного ввода (консоли).

fprintf(file, format, …)

<stdio.h>

Выводит форматированный текст в указанный файл.

fscanf(file, format, …)

<stdio.h>

Читает форматированный ввод из указанного файла.

fopen(filename, mode)

<stdio.h>

Открывает файл; возвращает указатель на FILE.

fclose(file)

<stdio.h>

Закрывает открытый файл.

fread(ptr, size, count, file)

<stdio.h>

Читает count элементов размером size из file в ptr.

fwrite(ptr, size, count, file)

<stdio.h>

Записывает count элементов размером size из ptr в file.

malloc(size)

<stdlib.h>

Выделяет блок памяти размером size байт; возвращает void*.

calloc(count, size)

<stdlib.h>

Выделяет count элементов размером size байт и инициализирует их нулями.

realloc(ptr, new_size)

<stdlib.h>

Изменяет размер ранее выделенного блока памяти.

free(ptr)

<stdlib.h>

Освобождает блок памяти, ранее выделенный malloc, calloc или realloc.

strlen(s)

<string.h>

Возвращает длину строки s (без учёта завершающего 0).

strcpy(dest, src)

<string.h>

Копирует строку src в dest.

strncpy(dest, src, n)

<string.h>

Копирует не более n символов из src в dest.

strcat(dest, src)

<string.h>

Конкатенирует (объединяет) src к dest.

strcmp(s1, s2)

<string.h>

Сравнивает строки s1 и s2; возвращает 0, если равны.

atoi(s)

<stdlib.h>

Преобразует строку в целое число.

atof(s)

<stdlib.h>

Преобразует строку в число с плавающей точкой.

rand()

<stdlib.h>

Генерирует псевдослучайное число.

srand(seed)

<stdlib.h>

Инициализирует генератор псевдослучайных чисел.

time(NULL)

<time.h>

Возвращает текущее календарное время.

3.3. Cheat Sheet: Макросы и Препроцессор C

Макрос/Директива

Пример/Использование

Назначение

#define (константа)

#define PI 3.14159

Объявляет символическую константу, которая заменяется значением во время препроцессинга.

#define (функция-макрос)

#define SQUARE(x) ((x)*(x))

Определяет макрос, который ведёт себя как функция, но выполняется путём текстовой подстановки. Важно использовать скобки для избежания ошибок с приоритетом операций.

#include

#include <stdio.h>, #include «myheader.h»

Включает содержимое указанного файла в текущий файл. Используется для подключения заголовочных файлов стандартных библиотек (<…>) или пользовательских файлов (»…»).

#ifdef, #ifndef, #endif

#ifdef DEBUG … #endif

Директивы условной компиляции: код компилируется, если макрос определён (ifdef) или не определён (ifndef).

#if, #elif, #else

#if VERSION >= 3 … #endif

Условная компиляция на основе арифметического выражения.

#undef

#undef PI

Отменяет предыдущее определение макроса.

#error

#error «Ошибка компиляции»

Вызывает ошибку компиляции с указанным сообщением.

#pragma

#pragma once

Предоставляет компилятору специфичные инструкции (зависит от компилятора). once - для предотвращения многократного включения заголовка.

__FILE__

printf(«Файл: %sn», __FILE__);

Предопределенный макрос, расширяется до имени текущего исходного файла.

__LINE__

printf(«Строка: %dn», __LINE__);

Предопределенный макрос, расширяется до номера текущей строки в исходном файле.

__DATE__

printf(«Дата: %sn», __DATE__);

Предопределенный макрос, расширяется до строки с текущей датой компиляции.

__TIME__

printf(«Время: %sn», __TIME__);

Предопределенный макрос, расширяется до строки с текущим временем компиляции.

3.4. Cheat Sheet: Основные виджеты GTK (GObject Hierarchy)

Виджет (Класс)

Заголовок

Назначение и Ключевые методы

GtkWindow

<gtk/gtk.h>

Основное окно приложения. Контейнер верхнего уровня. * gtk_window_new(GTK_WINDOW_TOPLEVEL): Создаёт новое окно. * gtk_window_set_title(window, «Title»): Устанавливает заголовок. * gtk_window_set_default_size(window, width, height): Устанавливает размеры по умолчанию.

GtkButton

<gtk/gtk.h>

Кнопка для пользовательских действий. * gtk_button_new_with_label(«Text»): Создаёт кнопку с текстом. * g_signal_connect(button, «clicked», G_CALLBACK(handler), data): Подключает обработчик нажатия.

GtkEntry

<gtk/gtk.h>

Однострочное поле ввода текста. * gtk_entry_new(): Создаёт новое поле ввода. * gtk_entry_get_text(entry): Получает текущий текст. * gtk_entry_set_text(entry, «Text»): Устанавливает текст. * gtk_entry_set_placeholder_text(entry, «Hint»): Устанавливает текст-заполнитель.

GtkLabel

<gtk/gtk.h>

Виджет для отображения неизменяемого текста. * gtk_label_new(«Text»): Создаёт метку с текстом. * gtk_label_set_text(label, «New Text»): Изменяет текст метки. * gtk_label_set_wrap(label, TRUE): Включает перенос текста по словам.

GtkBox

<gtk/gtk.h>

Контейнер для упорядоченного расположения виджетов (горизонтально или вертикально). * gtk_box_new(GTK_ORIENTATION_VERTICAL, spacing): Создаёт вертикальный/горизонтальный контейнер с отступами. * gtk_box_pack_start(box, child, expand, fill, padding): Добавляет дочерний виджет в начало.

GtkGrid

<gtk/gtk.h>

Контейнер для расположения виджетов в табличной форме (строки и столбцы). * gtk_grid_new(): Создаёт новую сетку. * gtk_grid_attach(grid, child, left, top, width, height): Прикрепляет виджет к ячейке.

GtkImage

<gtk/gtk.h>

Виджет для отображения изображений. * gtk_image_new_from_file(«path/to/image.png»): Создаёт изображение из файла.

GtkScrolledWindow

<gtk/gtk.h>

Контейнер для виджетов, которые могут быть прокручены, если их содержимое превышает размеры. * gtk_scrolled_window_new(NULL, NULL): Создаёт новое прокручиваемое окно. * gtk_container_add(scrolled_window, child): Добавляет прокручиваемый виджет.

GtkTextView

<gtk/gtk.h>

Многострочное поле для редактирования и отображения текста. Использует GtkTextBuffer для хранения текста. * gtk_text_view_new(): Создаёт новый GtkTextView. * gtk_text_view_get_buffer(text_view): Получает буфер текста.

GtkAboutDialog

<gtk/gtk.h>

Диалоговое окно для отображения информации о приложении (автор, версия, лицензия). * gtk_about_dialog_new(): Создаёт диалог. * gtk_about_dialog_set_program_name(dialog, «Name»): Устанавливает имя программы.

GtkDialog

<gtk/gtk.h>

Базовый класс для всех диалоговых окон. * gtk_dialog_new_with_buttons(…): Создаёт диалог с кнопками. * gtk_dialog_run(dialog): Запускает диалог модально, возвращает ответ.

GtkSpinner

<gtk/gtk.h>

Индикатор выполнения неопределённой операции (вращающийся кружок). * gtk_spinner_new(): Создаёт спиннер. * gtk_spinner_start(spinner) / gtk_spinner_stop(spinner): Запускает/останавливает анимацию.

Общие методы для всех `GtkWidget`:

Метод

Описание

gtk_widget_show_all(widget)

Показывает виджет и всех его дочерних элементов.

gtk_widget_hide(widget)

Скрывает виджет.

gtk_widget_destroy(widget)

Уничтожает виджет, освобождая связанные ресурсы.

gtk_widget_set_name(widget, name)

Устанавливает CSS-имя (ID) для виджета, используемое для стилизации (#name). Ключевой для CSS-стилизации!

gtk_widget_add_css_class(widget, class_name)

Добавляет CSS-класс для виджета, используемый для стилизации (.class_name).

gtk_widget_remove_css_class(widget, class_name)

Удаляет CSS-класс.

gtk_container_add(container, child)

Добавляет дочерний виджет в контейнер (если контейнер может иметь только одного потомка, как GtkWindow).

g_signal_connect(instance, «signal_name», G_CALLBACK(handler_func), user_data)

Подключает функцию-обработчик к сигналу виджета.

g_object_unref(object)

Уменьшает счётчик ссылок объекта GObject. Когда счётчик достигает 0, объект освобождается. Важно для управления памятью!

3.5. Рекомендуемые онлайн-ресурсы и инструменты

Для углублённого изучения языка C, препроцессора и разработки интерфейсов с помощью GTK, рекомендованы следующие онлайн-источники:

Язык C и стандартная библиотека:

  • cppreference.com (раздел C) — Современный, исчерпывающий справочник по языку C и его стандартной библиотеке.

  • cplusplus.com/reference/clibrary — Классический справочник по стандартной библиотеке C (обновляется редко, но может быть полезен).

  • godbolt.org (Compiler Explorer) — Онлайн-инструмент для просмотра ассемблера, генерируемого различными компиляторами C/C++. Позволяет экспериментировать с кодом и видеть результат сразу.

  • repl.it (REPL for C) — Онлайн-компилятор C. Удобен для быстрого тестирования небольших фрагментов кода без установки локального компилятора.

Препроцессор и макросы:

  • GCC Preprocessor Documentation — Официальное руководство по препроцессору GCC. Полный список директив, поведение макросов, условной компиляции и пр.

  • wandbox.org — Онлайн-песочница с поддержкой множества компиляторов (включая GCC, Clang) и возможностью использовать различные стандарты языка (C89–C23).

GTK и Glade:

  • GTK 3 Reference Manual — Полная и актуальная документация по библиотеке GTK 3. Включает описание всех доступных виджетов, сигналов и методов.

  • GTK 4 Reference Manual — Документация по последней версии GTK. Некоторые подходы и API могут отличаться от GTK 3.

  • Glade User Documentation — Описание возможностей интерфейсного конструктора Glade и примеры использования.

  • GNOME Developer Center — Централизованный ресурс по разработке приложений под GNOME, включая GTK, GObject, GLib и другие технологии.

  • libadwaita & libhandy (для GTK 4) — Дополнительные библиотеки, применяемые в современных интерфейсах GNOME.

GitHub и код:

  • Поиск по GitHub: GTK projects — Репозитории с открытым исходным кодом, использующие GTK. Можно изучать примеры интерфейсов, стилизацию и работу сигналов.

  • awesome-c — Подборка лучших библиотек, инструментов и ресурсов по языку C.

  • Изучайте документацию: Эти справки лишь базовые, для глубокого понимания обращайтесь к официальной документации GTK и стандартам C.