Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
Van111
211 / 190 / 22
Регистрация: 03.08.2011
Сообщений: 2,652
Записей в блоге: 12
#1

Различие глобальной и глобальной статической переменной

17.06.2012, 14:57. Просмотров 1546. Ответов 5
Метки нет (Все метки)

у нас есть заголовочный файл со стражами, допустим global.h , его используют несколько других хейдеров и с++ файлов . когда там описаны переменные без оператора static линковщик выдаёт ошибку что это переменная объявлена там то там то. если static стоит , то такой проблемы не возникает.
в чём различие при объявление глобальной и глобальной статической переменной?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.06.2012, 14:57
Ответы с готовыми решениями:

Избавиться от глобальной переменной
#include <iostream> // подключаем ввод/вывод #include...

Инициализация глобальной переменной
Здравствуйте, мне необходимо в программе по решению СНАУ добавить возможность...

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

Можно ли обратиться к перекрытой глобальной переменной?
int x; void f(int x); int main() { f(2); return 0; }; void f(int x) {...

Как сделать матрицу глобальной переменной?
int main() {randomize(); int N,M; cout<<"Vvedit rozmirnist matrici NxM:\n";...

5
David Sylva
1293 / 955 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
17.06.2012, 15:09 #2
Нет разницы. Глобальные переменные имеют статический класс памяти, что означает их существование в течение всего времени выполнения программы.
0
Van111
211 / 190 / 22
Регистрация: 03.08.2011
Сообщений: 2,652
Записей в блоге: 12
17.06.2012, 15:17  [ТС] #3
Цитата Сообщение от David Sylva Посмотреть сообщение
Нет разницы
а чё MVC++ 2008 так не считает?
0
CyBOSSeR
Эксперт С++
2309 / 1682 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
17.06.2012, 15:23 #4
Лучший ответ Сообщение было отмечено как решение

Решение

Van111, дело в том, что если Вы располагаетет определение нестатичекого объекта в заголовочном файле, то тем самым нарушаете One Definition Rule, т.к. данный объект будет определен в каждой единице трансляции, в который будет включен заголовочный файл. Если Вам нужен глобальный объект, видимый другим модулям, определите его в исходном файле, а в загловочном объявите как extern, т.е.:
C++
1
2
3
4
5
// source.cpp 
int object;
 
// header.h
extern int object;
В таком случая указанное правило нарушено не будет.
Если же Вы объявите в заголовочном файле объект как static, то у каждого модуля будет своя "копия" данного объекта, невидимая другим.

Цитата Сообщение от Van111 Посмотреть сообщение
а чё MVC++ 2008 так не считает?
Потому что, David Sylva не прав
3
David Sylva
1293 / 955 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
17.06.2012, 15:24 #5
Не знаю, может дело в другом. В умной книжке написано что нет разницы.
0
CyBOSSeR
Эксперт С++
2309 / 1682 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
17.06.2012, 15:29 #6
Цитата Сообщение от David Sylva Посмотреть сообщение
В умной книжке написано что нет разницы
Разницы нет относительно места хранения и правил инициализации, но есть разница в том, что static объекты не видны другим единицам трансляции, не static - видны, поэтому линкер и ругается, что нашел несколько определений объекта и не знает какое использовать.
2
17.06.2012, 15:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.06.2012, 15:29

Работа с глобальной переменной типа bool
ок, я создала глобальную переменную типа bool (да, лучше этого избегать и все...

Класс памяти по умолчанию для глобальной переменной
Здравствуйте! Прочитала такую вещь тут Вот что-то не укладывается мне в...

Увеличение значения переменной, обявленной в глобальной области
Начал изучать CUDA, т. к. надо пистаь курсач... И вот у меня появился вопрос....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru