#define

Обсуждаем контроллеры компании Atmel.
Ответить
Родился
Сообщения: 11
Зарегистрирован: Пт апр 01, 2016 11:31:24

Сообщение shevelev_es »

Прочитал инфу про #define. Так же прочитал про использование совместно #ifndef, #define и #endif для исключения повторов кода и вывода ошибки компилятором. Но ни как не могу понять что значит этот #define например в заголовочных файлах.

Например в alcd.h файле все логично и понятно

Код: Выделить всё

/************************************************** 
  CodeVisionAVR C Compiler V2.04.9+
  (C) 1998-2010 Pavel Haiduc, HP InfoTech S.R.L.

  Universal alphanumeric LCD driver library
  for the HD44780 LCD controller

  Supports both ATxmega and non-ATxmega devices
**************************************************/


#ifndef _LCDX_INCLUDED_
#define _LCDX_INCLUDED_

void _lcd_write_data(unsigned char data);
/* read a byte from the LCD character generator or display RAM */
unsigned char lcd_read_byte(unsigned char addr);
/* write a byte to the LCD character generator or display RAM */
void lcd_write_byte(unsigned char addr, unsigned char data);
// set the LCD display position  x=0..39 y=0..3
void lcd_gotoxy(unsigned char x, unsigned char y);
// clear the LCD
void lcd_clear(void);
void lcd_putchar(char c);
// write the string str located in SRAM to the LCD
void lcd_puts(char *str);
// write the string str located in FLASH to the LCD
void lcd_putsf(char flash *str);
// write the string str located in EEPROM to the LCD
void lcd_putse(char eeprom *str);
// initialize the LCD controller
void lcd_init(unsigned char lcd_columns);

#pragma library alcd.lib

#endif
Но например в файле mega8.h просто стоит #define и какое-то значение. Привел на картинке.

Изображение
Реклама
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Т.е. вот этого ответа :
WiseLord писал(а):Так и понимайте. Определён макрос с таким именем.
в другой теме недостаточно было ? Нужно ещё одну тему создать ? :facepalm:
Реклама
Родился
Сообщения: 11
Зарегистрирован: Пт апр 01, 2016 11:31:24

Сообщение shevelev_es »

Там тема была создана. Только одну создал. Если чем обидел извини.
Как понять это макрос.
Макрос создается например

Код: Выделить всё

#define DBL_DIG 15 
#define FLT_DIG 6  
#define LDBL_DIG 18 
или так

Код: Выделить всё

#define SQUARE(X) Х*Х 
все понятно, что код делает

а просто

Код: Выделить всё

#define __POWERDOWN_SUPPORTED__
что дает????
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

shevelev_es писал(а):все понятно, что код делает
И что же он делает, этот код ? Расскажите нам ?
Реклама
Эиком - электронные компоненты и радиодетали
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

вы заблуждаетесь, если думаете, что макрос в Си что-то делает.
на самом деле он не делает ничего! делает препроцессор, а макрос указывает ему, что надо сделать.
например, у вас есть текстовый файл в котором вы делаете "найти и заменить" слово "ВАСЯ" на "ПЕТЯ ДУРАК" - это действие вам понятно? так вот, препроцессор делает точно то же самое: он ищет МАКРОС в тексте и заменяет его на ЗНАЧЕНИЕ МАКРОСА. Если вы вместо "ПЕТЯ ДУРАК" введете пробел, то после поиска и замены из текста у вас просто пропадет слово "ВАСЯ". то же самое и с макросом, для которого отсутствует значение.

разница в том, что макрос без значения СУЩЕСТВУЕТ, и его существование можно проверить директивой #ifdef или #ifndef. такие макросы могут выполнять функции "переключателей" где-то далее по коду - если они существуют, будет компилироваться один участок кода, если не существуют - другой. вот и все.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Родился
Сообщения: 11
Зарегистрирован: Пт апр 01, 2016 11:31:24

Сообщение shevelev_es »

ARV, спасибо тебе огромное.
#define Вася Петя
Я понимаю, что по сути это просто замена одного на другое ("Васю на Петю"). Тут у меня и возник вопрос если есть одно (вася), но нет (пети)
#define __POWERDOWN_SUPPORTED__ примерно #define Вася то, что тогда заменять???

Я надеюсь правильно тебя понял: в этом случает мы просто определили __POWERDOWN_SUPPORTED__ ("Васю") и где-то в коде при проверки
#ifdef __POWERDOWN_SUPPORTED__ выполнится одно, иначе другое?
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

shevelev_es писал(а):выполнится одно, иначе другое?
совершенно верно
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Ответить

Вернуться в «AVR»