С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Van111
209 / 188 / 4
Регистрация: 03.08.2011
Сообщений: 2,598
Записей в блоге: 12
#1

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

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

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

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

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

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

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

Можно ли обратиться к перекрытой глобальной переменной? - C++
int x; void f(int x); int main() { f(2); return 0; }; void f(int x) { x=x; // здесь я хочу скопировать праметр в...

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

5
David Sylva
1291 / 953 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
17.06.2012, 15:09 #2
Нет разницы. Глобальные переменные имеют статический класс памяти, что означает их существование в течение всего времени выполнения программы.
0
Van111
209 / 188 / 4
Регистрация: 03.08.2011
Сообщений: 2,598
Записей в блоге: 12
17.06.2012, 15:17  [ТС] #3
Цитата Сообщение от David Sylva Посмотреть сообщение
Нет разницы
а чё MVC++ 2008 так не считает?
0
CyBOSSeR
Эксперт С++
2305 / 1675 / 86
Регистрация: 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
1291 / 953 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
17.06.2012, 15:24 #5
Не знаю, может дело в другом. В умной книжке написано что нет разницы.
0
CyBOSSeR
Эксперт С++
2305 / 1675 / 86
Регистрация: 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
Привет! Вот еще темы с ответами:

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

Как изменить значение глобальной переменной в процедуре? - C++
Как изменить значение глобальной переменной в процедуре? #include <iostream> using std:: cin; using std:: cout; using std::...

Задать значения глобальной переменной при разных условиях - C++
Как глобально задать значение переменной при разных условиях, а потом обращаться к этим значениям из других функций? Нужно что-то...

Cоздание глобальной переменной типа объект для Form - C++
Суть проблемы заключается в том что я хочу созадать глобальную переменную перед классом форм, мне это нужно для того что бы во всех...


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

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

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