[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
Аргументы функций действительно передаются через стек - это понятно. Вопрос в другом : допустим Вы из main() вызываете функцию f1(), а затем функцию f2(), которая вызывает в свою очередь f1() (т е f1() вызывается из двух веток.
void f1( void) {
char massiv1[ 20] ;
...
}
void f2( void) {
char massiv2[ 20] ;
...
f1() ; // вызов f1() второй раз из f2()
}
void main( void) {
f1() ; // вызов f1() первый раз (из main())
f2() ;
}
Так вот если размещение локального массива massiv1[] при первом вызове (из main()) и при втором вызове ( из f2()) разное, значит компилятор ведет свой внутренний стек. А если одно и то же - по одним и тем же адресам - значит никакой внутренний стек не ведется, а линкер "понимает", что самая "плохая" ситуация - это второй вызов, когда уже существуют локальные переменные massiv2[20] и надо massiv1[20] (и в первом и во втором случае) располагать с учетом того, что уже в стеке есть massiv2.
В общем это можно глянуть в emulator-e или в simulatore.
E-mail: info@telesys.ru