Search
Write a publication
Pull to refresh
7
35
Send message

Простое раскрытие компилятором подойдёт только если нужно дебажить код, что получился после раскрытия всех макросов. А если нужно дебажить сами макросы? Может в одном случае они раскрываются в не то и нужно это исправить.

Пример кода на макросах из pro.cxx
#define ABVGDE_0(...) ABVGDE_3(__VA_ARGS__, ABVGDE_1)

#define ABVGDE_1                                                                                                                          \
  63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, \
      29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0

#define ABVGDE_2(_1,  \
                 _2,  \
                 _3,  \
                 _4,  \
                 _5,  \
                 _6,  \
                 _7,  \
                 _8,  \
                 _9,  \
                 _10, \
                 _11, \
                 _12, \
                 _13, \
                 _14, \
                 _15, \
                 _16, \
                 _17, \
                 _18, \
                 _19, \
                 _20, \
                 _21, \
                 _22, \
                 _23, \
                 _24, \
                 _25, \
                 _26, \
                 _27, \
                 _28, \
                 _29, \
                 _30, \
                 _31, \
                 _32, \
                 _33, \
                 _34, \
                 _35, \
                 _36, \
                 _37, \
                 _38, \
                 _39, \
                 _40, \
                 _41, \
                 _42, \
                 _43, \
                 _44, \
                 _45, \
                 _46, \
                 _47, \
                 _48, \
                 _49, \
                 _50, \
                 _51, \
                 _52, \
                 _53, \
                 _54, \
                 _55, \
                 _56, \
                 _57, \
                 _58, \
                 _59, \
                 _60, \
                 _61, \
                 _62, \
                 _63, \
                 N,   \
                 ...) \
  N

#define ABVGDE_3(...) ABVGDE_2(__VA_ARGS__)

#define EDGVBA_0(...) __VA_ARGS__
#define EDGVBA_1(...) __VA_ARGS__
#define EDGVBA_2(...) __VA_ARGS__
#define EDGVBA_3(...) __VA_ARGS__
#define EDGVBA_4(...) __VA_ARGS__
#define EDGVBA_5(...) __VA_ARGS__
#define EDGVBA_6(...) __VA_ARGS__
#define EDGVBA_7(...) __VA_ARGS__
#define EDGVBA_8(...) __VA_ARGS__
#define EDGVBA_9(...) __VA_ARGS__
#define EDGVBA_10(...) __VA_ARGS__

#define ABVGDE_4 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12

#define ABVGDE_5(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, N, ...) N

#define ABVGDE_6(...) ABVGDE_7(__VA_ARGS__, ABVGDE_4)

#define ABVGDE_7(...) ABVGDE_5(__VA_ARGS__)

#define ABVGDE_8()                                                                                                              \
  ABVGDE_6(EDGVBA_0(, ) EDGVBA_1(, ) EDGVBA_2(, ) EDGVBA_3(, ) EDGVBA_4(, ) EDGVBA_5(, ) EDGVBA_6(, ) EDGVBA_7(, ) EDGVBA_8(, ) \
               EDGVBA_9(, ) EDGVBA_10(, ))

#define ABVGDE_9()

#define ABVGDE_10()

#define ABVGDE_11() ABVGDE_10 ABVGDE_9()()
#define ABVGDE_12() ABVGDE_11 ABVGDE_9()()
#define ABVGDE_13() ABVGDE_12 ABVGDE_9()()
#define ABVGDE_14() ABVGDE_13 ABVGDE_9()()

#define ABVGDE_15() \
  ABVGDE_8(), EDGVBA_0(ABVGDE_8 ABVGDE_10()(), EDGVBA_1 ABVGDE_10()(ABVGDE_8 ABVGDE_11()(), EDGVBA_2 ABVGDE_11()(ABVGDE_8 ABVGDE_12()())))

А в таком коде тоже нечего отлаживать?) Как ABVGDE_15 раскрывается именно в "0, 1, 2, 3" сразу прям понятно?

Где в статье подмножество какого-либо языка?

Оно неявно получается из используемых возможностей языка в статье. Всё из статьи можно использовать как в C++, так в C. Тут ограничения языков C и C++ только тем, что можно использовать и там и там. Т.е. подмножество.

обрабатываются программой cpp

Что это за программа такая? Да и обрабатываться они могут вообще чем угодно, стандарт про это вообще никак не говорит.

препроцессором языка C

Что-то не вижу в стандарте C++ препроцессора языка Си. Там идёт описание работы препроцессора, следовательно, препроцессор это языка C++, если в контексте этот язык.

Языка C/C++ и правда нету. Но в статье используется подмножество языка C++, которое можно использовать и в C. Если же указать просто C, то это не будет включать C++(ведь не весь код на C будет работать в C++), а включать нужно.

Information

Rating
531-st
Registered
Activity

Specialization

C/C++ Developer
C++
C