262_______________________________Часть II. Программирование на C++

\Bc5\Include — таким путем обеспечивается совместимость с предыдущими версиями компиляторов.

При вызове функции для хранения ее аргументов используется стек. Моди-фикаторы влияют на порядок расположения аргументов в стеке. Функции С в первую очередь записывают в стек последний аргумент.

Это важно главным образом для межъязыкового программирования. Например, Visual Basic первым записывает в стек первый аргумент; так что при межъязыковом программировании эти подробности следует иметь в виду.

Замечание

Если вы хотите использовать написанные на С и C++ функции драйверов, таких как Windows API (Kernel.exe, User.exe или Gdi.exe), то надо просто соблюдать форму объявления: если функция объявлена в С через cdecl, то в Visual Basic или Delphi cdecl тоже должен использоваться.

Существует альтернатива: применять модификаторы pascal. Такие моди-фикаторы заставляют компилятор первым класть на стек первый аргумент, так, как это делается в Visual Basic и Delphi.

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

void _Cdecl abort (void); // Функция С, которую можно // использовать в C++

вы увидели родство этой функции с

void abort(); // Прекращение работы программы

и не боялись ею пользоваться. Для обращения к функции abort необходимо включить заголовок process, h.

Рекурсивные функции

Стек размером в мегабайт — мечта любого создателя рекурсивной функции. Если кому непонятно — рекурсивной называется функция, вызывающая саму себя в процессе работы. Как вы знаете, при вызове функции в стек записывается определенное количество информации, а после окончания работы состояние стека восстанавливается. Рекурсивные функции зачастую требуют меньшего объема кода, чем нерекурсивные, однако рекурсивные функции небезопасны: из-за многократного вызова самих себя, они могут "взорвать" стек.

Замечание

¦ "Взрыв стека" означает, что системному стеку не хватает изначально отведенного ему места в памяти.