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

 
 
> AVR GCC, размещение двух переменных по одному адресу
Kuz'ka
сообщение Dec 13 2005, 07:59
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 13-12-05
Пользователь №: 12 152



Есть команда препроцессора #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 не подходят).

Спасибо!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Petka
сообщение Dec 13 2005, 08:31
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Цитата(Kuz'ka @ Dec 13 2005, 10:59) *
Есть команда препроцессора #define. Ею можно переопределить имя переменной.

int Var1;

#define Var2 Var1;


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

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


Как это не работает?! Такого быть не может, потому-что такого не может быть!
при компиляции везде после самого #define все "Var2" ЗАМЕНЯЮТСЯ на Var1. Если не работает Var2, значит и не работает Var2! Привнедите полный код, вероятно у вас ошибка.
Go to the top of the page
 
+Quote Post
Kuz'ka
сообщение Dec 13 2005, 09:46
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 13-12-05
Пользователь №: 12 152



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 на работает по стандарту С++?
Go to the top of the page
 
+Quote Post
Petka
сообщение Dec 13 2005, 10:06
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Цитата(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;"!
Go to the top of the page
 
+Quote Post
Kuz'ka
сообщение Dec 13 2005, 10:20
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 13-12-05
Пользователь №: 12 152



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



Самому смешно...Все понял. Спасиба. (причем когда то я на это уже натыкалсиsmile.gif)))
Go to the top of the page
 
+Quote Post



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

 


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


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