Перейти к содержанию
    

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

 

Спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Анонимные объединения и ссылки это свойства из C++.

Но поддерживается ли C++ в WinAVR?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть команда препроцессора #define. Ею можно переопределить имя переменной.

 

int Var1;

 

#define Var2 Var1;

 

 

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

 

.........

Спасибо!

 

Как это не работает?! Такого быть не может, потому-что такого не может быть!

при компиляции везде после самого #define все "Var2" ЗАМЕНЯЮТСЯ на Var1. Если не работает Var2, значит и не работает Var2! Привнедите полный код, вероятно у вас ошибка.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В gcc можно задать стандарт компиляции c89/c99/gnu89/gnu99.

Посмотри различия в стандартах.

А самый простой выход, конечно именованый union.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

float Var1 = 55.6; //объявляем

 

 

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

 

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

 

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

 

 

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

 

В gcc можно задать стандарт компиляции c89/c99/gnu89/gnu99.

Посмотри различия в стандартах.

А самый простой выход, конечно именованый union.

 

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

float Var1 = 55.6; //объявляем

 

 

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

 

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

 

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

 

 

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

 

В gcc можно задать стандарт компиляции c89/c99/gnu89/gnu99.

Посмотри различия в стандартах.

А самый простой выход, конечно именованый union.

 

 

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

 

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

 

 

Самому смешно...Все понял. Спасиба. (причем когда то я на это уже натыкалси:))))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну а вот это:

float Var1;

float &Var2 = Var1;

работать и не должно! "Усе напутал!" © Б.р.

 

float Var1;
float *Var2 = &Var1;

-- так должно работать. Но обращаться прийдется к Var1 и *Var2. И помнить, что обращение по ссылке может ухудшить размер и скорость кода...

Изменено пользователем GrayCat

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну а вот это:
float Var1;

float &Var2 = Var1;

работать и не должно! "Усе напутал!" © Б.р.

На С не должно, а на С++ работает...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

 

Удивлюсь, если коммент "//переопределяем" тоже есть, а оно работает;) А то это классический ляп

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...