Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Непонятная дирректива препроцессора 
:(
    Опции темы
Solodov
Дата 23.3.2006, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 23.3.2006

Репутация: нет
Всего: нет



В общем, данное встретил в демонстрационных файлах для микроконтроллера JN5121...

#ifdef GDB
void (** const rom_breakpoint_ptr)(void) = (void (**)(void))0xf0017004;
#endif

кто-нибудь подскажет что это такое и для чего надобно?

P.S. заранее благодарен. smile
PM MAIL   Вверх
_hunter
Дата 23.3.2006, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



если я правильно понял -- по адресу 0xf0017004 берется функция rom_breakpoint_ptr


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
threef
Дата 23.3.2006, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 27.10.2005
Где: Запорожье

Репутация: 9
Всего: 10



Условная компиляция.
Если где-то раньше есть
#define GDB
, то эта строчка будет откомпилирована, иначе - считай закомментирована

Цитата

void (** const rom_breakpoint_ptr)(void) = (void (**)(void))0xf0017004;


Это сообщение отредактировал(а) threef - 23.3.2006, 18:47
PM MAIL   Вверх
kaa
Дата 7.10.2006, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 817
Регистрация: 5.11.2005

Репутация: нет
Всего: 2



threef, Извиняюсь что не создаю отдельного топика, просто вопрос практически тот же самый тока с уточнением: а если #define будет после #ifdef-а?
По вашим словам компилироваться не должно, а умя компилируется  smile 
PM MAIL   Вверх
Daevaorn
Дата 7.10.2006, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(kaa @  7.10.2006,  20:04 Найти цитируемый пост)
а если #define будет после #ifdef-а?

Не сработает, а значит в листинг не пойдет.
Цитата(kaa @  7.10.2006,  20:04 Найти цитируемый пост)
По вашим словам компилироваться не должно, а умя компилируется  

Значит где-то всё-таки дефайнится
PM MAIL WWW   Вверх
kaa
Дата 7.10.2006, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 817
Регистрация: 5.11.2005

Репутация: нет
Всего: 2



Daevaorn, Так небывает:

Код

//application.h
//файл приложения
#ifndef application_h
#define application_h

//Структура содержащая переменные необходимые для работы приложения
struct application
{
    float *first_array;//Указатель для исходного массива
    float *second_array;//Указатель для массива обработанных чисел
    int m_quantity_numbers;//Количество чисел которое пользователь
                           //собирается ввести
    int m_max_value;//Максимальное значение числа заданное пользователем
    int quantity_changes;//Количество изменений  в процессе обработки
};

//Функция инициализации приложения.
//Устанавливает переменные приложения в ноль.
void InitApplication(application &app);


//Функция вызываемая перед завершением приложения
//Здесь - удаляет динамически созданные массивы.
void DestroyApplication(application &app);


//Функция ввода массива чисел.
//Принимает: структуру с переменными приложения.
//Выводит строку приветствия, строку приглашения к вводу для
//каждого значения, принимает значение количества символов которое
//пользователь собирается вводить, сами числа и максимальное значение
//числа с которым будут сравниваться остальные числа и заменяться на
//него если оно окажется меньше.
//В процессе работы формирует массив динамически и сохраняет его в
//структуре приложения.
void InputFunc(application &app);


//Функция обработки массива чисел.
//Принимает: структуру с переменными приложения.
//Функция сравнивает заданное введённое число с заданным максимальным
//и введённое если оно больше максимального. В процессе работы функция
//динамически создаёт массив для обработанного массива и сохраняет его в
//структуре приложения.
void ProcessingFunc(application &app);


//Функция вывода массива чисел.
//Функция принимает: структуру с переменными приложения.
void OutputFunc(application &app);


И ведь работает с таким файлом прога.  smile 
PM MAIL   Вверх
Damarus
Дата 7.10.2006, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 671
Регистрация: 6.5.2006

Репутация: 6
Всего: 29



Цитата(kaa @  7.10.2006,  20:04 Найти цитируемый пост)
 если #define будет после #ifdef-а?


Цитата(kaa @  8.10.2006,  00:41 Найти цитируемый пост)
Daevaorn, Так небывает:
//application.h
//файл приложения
#ifndef application_h
#define application_h

......


kaa, ты видишь разницу между #ifdef и #ifndef smile 

Это сообщение отредактировал(а) Damarus - 8.10.2006, 00:00
PM MAIL ICQ Jabber   Вверх
Dragon
Дата 8.10.2006, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 10.8.2006
Где: Киев

Репутация: нет
Всего: нет



#ifdef - if defined
#ifndef - if not defined

Вместо #ifdef можешь использовать #if defined(), например:
Код

#if defined(GDB)
#endif 

#if defined(_DEBUG) && defined(GDB)
#endif

#if !defined(_MEMORY_CHECKS)    // #ifndef
#endif


По поводу #define и #ifdef - стандартная вещь в хеадерах - macro guard:
Код

#ifndef _SOME_HEADER_H
#define _SOME_HEADER_H

// ...

#endif /* _SOME_HEADER_H */


Macro guard используется для того чтобы избежать повторного включения одного и того же заголовочного файла в код - и соответственных ошибок компиляции, вроде redefinition of a symbol.

Т.е. войти в секцию кода, ограниченную macro guard'ом можно только один раз, т.к. #ifndef при повторном проходе обнаружит, что _SOME_HEADER_H уже определено.

Это сообщение отредактировал(а) Dragon - 8.10.2006, 13:10
PM MAIL ICQ   Вверх
kaa
Дата 8.10.2006, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 817
Регистрация: 5.11.2005

Репутация: нет
Всего: 2



Damarus, Пардон, лажанулся, с макросами только вот недано столкнулся - в глазах о них ребит немного.  smile 


Dragon, Спасибо за объяснение.. У меня как раз вапрос на языке вертелся  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0635 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.