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

 
 
> расширение области видимости переменной
dimka76
сообщение May 13 2009, 09:46
Сообщение #1


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Доброго времени суток.

Использую WinAVR-20090313

имеются две переменные с одинаковыми имнами: локальная и глобальная

язык Си позволяет обратиться из функции к глобальной переменной, если в этой функции имеется одноименная переменная следующим образом
Код
int i;

void foo(void)
{
  int i, k, e;

  k = i; // i локальная
  e = ::i; // i глобальная

}



у меня компилятор в этом случае выдает ошибку.
может этот оператор расширения области видимости присутствует только в C++ ? Я пробовал в начало файла добавлять следующее определение
Код
#ifndef __cplusplus
#define __cplusplus
#endif


все равно выдается та же ошибка

как мне быть в этом случае?

можно конечно дать разные имена, но хочется разобраться почему компилятор выдает ошибки, если Си предоставляет возможность использования одноименных локальных и глобальных имен.


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
dimka76
сообщение May 14 2009, 04:38
Сообщение #2


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Действительно, я смутно представляю (точнее вообще не представляю) как в WinAVR создавать проекты на С++ и смешаные проекты ( Си + С++).
Использую связку WinAVR + AVRStudio, а там makefile создается автоматически. Пробовал менять расширение файла с *.с на *.С.
Компилятор на :: перестал выдавать ошибки, но начал давать предупреждение на -std=gnu99. Пробовал использовать MFile из пакета WinAVR, но для опиции -std там всего четыре альтернативы и на все компилятор выдает предупреждения при использовании файла программы с расширением *.С.


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 14 2009, 18:33
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(dimka76 @ May 14 2009, 07:38) *
Действительно, я смутно представляю (точнее вообще не представляю) как в WinAVR создавать проекты на С++ и смешаные проекты ( Си + С++).
Но хоть что такое С++ и как оно стыкуется с С вы знаете? Про name mangling и вытекающий из него extern "C" для сишных функций слышали? Иначе лучше вам действительно переименовать локальную переменную.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
dimka76
сообщение May 15 2009, 05:08
Сообщение #4


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Цитата(Сергей Борщ @ May 14 2009, 22:33) *
Но хоть что такое С++ и как оно стыкуется с С вы знаете? Про name mangling и вытекающий из него extern "C" для сишных функций слышали? Иначе лучше вам действительно переименовать локальную переменную.


Что такое С++ я знаю. Про extern "C" для сишных функций я слышал, но речь идет не о фйнкции. А если вы это к #define __cplusplus, то я думал, что так WinAVR распознает, что прога написана на С++.



Цитата(sergeeff @ May 14 2009, 23:08) *
Вся эта возня с переменными, она для реальной работы или для учебы? По-моему поменять имена у глобальных переменных - дел на 10 минут, а нам задают вопросы третий день.



Для саморазвития с последующим применением в работе. Для поиска истины, если хотите. Просто человек я въедливый иногда бываю. Хочется разобраться.

Цитата
а нам задают вопросы третий день.


Но ведь никто никого не принуждает отвечать rolleyes.gif


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- dimka76   расширение области видимости переменной   May 13 2009, 09:46
- - MrYuran   Даже если определить локальную переменную, совпада...   May 13 2009, 09:59
|- - dimka76   Цитата(MrYuran @ May 13 2009, 13:59) :: -...   May 13 2009, 10:04
|- - bus16   Цитата(dimka76 @ May 13 2009, 14:04) но я...   May 13 2009, 10:34
|- - Сергей Борщ   Цитата(dimka76 @ May 13 2009, 13:04) но я...   May 13 2009, 11:55
|- - dimka76   Цитата(Сергей Борщ @ May 13 2009, 15:55) ...   May 13 2009, 12:21
|- - HARMHARM   Цитата(dimka76 @ May 13 2009, 15:21) ... ...   May 13 2009, 13:45
|- - Сергей Борщ   Цитата(dimka76 @ May 13 2009, 15:21) если...   May 13 2009, 17:29
|- - sergeeff   Никак не возьму в толк. Какая разница? 1. В ...   May 13 2009, 18:30
- - SysRq   Кодint i; int get_i(void) { return i; }...   May 13 2009, 12:24
|- - dimka76   Цитата(SysRq @ May 13 2009, 16:24) Кодint...   May 13 2009, 12:26
|- - SysRq   Цитата(dimka76 @ May 13 2009, 16:26) тогд...   May 13 2009, 12:30
|- - amw   Цитата(dimka76 @ May 14 2009, 07:38) Проб...   May 14 2009, 06:21
||- - dimka76   Цитата(amw @ May 14 2009, 10:21) Уже гово...   May 14 2009, 07:15
|- - Непомнящий Евгений   Цитата(dimka76 @ May 14 2009, 08:38) Проб...   May 14 2009, 08:11
||- - dimka76   Цитата(Непомнящий Евгений @ May 14 2009, 12...   May 14 2009, 08:18
|- - Сергей Борщ   Цитата(dimka76 @ May 15 2009, 08:08) Что ...   May 15 2009, 07:10
|- - dimka76   Цитата(Сергей Борщ @ May 15 2009, 11:10) ...   May 15 2009, 08:04
- - Непомнящий Евгений   А расширение .cpp не помогает?   May 14 2009, 06:19
- - Непомнящий Евгений   Очевидно - убрать опцию --std=gnu99 для .C файлов ...   May 14 2009, 09:29
- - mdmitry   Забросить студию и собрать проект руками, написав ...   May 14 2009, 13:02
- - sergeeff   Вся эта возня с переменными, она для реальной рабо...   May 14 2009, 19:08


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

 


RSS Текстовая версия Сейчас: 20th August 2025 - 02:32
Рейтинг@Mail.ru


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