Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
214 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
1

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

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

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

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

Вывод глобальной переменной
Переменная f объявлена и инициализирована как глобальная переменная, но после этих циклов...

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

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

5
1317 / 979 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
17.06.2012, 15:09 2
Нет разницы. Глобальные переменные имеют статический класс памяти, что означает их существование в течение всего времени выполнения программы.
0
214 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
17.06.2012, 15:17  [ТС] 3
Цитата Сообщение от David Sylva Посмотреть сообщение
Нет разницы
а чё MVC++ 2008 так не считает?
0
Эксперт С++
2337 / 1710 / 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
1317 / 979 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
17.06.2012, 15:24 5
Не знаю, может дело в другом. В умной книжке написано что нет разницы.
0
Эксперт С++
2337 / 1710 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
17.06.2012, 15:29 6
Цитата Сообщение от David Sylva Посмотреть сообщение
В умной книжке написано что нет разницы
Разницы нет относительно места хранения и правил инициализации, но есть разница в том, что static объекты не видны другим единицам трансляции, не static - видны, поэтому линкер и ругается, что нашел несколько определений объекта и не знает какое использовать.
2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.06.2012, 15:29

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

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

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

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


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

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

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