Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Директивы
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Rash
Всем здрасте. Помогите начинающему в IAR в очеридной раз. Для чего в файлах *.h ставят:
Код
#ifndef имя_файла_H
#define имя_файла_H
..........
#endif

Какие полезные директивы есть. Кто, что применял и для чего?
makc
Учите язык С и, в частности, его препроцессор.

Описанные Вами директивы заголовочных файлов помогают избежать ситуации, когда один и тот же заголовочный файл будет включен дважды, что может привести к проблемам компиляции (конфликтам).
Rash
ну и на том спасибо
G}{OST
Цитата(Rash @ Oct 14 2005, 16:20)
Какие полезные директивы есть. Кто, что применял и для чего?
*

К примеру...
Если вставить в текст программы на С вот такой код, то в скомпилированном бинарнике появятся строки со датой, временем, и версией компиляции:
Код
const char __flash __date__[] = __DATE__;
const char __flash __time__[] = __TIME__;
const char __flash __version__[] = "v0.1";

Для С++ это выглядит так:
Код
#pragma diag_suppress=Pe177
__root __flash const char __date__[] = __DATE__;
__root __flash const char __time__[] = __TIME__;
__root __flash const char __version__[] = "v0.1";
#pragma diag_default=Pe177
G}{OST
Цитата(Rash @ Oct 14 2005, 16:20)
Какие полезные директивы есть. Кто, что применял и для чего?
*

А вот ещё. Чтобы не путаться, какой тип какую имеет размерность, всегда включаю такие дефайны:
Код
#define U8   unsigned char
#define U16  unsigned short
#define U32  unsigned long
#define S8   signed char
#define S16  signed short
#define S32  signed long


Или вот. Чтобы не перепутать что куда подключено - обзываю выводы портов, чтобы потом обращаться по осмысленному имени:
Код
#define    SS                PORTB_PORTB0   // 0
#define    DIR_SS            DDRB_DDB0      // 1

// обращение напрямую к порту:
SS = 0;
DIR_SS = 1;
IgorKossak
Цитата(G}{OST @ Oct 14 2005, 16:26)
А вот ещё. Чтобы не путаться, какой тип какую имеет размерность, всегда включаю такие дефайны:
Код
#define U8   unsigned char
#define U16  unsigned short
#define U32  unsigned long
#define S8   signed char
#define S16  signed short
#define S32  signed long

*


Подобные вещи лучше через typedef делать.
beer_warrior
#warning "xxx"
#error "xxx" - выбросит соответствующие мессаги.
Пользительно для проверки, что компилятор проходил это место в исходнике
(файл включен в проект, строка не закрыта #ifdef, итд)
BVU
Цитата(IgorKossak @ Oct 18 2005, 10:43)
Цитата(G}{OST @ Oct 14 2005, 16:26)
А вот ещё. Чтобы не путаться, какой тип какую имеет размерность, всегда включаю такие дефайны:
Код
#define U8   unsigned char
#define U16  unsigned short
#define U32  unsigned long
#define S8   signed char
#define S16  signed short
#define S32  signed long

*


Подобные вещи лучше через typedef делать.
*


Абсолютно верно! Когда производиться определение типа в основном когда на 'C++' софт пишеться. Но по большому счету это как правило хорошего тона, т.к. в момент трансляции в любом случае идет подстановка базового варианта типа.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.