this->notes.
4.51K subscribers
54 photos
1 file
426 links
О разработке, архитектуре и C++.

Tags: #common, #cpp, #highload и другие можно найти поиском.
Задачки: #poll.
Мои публикации: #pub.
Автор и предложка: @vanyakhodor.
GitHub: dasfex.
Download Telegram
#cpp

Day 41.

Кроме хорошо знакомого вам assert был и ещё никак не связанный с первым #assert.

Подразумевалось, что #assert будет помогать генерировать какие-то утверждения для препроцессора. Например

#assert cpu(x86)
#assert os(linux)
#assert this(notes)

после чего вы могли писать

#if #cpu(x86) // true
...
#if #os(linux) // true
...
#if #this(notes) // true
...
#if #os(win) // false
...

То есть с помощью #assert препроцессор записывал в отдельную табличку верные утверждения, а потом умел сообщать, есть ли такой факт. Причём проверка проводилась для predicate(argument).

Ещё утверждения можно было отменять с помощью

#unassert cpu(x86)

И больше это неправда.

Фактически это примитивная логическая база знаний.

Выше я писал «был», потому что в C11 #assert и #unassert не стало. Потому что фактически почти никто не реализовал. Все писали примерно:

#define CPU_X86 1

#if CPU_X86
#ifdef CPU_X86


@thisnotes. Patreon, Boosty.
Спасибо Artyom Garkavy и niki4smirn.
9🔥1
#cpp

Привет.

Сегодня последний day 52 марафона.

Я знаю, что кому-то он поднадоел. Не зря от меня отписалось больше полусотни человек.

Мне тоже надоело, если честно.

Если вдруг вы не узнали/не знали, марафон был основан на C++ Preprocessor Iceberg. Я в целом шёл от начала почти по каждому пункту, скипая что-то, что выглядит совсем мутным и невнятным, что я не смог заставить работать или не смог осознать. Попутно старался дополнять своим ресёрчем. Постов фактически вышло на пару десятков меньше, чем пунктов в оригинальном источнике. Мы примерно на половину задели Deep water и совсем не задели The abyss. К концу я уже высох от темы и решил, что душить себя не очень полезно. Лучше чем-то в радость позаниматься. Так что заинтересованные могут доисследовать самый низ айсберга.

Расскажите в комментах, как вам. Надо такое делать вообще ещё когда-нибудь? На какие темы? Или нахер и лучше ограничиться обычными форматами?
Не факт конечно, что я ваше мнение учту, но мне хочется его знать.

Если не хотите писать открытым текстом, то вот варианты quite feedback:
🔥 — круто, можно повторять
🥴 — круто, можно повторять, но слишком долго
🤯 — круто, лучше не повторять
🌚 — не круто, лучше не повторять.

Ниже собрал ссылочки для удобства. Пересылайте друзьям, мамам и папам. Пользуйтесь в будущем сами.

Above the iceberg:
• #include
include guards
• #pragma once
• #if
заворачивание в скобки
do-while
ARRAY_SIZE и sizeof

On the iceberg:
stringification operator
token concatenation operator
__VA_ARGS__
#undef
#error
comments concatenation
X-macro

Below the water:
FILE and LINE
DATE and TIME
#line
триграфы и иже с ними
_Pragma
-E

Middle of the iceberg:
COUNTER
CONCAT
• #elifdef #elifndef
#embed
SCAN
лимит на макросы
mcpp
перегрузка макросов
default args в макросах

Bottom of the iceberg:
blue paint
BOOL, IF
INC/DEC
LOOP
Boost.Preprocessor

Below the iceberg:
LIST
ORDER_PP
#assert
#include_next
ppstep
how macro expansion works
sequence

Deep water:
итерация по sequence
chaos-pp
Metalang99
не знаю точно что это
push/pop макросов
ещё несколько ссылочек
50🔥106🥴66🤯24🌚81