Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: AVR GCC
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Kuz'ka
Есть команда препроцессора #define. Ею можно переопределить имя переменной.

int Var1;

#define Var2 Var1;


Но в полученную новую переменную нельзя записать новое значение (Var2 = 34; не работает ).



Есть анонимные объединения:

static union {
float Var1;
float Var2;
};

но компилятор WINAVR видимо не умеет им пользоваться, так как требует ввести имя объединения.


Есть определение ссылки:

float Var1;
float &Var2 = Var1;

оно тоже не работает...

Так вот, как же все таки в WINAVR получить две переменные Var1 и Var2 по одному адресу? (переменные из объединения U.Var1 и U.Var2 не подходят).

Спасибо!
IgorKossak
Анонимные объединения и ссылки это свойства из C++.
Но поддерживается ли C++ в WinAVR?
Petka
Цитата(Kuz'ka @ Dec 13 2005, 10:59) *
Есть команда препроцессора #define. Ею можно переопределить имя переменной.

int Var1;

#define Var2 Var1;


Но в полученную новую переменную нельзя записать новое значение (Var2 = 34; не работает ).

.........
Спасибо!


Как это не работает?! Такого быть не может, потому-что такого не может быть!
при компиляции везде после самого #define все "Var2" ЗАМЕНЯЮТСЯ на Var1. Если не работает Var2, значит и не работает Var2! Привнедите полный код, вероятно у вас ошибка.
beer_warrior
В gcc можно задать стандарт компиляции c89/c99/gnu89/gnu99.
Посмотри различия в стандартах.
А самый простой выход, конечно именованый union.
Kuz'ka
float Var1 = 55.6; //объявляем


#define Var2 Var1; //переопределяем

Var1 = 23.6; //это присвоение работает

Var2 = 45.8; //на эту строку компилятор пишет следующее error: parse error before '=' token


то есть Var 2 считается константой

Цитата(beer_warrior @ Dec 13 2005, 11:41) *
В gcc можно задать стандарт компиляции c89/c99/gnu89/gnu99.
Посмотри различия в стандартах.
А самый простой выход, конечно именованый union.



Ни с одним из ключей c89/c99/gnu89/gnu99 ссылки и анонимные объединения не работают...Полччается что же, WinAvr на работает по стандарту С++?
Petka
Цитата(Kuz'ka @ Dec 13 2005, 12:46) *
float Var1 = 55.6; //объявляем


#define Var2 Var1; //переопределяем

Var1 = 23.6; //это присвоение работает

Var2 = 45.8; //на эту строку компилятор пишет следующее error: parse error before '=' token


то есть Var 2 считается константой

Цитата(beer_warrior @ Dec 13 2005, 11:41) *

В gcc можно задать стандарт компиляции c89/c99/gnu89/gnu99.
Посмотри различия в стандартах.
А самый простой выход, конечно именованый union.



Ни с одним из ключей c89/c99/gnu89/gnu99 ссылки и анонимные объединения не работают...Полччается что же, WinAvr на работает по стандарту С++?



Ржу =) убери ";" в строке с #define а то компилятор пытается скомпилировать "Var1; = 45.8;"!
Kuz'ka
Ржу =) убери ";" в строке с #define а то компилятор пытается скомпилировать "Var1; = 45.8;"!
[/quote]



Самому смешно...Все понял. Спасиба. (причем когда то я на это уже натыкалсиsmile.gif)))
GrayCat
Ну а вот это:
Цитата(Kuz'ka @ Dec 13 2005, 09:59) *
float Var1;
float &Var2 = Var1;
работать и не должно! "Усе напутал!" © Б.р.

Код
float Var1;
float *Var2 = &Var1;
-- так должно работать. Но обращаться прийдется к Var1 и *Var2. И помнить, что обращение по ссылке может ухудшить размер и скорость кода...
Old1
Цитата(GrayCat @ Dec 14 2005, 11:15) *
Ну а вот это:
Цитата(Kuz'ka @ Dec 13 2005, 09:59) *
float Var1;
float &Var2 = Var1;
работать и не должно! "Усе напутал!" © Б.р.

На С не должно, а на С++ работает...
sensor_ua
Цитата(Kuz'ka @ Dec 13 2005, 11:46) *
#define Var2 Var1; //переопределяем

Var1 = 23.6; //это присвоение работает

Var2 = 45.8; //на эту строку компилятор пишет следующее error: parse error before '=' token


Удивлюсь, если коммент "//переопределяем" тоже есть, а оно работаетwink.gif А то это классический ляп
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.