《Primer C++》第1章-读书笔记
第1章 开始
1. Linux下C++程序的编译运行
在不同的操作和编译器系统中,运行C++编译器的命令也各不相同。最常用的编译器是GNU编译器,默认情况下,运行GNU编译器的命令是g++。
编写好C++源文件,例如1.cpp:
# 1.cpp
#include <iostream>
using namespace std;
int main() {
cout<<"hehe"<<endl;
return 0;
}
利用GNU编译器进行编译的方式有2种:
(1)法1
利用命令:
$ g++ 1.cpp
利用这个命令,会生成一个名为a.out
的可执行文件,例如:
root@LAPTOP-8STQ2UUH:/test# ll
total 0
drwxrwxrwx 1 pig pig 4096 Feb 24 20:25 ./
drwxrwxrwx 1 pig pig 4096 Feb 24 20:24 ../
-rwxrwxrwx 1 pig pig 92 Feb 24 20:24 1.cpp*
root@LAPTOP-8STQ2UUH:/test# g++ 1.cpp
root@LAPTOP-8STQ2UUH:/test# ll
total 12
drwxrwxrwx 1 pig pig 4096 Feb 24 20:25 ./
drwxrwxrwx 1 pig pig 4096 Feb 24 20:24 ../
-rwxrwxrwx 1 pig pig 92 Feb 24 20:24 1.cpp*
-rwxrwxrwx 1 pig pig 8920 Feb 24 20:25 a.out*
root@LAPTOP-8STQ2UUH:/test#
运行如下命令可以运行这个可执行文件:
root@LAPTOP-8STQ2UUH:/test# ./a.out
hehe
root@LAPTOP-8STQ2UUH:/test#
其中,./
表示当前目录。
(2)命令2
利用命令:
$ g++ -o pro 1.cpp
这个命令中,-o pro
是编译器的参数,它指定了可执行文件的文件名,此处是指定为pro。再例如,指定可执行文件名为prog1
,并执行它:
root@LAPTOP-8STQ2UUH:/test# ll
total 0
drwxrwxrwx 1 pig pig 4096 Feb 24 20:33 ./
drwxrwxrwx 1 pig pig 4096 Feb 24 20:27 ../
-rwxrwxrwx 1 pig pig 92 Feb 24 20:24 1.cpp*
root@LAPTOP-8STQ2UUH:/test# g++ -o prog1 1.cpp
root@LAPTOP-8STQ2UUH:/test# ll
total 12
drwxrwxrwx 1 pig pig 4096 Feb 24 20:34 ./
drwxrwxrwx 1 pig pig 4096 Feb 24 20:27 ../
-rwxrwxrwx 1 pig pig 92 Feb 24 20:24 1.cpp*
-rwxrwxrwx 1 pig pig 8920 Feb 24 20:34 prog1*
root@LAPTOP-8STQ2UUH:/test# ./prog1
hehe
root@LAPTOP-8STQ2UUH:/test#
另外,可以用echo ?
来获取程序的返回值,例如上述程序执行后:
root@LAPTOP-8STQ2UUH:/test# echo $?
0
root@LAPTOP-8STQ2UUH:/test#
【补充】
1. Linux下的echo命令的功能是在显示器上显示一段文字,一般起到提示的作用;
**2. Linux中,如下变量各自代表的含义: **
$# 是传给脚本的参数个数
$0 是脚本本身的名字
$1 是传递给该shell脚本的第一个参数
$2 是传递给该shell脚本的第二个参数
$@ 是传给脚本的所有参数的列表
$* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
$$ 是脚本运行的当前进程ID号
$? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误
2. iostream库
iostream库包含2个基础类型istream和ostream,分别表示输入流和输出流(一个流就是一个字符序列)。
标准库定义了4个IO对象:
(1)cin
为istream类型的对象,也被称为标准输入。
(2)cout
为ostream类型的对象,被称为标准输出。
(3)cerr
为ostream类型的对象,通常被用来输出警告和错误消息,因此被称为标准错误。
(4)clog
为ostream类型的对象,用来输出程序运行时的一般性信息。
3. 表达式
在C++中,一个表达式产生一个计算结果,它由一个或多个运算对象和(通常是)一个运算符组成。
例如这个语句:
std::cout << "Enter Two Numbers:" << std::endl;
在这个表达式中使用了**输出运算符(<<)**在标准输出上打印消息。
**<<**运算符接受两个运算对象:左边的运算对象必须是一个ostream对象,右边的运算对象是要打印的值,此运算符将给定的值写到给定的ostream对象中。**输出运算符(<<)**的计算结果就是其左侧运算对象,即,计算结果就是写入给定值的那个ostream对象。
在此处,该表达式使用了2次**<<**运算符,因为该运算符返回其左侧的运算对象,因此第一个运算符的结果成了第二个运算符的左侧运算对象。这样,该表达式就等价于:
(std::cout<<"Enter Two Numbers:") << std::endl;
式中,每个运算符的左侧运算对象都是std::out。
【注意】:endl是一个被称为操纵符的特殊值。写入endl的效果是结束当前行,并将与设备关联的缓冲区中的内容刷到设备中。缓冲刷新操作可以保证到目前为止程序所产生的所有输出都真正写入输出流中,而不是仅停留在内存中等待写入流。