Использование init_seg для вызова функции инициализации
Я пытаюсь убедиться, что функция будет вызываться программой в первую очередь для обеспечения инициализации критических объектов. Однако я не совсем понимаю, как init_seg
Предполагается, что привыкнуть / называется.
Например, из документации на msdn может показаться, что следующим будет вызвано следующее.
#pragma init_seg( ".CRT$XCC" )
static void InitializeStuff()
{
printf("InitializeStuff\n");
}
Однако, похоже, что это не так, поскольку эта функция просто не будет вызываться автоматически (если, конечно, я не вызову ее явно).
Как я могу использовать init_set, чтобы гарантировать, что функция вызывается перед остальной частью моего другого исполняемого кода?
1 ответ
Если я правильно понял, вы помещаете все глобальные переменные, которые вы хотите инициализировать в первую очередь, в тот же файл, что и #pragma init_seg
Пример:
#pragma init_seg( ".CRT$XCB" )
class A
{
A()
{
printf("first!\n");
}
};
static A first;
И убедитесь, что вы не помещаете в этот файл другие глобальные переменные, чем те, которые вы хотите инициализировать первыми.