Вручную создайте символы gnu_unique_object

Рассмотрим случай функции-члена класса, определенной в заголовке, с static переменная хранения. Когда вы включаете заголовок в несколько модулей компиляции, вы получите несколько копий static переменная. Тем не мение, компилятор исправит это за вас, и просто выберите одну из выпущенных переменных (обратите внимание, что это отличается от встраивания). Это обеспечивается конкретным расширением GNU для возможных типов символов, точно gnu_unique_object (они отображаются как «ты» в nm, который называет их на страницах справочника «уникальными глобальными символами»).

Вопрос в том, как заставить компилятор генерировать символы такого типа для произвольных переменных? Я устал от оборачивания вещей в классе, чтобы получить такое поведение.

2

Решение

Если вы объявите глобальную переменную в заголовочном файле, вы получите разные экземпляры этой переменной в каждом модуле компиляции. extern ключевое слово это то, что вы после. Это ключевое слово превращает то, что выглядит как экземпляр в предварительное объявление. Это можно представить как обещание, что переменная с таким именем будет создана в другом модуле компиляции и будет доступна при компоновке.

MyTrueGlobals.h

extern int global_variable_1;

MyTrueGlobals.cpp

int global_variable_1 = 0;
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]