1. 程式人生 > >【C++學習筆記】二、對於C++語法新手常犯的錯誤

【C++學習筆記】二、對於C++語法新手常犯的錯誤

從python到C++,表示需要注意的習慣性細節還是蠻多的,作為一個不看就忘星人,還是決定老老實實把一個個易錯點記錄下來,也再一次加深印象。

首先看個樣例,來自譚浩強老師的《C++程式設計第3版》,第一章習題9:

#include <iostream>
using namespace std;
int main()
{
	int add(int x, int y);
	int a,b,c;
	a = 5;
	b = 7;
	c = add(a,b);
	cout << "a + b =" << c <<endl;
	return 0;
}
int add(int x, int y)
{
	int z;
	z = x + y;
	return(z);
}

1. 對於分號的問題:

(1)預處理指令後邊無分號:

它是一個包含指令,作用是將iostream的內容包含到該命令所在的程式檔案中,代指該命令,iostream是i-o-stream組成的,意思是輸入輸出流,也就是向程式提供輸入或輸出資訊的。

#include <iostream>

(2)名稱空間後邊有分號:

表示c++標準庫中的類和函式都是在名稱空間std中宣告的。

using namespace std;

(3)如有定義類名,則無分號:

#include <iostream>
using namespace std;
class Student

(4)函式名後邊無分號,包括main函式和所有的子函式:

int main()
{
}

int add(int x, int y)
{
}

注意:在一個程式中main函式有且只有一個,且必須為int型,且不管main在哪裡,程式都是從main函式開始執行的

(5)函式體大括號內的所有,每行都得有分號,包括變數和函式的宣告,以及return

int main()
{
	int add(int x, int y);
	int a,b,c;
	a = 5;
	b = 7;
	c = add(a,b);
	cout << "a + b =" << c <<endl;
	return 0;
}

2. 對於子函式和主函式的順序問題:

(1)子函式寫在main函式前邊,系統能夠識別子函式已經被定義,因此無須在main函式中國宣告,直接呼叫,如下例子:

//求兩數中的最大值
#include <iostream>
using namespace std;
int max(int x, int y)
{
    int z;
    if(x>y) z = x;
        else z =y;
    return(z);
}
int main()
{    
    int a,b,m;
    cin >> a >> b;
    m = max(a,b);
    cout << "max = " << m << '\n';
    return 0;
}

(2)如果main函式寫在前邊,必須宣告子函式,此時系統會根據函式宣告時給定的資訊對函式的合法性進行檢查,否則系統無法找到子函式,就會認為沒有定義而報錯,將上邊的例子改寫如下:

//求兩數中的最大值
#include <iostream>
using namespace std;

int main()
{    
    int max(int x, int y);
    int a,b,c;
    cin >> a >> b;
    c = max(a,b);
    cout << "max = " << c << '\n';
    return 0;
}
int max(int x, int y)
{
    int z;
    if(x>y) z = x;
        else z =y;
    return(z);
}

 

3. 對於宣告:

所有的變數和函式使用前(第一次出現前)都需要宣告,容易忽略的是呼叫函式時賦值的那個變數,如最開始例子中的變數c,一定要先宣告才可以:

int add(int x, int y);
int a,b,c;
a = 5;
b = 7;
c = add(a,b);

4. 對於return:

return 後邊是0的時候,括號加不加都可以,但是分號一定要有,即

return 0;
//或者
return(0)

return 0 是表示如果程式正常結束,則向系統返回一個0值,若不能正常結束,則是預設返回-1

這句話如果沒有程式也能執行,但是目前來看是需要加上的,後續學習到的時候再討論它深層次的意義。

5. 關於註釋:

//只能註釋單行

/*可以註釋一段*/

6. 關於輸入輸出:

cin是鍵入,此時多個輸入的只能用一個或多個空格隔開;

cout是輸出;

endl是換行,endline的縮寫,不是必須要加在結尾的,有沒有均可,按需。