| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Непонятная дирректива препроцессора |
| Автор: Solodov 23.3.2006, 18:32 |
| В общем, данное встретил в демонстрационных файлах для микроконтроллера JN5121... #ifdef GDB void (** const rom_breakpoint_ptr)(void) = (void (**)(void))0xf0017004; #endif кто-нибудь подскажет что это такое и для чего надобно? P.S. заранее благодарен. |
| Автор: _hunter 23.3.2006, 18:44 |
| если я правильно понял -- по адресу 0xf0017004 берется функция rom_breakpoint_ptr |
| Автор: threef 23.3.2006, 18:45 | ||
| Условная компиляция. Если где-то раньше есть #define GDB , то эта строчка будет откомпилирована, иначе - считай закомментирована
|
| Автор: kaa 7.10.2006, 19:04 |
| threef, Извиняюсь что не создаю отдельного топика, просто вопрос практически тот же самый тока с уточнением: а если #define будет после #ifdef-а? По вашим словам компилироваться не должно, а умя компилируется |
| Автор: Daevaorn 7.10.2006, 19:10 |
Не сработает, а значит в листинг не пойдет. Значит где-то всё-таки дефайнится |
| Автор: kaa 7.10.2006, 23:41 | ||
Daevaorn, Так небывает:
И ведь работает с таким файлом прога. |
| Автор: Dragon 8.10.2006, 12:59 | ||||
| #ifdef - if defined #ifndef - if not defined Вместо #ifdef можешь использовать #if defined(), например:
По поводу #define и #ifdef - стандартная вещь в хеадерах - macro guard:
Macro guard используется для того чтобы избежать повторного включения одного и того же заголовочного файла в код - и соответственных ошибок компиляции, вроде redefinition of a symbol. Т.е. войти в секцию кода, ограниченную macro guard'ом можно только один раз, т.к. #ifndef при повторном проходе обнаружит, что _SOME_HEADER_H уже определено. |
| Автор: kaa 8.10.2006, 23:17 |
| Damarus, Пардон, лажанулся, с макросами только вот недано столкнулся - в глазах о них ребит немного. Dragon, Спасибо за объяснение.. У меня как раз вапрос на языке вертелся |