Как обеспечить требуемый порядок инициализации переменных из разных единиц трансляции?

Рейтинг: 2Ответов: 1Опубликовано: 11.02.2011

Есть файл first.cpp:

int first()
{
    return -1;
}

static int f = first();

Есть файл second.cpp:

int second()
{
    return -1;
}

static int s = second();

Все это собирается в один исполняемый файл.

$ g++ first.cpp second.cpp main.cpp -o main

В силу ряда причин нужно, чтобы first() исполнялось гарантированно до second(). Как этого можно добиться?

Ответы

▲ 4Принят

Ну, разумеется, если говорить конкретно о показанном Вами коде, то в нём нет возможности зафиксировать порядок инициализации — ведь переменные находятся в разных единицах трансляции.

Можно только выдумывать какие-нибудь ухищрения. Например, экспортнуть переменные и проинициализировать их в одной функции.

Глобальная статическая переменная — вообще странная вещь. Попробуйте заменить их на Синглтоны (их-то легко в нужном порядке проинициализировать).


Самое безболезненное решение: заменить переменные на функции со статической переменной внутри.


Судя по всему, у Вас баг в архитектуре ;).