За такое использование #define надо клавиатуру отбирать.
Определение макросов только для того, чтобы не написать лишнюю букву, и насрать, как об это будет ломать глаза читающий - классический образец говнокода.
#define - определение переменных времени компиляции. Чтобы просто заменить какую-то величину во всем коде разом - есть константы. Чтобы сократить рутинные повторяющиеся конструкции - свой класс в своем неймспейсе.
#define же позволяет:
- писать программу, которая будет собираться в версии Pro и версии Lite (конкретные блоки кода оборачиваются в #ifdef PRO_VERSION)
- писать кроссплатформенный код, разветвив его по #ifdef __WIN32__ ... #else
и тому подобные возможности управления компиляцией.
Использовать этот механизм для банальных макросов - глупо и опасно. Хотя бы потому, что #define в любом месте кода может переопределить ваше определение совершенно другим значением.
Тем более, что макросы только мешают программисту и IDE понять, что происходит в конкретном месте кода.
Использование #define в библиотеках может быть оправдано, но и там лучше найти способ без него обойтись.
Например, в wxWidgets привязка обработчиков событий со временем прошла вот такую эволюцию:
// В начале, когда Земля была безвидна и пуста, и все ковырялось через макросы
// #define BEGIN_EVENT_TABLE(a,b) wxBEGIN_EVENT_TABLE(a,b)
// #define EVT_PAINT(func) wx__DECLARE_EVT0(wxEVT_PAINT, wxPaintEventHandler(func))
BEGIN_EVENT_TABLE(wxImagePanel, wxPanel)
EVT_PAINT(wxImagePanel::paintEvent)
END_EVENT_TABLE()
// Ближе к цивилизации, макросы еще не вымерли
// #define wxPaintEventHandler(func) wxEVENT_HANDLER_CAST(wxPaintEventFunction, func)
Connect(wxEVT_PAINT, wxPaintEventHandler(paintEvent));
// А что, сразу вот так нельзя было?
// Bind - метод класса, wxEVT_PAINT - константа, никакой магии...
Bind(wxEVT_PAINT, &wxImagePanel::paintEvent, this);