The operator ##combines two tokens. In your case, it is nameadded with underline and added with func.
So, RES_API(aName, aFunc)leads to aName_aFunc.
This in itself seems rather annoying. I could see the use of C and C ++ when mixing code, since C libraries tend to prefix their functions, while C ++ libraries put them in a namespace.
Given an alternative definition, for example:
#define RES_API(name, func) name##::##func
You suddenly have a general way of switching between a C interface or C ++.