Re[5]: Define гадит в проект
От: Кодт Россия  
Дата: 19.10.09 15:42
Оценка:
Здравствуйте, Sergey, Вы писали:

К>>Да, в итоге у тебя вместо Foo::MessageBox будет Foo::MessageBoxW (или -A, в зависимости от юникодности). Но это будет повсеместно и согласованно, и волновать тебя не очень должно.

S>Ага, пока с библиотекой какой не пересечется Ну а потом начнутся вопросы в форум, типа "а чё у меня линкер конструктор boost::archive::archive_exception не видит?"

Как бы, дефайны — зло, это давно известно.
Но чтобы не было нарушений ODR и т.п. расхождений — надо все свои библиотеки компилировать в единой среде — например, в присутствии windows.h и в известном окружении дефайнов.
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Перекуём баги на фичи!
Re[6]: Define гадит в проект
От: Sergey Россия  
Дата: 19.10.09 15:58
Оценка:
Здравствуйте, Кодт, Вы писали:

К>>>Да, в итоге у тебя вместо Foo::MessageBox будет Foo::MessageBoxW (или -A, в зависимости от юникодности). Но это будет повсеместно и согласованно, и волновать тебя не очень должно.

S>>Ага, пока с библиотекой какой не пересечется Ну а потом начнутся вопросы в форум, типа "а чё у меня линкер конструктор boost::archive::archive_exception не видит?"

К>Как бы, дефайны — зло, это давно известно.

К>Но чтобы не было нарушений ODR и т.п. расхождений — надо все свои библиотеки компилировать в единой среде — например, в присутствии windows.h и в известном окружении дефайнов.

Угу, и как же предлагается обеспечивать присутствие windows.h в сторонних библиотеках? В бусте там или тем паче в wxWidgets с её winundef.h? Да, и почему такие полумеры — только windows.h? Для полноты концепции надо все хедеры, содержащие дефайны, включать везде
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[7]: Define гадит в проект
От: Кодт Россия  
Дата: 19.10.09 16:42
Оценка:
Здравствуйте, Sergey, Вы писали:

S>Угу, и как же предлагается обеспечивать присутствие windows.h в сторонних библиотеках? В бусте там или тем паче в wxWidgets с её winundef.h? Да, и почему такие полумеры — только windows.h? Для полноты концепции надо все хедеры, содержащие дефайны, включать везде


Ну или пользоваться исключительно стерильной средой для компиляции под сфероконическую ось.
Но что-то я не верю в её существование, поэтому лично я бы попробовал выхватить напильник и три раза вотще по всем используемым мной библиотекам, которые порождают конфликты.
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Перекуём баги на фичи!
Re[8]: Define гадит в проект
От: Sergey Россия  
Дата: 19.10.09 17:09
Оценка:
Здравствуйте, Кодт, Вы писали:

S>>Угу, и как же предлагается обеспечивать присутствие windows.h в сторонних библиотеках? В бусте там или тем паче в wxWidgets с её winundef.h? Да, и почему такие полумеры — только windows.h? Для полноты концепции надо все хедеры, содержащие дефайны, включать везде


К>Ну или пользоваться исключительно стерильной средой для компиляции под сфероконическую ось.

К>Но что-то я не верю в её существование, поэтому лично я бы попробовал выхватить напильник и три раза вотще по всем используемым мной библиотекам, которые порождают конфликты.

Ну а мне проще и на счет windows.h не парится, пока конфликты не вылезут.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[5]: Define гадит в проект
От: _Jane_ Украина  
Дата: 19.10.09 17:42
Оценка: 9 (1) +3
B>>Я что-то теряю мысль — в чем собственно проблема? В том, что у твоего класса есть функции, имена которых совпадают с API-шными? Если да — ты знаешь эти имена?
B>Да,некоторые методы совпадают в винапишными. Да, я знаю эти имена.

http://lib.co.ua/teacher/golub-a1/Golub-a1.txt

47. Не пользуйтесь именами Microsoft

Если Microsoft случайно выберет в качестве имени для функции или класса то, которое вы используете для
каких-то других целей, угадайте, кому из вас придется его сменить?

Jane
Re[6]: Опаньки
От: byleas  
Дата: 20.10.09 08:38
Оценка:

46. Не пользуйтесь именами из стандарта ANSI Cи.
Идентификаторы, начинающиеся с символа подчеркивания, и имена типов, оканчивающиеся на _t, были зарезервированы стандартом ANSI Cи для использования разработчиками компиляторов.
Не используйте эти символы.


Я как-то привык уже выделять некоторые типы этим суффиксом. Слава пуху, Си не пользую, но может кто просветит, это действительно запрет или перемудрили просто?
Re[7]: Опаньки
От: Кодт Россия  
Дата: 20.10.09 09:58
Оценка:
Здравствуйте, byleas, Вы писали:

B>

46. Не пользуйтесь именами из стандарта ANSI Cи.
B>Идентификаторы, начинающиеся с символа подчеркивания, и имена типов, оканчивающиеся на _t, были зарезервированы стандартом ANSI Cи для использования разработчиками компиляторов.
B>Не используйте эти символы.

B>
B>Я как-то привык уже выделять некоторые типы этим суффиксом. Слава пуху, Си не пользую, но может кто просветит, это действительно запрет или перемудрили просто?

Стандарт резервирует имена, начинающиеся на __ или _Капс

17.4.3.1.2 Global names

1 Certain sets of names and function signatures are always reserved to the implementation:
— Each name that contains a double underscore (_ _) or begins with an underscore followed by an uppercase
letter (2.11) is reserved to the implementation for any use.
— Each name that begins with an underscore is reserved to the implementation for use as a name in the
global namespace.°

°) Such names are also reserved in namespace ::std (17.4.3.1).

... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Перекуём баги на фичи!
Re[8]: Опаньки
От: byleas  
Дата: 20.10.09 11:00
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Стандарт резервирует имена, начинающиеся на __ или _Капс

Нет, я о выделенном (суффикс _t в типах) и стандарте С.
Re: Define гадит в проект
От: drem1lin  
Дата: 20.10.09 13:00
Оценка: :)
Здравствуйте, buka123, Вы писали:

B>В проекте есть класс, который страдает от дефайна WinApi , который прибавляет к именам функций "A" или "W". Как можно отследить его и убить?


А данные формата анси
W это юникод, так и должно быть, если не подходит укажи руками, где A, где W
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.