Bagikan melalui


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 #ifdirektif , #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.