Derleyici Uyarısı (düzey 1) C5105
'tanımlı' üreten makro genişletmesi tanımsız davranışa sahip
Açıklamalar
Önişlemci, makro genişletme çıkışında bir defined
işleç algılamıştı. Bir defined
işleç bir makro genişletmesinin sonucu olarak görünüyorsa, C standardı davranışı tanımsız olarak belirtir. C5105 uyarısı, diğer uyumlu derleyicilerin farklı davranışları olabileceğinden verilen taşınabilirlik ve standartlar uyumluluk uyarısıdır. Bu sorunu çözmek için işleci makronun dışına taşıyın defined
veya C5105 uyarısını bastırın.
Microsoft'a özgü davranış: MSVC derleyicisi, altında /permissive-
bile işleci normal şekilde değerlendirirdefined
.
Bu uyarı Visual Studio 2017 sürüm 15.8'de yenidir. Yalnızca derleyici seçeneği tarafından belirtilen yeni standartlara uygun önişlemci tarafından /experimental:preprocessor
oluşturulur.
Kod değişikliği olmadan uyarıyı kapatmak için
Uyarı pragması #pragma warning(suppress : 5105)
olan öğesini kullanarak belirli bir kod satırı için uyarıyı kapatabilirsiniz. Uyarı pragması #pragma warning(disable : 5105)
olan öğesini kullanarak bir dosya içindeki uyarıyı da kapatabilirsiniz. /wd5105 komut satırı seçeneğini kullanarak komut satırı derlemelerinde uyarıyı genel olarak kapatabilirsiniz.
Visual Studio IDE'de projenin tamamı için uyarıyı kapatmak için:
- Projeniz için Özellik Sayfaları iletişim kutusunu açın. Özellik Sayfaları iletişim kutusunun nasıl kullanılacağı hakkında bilgi için bkz . Özellik Sayfaları.
- Yapılandırma Özellikleri>C/C++>Gelişmiş sayfasını seçin.
- Eklemek
5105
için Belirli Uyarıları Devre Dışı Bırak özelliğini düzenleyin. Değişikliklerinizi uygulamak için Tamam'ı seçin.
Örnek
Bu örnek program, uyarı C5105'in nasıl oluşturulacağı ve nasıl düzeltileceğini gösterir.
// C5105.cpp
// To demonstrate the warning,
// compile by using: cl /EHsc /experimental:preprocessor /DTEST C5105.cpp
// To fix the warning, change the DEFINED_TEST
// definition to the commented version.
#include <iostream>
#define DEFINED_TEST defined TEST
//#if defined TEST
//#define DEFINED_TEST 1
//#else
//#define DEFINED_TEST 0
//#endif
int main()
{
#if DEFINED_TEST // C5105
std::cout << "TEST defined\n";
#else
std::cout << "TEST not defined\n";
#endif
}