Учитывая следующую настройку, я столкнулся с довольно странными явлениями, которые я не могу объяснить. Используя Visual Studio 2005, следующий фрагмент кода приводит к сбою. Я хотел бы знать причину.На примере глобальных встроенных функций в C++
playground.cpp
static int local=-1;
#include "common.h"
int main(int arg)
{
setit();
docastorUpdate();
return 0;
}
common.h
#include <stdio.h>
#include <iostream>
void docastorUpdate();
static int *gemini;
inline void setit()
{
gemini = &local;
}
castor.cpp
static int local = 2;
#include "common.h"
void docastorUpdate() {
setit();
// crashing here, dereferencing a null pointer
std::cout << "castor:" << *gemini << std::endl;
}
Дело в том, что е е авария исчезает, когда
- Я двигаюсь рядная функция Сетит() неназванные имена
- Я делаю это статическим
Выражаясь в двух словах, мне нужна помощь, чтобы понять причины , Любое предложение приветствуется! (Я знаю, что это решение не является одним из лучших partices, просто любопытство.)
Почему странность со всей статикой? –
static in C++ - плохая идея для глобальных переменных (скорее, использование extern): http://stackoverflow.com/questions/15235526/the-static-keyword-and-its-various-uses-in-c – Necrolis
Странно что без статичного сбоя ... – Klaymen