2014-10-07 25 views
0

我一直在學習下這幾天(還是初學者),我看到了一些代碼,如:錯誤:下通內部功能

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

我試圖找出什麼是error:部分做,經過一段時間的搜索後,我發現什麼都沒有(我不確定它叫什麼,我認爲它就像在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 2014-10-07 02:28:36

+0

完全沒用。 – 2014-10-07 02:29:21

0

error:goto的標籤。因爲你沒有goto它什麼都不會做。

您應該打開編譯器中的所有警告。也請不要使用goto - 其他方法更好