Aracılığıyla paylaş


Önemli Hata C1017

geçersiz tamsayı sabit ifadesi

Yönergesindeki #if ifade mevcut değildi veya sabit olarak değerlendirilmedi.

kullanılarak #define tanımlanan sabitler, bir , #elifveya #else yönergesinde #ifkullanılıyorsa bir tamsayı sabiti olarak değerlendirilen değerlere sahip olmalıdır.

Aşağıdaki örnek C1017 oluşturur:

// C1017.cpp
#define CONSTANT_NAME "YES"
#if CONSTANT_NAME   // C1017
#endif

Olası çözüm:

// C1017b.cpp
// compile with: /c
#define CONSTANT_NAME 1
#if CONSTANT_NAME
#endif

Tamsayı CONSTANT_NAME değil dize olarak değerlendirildiği #if için yönergesi önemli hata C1017 oluşturur.

Diğer durumlarda, önişlemci tanımlanmamış bir sabiti sıfır olarak değerlendirir. Bu, aşağıdaki örnekte gösterildiği gibi istenmeyen sonuçlara neden olabilir. YES tanımlanmamış olduğundan sıfır olarak değerlendirilir. İfade #ifCONSTANT_NAME false olarak değerlendirilir ve üzerinde YES kullanılacak kod önişlemci tarafından kaldırılır. NOde tanımsız (sıfır) olduğundan#elifCONSTANT_NAME==NO, ön işlemcinin kodu #elif deyiminin bölümünde bırakmasına neden olarak true ()0 == 0 olarak değerlendirilir ve hedeflenen davranışın tam tersidir.

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

Derleyicinin ön işlemci yönergelerini tam olarak nasıl işlediğini görmek için /P, /E veya /EP kullanın.