Heavy use of macros to do metaprogramming is a strong sign it's time to move to a more powerful language.
(I know these are far an in-between for ffmpeg, too many leaky abstractions.)
For example, a C++ Vector provides a generic container and the code can still call C functions with the underlying array.
This is in the "Doctor it hurts if I do X" bucket.
https://stackoverflow.com/questions/2923272/how-to-convert-v...
If you're exposing structs that are passed back and forth for state, it's a bit more cumbersome.
If heavy macro usage is found, it's definitely time to reconsider the approach.
Macros can be a nightmare, but when they're used properly they're not.
Yeah, they are.
Source: Decades of C programming
Granted, Lisp already has arrays, so not much reason to reinvent the wheel.
(make-array '(2 6) :initial-element 0 :element-type '(unsigned-byte 32))
;; => #2A((0 0 0 0 0 0) (0 0 0 0 0 0))