| 
 Современные тренды разработки на C++ предполагают максимально возможный отказ от макросов в коде. Но иногда без макросов, причем в особо уродливом их проявлении, не обойтись, так как без них еще хуже. Об этом и рассказ. 
 
Как известно, первым этапом компиляции C и C++ является препроцессор, который заменяет макросы и директивы препроцессора простым текстом. 
 
Это позволяет делать нам странные вещи, например, такие: 
  
"look, I'm a string!"
std::string str = 
#include "xmacro.h"
;
 
 
После работы препроцессора это недоразумение превратится в корректный код: 
  
std::string str =
"look, I'm a string!"
; 
 
Само собой, никуда более этот страшный header инклудить нельзя. И да, в связи с тем, что мы будем этот header добавлять несколько раз в один и тот же файл — никаких #pragma once или include guard-ов.   |