Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум


 
Опции темы

Директивы #ifndef, #define

Непрочитано 17.02.2013, 12:59  
Frensis777
Прописка
 
Аватар для Frensis777
 
Регистрация: 15.03.2009
Сообщений: 162
Сказал спасибо: 1
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
Frensis777 на пути к лучшему
По умолчанию Директивы #ifndef, #define

Я понял, что #define используется для подстановки кода препроцессором:
#define a b// a будет заменено на b

А вот строчка
#define_ALTERNATE_GETCHAR_
непонятна.
И что значит строчка:
#ifndef_DEBUG_TERMINAL_IO?
Реклама:
Frensis777 вне форума  
Непрочитано 17.02.2013, 13:19  
kobzar
Частый гость
 
Регистрация: 10.06.2005
Сообщений: 30
Сказал спасибо: 13
Сказали Спасибо 22 раз(а) в 9 сообщении(ях)
kobzar на пути к лучшему
По умолчанию Re: Директивы #ifndef, #define

#ifndef_DEBUG_TERMINAL_IO? - буквально: если вы в коде НЕ определили имя DEBUG_TERMINAL_IO (с помощью директивы #define), то следующий за #ifndef блок кода будет скомпилирован. И наоборот
kobzar вне форума  
Непрочитано 17.02.2013, 14:35  
Frensis777
Прописка
 
Аватар для Frensis777
 
Регистрация: 15.03.2009
Сообщений: 162
Сказал спасибо: 1
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
Frensis777 на пути к лучшему
По умолчанию Re: Директивы #ifndef, #define

Тогда почему в коде нет оператора end of defenition?
Frensis777 вне форума  
Непрочитано 17.02.2013, 17:56  
ut1wpr
Почётный гражданин KAZUS.RUN
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,613
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
ut1wpr на пути к лучшему
По умолчанию Re: Директивы #ifndef, #define

Сообщение от Frensis777 Посмотреть сообщение
Тогда почему в коде нет оператора end of defenition?
Код ваш или чужой? Если чужой - спросите у автора. Или почитайте про директивы препроцессора. И то и другое - на пользу.
__________________
С уважением,
Vic / ut1wpr
ut1wpr вне форума  
Непрочитано 17.02.2013, 18:09  
Frensis777
Прописка
 
Аватар для Frensis777
 
Регистрация: 15.03.2009
Сообщений: 162
Сказал спасибо: 1
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
Frensis777 на пути к лучшему
По умолчанию 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
Frensis777 вне форума  
Непрочитано 17.02.2013, 19:18  
MisterDi
Почётный гражданин KAZUS.RUN
 
Аватар для MisterDi
 
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,284
Сказал спасибо: 441
Сказали Спасибо 1,040 раз(а) в 701 сообщении(ях)
MisterDi на пути к лучшему
По умолчанию Re: Директивы #ifndef, #define

Нормальным английским написано, что если не определена переменная _DEBUG_TERMINAL_IO_ то объявить что будет использована альтернативная функция терминального отладочного ввода- вывода которая и описывается до директивы #endif. Чтобы в других частях программы было известно о выборе альтернативного ввода-вывода объявляется переменная _ALTERNATE_GETCHAR_
__________________
misterdi<@>i.ua
MisterDi вне форума  
Непрочитано 17.02.2013, 19:40  
Frensis777
Прописка
 
Аватар для Frensis777
 
Регистрация: 15.03.2009
Сообщений: 162
Сказал спасибо: 1
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
Frensis777 на пути к лучшему
По умолчанию Re: Директивы #ifndef, #define

Че за ерунда? Зачем эта проверка? Что она дает?
Оформить в виде отдельной процедуры или функции getchar и делов -то.


Нет...обязательно надо какую-то ерунду городить с какими-то проверками, ДЕБУГАМИ. Зачем это вообще надо. Какого черта?
Frensis777 вне форума  
Непрочитано 17.02.2013, 20:01  
MisterDi
Почётный гражданин KAZUS.RUN
 
Аватар для MisterDi
 
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,284
Сказал спасибо: 441
Сказали Спасибо 1,040 раз(а) в 701 сообщении(ях)
MisterDi на пути к лучшему
По умолчанию Re: Директивы #ifndef, #define

Если проект большой или предполагается использовать этот код не только для себя, то без таких действий компиляция проекта от нескольких кодописателей вполне может привести к непредсказуемому результату.
Кроме того, использование такого подхода позволяет оперативно вносить временные изменения в проект и быстро переключатся между вариантами реализации.
__________________
misterdi<@>i.ua
MisterDi вне форума  
Сказали "Спасибо" MisterDi
kvark85 (18.02.2013)
Непрочитано 17.02.2013, 21:10  
ut1wpr
Почётный гражданин KAZUS.RUN
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,613
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
ut1wpr на пути к лучшему
По умолчанию Re: Директивы #ifndef, #define

Сообщение от Frensis777 Посмотреть сообщение
Че за ерунда? Зачем эта проверка? Что она дает?
Оформить в виде отдельной процедуры или функции getchar и делов -то.


Нет...обязательно надо какую-то ерунду городить с какими-то проверками, ДЕБУГАМИ. Зачем это вообще надо. Какого черта?
Весьма категорично. "Мне непонятно! Нафиг с пляжа!".
Вы про условную компиляцию слыхали? Перед вами ее пример.
Путем манипуляции с определениями можно сильно видоизменять получаемый код. Быстро. Безошибочно. Любому, кто заполучит исходник.
__________________
С уважением,
Vic / ut1wpr
ut1wpr вне форума  
Сказали "Спасибо" ut1wpr
-Alan- (18.02.2013)
Непрочитано 17.02.2013, 21:33  
Frensis777
Прописка
 
Аватар для Frensis777
 
Регистрация: 15.03.2009
Сообщений: 162
Сказал спасибо: 1
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
Frensis777 на пути к лучшему
По умолчанию Re: Директивы #ifndef, #define

Слыхал, но непонятно вот что...
Обычно, конструкция макроса имеет вид:
#define ‹имя_макроса›
......‹тело_макроса›.....
#End-of-defenition

Что-то не соответствует макрос _ALTERNATE_GETCHAR_ этой конструкции...

ПРавильно ли я понял, это ведь макрос, а не переменная как утверждает тов. MisterDi
Frensis777 вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Условная трансляция AVRStudio #define .ifdef picavr Микроконтроллеры, АЦП, память и т.д 6 02.03.2009 21:39
компилятор C Hi-Tech, не работают директивы #asm #endasm alexplev Микроконтроллеры, АЦП, память и т.д 2 26.04.2008 22:47


Часовой пояс GMT +4, время: 16:27.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.