It appears Visual Studio linker exports unmangled function name if it is specified with /EXPORT command-line argument (which is what build.bat does in Handmade Hero build).
In such case there is really no need for extern "C".
The
documentation is very vague about this:
/EXPORT:entryname
...
LINK uses decorated forms of identifiers. The compiler decorates an identifier when it creates the .obj file. If entryname is specified to the linker in its undecorated form (as it appears in the source code), LINK attempts to match the name. If it cannot find a unique match, LINK issues an error message.
So I can understand the reason to use extern "C" to guarantee that name will not be mangled.