2014-10-07 2 views
0

Я изучаю C в течение последних нескольких дней (еще новичок) и я видел некоторые коды, как:ошибка: проваливается внутри функции

int func() 
{ 
    code.. 
    return 0; 
error: 
    return 1; 
} 

Я пытаюсь выяснить, что же раздел error: сделать , после некоторого времени googling я ничего не нашел (я не уверен, что он называется, я предположил, что он упал так же, как в инструкции switch). Я написал этот простой код, чтобы увидеть, что он делает:

int n; 
char input[100]; 
int main() 
{ 
    printf("Type a number: "); 
    fgets(input, sizeof(input), stdin); 
    sscanf(input, "%d", &n); 
    printf("%d", 1/n); // Invoked error by inputing 0 

    return 0; 

error: 
    printf("error busted"); 
    return 1; 
} 

Когда я побежал и напечатал 0 я получил исключение с плавающей запятой, но секция error: ничего не сделал, так как он работает именно?

ответ

2

Это error: будет использоваться goto error;, но в ваших примерах ничего подобного нет.

Вот отрывок из ядра Linux (namespace.c):

static struct vfsmount *fs_set_subtype(struct vfsmount *mnt, const char *fstype) 
{ 
     int err; 
     const char *subtype = strchr(fstype, '.'); 
     if (subtype) { 
       subtype++; 
       err = -EINVAL; 
       if (!subtype[0]) 
         goto err; 
     } else 
       subtype = ""; 

     mnt->mnt_sb->s_subtype = kstrdup(subtype, GFP_KERNEL); 
     err = -ENOMEM; 
     if (!mnt->mnt_sb->s_subtype) 
       goto err; 
     return mnt; 

err: 
     mntput(mnt); 
     return ERR_PTR(err); 
} 

Использование goto склонен к ошибкам, не рекомендуется, а не для начинающих.

+0

так что без использования goto это бесполезно? – razzak

+0

Совершенно бесполезно. –

0

error: является лейблом для goto. Поскольку у вас нет goto, он ничего не сделает.

Вы должны включить все предупреждения в компилятор. Также не используйте goto - лучше других методов