Язык программирования C++ для профессионалов


           

с помощью такого приема из


extern "C" { #include <string.h> }

Обычно с помощью такого приема из стандартного заголовочного файла для С получают такой файл для С++. Возможно иное решение с помощью условной трансляции:

#ifdef __cplusplus extern "C" { #endif

char* strcpy(char*, const char*); int strcmp(const char*, const char*); int strlen(const char*); // ...

#ifdef __cplusplus } #endif

Предопределенное макроопределение __cplusplus нужно, чтобы обойти конструкцию extern "C" { ...}, если заголовочный файл используется для С.

Поскольку конструкция extern "C" { ... } влияет только на порядок связывания, в ней может содержаться любое описание, например:

extern "C" { // произвольные описания

// например:

static int st; int glob; }

Никак не меняется класс памяти и область видимости описываемых объектов, поэтому по-прежнему st подчиняется внутреннему связыванию, а glob остается глобальной переменной.

Укажем еще раз, что описание extern "C" влияет только на порядок связывания и не влияет на порядок вызова функции. В частности, функция, описанная как extern "C", все равно подчиняется правилам контроля типов и преобразования фактических параметров, которые в C++ строже, чем в С. Например:

extern "C" int f();

int g() { return f(1); // ошибка: параметров быть не должно }


Содержание  Назад  Вперед





Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий