Объявление ближних или дальних функций
В некоторых случаях вам может потребоваться переопределить
заданное по умолчание значение типа функции для модели памяти.
Например, вы используете модель памяти 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, то
имя ее не будет доступно ни одной функции вне данного модуля.