M4 size, Turing dengi bir dil, yinelemeler (recursions), düzenli ifadeler (regular expression) ile, macro işlemenin tüm gücünü vermektedir. CPP'nin yapamadığı herşeyi onunla yapabilirsiniz.
Yine de, işlevsel olmayan tırnak kullanımı (quoting) ve bunun kaldırılması (disquoting) şeklindeki anlamsal yapı (semantics), eğer ileri düzey makro programlama yapmak istiyorsanız sizi süreklilik gösteren içiçe makro tarzı (continuation-passing tail-recursive macro style) kullanmaya zorlamaktadır (ki bu da insana TeX'i hatırlatıyor - herneyse, TeX'i yazı yazmak dışında bir makroişlemci olarak kullanan kimse var mı?). Tırnak ve yineleme (recursion) kullanımına hiç izin vermeyen CPP'den daha kötü değildir.
M4'ü kullanmak için doğru sürüm, en çok özelliği, en az hatası ve kısıtlamaları olan GNU m4 1.4'tür (varsa daha sonraki sürümleri). m4 herhangi bir şey için yavaş çalışacak şekilde tasarlanmıştır fakat en kolay kullanıma sahiptir, ki bu da çoğu sembolik makina dili için makul bir durumdur (milyonlarca satır sembolik makina kodu yazmıyorsunuz değil mi?).