Название: [РЕШЕНО] #define refedined Отправлено: OKTA от Март 04, 2014, 22:20 Имею в проекте некоторое количество файлов. В некоторых используются макрос с одним и тем же именем, но с разными значениями типа
Код: #define MAX 28 Или я что-то путаю? Название: Re: #define refedined Отправлено: Old от Март 04, 2014, 22:25 Почему они появляются, если макросы не глобальны? Что значит не глобальные. Если макрос продефайнился, то он будет действовать до завершения компиляции единицы трансляции (файла) или до определения его #undef.Название: Re: #define refedined Отправлено: OKTA от Март 04, 2014, 22:30 Не глобальные имел ввиду, что определив макрос в одном файле, в другом он не будет доступен.
+ Я почему-то думал, что макросы используются только для препроцессора, а компилятор уже получает код без них. Название: Re: #define refedined Отправлено: Old от Март 04, 2014, 22:37 Не глобальные имел ввиду, что определив макрос в одном файле, в другом он не будет доступен. Тогда в них бы не было смысла. :)До появления констант в C и C++ макросами определяли общие константы и инклюдили этот файл во все нужные исходники. + Я почему-то думал, макросы используются только для препроцессора, а компилятор уже получает код без них. P.S. препроцессор все таки это часть компилятора, который отрабатывает первым.Название: Re: #define refedined Отправлено: OKTA от Март 04, 2014, 22:40 Ну а если я не инклудю эти файлы друг к другу?) То для каждого макрос будет свой, верно?)
Название: Re: #define refedined Отправлено: kambala от Март 04, 2014, 22:45 верно.
MAX задефайнен где-то в стандартной библиотеке. вообще, в наше время дефайнами константы задают довольно редко :) Название: Re: #define refedined Отправлено: OKTA от Март 04, 2014, 22:47 MAX это я так, для примера. Значит по поводу ворнинга можно не волноваться, если я не допускаю пересечения хеадеров, где эти макросы одноименные объявлены?
Название: Re: #define refedined Отправлено: Old от Март 04, 2014, 22:48 Ну а если я не инклудю эти файлы друг к другу?) То для каждого макрос будет свой, верно?) Инклюд заменяется содержимым подключаемого файла, больше ничего не меняется.Например: hdr_a.h Код
hdr_b.h Код
main.cpp Код
грубо говоря развернется в Код
и это отдастся препроцессору, который увидит попытку переопределить MAX, о чем и скажет. Причем, значение MAX будет содержать из последнего хедера. Если их поменять местами измениться и значение MAX. Название: Re: #define refedined Отправлено: OKTA от Март 04, 2014, 22:59 Да, нашел свой косячок ;D - как раз заинклудил два файла в один))
Всем спасибо) |