Aracılığıyla paylaş


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:

  1. 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ı.
  2. Yapılandırma Özellikleri>C/C++>Gelişmiş sayfasını seçin.
  3. Eklemek 5105iç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
}