В современном С++ использование глобальных переменных не оправдано ничем. Иными словами, глобальные переменные в С++-программах вообще не нужны. В свете этого неопределённый порядок инициализации глобальных переменных уже не является проблемой.
А как без глобальных переменных переделать такую програмку:
#include <iostream>
using namespace std;
int global_var;
class A
{
public:
A(){}
~A(){}
int do_something(){/*Выполнить некоторые действия над global_var*/}
}
class B
{
public:
A(){}
~A(){}
int do_something(){cout<<global_var;}
}
int main()
{
cin>>global_var;
/*Выполнить некоторые действия над global_var*/
A a;
a.do_something();
/*Выполнить некоторые действия над global_var*/
b.do_something();
return 0;
}
Очевидно, не выполнять этих действий над global_var
Не конструктивный ответ.
Как вариант, используйте класс-синглетон с созданием единственного объекта класса при первом запросе к нему и автоматическим уничтожением при завершении программы.
(frp) писал(а):А как без глобальных переменных переделать такую програмку:
...
У меня очень часто возникают подобные ситуации.
Сделать такую программку без глобальной переменной не составляет никакого труда. Вообще, рекомендую вам поближе познакомиться с методами ОО-проектирования, если вы хотите использовать всю мощь современного С++. Вот эти книги вам очень помогут.
Если вам действительно нужна сущность, имеющая глобальную точку доступа для некоторого числа классов (реализованных, разумеется, в разных единицах трансляции) - используйте синглтон (Singleton). Если желаете взглянуть на код - пожалуйте сюда (простейший вариант) или сюда (мой вариант, основанный на решении Александреску).
если доверить их инициализацию компилятору(точнее линковщику ИМХО), то это будет очень смешные грабли.
Я говорил о стандартном С++, а вы пишете устаревший С-шный код. Объявлять переменную без явного указания её типа (как вы сделали это с х) запрещено стандартом, и это не скомпилируется.
почему "устаревший"? очень всё нормально компилируется. ИМХО и через 20 лет будет компилироваться. Конечно только как Си, без ++.
но я не про то. поставьте int, если угодно. грабли всё равно останутся...
Ужос... 2 страницы флейма. на вопрос темы отвечает сообщение Uncle_Theodore в конце первой страницы: g++ это wrapper к gcc, кот. запускает gcc с необходимыми параметрами (libc++, headers etc) для компиляции C++ кода.