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

 
 
> Макро определения глобальных переменных в нескольких файлах, в Keil не работает со структурой
ViKo
сообщение Nov 10 2010, 10:25
Сообщение #1


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Имею макро, как описано на сайте Keil (только без подчеркиваний)
Код
#ifndef  VAR_DECLS
  #define  DECL extern
  #define  INIT(x)
#else
  #define  DECL
  #define  INIT(x) = x
#endif

В одном из файлов (Main.c), задаю VAR_DECLS, там эти переменные определяются и инициализируются. В остальных - только объявляются. Классика.
Имею тип структуры, и пытаюсь ее определить
Код
typedef struct {  
  int WorkAreaWide : 1;  // Work Area Wide
  int WorkScaleForm : 2; // Work Scale Form
  int dummy  : 6;
  } LCDMode_t  __attribute__((bitband));
DECL LCDMode_t LCDMode INIT({1, 3, 0});

На последнюю строку компилятор ругается
error: #55: too many arguments in macro invocation
Как? Как сделать, чтоб работало? У меня - никакие фокусы не проходят.

Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
demiurg_spb
сообщение Nov 10 2010, 12:22
Сообщение #2


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(ViKo @ Nov 10 2010, 13:25) *
Код
#define  INIT(x) = x
нехорошо так макросы писать.

По человечески будет в коде смотреться так:
Код
#define  INIT(x) x


Такое присвоение нет смысла прятать в макросе - моветон...

Вы ерундой занимаетесь.

Если не хотите кучу дублирующегося кода лицезреть то привыкайте к структурам.
в заголовочном файле:
Код
typedef struct
{
    ...
    ...
} my_struct_t;

extern my_struct_t x;

в файле реализации:
Код
my_struct_t x =
{
    ...
    ...
};


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 1st July 2025 - 17:29
Рейтинг@Mail.ru


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