2012-02-08 3 views
2

я вижу некоторый код в C++ с использованием extern "C" в начале файла, как это:Как работает extern «C» на C++?

#ifdef __cplusplus 
extern "C" {} 
#endif 

Что это значит? Как это работает?

+1

Хорошая информация о extern «c» здесь: http://stackoverflow.com/questions/1041866/what-does-extern-c-in-c-source –

ответ

3

Это, вероятно, не нравится, но больше как:

#ifdef __cplusplus 
extern "C" { 
#endif 

//some includes or declarations 

#ifdef __cplusplus 
} 
#endif 

Это говорит компилятору использовать C имя коверкая для всего, что объявленная внутри директив.

, как вы есть сейчас:

#ifdef __cplusplus 
extern "C" {} 
#endif 

просто мертвый код.

+0

, но код, который я видел, это: #ifdef __cplusplus extern «C» {} #endif, так это неправильный код? –

+1

@ratzip это не так, это просто мертвый код. Он ничего не делает. –

+3

Он сообщает компилятору (а не компоновщику) использовать C-соглашения для функций, а не C++. Это связано не только с названием mangling, но и с условными обозначениями для передачи аргументов и, возможно, с другими вещами. –

0

Указывает linkage specification.
Он сообщает компоновщику, как связать код.

Полезно, если вы хотите mix C and C++ code.

+0

@Nawaz: И кто сказал так? «C» - есть. –

0

Extern "C" - сообщите компилятору, что отмеченная функция скомпилирована в стиле C.

5

Используется для информирования компилятора об отключении имени языка C++ для функций, определенных в фигурных скобках. http://en.wikipedia.org/wiki/Name_mangling

+0

+1 Ты сказал в одной строке, что я собирался сказать в 100. Хорошо. –