M4 CPP preprocessing

I am wondering what the M4 preprocessor is. The man page says:

       When fvwm executes the FvwmM4 module, FvwmM4 invokes the M4 pre-proces-
       sor on the file specified in its invocation, then FvwmM4 causes fvwm to
       execute the commands in the resulting file.

I have a lot of questions, so I’ll just rattle them off:

What does this do? Is it enabled by default? If not, what are some good uses? How does it differ from the CPP preprocessor?

It seems like all that’s on google is a bunch of links to copies of the man page, so a good link or explanation would be great.

But I guess you figured that out already, unfortunately that’s all I know about it, maybe somebody else knows more about this, but I don’t know anyone who uses it, I hadn’t even heard about it until now…

I found this using the Fvwm Wiki, maybe that’ll give you more information on what it is and how it can be used: http://bhepple.freeshell.org/fvwm2/.