Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Объявление переменных / 6 сообщений из 6, страница 1 из 1
07.04.2005, 11:56
    #33002267
Влад123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объявление переменных
Помогите разобраться, что означает такое объявление
1) const volatile double dDouble1
2) extern const volatile double dDouble2
...
Рейтинг: 0 / 0
07.04.2005, 12:26
    #33002379
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объявление переменных
Влад123Помогите разобраться, что означает такое объявление
1)
const volatile double dDouble1;


Переменная dDouble1 с типом double, которая не может меняться программой в течении своей жизни, но которая может меняться извне программы (volatile).
Возможность изменения переменной извне программы является только рекомендацией компилятору по генерации кода таким образом, чтобы он
не использовал значение переменной, закэшированной в регистрах процессора или в прочей процессорной памяти.

Влад123
2)
extern const volatile double dDouble2;


Ссылка на такую же по характеристикам (повторяться не буду) переменную, как и описанная в п.1, но с именем dDouble2, в словаре глобальных имен.
В отличие от выражения
[src c]
const volatile double dDouble1;
[/src]которое
является и объявлением, и определением

может помещать имя dDouble1 в словарь глобальных имен

данное выражение

Является только объявлением

Не помещает имя dDouble2 в словарь глобальных имен, а требует наличия там уже помещенного туда имени dDouble2.
...
Рейтинг: 0 / 0
07.04.2005, 12:34
    #33002400
prof79
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объявление переменных
1) const volatile double dDouble1
Попробуем разобрать. Скажу сразу, что эта строчка наверное не должна компилиться.

const - константная т.е. значение этой переменной изменить нельзя. Поэтому чтобы необходимо переменной присвоить какое-либо начальное значение.
volatile - "изменчивая". Т.е. значение этой переменной может изменяться "не описанным в языке способом"(с) Страуструп. Например операционной системой. Т.е. эта переменная не может изменяться средствами С++, однако ее значение можно изменить извне, с помощью ассемблера, или как-то еще нестандартно.

2) extern const volatile double dDouble2
Добавляется новое ключевое слово. Для понимания необходимо усвоить разницу между обьявлением и определением.
При обьявлении обьекта, последний не инициализируется. Упрощенно: компилятору дается инструкция: где-то есть такой-то обьект такого-то типа.
При определении под обьект выделяется память и обьект инициализируется. Обьявлений может быть много, определение - только одно. Естественно типы в обьявлениях и определении обьекта должны совпадать.
extern - означает что dDouble2 - только обьявление переменной. А определение в другом месте.
Поэтому присваивать начальное значение переменной здесь не следует(а если присвоить - то инструкция extern будет проигнорирована). Необходимо в другом месте программы определиь переменную с начальным значением
...
Рейтинг: 0 / 0
07.04.2005, 14:03
    #33002673
Влад123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объявление переменных
СПАСИБО!
...
Рейтинг: 0 / 0
08.04.2005, 22:36
    #33006115
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объявление переменных
prof791) const volatile double dDouble1
Попробуем разобрать. Скажу сразу, что эта строчка наверное не должна компилиться.

Должна.

prof79
const - константная т.е. значение этой переменной изменить нельзя. Поэтому чтобы необходимо переменной присвоить какое-либо начальное значение.
volatile - "изменчивая". Т.е. значение этой переменной может изменяться "не описанным в языке способом"(с) Страуструп. Например операционной системой. Т.е. эта переменная не может изменяться средствами С++, однако ее значение можно изменить извне, с помощью ассемблера, или как-то еще нестандартно.

Ну сам же все знаешь. Почему же не должна компилиться ?
Должна, const не дает переменной меняться в программе на C++.
А volatile говорит, что она менятеся еще где-то.
...
Рейтинг: 0 / 0
09.04.2005, 13:28
    #33006361
prof79
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объявление переменных
MasterZiv prof791) const volatile double dDouble1
Попробуем разобрать. Скажу сразу, что эта строчка наверное не должна компилиться.

Должна.

Начальное значение не присваивается. Попробывал на VC 7.1 - не компилит. Говорит "error C2734: 'dDouble1' : const object must be initialized if not extern"
Как на эту тонкость смотрит стандарт не знаю. Поэтому написал "наверное".
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Объявление переменных / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]