![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| admsasha |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 763 Регистрация: 28.1.2005 Репутация: нет Всего: 6 |
Минимальный пример
Почему LOG::ERROR попадает в поле видимости ? Как его можно запрятать, чтобы не конфликтовал с windows.h:71 ? |
||||
|
|||||
| borisbn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
Это связано с тем, что в файле wingdi.h объявлен такой define
Такой код
компилируется. P.S. define'ы - зло )) -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||
|
|||||
| admsasha |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 763 Регистрация: 28.1.2005 Репутация: нет Всего: 6 |
borisbn, Это я понимаю. Но я полагал, что это разные зоны видимости.
есть ERROR, а есть LOG::ERROR |
|||
|
||||
| borisbn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
admsasha, "область видимости" - это понятие компилятора, а замена define'ов происходит до компиляции на этапе работы препроцессора. Грубо говоря, ты можешь в твоём любимом редакторе (при условии, что это будет Sublime) пройтись поиском и заменой ERROR -> 0 и это будет то же самое, что делает препроцессор, и в компилятор попадает уже изменённый код. Примерно такой:
Добавлено через 1 минуту и 46 секунд Вот если бы в windows'ёвых h-никах был бы не define, а
тогда бы это было делом компилятора, и эти две сущности (ERROR и LOG::ERROR) не пересеклись бы. -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||
|
|||||
| admsasha |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 763 Регистрация: 28.1.2005 Репутация: нет Всего: 6 |
т.е. мой enum равнозначен
? тогда не пойму, для чего придумали такие сложности как
? Добавлено через 4 минуты и 49 секунд
Такой код тоже собирается без проблем. Вот я и говорю о области видимости. |
||||||
|
|||||||
| borisbn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
Нет. Как раз у твоего enum'а ограниченная область видимости. Речь же не идёт об области видимости, потому, что это понятие существует у компилятора, а перед тем, как твой код попадёт компилятору, отрабатывает препроцессор, который заменяет (тупым поиском/заменой) все вхождения "ERROR" на "0", и потом этот изменённый код попадает компилятору. Добавлено через 2 минуты и 8 секунд Если в твоём втором коде разремить включение windows.h и подать его на препроцессор, то после его работы код будет выглядеть для компилятора так
Добавлено через 7 минут и 25 секунд Сделай следующее
Затем открой файл main.lst и прыгни в самый конец. Видишь ? Вот такой код поступает компилятору на вход. -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||
|
|||||
| admsasha |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 763 Регистрация: 28.1.2005 Репутация: нет Всего: 6 |
borisbn, всё, теперь дошло
Это сообщение отредактировал(а) admsasha - 5.3.2015, 06:05 |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |