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

    +8

    1. 1
    2. 2
    #define FOR_INCLUSION (iostream) (studio.h) (stdlib.h) (boost/phoenix.hpp) (my_drugs_library.h)
    #include <include_and_disable_some_warnings>

    Запостил: laMer007, 01 Июня 2014

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

    • Heavy drugs
      Ответить
    • и как, работает?
      Ответить
      • boost::preprocessor в зубы и вперед
        Ответить
        • мне почему-то казалось, что с помощью директив препроцессора нельзя сделать другие директивы препроцессора

          в том смысле, что #include EXPANDMYMACRO сделать можно, а вот DECLARE_MY_5_INCLUDES(); - нет
          Ответить
          • для каждого файла из списка (конструкция итерейт из буста) подключаем хедер с текущем именем
            Ответить
            • эм
              ну судя по хелпу, BOOST_PP_ITERATE затрагивает непосредственно текущий файл - его же самого рекурсивно перевключая с дополнительными параметрами (редефайня номер итерации и т.д.)

              как раз потому, что (как мне всё ещё кажется непреодолимым, т.к. ты меня не разубедил) нельзя внутри макроса написать #include, даже в твоем итерейте приходится делать #include BOOST_PP_ITERATE()
              Ответить
              • Но вполне возможно вызвать инклуд с параметром: #include CURRENT_INCLUDE. Так что вполне реализуемая херня.

                Другой вопрос - нахуя зачем все это? Инклуды в одну строку читаются хуже, чем по одному на строке.
                Ответить
                • #define FOR_INCLUSION \
                    (iostream) \
                    (studio.h) \
                    (stdlib.h) \
                    (boost/phoenix.hpp) \
                    (my_drugs_library.h)
                  HighlightJS подсвечивает неправильно.
                  Ответить
                • > зачем все это?
                  > disable_some_warnings
                  Ответить
                  • Ну раз ворнинги глушат не адресно, а прям на все исходники - проще флаги отдать в опциях компилера. Там даже удобней будет - разным компилерам можно сделать разные флаги.
                    Ответить
                    • Та это для включения сторонних или стандартных либ в говнокомпиляторе. В них не хочется разбираться с чужими варнингами.
                      Ответить
    • #include <*.h>
      Ответить

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