Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Genel başlatıcı 'symbol' extern nesnesine erişiyor (i.22)
C++ Temel Yönergeleri: I.22: Genel nesnelerin karmaşık bir şekilde başlatılmasını önle
Genel nesneler tutarsız veya tanımsız bir sırada başlatılabilir, bu da aralarındaki bağımlılıkların riskli olduğu ve kaçınılması gerektiği anlamına gelir. Bu kılavuz, başlatıcılar olarak externkabul edilen başka bir nesneye başvurduğunda geçerlidir.
Açıklamalar
Bir nesne aşağıdaki kurallara uygunsa kabul edilir extern :
- tanımlayıcı ile
externişaretlenmiş genel bir değişkendir veya bir sınıfın statik üyesidir; - anonim ad alanında değildir;
- olarak
constişaretlenmez; - Statik sınıf üyeleri genel olarak kabul edilir, bu nedenle başlatıcıları da denetlenür.
Kod analizi adı: NO_GLOBAL_INIT_EXTERNS
Örnek
Dış sürüm denetimi:
// api.cpp
int api_version = API_DEFAULT_VERSION; // Assume it can change at run time, hence non-const.
// client.cpp
extern int api_version;
bool is_legacy_mode = api_version <= API_LEGACY_VERSION; // C26427, also stale value
Dış sürüm denetimi daha güvenilir hale getirildi:
// api.cpp
int api_version = API_DEFAULT_VERSION; // Assume it can change at run time, hence non-const.
// client.cpp
extern int api_version;
bool is_legacy_mode() noexcept
{
return api_version <= API_LEGACY_VERSION;
}