Использование 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;

И убедитесь, что вы не помещаете в этот файл другие глобальные переменные, чем те, которые вы хотите инициализировать первыми.

Другие вопросы по тегам