Gadget

Klassik DOOMning kichik bool muammosi

11-fevral, 2026, 22:1014 ko'rish1 daqiqa o'qish
Klassik DOOMning kichik bool muammosi

DOOM o'yini 1993 yilda yaratilgan va hali ham ko'plab muxlislar tomonidan o'ynalmoqda. O'yinning manba kodi ochiq va har qanday platformada ishga tushirilishi mumkin.

Muammo

Fedora Linux paketining yangilanishi chog'ida, DOOM o'yinining bir paketi bo'lgan chocolate-doom muammoga duch keldi. Muammo o'yinning boolean tipidagi enum qiymatlari bilan bog'liq edi.

O'yin kodida quyidagi kod mavjud:

    #if defined(__cplusplus) || defined(__bool_true_false_are_defined)
    typedef bool boolean;
    #else
    typedef enum {
      false,
      true
    } boolean;
    #endif
    

Muammo shundaki, C23 standartida 'false' va 'true' kalit so'zlari qo'shildi. Shuning uchun, kod eski standartlarda ishlaydi, lekin yangilarida ishlamaydi.

Yechim

Muammoni hal qilish uchun, kodni o'zgartirish kerak. Quyidagi kod qo'shildi:

    #if defined(__cplusplus) || defined(__bool_true_false_are_defined) || (__STDC_VERSION__ >= 202311L)
    typedef bool boolean;
    

Shu tariqa, kod C23 standartida ham ishlaydi.

Xulosa

Muammo hal qilindi, lekin bu jarayonda yana bir muammo topildi. O'yin kodida boolean qiymatlari bilan bog'liq muammo mavjud.

Bu muammo shundaki, _Bool tipidagi qiymatlar 0 va 1 bilan cheklanmagan. Shuning uchun, kod ba'zi qiymatlarni noto'g'ri talqin qilishi mumkin.

Bu muammoni hal qilish uchun, kodni to'liq tekshirish va tuzatish kerak.

Manba: Hacker News
#DOOM #bool #C23 #Fedora Linux
Telegram da muhokama qilish