- 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
// https://github.com/dxFeed/dxfeed-c-api/blob/8f24055298c9751344db72da03ab8eb37dfeb6a5/src/DXAlgorithms.h#L63
#define CHECKED_CALL(func, param) \
do { \
if (!func(param)) { \
return false; \
} \
} while (false)
#define CHECKED_CALL_0(func) \
do { \
if (!func()) { \
return false; \
} \
} while (false)
#define CHECKED_CALL_1(func, param1) \
do { \
if (!func(param1)) { \
return false; \
} \
} while (false)
#define CHECKED_CALL_2(func, param1, param2) \
do { \
if (!func(param1, param2)) { \
return false; \
} \
} while (false)
#define CHECKED_CALL_3(func, param1, param2, param3) \
do { \
if (!func(param1, param2, param3)) { \
return false; \
} \
} while (false)
#define CHECKED_CALL_4(func, param1, param2, param3, param4) \
do { \
if (!func(param1, param2, param3, param4)) { \
return false; \
} \
} while (false)
#define CHECKED_CALL_5(func, param1, param2, param3, param4, param5) \
do { \
if (!func(param1, param2, param3, param4, param5)) { \
return false; \
} \
} while (false)
j123123 # 0
Только вот "##__VA_ARGS__" это GNU расширение, чтоб не генерилась запятая при нуле аргументов. В крестоговно версии C++20 добавили "__VA_OPT__" https://stackoverflow.com/a/52891776 - шаблоноговном не все проблемы нормально решаются, какой багор )))
И GCC поддерживает __VA_OPT__ в т.ч. для "GNU C". https://gcc.gnu.org/onlinedocs/cpp/Variadic-Macros.html
j123123 # 0 ⇈
bormand # 0 ⇈
Да лучше тупо заигнорили бы её... В инициализаторах такой прецедент уже есть.
bormand # 0
З.Ы. А чем плохо CHECHEN_CALL(f5(1, 2, 3, 4, 5));?
j123123 # 0 ⇈
bormand # 0 ⇈
З.Ы. Бесконечно много. Ибо вместо скобочек получается запятая и пробел.
j123123 # 0 ⇈
guest # 0
bot_batbot_batbot # 0
Support # 0 ⇈
MaaKut # 0