The extension .mm is the extension for the C++ compilation unit expected by the Objective-C compiler, while the .m extension is the extension for the C compilation unit expected by the Objective-C compiler.
That’s assuming you don’t use a compiler flag to override the file extension, as this gentleman has done.