Четвертый Borland C++ и его окружение

Объявление ближних или дальних функций


В некоторых случаях вам может потребоваться переопределить

заданное по умолчание значение типа функции для модели памяти.

Например, вы используете модель памяти large, и в программе имеется рекурсивная функция:

double power(double x,int exp)

{

if (exp <= 0)

return(1);

else

return(x * power(x, exp-1));

}

Каждый раз, когда функция power вызывает сама себя, она

должна выполнить дальний вызов, причем используется дополнительное пространства стека и число тактовых циклов. Объявив power как

near, можно ускорить выполнение ее благодаря тому, что вызовы



этой функции будут ближними:

double __near power(double x,int exp)

Это гарантирует, что функция power может вызываться только

из того кодового сегмента, в котором она компилировалась, и что

все обращения к ней будут ближними.

Это означает, что при использовании большой модели памяти

(medium, large или huge) функцию power можно вызывать только из

того модуля, в котором она определена. Прочие модули имеют свои

собственные кодовые сегменты и не могут вызывать функции near из

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

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

функция должна быть объявлена или определена до первого к ней обращения, что обеспечит дальний вызов.

Вернемся к примеру функции power. Хорошо также объявить

power как static, поскольку предусматривается вызывать ее только

из текущего модуля. Если функция будет объявлена как static, то

имя ее не будет доступно ни одной функции вне данного модуля.



Содержание раздела