реклама на сайте
подробности

 
 
> Почему не работает #define, проект в IAR
aspID
сообщение May 22 2012, 15:10
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 343
Регистрация: 24-01-07
Из: Новосибирск
Пользователь №: 24 714



Проект из нескольких файлов. В основном стоят директивы #define, во включаемых заголовочниках проверяется через #ifndef и не видится. Помогает только явное указание в свойствах проекта.

F_CPU объявлен через свойства проекта, используется в delay.h - не вызывает ошибок

USART_BUF_SIZE объявлен через директиву #define в main.c и используется в USART.h - вызывает ошибку.


Прикрепленные файлы
Прикрепленный файл  src.7z ( 2.8 килобайт ) Кол-во скачиваний: 19
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
mdmitry
сообщение May 22 2012, 15:48
Сообщение #2


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Цитата(aspID @ May 22 2012, 19:10) *
F_CPU объявлен через свойства проекта, используется в delay.h - не вызывает ошибок

USART_BUF_SIZE объявлен через директиву #define в main.c и используется в USART.h - вызывает ошибку.

Лучше define объявлять в заголовочном файле. Там ему место, если использовать надо в нескольких местах.
Да и стражи включения лучше использовать классическим образом.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
aspID
сообщение May 22 2012, 16:11
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 343
Регистрация: 24-01-07
Из: Новосибирск
Пользователь №: 24 714



Цитата(mdmitry @ May 22 2012, 22:48) *
Лучше define объявлять в заголовочном файле.


Предлагаете сделать дополнительный .h ?

Цитата(mdmitry @ May 22 2012, 22:48) *
Да и стражи включения лучше использовать классическим образом.

Здесь, к сожалению, не понял, что имели в виду. Кроме #pragma once еще дополнять конструкцию ifndef-define?

Цитата(_Артём_ @ May 22 2012, 23:04) *
Поэтому при использовании в нескольких местах #include "main.c"


Компилятор делает в нескольких местах такую директиву? Или я чего-то неправильно понял
Go to the top of the page
 
+Quote Post
_Артём_
сообщение May 22 2012, 16:45
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(aspID @ May 22 2012, 19:11) *
Предлагаете сделать дополнительный .h ?

Тоже вариант: его можно менять в зависимости от надобности и включить в USART.h - будет как конфиг проекта.

Цитата(aspID @ May 22 2012, 19:11) *
Здесь, к сожалению, не понял, что имели в виду. Кроме #pragma once еще дополнять конструкцию ifndef-define?


Просто чаще встречается такая конструкция(хотя кому-то может и наоборот):
Код
#ifndef usart_tx_rx_h__
#define usart_tx_rx_h__


#endif



Цитата(aspID @ May 22 2012, 19:11) *
Или я чего-то неправильно понял

Не...это я что-то неправильно понял.

Цитата
USART_BUF_SIZE объявлен через директиву #define в main.c и используется в USART.h - вызывает ошибку.


А точно ошибку, а не warning? У меня откомпилировалось.
P.S. но как Си-проект, а вы хотите Си++?
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th August 2025 - 16:40
Рейтинг@Mail.ru


Страница сгенерированна за 0.01421 секунд с 7
ELECTRONIX ©2004-2016