2012-01-15 40 views
0

是否有任何資源可以描述C和C++必須提供的許多簡短方法?這裏有很多「野性」代碼,它們並不完全與教科書中教授的內容相吻合。例如,許多教科書都教你分開變量的聲明和初始化,但我卻一直在看到相反的情況。C/C++的短手和快捷鍵

所以這裏是我目前的stumper:C是否允許沒有類型標識符的程序?再次,教科書告訴我,如果沒有其他類型的話,我至少應該爲void類型。不過,我已經看到了以下內容:

procedure(){ 
//procedure stuff 
} 

另有我一直被教導必須至少做

void procedure(){ 
//procedure stuff 
} 

我發現自己在這個位置上很多,我認爲它不是一個症狀有使用C或C++進行項目/團隊相關工作。我很難識別「可編譯的代碼」,因爲很多書都以特定的方式教授,但在實踐中完成相同任務的方式不止一種。謝謝。

+0

K&R C(pre-ANSI)具有隱式int函數。這意味着如果沒有指定返回類型,則認爲它是int。 – 2012-01-15 23:35:22

+5

您的示例代碼不相同。隱含的返回類型是「int」而不是「void」。甚至只有在ANSI C之前,但你提出了錯誤的問題。沒有辦法讓你知道每一個可能的捷徑成語或其他什麼。這些變化隨着時間的推移(甚至是核心語言),只有你能夠識別你不知道的東西並尋找答案是很重要的。 – pmr 2012-01-15 23:35:35

+0

*「許多教科書都教你分開變量的聲明和初始化」*如果C++教科書正在教這個,那麼他們只是錯了。如果C教科書正在教這個,那麼他們可能只是過時了。C89要求在塊的頂部聲明所有變量,因此在聲明時通常不可能初始化它們。 C99解決了這個問題,所以與C++相同的規則通常適用。 – 2012-01-16 04:03:55

回答

4

省略函數定義中的返回類型會使函數在C89中隱式返回int。由於C99不再被接受,實現可以拒絕使用省略返回類型的函數定義來翻譯程序。

從C99理由文件:

在C89,所有類型說明符可以在一個聲明中的聲明說明符被省略。在這種情況下int是暗含的。委員會認爲這一特徵的固有危險超過了其便利性,因此被刪除。

3

如果沒有明確的返回類型,則假定爲int。這是爲了遺留原因。

另一個傳統兼容性的事情是你可以忽略的參數類型,太:

add(a, b) { // a and b implicitly int 
    return a + b; 
} 

或者你可以聲明類型的參數... 不同 ...

strlen2(s) 
const char *s; 
{ 
    int l = 0; 
    while(*s++) l++; 
    return l; 
} 

我不會顯然,在新代碼中不利用這些功能。

0

我想你是指的參數。在這種情況下,如果沒有參數傳遞,那麼使用void是一件好事,但它不是必需的,儘管它具有未知數量的參數