The macros allow the compiler to properly decode where arguments are found in memory when calling a function.
In the simplest, basic case, they are pushed in order onto the stack. The macros can then take the address of the first argument (the required one), then do some pointer addition to find each additional argument. Again, exactly how this works depends on a lot of things, including compiler options. Hence the very special case of the macros.
look up printf and scanf. it can be useful if your making something like a game engine and you need to save the state of an unknown number of variables
no i mean like lets say i want to save location name and items. so i pass those to save function, then i later pass it ummmm all of those plus the fact that the player talked to a guy