【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的縮寫,不是必須要加在結尾的,有沒有均可,按需。