Kesalahan Fatal C1017
ekspresi konstanta bilangan bulat tidak valid
Ekspresi dalam direktif #if
tidak ada atau tidak mengevaluasi ke konstanta.
Konstanta yang ditentukan menggunakan #define
harus memiliki nilai yang mengevaluasi ke konstanta bilangan bulat jika digunakan dalam #if
direktif , #elif
, atau #else
.
Sampel berikut menghasilkan C1017:
// C1017.cpp
#define CONSTANT_NAME "YES"
#if CONSTANT_NAME // C1017
#endif
Kemungkinan resolusi:
// C1017b.cpp
// compile with: /c
#define CONSTANT_NAME 1
#if CONSTANT_NAME
#endif
Karena CONSTANT_NAME
mengevaluasi ke string dan bukan bilangan bulat, #if
direktif menghasilkan kesalahan fatal C1017.
Dalam kasus lain, pra-prosesor mengevaluasi konstanta yang tidak terdefinisi sebagai nol. Ini dapat menyebabkan hasil yang tidak diinginkan, seperti yang ditunjukkan dalam sampel berikut. YES
tidak terdefinisi, sehingga mengevaluasi ke nol. Ekspresi #if
CONSTANT_NAME
mengevaluasi ke false dan kode yang akan digunakan YES
dihapus oleh prapemrossor. NO
juga tidak terdefinisi (nol), jadi #elif
CONSTANT_NAME==NO
mengevaluasi ke true (0 == 0
), menyebabkan prapemrosedur meninggalkan kode dalam #elif
bagian pernyataan — persis kebalikan dari perilaku yang dimaksudkan.
// C1017c.cpp
// compile with: /c
#define CONSTANT_NAME YES
#if CONSTANT_NAME
// Code to use on YES...
#elif CONSTANT_NAME==NO
// Code to use on NO...
#endif
Untuk melihat dengan tepat bagaimana pengkompilasi menangani arahan praproscessor, gunakan /P, /E, atau /EP.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk