Day 3.
Другой способ быть уверенным, что хедер включится только единожды:
#pragma once. Важно помнить, что это не стандартное решение, а универсальное расширение, которое реализуется де-факто всеми компиляторами.
#pragma once хорошо оптимизируется (фактически). С ней даже чуть проще, так как она просто влияет на файл, в котором находится, когда include guards только на то, что внутри своего скоупа. #pragma once обычно работает через какой-то признак, помогающий понять, что файл — один и тот же. Из вариантов могут быть:• inode
• канонический path
• какой-то hash
• и другие варианты.
Из-за чего в сложных специфических системах может вполне себе сломаться. И вы получите один и тот же файл дважды. Удачи дебагать!
Аналогично могут быть проблемы в распределённых build-системах.
Иногда вы хотите, чтобы один файл инклудился дважды. Тогда
#pragma once вам не подходит. В некоторых сферах
#include guards выбирают просто за надёжность и стабильность, так как они зависят исключительно от кода, а не ещё каких-то посторонних вещей. Можно вообще в один файл совать и
#pragma once, и include guards. Чтобы спокойнее было.@thisnotes. Patreon, Boosty.
Спасибо Artyom Garkavy и niki4smirn.