Bagikan melalui


Compiler Warning (level 1) C5105

ekspansi makro yang menghasilkan 'didefinisikan' memiliki perilaku yang tidak ditentukan

Keterangan

Prapemroses mendeteksi defined operator dalam output ekspansi makro. defined Jika operator muncul sebagai hasil dari ekspansi makro, standar C menentukan perilaku sebagai tidak terdefinisi. Peringatan C5105 adalah peringatan kesesuaian portabilitas dan standar, yang dikeluarkan karena kompilator sesuai lainnya mungkin memiliki perilaku yang berbeda. Untuk mengatasi masalah ini, pindahkan defined operator keluar dari makro, atau tekan C5105 peringatan.

Perilaku khusus Microsoft: Pengkompilasi MSVC mengevaluasi defined operator secara normal, bahkan di bawah /permissive-.

Peringatan ini baru di Visual Studio 2017 versi 15.8. Ini hanya dihasilkan oleh preprosedor sesuai standar baru, yang ditentukan oleh /experimental:preprocessor opsi kompilator.

Untuk menonaktifkan peringatan tanpa perubahan kode

Anda dapat menonaktifkan peringatan untuk baris kode tertentu dengan menggunakan pragma peringatan , #pragma warning(suppress : 5105). Anda juga dapat menonaktifkan peringatan dalam file dengan menggunakan pragma peringatan, #pragma warning(disable : 5105). Anda dapat menonaktifkan peringatan secara global dalam build baris perintah dengan menggunakan opsi baris perintah /wd5105 .

Untuk menonaktifkan peringatan untuk seluruh proyek di IDE Visual Studio:

  1. Buka dialog Halaman Properti untuk proyek Anda. Untuk informasi tentang cara menggunakan dialog Halaman Properti, lihat Halaman Properti.
  2. Pilih halaman Properti>Konfigurasi C/C++>Tingkat Lanjut.
  3. Edit properti Nonaktifkan Peringatan Tertentu untuk menambahkan 5105. Pilih OK untuk menerapkan perubahan Anda.

Contoh

Program sampel ini menunjukkan cara menghasilkan peringatan C5105, dan cara memperbaikinya.

// 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
}