从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的缩写,不是必须要加在结尾的,有没有均可,按需。