On 7 Mar 2017, at 17:45, bigpig <[email protected]> wrote:
> I see some code like this in iOS project:
>
> #ifdef __cplusplus
> extern "C" {
> #endif
Others have mentioned what this code does, but I think it'd be useful to
provide some background why this is needed:
In C, functions are distinguished by name. A function named "min" must take the
same parameter types wherever it occurs in your program. There may be no two
functions with the same name.
In C++, both the name and the parameter types are used to distinguish between
two functions. You may have several functions that have the same name, as long
as they take a different number of parameters, or take parameters of different
types.
However, under the hood, both C++ and C are compiled to machine code. And that
only supports a single function with the same name, and doesn't know about
parameter types. So what the C++ developers did to make this behaviour possible
is that they changed the names for functions. Every function contains a few
characters at the end of its name that indicate what types its parameters have.
That way, the two functions actually have a different name to the assembler,
but there is a rule the programming language can use to generate the actual
function name based on the name and types it knows. This is what is called
"name mangling."
However, this is something only C++ does, and only C++ knows about. Name
mangling is fine when you are only using C++, but when you want to make C++
functions available to C code, you need to tell your C++ compiler not to mangle
the function names so C will be able to call them. This is what 'extern "C"'
does. It turns off name mangling for the functions between the "{" and "}".
Cheers,
-- Uli Kusterer
"The Witnesses of TeachText are everywhere..."
http://www.zathras.de
_______________________________________________
Cocoa-dev mailing list ([email protected])
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com
This email sent to [email protected]