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.