C/C++ Development | YeaHub – Telegram
C/C++ Development | YeaHub
827 subscribers
228 photos
56 videos
1 file
378 links
Теория, подготовка к интервью и курсы для C/C++ разработчиков

YeaHub — это платформа для IT-специалистов, объединяющая обучение, карьерный рост, развитие и сообщество единомышленников.

Платформа: https://yeahub.ru

Для связи: @ruslan_kuyanets
Download Telegram
Гибкая система рефлексии в C++

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
5
Бит-хак для реверсирования битов

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
3
#полезное
😜 TinyRequest отправляет запросы и показывает ответы

Ещё не до конца допилен, но автор активно работает над ним

На днях было несколько обновлений:

- Теперь TinyRequest умеет распознавать JSON в теле запроса и валидировать его в реальном времени.
- Добавлены быстрые шаблоны для пустых объектов и массивов.

- Портирование TinyRequest идёт отлично

- Переход с Raylib на ImGui — делать GUI стало в 10 раз быстрее. ImGui реально очень плавно работает для такого рода приложений.

- Теперь TinyRequest поддерживает отправку запросов POST, PUT и DELETE с JSON.


https://github.com/dexter-xD/tiny-request

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
2
#Собес #redis
🤔 Что такое Pub/Sub в Redis?

Pub/Sub — это механизм обмена сообщениями в Redis, где издатели (publishers) отправляют сообщения в каналы, а подписчики (subscribers), подписанные на эти каналы, получают их. Этот механизм используется для реализации систем реального времени, таких как чаты, уведомления или системы трансляции данных.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
1
#полезное
🛞 Процесс компиляции GNU от исходного кода до исполняемого файла

Процесс начинается с исходного кода в текстовых файлах (например, программы на языке C) и запускается с препроцессора, который часто называют cpp.
Предположим, исходный код находится в файле prog.c.

Препроцессор расширяет макросы, подключает заголовочные файлы и обрабатывает директивы, преобразуя исходный код в очищенную версию, которая по-прежнему остаётся в текстовом формате. Например, после обработки препроцессором cpp файла prog.c может получиться файл prog.i.
Препроцессор важен для подготовки кода путём раннего разрешения зависимостей, чтобы все определения были на месте до фактической компиляции.

Далее собственно компилятор (например, cc1 или gcc) на основном этапе берёт предварительно обработанный текст и генерирует ассемблерный код.

На этом этапе высокоуровневые инструкции преобразуются в низкоуровневый ассемблер, часто с такими оптимизациями, как преобразование кода. Вы можете увидеть команду gcc -S -m32 prog.c для вывода prog.s в текстовом формате.

Ассемблер остаётся читаемым для человека, но ближе к машинному языку, что позволяет преодолеть разрыв между языками программирования и особенностями аппаратного обеспечения.

Ассемблер преобразует этот ассемблерный текст в перемещаемые объектные файлы в двоичном формате.

Эти файлы .o содержат машинный код, но с заполнителями для адресов, отмеченными в записях перемещения, таких как разделы .rel.data или .text. Таблицы символов (.symtab) отслеживают переменные и функции.

Выполнение команды gcc -c prog.c компилирует без компоновки, создавая файл prog.o, готовый к объединению с другими файлами.

Компоновка выполняется с помощью ld, который разрешает символы и перемещает код, подключая библиотечные файлы и другие объектные модули.

Он создаёт исполняемый двоичный файл, например prog из gcc -o prog prog.c, где всем ссылкам присваиваются фиксированные адреса. На этом этапе выполняется разрешение символов, чтобы вызовы внешних функций работали корректно.

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

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
1
This media is not supported in your browser
VIEW IN TELEGRAM
#полезное
😊 To-Do List на C

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

По словам автора это не веб-разработка и не Python, поэтому здесь всё же есть пока что некоторые ошибки

Ссылка на исходный код - https://github.com/aadityansha06/TO-DO-C

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
2
#Собес #redis
🤔 Может ли Redis использоваться в многопоточных приложениях, и как он обрабатывает конкурентность?

Redis является однопоточной системой, что упрощает архитектуру за счёт исключения проблем конкурентности, характерных для многопоточных приложений. Конкурентность в Redis обрабатывается с использованием неблокирующего мультиплексирования ввода/вывода и атомарных операций, что позволяет эффективно обслуживать несколько клиентов одновременно.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😎 LunaSVG — легковесная библиотека для рендеринга SVG на C++. Проект предлагает простое и эффективное решение для работы с векторной графикой — от базового рендеринга SVG до динамического изменения стилей через CSS.

Библиотека поддерживает большинство элементов SVG 1.1/1.2 Tiny и легко интегрируется в проекты через CMake или Meson. Она имеет минималистичный дизайн и портируемость. В комплекте идёт утилита noscript2png для конвертации файлов, а сами SVG можно программно модифицировать перед отрисовкой. Подходит для встраивания в движки игр и GUI-фреймворки.
GitHub

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
#полезное
😬 Игра на C с использованием Raylib. То, что получилось, на самом деле довольно круто.

В игре «Echoes of the Unseen» ты играешь за временного картографа, исследующего тёмный мир, который изначально полностью скрыт от глаз. Твой основной инструмент это Echo Pulse, что-то вроде сонара. Он временно подсвечивает форму рельефа и раскрывает важные объекты — такие как энергетические кристаллы и враги.

Ключевая механика это управление ограниченным запасом Echo Energy, с помощью которого ты исследуешь невидимую территорию. Некоторые области можно «зафиксировать» навсегда — они станут твёрдыми и видимыми. Также доступны продвинутые инструменты: например, изменение гравитации или создание звуковых мостов.

Однако мир реагирует на твои действия. Если ты ведёшь себя агрессивно, он начнёт порождать враждебные сущности, адаптированные под твой стиль игры. А если злоупотреблять силами, то среда может стать нестабильной. Всё это создаёт динамичный опыт исследования, где решения игрока формируют мир и его опасности.

Исходный код: echoes.c на GitHub Gist

Makefile для сборки:

CC = gcc
CFLAGS = -Wall -Wextra -std=c99 -O2
LDFLAGS = -lraylib -lm -lpthread -ldl -lrt -lX11

# Определение платформы
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Linux)
# Флаги для Linux
LDFLAGS += -lGL
endif
ifeq ($(UNAME_S),Darwin)
# Флаги для macOS
LDFLAGS = -lraylib -framework CoreVideo -framework IOKit -framework Cocoa -framework GLUT -framework OpenGL
endif

TARGET = echoes_of_the_unseen
SOURCES = main.c
OBJECTS = $(SOURCES:.c=.o)

all: $(TARGET)

$(TARGET): $(OBJECTS)
$(CC) $(OBJECTS) -o $(TARGET) $(LDFLAGS)

%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@

clean:
rm -f $(OBJECTS) $(TARGET)

run: $(TARGET)
./$(TARGET)

.PHONY: all clean run


👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
2
#Собес #redis
🤔 Что такое хэши в Redis?

Хэши в Redis - это структура данных, которая представляет собой коллекцию пар "ключ-значение", аналогично объектам или словарям в программировании. Они удобны для хранения атрибутов сущностей, таких как имя, возраст или адрес пользователя, и являются эффективными с точки зрения памяти.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
1
#видео
😎 Обязательное к просмотру видео про кучу и стек

В этом уроке рассмотрите концепцию динамического распределения памяти в C и C++, а также как осуществляется управление памятью в приложении

> Ссылка: https://www.youtube.com/watch?v=_8-ht2AKyH4&t=599s

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
1
#полезное
😅 Люди зря паникуют из-за вложенных for-циклов. Они имеют сложность O(1), пока предел итераций не становится большим.

https://ffmpeg.org/doxygen/0.6/mpegaudiodec_8c-source.html

Кстати, исходники ffmpeg это красота. Самый простой способ разобраться в любом аудио/видео-протоколе это прочитать его реализацию на C в ffmpeg.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
2
#полезное
🤣 На этой диаграмме изображена первая в мире «нетривиальная» компьютерная программа, разработанная в 1843 году Адой Лавлейс для Аналитической машины Чарльза Бэббиджа.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
3😁1
#Собес #redis
🤔 Чем Redis отличается от традиционных баз данных, таких как MySQL?

Redis работает в оперативной памяти, что делает его намного быстрее, чем традиционные базы данных, такие как MySQL, работающие с диском. Redis предоставляет простые операции для работы с ключами и значениями, тогда как MySQL поддерживает сложные SQL-запросы и транзакции для структурированных данных.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
2😈1
#полезное
👋 Релиз Sakura v1.0

Высокопроизводительная минималистичная (~1k строк кода) мультимедийная библиотека для терминала на C++, которая рендерит изображения, GIF-анимации и видео с использованием sixel-графики с синхронизированным воспроизведением аудио.

Sakura поддерживает все современные форматы: jpg, png, bmp, анимированные gif, mp4, avi, mov, mkv, с адаптивным масштабированием, продвинутой синхронизацией кадров и пропуском кадров для плавного воспроизведения.

Также поддерживается кастомная обработка изображений и пакетная обработка с читаемым лог-выводом.

Репозиторий: https://github.com/Sarthak2143/sakura

Добавлена подробная документация по архитектуре обработки видео и API-документация.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
1
#Собес #redis
🤔 Что такое Redis и для чего он используется?

Redis — это высокопроизводительное хранилище данных в оперативной памяти, поддерживающее различные структуры данных: строки, хэши, списки, множества и упорядоченные множества. Его используют для ускорения работы приложений в сценариях, требующих быстрой записи и чтения, таких как кэширование, управление сессиями, системы публикации и подписки, а также для создания рейтингов (leaderboards).

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
1
#полезное
🤯 Отлавливайте сегфолты во время выполнения на C

#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>

static void handle_sigsegv(int sig, siginfo_t *info, void *ucontext) {
(void)ucontext; // используем это, если нужно, иначе отключаем предупреждение компилятора

// Обрабатываем сегфолт здесь
// записываем несохраненные данные, логируем ошибки и т.д.
fprintf(stderr, "Сегфолт пойман по адресу %p, ваши данные сохранены!\n", info->si_addr);
exit(EXIT_FAILURE);
}

int main(void) {
struct sigaction sig_a = {
.sa_sigaction = handle_sigsegv, // указатель на функцию обработки нашего сегфолта
.sa_flags = SA_SIGINFO,
};

sigemptyset(&sig_a.sa_mask);

if (sigaction(SIGSEGV, &sig_a, NULL) == -1) {
perror("sigaction не удалась");
return 1;
}

printf("Этот код выполняется перед сегфолтом!\n");

// намеренно вызываем сегфолт
int *p = NULL;
*p = 1;

printf("Это не выполнится из-за сегфолта!\n");

return 0;
}


На фото ошибка: в условии sigaction надо сравнивать с «-1», а не с «1»

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM