Форум программистов, компьютерный форум CyberForum.ru

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Без глобальной переменной. Уникальные символы из строки на экран copy_if - C++
Смысл простой. Вывод на экран только уникальных символов из строки с сохранением порядка. Есть способы решения явными циклами, но они для...

Ошибка повторения имен переменных при использовании глобальной переменной - C++
Есть 3 файла: head.h #ifndef HeuristicKardano_probmatr_h #define HeuristicKardano_probmatr_h int m1; int m2; int m3; #endif


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
David Sylva
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
17.06.2012, 15:09     Различие глобальной и глобальной статической переменной #2
Нет разницы. Глобальные переменные имеют статический класс памяти, что означает их существование в течение всего времени выполнения программы.
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,587
Записей в блоге: 12
17.06.2012, 15:17  [ТС]     Различие глобальной и глобальной статической переменной #3
Цитата Сообщение от David Sylva Посмотреть сообщение
Нет разницы
а чё MVC++ 2008 так не считает?
CyBOSSeR
Эксперт C++
2299 / 1669 / 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 не прав
David Sylva
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
17.06.2012, 15:24     Различие глобальной и глобальной статической переменной #5
Не знаю, может дело в другом. В умной книжке написано что нет разницы.
CyBOSSeR
Эксперт C++
2299 / 1669 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
17.06.2012, 15:29     Различие глобальной и глобальной статической переменной #6
Цитата Сообщение от David Sylva Посмотреть сообщение
В умной книжке написано что нет разницы
Разницы нет относительно места хранения и правил инициализации, но есть разница в том, что static объекты не видны другим единицам трансляции, не static - видны, поэтому линкер и ругается, что нашел несколько определений объекта и не знает какое использовать.
Yandex
Объявления
17.06.2012, 15:29     Различие глобальной и глобальной статической переменной
Ответ Создать тему
Опции темы

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