Share via


Derleyici Uyarısı C5248

'section-name' bölümü C++ dinamik başlatma için ayrılmıştır. Bölüme el ile yerleştirilen değişkenler iyileştirilebilir ve derleyici tarafından oluşturulan dinamik başlatıcılara göre sıraları belirtilmez

Açıklamalar

Microsoft C++ derleyicisi, C++ dinamik başlatma gibi özelliklerin iç uygulanması için ayrılmış bölüm adlarını kullanır. Kodunuz gibi .CRT$XCUayrılmış bir bölüme bir değişken eklerse derleyiciyi engeller. Değişkeniniz bir C++ dinamik başlatıcısı olarak kabul edilmez. Ayrıca, derleyici tarafından oluşturulan dinamik başlatıcılarla karşılaştırıldığında göreli başlatma sırası belirtilmez.

Bu hatayı çözmek için ayrılmış adı kullanan bir bölüm oluşturmayın veya ayrılmış bölüme bir değişken eklemeyin.

Derleyici tarafından oluşturulan dinamik başlatıcılarla belirli bir göreli sırada çeviri birimleri arasında değişkenleri başlatmanın C++ standardına uygun bir yolu yoktur. Derleyici tarafından oluşturulan C++ dinamik başlatıcılarından önce veya sonra başlatmayı zorlamanın yolları uygulamaya özgü bir yöntemdir. Microsoft'a özgü uygulama ayrıntıları hakkında daha fazla bilgi için bkz . CRT başlatma.

Derleyici Uyarısı C5248, Visual Studio 2019 sürüm 16.11'de yenidir. Varsayılan olarak kapalıdır. Bu uyarıyı etkinleştirme hakkında daha fazla bilgi için bkz . Varsayılan olarak kapalı olan derleyici uyarıları.

Örnek

Dinamik başlatma için C++ derleyici davranışını öykünmeye çalışan kod genellikle şu biçimi alır:

void f();
typedef void (*type)();

#pragma section(".CRT$XCU", read)
__declspec(allocate(".CRT$XCU")) type i = f;

Bu kod, .CRT$XCUayrılmış adı olan bir bölüm oluşturur. Derleyicinin beklenen özelliklere sahip bölümü oluşturmasını durdurur ve diğer başlatmaları atlayabilir. bölümüne yerleştirilen değişken i normal bir değişkendir ve derleyici tarafından başlatıcı olarak kabul edilmez. Derleyici iyileştirerek i dışarıda bırakılabilir. Diğer dinamik başlatıcılarla karşılaştırıldığında çağrıldığında f göreli sıra belirtilmez.

Başlatma sırası önemli değilse, başlangıçta bir değişkeni dinamik olarak başlatmak için bu düzeni kullanabilirsiniz:

void f();

struct init_helper {
    init_helper() { f(); }
};

init_helper i;

Ayrıca bkz.

CRT başlatma