Какой смысл в макрофункциях без replacement-list?
Я фактически никогда не сталкивался с ситуацией, когда мне приходилось бы ипользовать макрофункции. Но из любопытства, перейдя к определению Q_INVOKABLE, увидел вот что:
#define Q_INVOKABLE QT_ANNOTATE_FUNCTION(qt_invokable)
и дальше:
#ifndef QT_ANNOTATE_FUNCTION
# define QT_ANNOTATE_FUNCTION(x)
#endif
На cppreference написано, что replacement-list является optional, да я и сам знаю, что, по крайней мере для object-like, просто будет определяться пустой макрос. Но какой в этом толк от макрофункции? Что должно дать определение?
QT_ANNOTATE_FUNCTION(qt_invokable)
Ответы (2 шт):
Q_INVOKABLE, как и многие другие макросы языковых расширений QT, предназначен для обработки QT Meta-Object Compiler, который осуществляет кодогенерицию.
Ну, например, есть какая-то отладочная функция.
#define DEBUG_LOG(x) какой-то вывод в журнал
А потом в release-программе просто объявляется
#define DEBUG_LOG(x)
и все, вывод просто отключен.