Stałe globalne w C++
Stałe globalne języka C++ mają statyczne powiązania. Różni się to od C. Jeśli spróbujesz użyć stałej globalnej w języku C++ w wielu plikach, wystąpi nierozwiązany błąd zewnętrzny. Kompilator optymalizuje stałe globalne na wyjściu, nie pozostawiając miejsca zarezerwowanego dla zmiennej.
Jednym ze sposobów rozwiązania tego błędu jest uwzględnienie const initializations w pliku nagłówka i dołączenie tego nagłówka do plików CPP w razie potrzeby, tak jak w przypadku prototypu funkcji. Inną możliwością jest uczynienie zmiennej niestałych i użycie stałego odwołania podczas jego oceny.
Poniższy przykład generuje kod C2019:
// global_constants.cpp
// LNK2019 expected
void test(void);
const int lnktest1 = 0;
int main() {
test();
}
A następnie,
// global_constants_2.cpp
// compile with: global_constants.cpp
extern int lnktest1;
void test() {
int i = lnktest1; // LNK2019
}