#c #x11
#c #x11 #c
Вопрос:
Мой тип данных с именем «Bool», который находится внутри пространства имен, конфликтует с #define Bool int, который определен в некотором заголовочном файле Xlib. Кроме того, то же самое происходит, когда я помещаю элемент с именем «None» внутри любого перечислителя из-за определения #define None 0L . Я пытался использовать #undef Bool в нескольких файлах, но это просто превратилось в беспорядок. Должен ли я переименовать тип данных во что-то вроде «Boolean» и навсегда прекратить использование «None»?
Комментарии:
1. В общем, вам действительно следует избегать затенения имен имен стандартных типов, классов и т. Д. Вы столкнетесь с гораздо большими проблемами, чем стоит иметь дело.
2. Я делаю его кроссплатформенным. Это должно работать и для старых консолей.
3. Кроме того, как насчет случая, когда я использую имя «None» для любого элемента перечислителя?
4. Есть ли какая-то причина, по которой Xlib использует
#define Bool int
, а нетtypedef int Bool
?
Ответ №1:
Если вы программируете на Xlib, вам следует избегать переопределения Bool
, True
, False
и None
(а также XID
и XPointer
и Status
), чтобы избежать конфликтов со значениями #define
и typedef
в заголовках Xlib.
Поскольку вы используете C 11, вам следует либо использовать Xlib Bool
, либо использовать стандартный C bool
в своем коде. Ваша жизнь будет проще, если вы сможете изолировать файлы Xlib #include
от как можно меньшего количества единиц компиляции (исходных файлов) и использовать стандартный C bool
везде.
Комментарии:
1. О’кей, я понимаю твою точку зрения. Но на самом деле я переношу свою библиотеку из Win32, где она работала отлично, и я хотел бы продолжать использовать текущий дизайн. На самом деле я просто использую файлы Xlib в трех своих файлах: window, graphic-creation и заголовочном файле OpenGL.