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