Просто используйте pragma once
во всех файлах заголовков.Компилятор обеспечит включение вашего файла только один раз.Компилятор может не распознать только в очень необоснованном состоянии: кто-то структурирует свои каталоги включения, используя жесткую ссылку.Кто это делает?Если кто-то не может найти уникальное имя для своего файла, почему он должен быть более опытным, чтобы найти уникальное имя для каждого включаемого охранника для всех заголовочных файлов?
С другой стороны, включаемый охранник может быть поврежден, потому чтоимя макроса не будет таким уникальным из-за копирования / вставки или заголовочного файла, созданного путем первого копирования другого и т. д. *
Как выбирается уникальное имя макроса : <project name>_<filename>
?Как это может быть более уникальным, чем уникальность, основанная на всей структуре корневого каталога?
Итак, в конце концов, при выборе между include guard или pragma once
следует учитывать стоимость работы, которая необходима дляобеспечить уникальность:
1 - для pragma once
вам нужно только убедиться, что структура вашей системы не перепутана благодаря жестким ссылкам.
2 - для includeСтраж для каждого файла в вашей системе, вы должны убедиться, что имя макроса является уникальным.
Я имею в виду как менеджер, оценивающий стоимость этой работы и риск отказа, допускающий только одну опцию.Включить защиту используют только тогда, когда оценка не проводится: это не решение.