ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
24 ноября
27817 Топик полностью
Nikolaj (03.05.2005 15:08, просмотров: 1) ответил _TMX_ на Как объявить функцию, возвращающую указатель на саму себя?
Ответ: Если на Си, то что-нибудь в этом роде // ############################################################################# typedef void( *FUNCTION )( void ); void Lab_1( void ){....} void Lab_2( void ){....} void Lab_3( void ){....} void Lab_4( void ){....} void Lab_5( void ){....} void Lab_6( void ){....} void Lab_7( void ){....} void Lab_8( void ){....} const FUNCTION func[] = { Lab_1, Lab_2, Lab_3, Lab_4, Lab_5, Lab_6, Lab_7, Lab_8 }; void InterruptRoutine( void ){ static int a; func[a++ & 0x07](); } // ############################################################################# /*Да забыл добавить __C_task отбивает у финкции желание сохранять регистры(+) Поэтому надо поосторожней, если не выходите за рабочие регистры r0-r3; r16-r23; r30-r31 то все ОК.А если ... то прийдется в "void InterruptRoutine(void)" сохранять доп. регистры вручную. */ unsigned int address; void InterruptRoutine(void) { (void(*)())address; } __root __C_task void vLab_1(void) { ....... address = (unsigned int)vLab_2 } // #############################################################################