Using the main arguments to obtain the command line arguments works fine in *nix,
because C and C++ originated with *nix.
However, the de facto Windows standard for the encoding of the main arguments is Windows ANSI,
which does not support general Windows filenames
(such as, for a Norwegian Windows installation, filenames with Greek or Cyrillic characters).
Therefore Microsoft chose to extend the C and C++ languages
with a Windows-specific startup function called wmain,
which has wide character based arguments encoded as UTF-16,
which can represent any filename.