Директивы #ifndef, #define
17.02.2013, 12:59
|
|
|
Прописка
Регистрация: 15.03.2009
Сообщений: 162
Сказал спасибо: 1
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Директивы #ifndef, #define
Я понял, что #define используется для подстановки кода препроцессором:
#define a b// a будет заменено на b
А вот строчка
#define_ALTERNATE_GETCHAR_
непонятна.
И что значит строчка:
#ifndef_DEBUG_TERMINAL_IO?
|
|
|
|
17.02.2013, 13:19
|
|
|
Частый гость
Регистрация: 10.06.2005
Сообщений: 30
Сказал спасибо: 13
Сказали Спасибо 22 раз(а) в 9 сообщении(ях)
|
Re: Директивы #ifndef, #define
#ifndef_DEBUG_TERMINAL_IO? - буквально: если вы в коде НЕ определили имя DEBUG_TERMINAL_IO (с помощью директивы #define), то следующий за #ifndef блок кода будет скомпилирован. И наоборот
|
|
|
|
17.02.2013, 14:35
|
|
|
Прописка
Регистрация: 15.03.2009
Сообщений: 162
Сказал спасибо: 1
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Re: Директивы #ifndef, #define
Тогда почему в коде нет оператора end of defenition?
|
|
|
|
17.02.2013, 17:56
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,613
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: Директивы #ifndef, #define
Сообщение от Frensis777
|
|
Тогда почему в коде нет оператора end of defenition?
|
Код ваш или чужой? Если чужой - спросите у автора. Или почитайте про директивы препроцессора. И то и другое - на пользу.
__________________
С уважением,
Vic / ut1wpr
|
|
|
|
17.02.2013, 18:09
|
|
|
Прописка
Регистрация: 15.03.2009
Сообщений: 162
Сказал спасибо: 1
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Re: Директивы #ifndef, #define
ЧУЖОЙ
#ifndef _DEBUG_TERMINAL_IO_
// Get a character from the USART Receiver buffer
// взять символ из созданного буфера USART
#define _ALTERNATE_GETCHAR_
#pragma used+
char getchar(void)
{
char data; // локальная переменная
while (rx_counter==0);
data = rx_buffer[rx_rd_index];
if (++rx_rd_index == RX_BUFFER_SIZE)
{
rx_rd_index=0;
}; // я добавил { }; для вящей читаемости
#asm("cli")
--rx_counter;
#asm("sei")
return data;
}
#pragma used-
#endif
|
|
|
|
17.02.2013, 19:18
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,284
Сказал спасибо: 441
Сказали Спасибо 1,040 раз(а) в 701 сообщении(ях)
|
Re: Директивы #ifndef, #define
Нормальным английским написано, что если не определена переменная _DEBUG_TERMINAL_IO_ то объявить что будет использована альтернативная функция терминального отладочного ввода- вывода которая и описывается до директивы #endif. Чтобы в других частях программы было известно о выборе альтернативного ввода-вывода объявляется переменная _ALTERNATE_GETCHAR_
__________________
misterdi<@>i.ua
|
|
|
|
17.02.2013, 19:40
|
|
|
Прописка
Регистрация: 15.03.2009
Сообщений: 162
Сказал спасибо: 1
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Re: Директивы #ifndef, #define
Че за ерунда? Зачем эта проверка? Что она дает?
Оформить в виде отдельной процедуры или функции getchar и делов -то.
Нет...обязательно надо какую-то ерунду городить с какими-то проверками, ДЕБУГАМИ. Зачем это вообще надо. Какого черта?
|
|
|
|
17.02.2013, 20:01
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,284
Сказал спасибо: 441
Сказали Спасибо 1,040 раз(а) в 701 сообщении(ях)
|
Re: Директивы #ifndef, #define
Если проект большой или предполагается использовать этот код не только для себя, то без таких действий компиляция проекта от нескольких кодописателей вполне может привести к непредсказуемому результату.
Кроме того, использование такого подхода позволяет оперативно вносить временные изменения в проект и быстро переключатся между вариантами реализации.
__________________
misterdi<@>i.ua
|
|
|
|
Сказали "Спасибо" MisterDi
|
|
|
17.02.2013, 21:10
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,613
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: Директивы #ifndef, #define
Сообщение от Frensis777
|
Че за ерунда? Зачем эта проверка? Что она дает?
Оформить в виде отдельной процедуры или функции getchar и делов -то.
Нет...обязательно надо какую-то ерунду городить с какими-то проверками, ДЕБУГАМИ. Зачем это вообще надо. Какого черта?
|
Весьма категорично. "Мне непонятно! Нафиг с пляжа!".
Вы про условную компиляцию слыхали? Перед вами ее пример.
Путем манипуляции с определениями можно сильно видоизменять получаемый код. Быстро. Безошибочно. Любому, кто заполучит исходник.
__________________
С уважением,
Vic / ut1wpr
|
|
|
|
17.02.2013, 21:33
|
|
|
Прописка
Регистрация: 15.03.2009
Сообщений: 162
Сказал спасибо: 1
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Re: Директивы #ifndef, #define
Слыхал, но непонятно вот что...
Обычно, конструкция макроса имеет вид:
#define ‹имя_макроса›
......‹тело_макроса›.....
#End-of-defenition
Что-то не соответствует макрос _ALTERNATE_GETCHAR_ этой конструкции...
ПРавильно ли я понял, это ведь макрос, а не переменная как утверждает тов. MisterDi
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 16:27.
|
|