Я вижу одну самую существенную проблему в макросах (по крайней мере в Си и Rust): они не описывают своим интерфейсом пред и постусловия, из-за чего либо непонятно как их использовать бывает, либо вообще ошибки описываются как последствия, а не как причины