1. C++ / Говнокод #27775

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    #define REGISTERS_LIST A, B, C, D, E, SI, BP, SP, IP
    #define LREGISTERS_LIST AH, AL, BH, BL, CH, CL, DH, DL, EH, EL, SIH, SIL, BPH, BPL, SPH, SPL, IPH, IPL
    
    enum RegisterID
    {
    	REGISTERS_LIST,
    	LREGISTERS_LIST
    };
    
    const static std::string registerId2registerName[] = {
    #define _MAP(x) #x
    	MAP_LIST(_MAP, REGISTERS_LIST),
    	MAP_LIST(_MAP, LREGISTERS_LIST)
    };
    #undef _MAP
    
    const static std::map<std::string, RegisterID> registerName2registerId = {
    #define _MAP(x) {#x, x}
    	MAP_LIST(_MAP, REGISTERS_LIST),
    	MAP_LIST(_MAP, LREGISTERS_LIST)
    };
    #undef _MAP

    покруче гомоиконности

    Запостил: digitalEugene, 30 Октября 2021

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

    • AsmScript?
      Ответить
    • сишнику дали кресты
      Ответить
      • и как же закодить это в соответствии со всеми крестотрадициями?
        Ответить
    • В коде джва UB, между прочим.
      Ответить
      • Нет.
        Ответить
      • Ты про нижнее подчеркивание и большую букву?
        Ответить
        • Так точно.
          Ответить
          • раскрой тему, гост
            Ответить
            • Идентификаторы, начинающиеся с подчеркивания и заглавной буквы зарезервированы в глобальном пространстве имён.

              Идентификаторы, имеющие два подчёркивания подряд зарезервированы везде.
              Ответить
              • мама дорогая, это в С++ так?
                Ответить
                • "Reserved" here means that the standard library headers #define or declare such identifiers for their internal needs, the compiler may predefine non-standard identifiers of that kind, and that name mangling algorithm may assume that some of these identifiers are not in use. If the programmer uses such identifiers, the behavior is undefined.
                  Ответить
                  • Хм.. А как же тогда питушня, в которую оборачивают сишные хедеры?
                    #ifndef _PETHU_H_
                    #define _PETHU_H_
                    
                    struct Pethu {};
                    
                    #endif
                    Ответить
                    • Да тоже UB, нафиг ты там подчёркивание сделал? Просто вероятность коллизии там на порядок меньше, чем у всяких _MAP.
                      Ответить
                      • Да, я лох. Надо подчёркивание в конце, как советует майкрософак: https://docs.microsoft.com/ru-ru/cpp/preprocessor/once?view=msvc-160
                        Ответить
                        • Или вообще без него... Вряд ли у тебя есть другие макросы, которые заканчиваются на _H
                          Ответить
                          • Да и вряд ли в стандартной библиотеке есть идентификатор "PETHU", поэтому с подчёркивания тоже ничего не будет.
                            Ответить
                            • Да и вряд ли я с чем-то столкнусь, поэтому с непристёгнутым ремнём тоже ничего не будет.
                              Ответить
                            • З.Ы. Представь конпелятор, который на максимальном уровне ворнингов ругается на использование _ и __ вне системной либы чтобы спасти тебя от UB'ов. На нём твой код тупо не скомпилится.
                              Ответить
                              • Ну это хорошо. Почему так не сделали все компиляторы?

                                Давайте вместо ошибок компиляции делать код рабочим, но с UB. Например, если опечататься "retrn", то игнорить эту строку.
                                Ответить
                                • > Например, если опечататься "retrn", то игнорить эту строку.

                                  shell близок к твоим желаниям
                                  Ответить
                          • в пыщах сплош и рядом
                            https://github.com/torvalds/linux/blob/master/include/linux/types.h
                            Ответить
      • а схуя они UB то?
        Ответить
    • Кстати, что за процессор? Очень похоже на x86_64/amd64, только E вместо DI и откуда-то IPH и IPL.
      Ответить
    • https://youtu.be/I4a1C4FssQc?t=3
      Ответить

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