Язык программирования C++. Вводный курс


Директива связывания extern "C" A - часть 2


/p>

}

Если мы переместим директиву так, чтобы она оказалась вне тела main(), программа откомпилируется правильно:

extern "C" double sqrt( double );

int main() {

    double getValue(); //правильно

 

    double result = sqrt ( getValue() );

    //...

    return 0;

}

Однако более подходящее место для директивы связывания – заголовочный файл, где находится объявление функции, описывающее ее интерфейс.

Как сделать С++ функцию доступной для программы на С? Директива extern "C"

поможет и в этом:

// функция calc() может быть вызвана из программы на C

extern "C" double calc( double dparm ) { /* ... */ }

Если в одном файле имеется несколько объявлений функции, то директива связывания может быть указана при каждом из них или только при первом – в этом случае она распространяется и на все последующие объявления. Например:

// ---- myMath.h ----

extern "C" double calc( double );

 

// ---- myMath.C ----

// объявление calc() в myMath.h

#include "myMath.h"

 

// определение функции extern "C" calc()

// функция calc() может быть вызвана из программы на C

double calc( double dparm ) { // ... }

В данном разделе мы видели примеры директивы связывания extern "C" только для языка С. Это единственный внешний язык, поддержку которого гарантирует стандарт С++. Конкретная реализация может поддерживать связь и с другими языками. Например, extern "Ada" для функций, написанных на языке Ada; extern "FORTRAN" для языка FORTRAN и т.д. Мы описали один из случаев использования ключевого слова extern в С++. В разделе 8.2 мы покажем, что это слово имеет и другое назначение в объявлениях функций и объектов.

Упражнение 7.14

exit(), printf(), malloc(), strcpy() и strlen() являются функциями из библиотеки С. Модифицируйте приведенную ниже С-программу так, чтобы она компилировалась и связывалась в С++.

const char *str = "hello";

 

void *malloc( int );

char *strcpy( char *, const char * );

int printf( const char *, ... );

int exit( int );

int strlen( const char * );

 

int main()

{   /* программа на языке С */

 

    char* s = malloc( strlen(str)+l );

    strcpy( s, str );

    printf( "%s, world\n", s );

    exit( 0 );

}




Начало  Назад  Вперед



Книжный магазин