This is common practice. Here's why. In C++ this #ifdef __cplusplus extern "C" { #endif ………./*some function,struct*/
#ifdef __cplusplus } #endif compiles as extern "C" { ………./*some function,struct*/ } As you identify, this declares C linkage, usually to a precompiled C library, or to make a C-compatible library. The extern must be conditional, because in pure C this form of extern is a syntax error. So what happens in pure C? The #ifdef section is skipped because __cplusplus is undefined. So it just compiles as ………./*some function,struct*/ In other words, just C definitions, which will have C linkage by default. This allows a header file for a C library to be compiled in C, and to be compiled in C++ with suitable linkage. (You should not see // in this section, because in pure C it is forbidden). On 7 March 2017 at 16:45, bigpig <bigpig1...@gmail.com> wrote: > I see some code like this in iOS project: > > #ifdef __cplusplus > extern "C" { > #endif > > ……….//some function,struct > > > #ifdef __cplusplus > } > #endif > if there is C++ compiler and use C linkage,but if there isn’t C++ compiler > then use what? > And what is the reason of using this way in code? > > Thanks! > _______________________________________________ > > 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/aandi%40quite.com > > This email sent to aa...@quite.com _______________________________________________ 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