I don't really understand these lines... does the compiler automatically define a macro "FPC_OBJFPC" when it encounters these options? I don't have an option "-MOBJFPC" defined, as far as I know the compiler gets "-Mfpc".
For some (indeed, most) modes and modeswicths the compiler defines some identifiers automatically and undefines some others. As for the ObjFPC, I supposse Thausand just used an example.
Order important.
A full mode change implies lots of "small mode" changes; that's why the order is important. In your example, -MOBJFPC automatically deactivates ADVANCEDRECORDS, no matter what you've done before setting the mode. That's why, for example, Lazarus starts programs with:
{$mode objfpc}{$H+}to make sure long-strings are on.