On 7 Mar 2017, at 17:45, bigpig <bigpig1...@gmail.com> 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 (Cocoa-dev@lists.apple.com)

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 arch...@mail-archive.com

Reply via email to