Ссылка 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);
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.25 из 5
Похожие ответы