Kuz'ka 0 13 декабря, 2005 Опубликовано 13 декабря, 2005 · Жалоба Есть команда препроцессора #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 0 13 декабря, 2005 Опубликовано 13 декабря, 2005 · Жалоба Анонимные объединения и ссылки это свойства из C++. Но поддерживается ли C++ в WinAVR? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Petka 0 13 декабря, 2005 Опубликовано 13 декабря, 2005 · Жалоба Есть команда препроцессора #define. Ею можно переопределить имя переменной. int Var1; #define Var2 Var1; Но в полученную новую переменную нельзя записать новое значение (Var2 = 34; не работает ). ......... Спасибо! Как это не работает?! Такого быть не может, потому-что такого не может быть! при компиляции везде после самого #define все "Var2" ЗАМЕНЯЮТСЯ на Var1. Если не работает Var2, значит и не работает Var2! Привнедите полный код, вероятно у вас ошибка. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
beer_warrior 0 13 декабря, 2005 Опубликовано 13 декабря, 2005 · Жалоба В gcc можно задать стандарт компиляции c89/c99/gnu89/gnu99. Посмотри различия в стандартах. А самый простой выход, конечно именованый union. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuz'ka 0 13 декабря, 2005 Опубликовано 13 декабря, 2005 · Жалоба 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 на работает по стандарту С++? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Petka 0 13 декабря, 2005 Опубликовано 13 декабря, 2005 · Жалоба 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;"! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuz'ka 0 13 декабря, 2005 Опубликовано 13 декабря, 2005 · Жалоба Ржу =) убери ";" в строке с #define а то компилятор пытается скомпилировать "Var1; = 45.8;"! Самому смешно...Все понял. Спасиба. (причем когда то я на это уже натыкалси:)))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GrayCat 0 14 декабря, 2005 Опубликовано 14 декабря, 2005 (изменено) · Жалоба Ну а вот это: float Var1; float &Var2 = Var1; работать и не должно! "Усе напутал!" © Б.р. float Var1; float *Var2 = &Var1; -- так должно работать. Но обращаться прийдется к Var1 и *Var2. И помнить, что обращение по ссылке может ухудшить размер и скорость кода... Изменено 14 декабря, 2005 пользователем GrayCat Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Old1 0 14 декабря, 2005 Опубликовано 14 декабря, 2005 · Жалоба Ну а вот это: float Var1; float &Var2 = Var1; работать и не должно! "Усе напутал!" © Б.р. На С не должно, а на С++ работает... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sensor_ua 0 10 января, 2006 Опубликовано 10 января, 2006 · Жалоба #define Var2 Var1; //переопределяем Var1 = 23.6; //это присвоение работает Var2 = 45.8; //на эту строку компилятор пишет следующее error: parse error before '=' token Удивлюсь, если коммент "//переопределяем" тоже есть, а оно работает;) А то это классический ляп Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться