Ссылка 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);
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д