Ссылка goto из одной функции в другую - C (СИ)
Формулировка задачи:
Доброго времени суток! Возник следующий вопрос: неужели имея в программе 2 функции, нельзя из одной из них методом goto перейти в другую функцию?
Либо как можно обойти эту проблему?
void main (void) { somefunction(); gohere: printf('blah'); } void newfunc(void) { ... goto gohere: }
Решение задачи: «Ссылка goto из одной функции в другую»
textual
Листинг программы
#include <stdio.h> #include <setjmp.h> #include <stdlib.h> enum error { E_NONE, E_ARGC, E_OPEN, E_READ }; static jmp_buf env_buf; void run(int argc, char* argv[]) { FILE* file; char buf[BUFSIZ]; if(argc != 2) longjmp(env_buf, E_ARGC); if((file = fopen(argv[1], "r")) == NULL) longjmp(env_buf, E_OPEN); while(fgets(buf, BUFSIZ, file) != NULL) fputs(buf, stdout); if(ferror(file)) { fclose(file); longjmp(env_buf, E_READ); } fclose(file); } int main(int argc, char* argv[]) { int ret = EXIT_SUCCESS; int err; if((err = setjmp(env_buf)) == 0) run(argc, argv); else { ret = EXIT_FAILURE; switch(err) { case E_NONE: /* не выполнится никогда, т.к. longjmp(env_buf, 0) == longjmp(env_buf, 1) */ break; case E_ARGC: fprintf(stderr, "Usage: %s FILENAME\n", argv[0]); break; case E_OPEN: fprintf(stderr, "Can't open file %s\n", argv[1]); break; case E_READ: fprintf(stderr, "Error reading file %s\n", argv[1]); break; default: fprintf(stderr, "Unknown error was signalled\n"); break; } } exit(ret); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д