LINUX.ORG.RU

История изменений

Исправление Tweaker, (текущая версия) :

Если портирую библиотеку и вижу кучу #define то сразу sed ом превращаю в enum. Ибо нафик.

И можешь поймать очень интересные ошибки. Энамы принимают свои значения на этапе компиляции, следовательно их нельзя использовать в препроцессоре (#if#ifdef)

Сравни и подумай, какой вариант алгоритма будет активирован с дефайнами.

#define LIB_FEATURE_NO_OPTIMIZE 0
#define LIB_FEATURE_OPTIMIZE_SPEED 1
#define LIB_FEATURE_OPTIMIZE_MEMORY 2

#define LIB_FEATURE_MODE LIB_FEATURE_OPTIMIZE_MEMORY

...

#if LIB_FEATURE_MODE == LIB_FEATURE_NO_OPTIMIZE
// no-opt code for debugging
#elif LIB_FEATURE_MODE == LIB_FEATURE_OPTIMIZE_SPEED
// speed-optimized version
#elif LIB_FEATURE_MODE == LIB_FEATURE_OPTIMIZE_MEMORY
// mem optimized version
#endif

И с энамами

enum LIB_FEATURE_OPT_MODE {
    LIB_FEATURE_NO_OPTIMIZE = 0,
    LIB_FEATURE_OPTIMIZE_SPEED = 1,
    LIB_FEATURE_OPTIMIZE_MEMORY = 2
};

#define LIB_FEATURE_MODE LIB_FEATURE_OPTIMIZE_MEMORY

...

#if LIB_FEATURE_MODE == LIB_FEATURE_NO_OPTIMIZE
// no-opt code for debugging
#elif LIB_FEATURE_MODE == LIB_FEATURE_OPTIMIZE_SPEED
// speed-optimized version
#elif LIB_FEATURE_MODE == LIB_FEATURE_OPTIMIZE_MEMORY
// mem optimized version
#endif

Исправление Tweaker, :

Если портирую библиотеку и вижу кучу #define то сразу sed ом превращаю в enum. Ибо нафик.

И можешь поймать очень интересные ошибки. Энамы принимают свои значения на этапе компиляции, следовательно их нельзя использовать в препроцессоре (#if#ifdef)

Сравни и подумай, какой вариант алгоритма будет активирован с дефайнами.

#define LIB_FEATURE_NO_OPTIMIZE 0
#define LIB_FEATURE_OPTIMIZE_SPEED 1
#define LIB_FEATURE_OPTIMIZE_MEMORY 2

#define LIB_FEATURE_MODE LIB_FEATURE_OPTIMIZE_MEMORY

...

#if LIB_FEATURE_MODE == LIB_FEATURE_NO_OPTIMIZE
// no-opt code for debugging
#elif LIB_FEATURE_MODE == LIB_FEATURE_OPTIMIZE_SPEED
// speed-optimized version
#elif LIB_FEATURE_MODE == LIB_FEATURE_OPTIMIZE_MEMORY
// mem optimized version
#endif

И с энамами

enum LIB_FEATURE_OPT_MODE {
    LIB_FEATURE_NO_OPTIMIZE = 0,
    LIB_FEATURE_OPTIMIZE_SPEED = 1,
    LIB_FEATURE_OPTIMIZE_MEMORY = 2
};

#define LIB_FEATURE_MODE LIB_FEATURE_OPTIMIZE_MEMORY

...

#if LIB_FEATURE_MODE == LIB_FEATURE_NO_OPTIMIZE
// no-opt code for debugging
#elif LIB_FEATURE_MODE == LIB_FEATURE_OPTIMIZE_SPEED
// speed-optimized version
#elif LIB_FEATURE_MODE == LIB_FEATURE_OPTIMIZE_MEMORY
// mem optimized version
#endif

Исходная версия Tweaker, :

Если портирую библиотеку и вижу кучу #define то сразу sed ом превращаю в enum. Ибо нафик.

И можешь поймать очень интересные ошибки. Энамы принимают свои значения на этапе компиляции, следовательно их нельзя использовать в препроцессоре (#if#ifdef)

Сравни и подумай, какой вариант алгоритма будет активирован с дефайнами.

#define LIB_FEATURE_NO_OPTIMIZE 0
#define LIB_FEATURE_OPTIMIZE_SPEED 1
#define LIB_FEATURE_OPTIMIZE_MEMORY 2

#define LIB_FEATURE_MODE LIB_FEATURE_OPTIMIZE_MEMORY

...

#if LIB_FEATURE_MODE == LIB_FEATURE_NO_OPTIMIZE
// no-opt code for debugging
#elif LIB_FEATURE_MODE == LIB_FEATURE_OPTIMIZE_SPEED
// speed-optimized version
#elif LIB_FEATURE_MODE == LIB_FEATURE_OPTIMIZE_MEMORY
// mem optimized version
#endif

И с энамами

enum LIB_FEATURE_OPT_MODE {
    LIB_FEATURE_NO_OPTIMIZE = 0,
    LIB_FEATURE_OPTIMIZE_SPEED = 1,
    LIB_FEATURE_OPTIMIZE_MEMORY = 2
};

#define LIB_FEATURE_MODE LIB_FEATURE_OPTIMIZE_MEMORY

...

#if LIB_FEATURE_MODE == LIB_FEATURE_NO_OPTIMIZE
// no-opt code for debugging
#elif LIB_FEATURE_MODE == LIB_FEATURE_OPTIMIZE_SPEED
// speed-optimized version
#elif LIB_FEATURE_MODE == LIB_FEATURE_OPTIMIZE_MEMORY
// mem optimized version
#endif