Имя включаемого охранника TEST
может конфликтовать с каким-либо другим макросом, используйте что-то более сложное, например HEADERNAME_H
.
Примечание: имена, начинающиеся с подчеркивания, за которыми следует верхний регистр, и имена, содержащиедва последовательных подчеркивания зарезервированы для реализации.
Во-вторых, если вы собираетесь поместить это в заголовочный файл, тогда определение функции должно быть inline
.В противном случае при включении в несколько единиц перевода вы получите ошибку компоновщика с несколькими определениями.Или, более формально, стандартное ODR (одно правило определения) запрещает такие множественные определения, если только они не все inline
и фактически идентичны.
Редактировать : удалить выше, потому что яне видел, как вы используете анонимное пространство имен .
вместо анонимного пространства имен, которое дает вам отдельное пространство имен в каждой единице перевода и отдельное (идентичное) определение функции в каждом такомПространство имен, вместо этого просто используйте inline
- как объяснено в зачеркнутом тексте выше.
Приветствия & hth.,