История изменений
Исправление 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