Day 1.
#include Думаю, все вы знаете, что
#include просто вставляет весь код в файл, в котором он расположен. Из-за этого даже простой Hello world с использованием std::cout разрастается до десятков-сотен тысяч строк (хотя сам хедер может быть маленький, он транзитивно тянет много других зависимостей). Собсна поэтому инклуды не очень любят: легко засрать ваш проект и получить большое время компиляции. Отсюда и появляются штуки вроде forward declaration, pimpl, precompiled headers, include-what-you-use и модули. Инклудить вы можете что угодно. Хоть txt, хоть бинарный файл. Препроцессору на это всё равно. Главное, чтобы содержимое после препроцессинга было валидно.
Можно хоть так:
#include "/dev/stdin"и потом
echo 'int x = 42;' | g++ main.cppПорядок инклудов может значимо менять поведение в программе. Вот вам пример от Паши: https://t.me/cpp_durka/49
Инклуды могут быть с
<> и с "". Вариант подключения влияет на то, где хедеры ищутся. Когда-то препроцессор не умел добавлять пустую строку после инклудов, потому обязательно было иметь пустую строку в конце вашего файла. Сейчас можно и без этого, но душе уже не прикажешь...
Ну и всегда можно воспользоваться инструментом неправильно. Случайно или специально. Вспомним The Grand C++ Error Explosion Competition.
@thisnotes. Patreon, Boosty.
Спасибо Artyom Garkavy и niki4smirn.