Не создавайте пространство имён с именем linux

При разработке на С++ кроссплатформенного приложения разумно выделить платформо-зависимые части в отдельные пространства имён. Например, части, относящиеся только к операционным системам семейства Windows, в пространство имён windows. Это хорошая идея. Однако здесь есть крайне не очевидный подводный камень. Дело в том, что в компиляторе gcc нельзя создать пространство имён с именем linux.

Рассмотрим пример простейшей программы:

#include <stdio.h>
 
namespace linux {}
 
int main()
{
  return 0;
}

Она ничего не делает. Но при попытке ее скомпилировать в gcc мы получим ошибку:

Из текста сообщения можно предположить, что имя linux конфликтует с именем константы. И такая константа действительно существует. Пример ниже нормально компилируется и работает.

#include <stdio.h>
 
int main()
{
  printf("%d\r\n", linux);
  return 0;
}

На моем домашнем компьютере он выводит единицу.
Такое поведение специфично только для компилятора gcc. На других компиляторах (с которыми работал лично я) проблем с объявлением пространства имён linux — нет.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *