Няшная / Говнокод #18750 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
/*
удалено по просьбе правообладателя
*/

macro driven development.

Тот же цискоиндуский код.

Запостил: gorthauer87 gorthauer87, (Updated )

Комментарии (10) RSS

      • В голову пришла вот такая наркомань:
        // some.enum
        ENUM_BEGIN(Some)
            ENUM_VALUE(Foo, 1)
            ENUM_VALUE(Bar, 2)
        ENUM_END(Some)
        
        // some.h
        #define ENUM_GEN_TO_STRING "some.enum"
        #include "enum_gen.h"
        
        // some.c
        #define ENUM_GEN_HELPERS "some.enum"
        #include "enum_gen.h"
        Ответить
        • // enum_gen.h
          #ifdef ENUM_GEN_HEADER
          #define ENUM_BEGIN(Name) enum Name {
          #define ENUM_VALUE(Name, Value) Name = Value,
          #define ENUM_END(Name) \
              }; \
              const char * Name##_toString(enum Name val);
          
          #include ENUM_GEN_HEADER
          #undef ENUM_GEN_HEADER
          #endif
          
          #ifdef ENUM_GEN_HELPERS
          #define ENUM_BEGIN(Name) \
              const char * Name##_toString(enum Name val) { \
                  switch (val) {
          #define ENUM_VALUE(Name, Value) \
                  case Value: return #Name;
          #define ENUM_END(Name) \
                  default: return "х.з.";
                  }
              }
          #include ENUM_GEN_HELPERS
          #undef ENUM_GEN_HELPERS
          #endif
          Ответить
        • Блин, накосячил с именами и не успел поправить. И андефы забыл. Ну главное суть 🙂
          Ответить
          • Браво, в производство!*
            Надо попробовать, кстати. Правда, доксиджен с коллегами охренеют от такого поворота 🙂
            case Value: return #Name;
            Есть нюанс: один дремучий компилятор генерирует из этого нерабочий код и приходится делать подобное говно:
            case Value: { static const char * retval = "ValueText"; return retval; }
            из какого-то фитиля
            Ответить
  • защита от забытых бряков, что вам не нравится?
    Ответить
    • Тем, что это костыль. Тут выше по ветке куда более красивые решения показывали.
      Ответить

Добавить комментарий

Помни, guest, за тобой могут следить!

    А не использовать ли нам bbcode?


    8