2018年1月

一、环境准备

1.1 安装包下载

所有的安装包可在http://mirror.team-cymru.com/gnu/找到。

GCC下载地址:GCC7.2.0,三个主要依赖组件下载地址:mpfr-4.0.1mpc-1.0.3gmp-6.1.2

1.2 安装依赖项

使用yum安装的依赖项:yum install -y glibc-headers gcc-c++ automake autoconf

对于gmp, mpfr和mpc三个依赖包,如果想偷懒就使用下面的命令一键安装:

sudo yum install -y  gmp-devel mpfr-devel libmpc-devel

建议使用yum自动安装,手动安装麻烦且费时。

这三个组件还可以使用官方提供的安装脚本安装:./contrib/download_prerequisite,比较耗时。

安装gmp

wget http://mirror.team-cymru.com/gnu/gmp/gmp-6.1.2.tar.xz
tar -Jxvf gmp-6.1.2.tar.xz
cd gmp-6.1.2
./configure --prefix=/usr/local/gmp-6.1.2
make && make check
sudo make install
sudo ln -s /usr/local/gmp-6.1.2 /usr/local/gmp

安装mpfr

wget http://mirror.team-cymru.com/gnu/mpfr/mpfr-3.1.6.tar.xz
tar -Jxvf mpfr-3.1.6.tar.xz
cd mpfr-3.1.6
./configure --prefix=/usr/local/mpfr-3.1.6 --with-gmp=/usr/local/gmp
make && make check
sudo make install
sudo ln -s /usr/local/mpfr-3.1.6 /usr/local/mpfr

安装mpc

wget http://mirror.team-cymru.com/gnu/mpc/mpc-1.0.3.tar.gz
tar -zxvf mpc-1.0.3.tar.gz
cd mpc-1.0.3
./configure --prefix=/usr/local/mpc-1.0.3 --with-gmp=/usr/local/gmp --with-mpfr=/usr/local/mpfr
make && make check
sudo make install
sudo ln -s /usr/local/mpc-1.0.3 /usr/local/mpc

添加动态库到系统搜索路径

动态库的默认搜索路径都在/etc/ld.so.conf文件中,这个文件里面包含了/etc/ld.so.conf.d/目录下的所有文件。所以只要在这个目录下创建一个gcc的文件作为库的搜索路径就可以了。

sudo echo "usr/local/mpc/lib" > /etc/ld.so.conf.d/gcc.conf
sudo echo "/usr/local/mpfr/lib" > /etc/ld.so.conf.d/gcc.conf
sudo echo "/usr/local/gmp/lib" > /etc/ld.so.conf.d/gcc.conf
sudo ldconfig

- 阅读剩余部分 -

经常我们都会被“常量是指针还是指针所指向的对象”这个问题所困扰。

因为在使用const 修饰指针时,指针的属性有三种状态:const int * ,int * const , const int * const ,三个状态很容易混淆。

通常,我们用名词顶层const 表示指针本身是个常量,名词底层const 表示指针所指向的对象是一个常量。

例如:

int i = 0;
const int * p1 = &i;
int *x = p1; // 错误,*x不具备底层const资格
const int *x2 = p1; // 正确,具备底层const资格
const int *x3 = &i;  // 正确,&i是int *,可以转成const int *

- 阅读剩余部分 -

一、概述

和引用一样,指针也可以和const 组合,它们组合后使得指针不能用于改变其所指对象的值。

const double p1 = 3.14;
double *ptr = &p1;  //错误,ptr是一个普通的指针,不能指向常量的地址。
const double *cptr = &p1;
*cptr = 3.14159;  //错误,不能修改*cptr的值

const 和指针组合有以下三种方式:

- 阅读剩余部分 -

一、概述

const 的引用通常被称为常量引用 ,它和非常量引用的区别为:

  • 非常量引用可以修改绑定对象的值,常量引用不能修改绑定对象的值。
  • 非常量引用时绑定对象的类型必须严格匹配,常量引用只要绑定的对象可以转换成引用的类型即可,即它的绑定值可以是表达式等等。
  • 非常量引用不能引用常量和常量引用对象,常量引用可以引用普通的常量和常量引用对象。
  • 非常量引用不能引用字面量,常量引用可以引用字面量。

- 阅读剩余部分 -

一、概述

C/C++ 使用const 关键字修饰的变量叫做常量,常量的值无法改变,在整个程序的运行期间,不会(同时也不能)被任何代码所改变。

由于常量无法改变,所以在定义时就必须被初始化,它的初始值可以是任何复杂的表达式,但不能是一个未经初始化的变量。

const int i = 1;
const int j = 2 *3;
const int k = get_max();
const int err = x;  //错误,x是一个没有初始化的变量。

- 阅读剩余部分 -

一、用法

grep全称是Global Regular Expression Print,表示使用正则表达式匹配文本。

命令格式:grep pattern file

  • -c:输出匹配到的数量。
  • -i:不区分大小写。
  • -h:不显示文件名。
  • -n:显示匹配行和行号。
  • -b:显示匹配到的字符串偏移。
  • -o:只输出匹配到的内容,一般与-b一起使用。
  • -v:反向输出,输出所有不匹配的行。
  • -E:正则匹配。

- 阅读剩余部分 -

linux tail命令的用法

一、用法

tail用于输出文件尾部的内容,命令用法:tail [选项] file,默认显示最后10行。

  • -c <N>:显示尾部指定数量的字符内容。
  • -n <N>:显示尾部指定行数的内容。
  • -f:实时刷新文件尾部信息,常用于日志信息监测。
  • --pid:和-f选项连用,表示当指定pid进程终止后,退出tail命令。
  • -v -q:输出和隐藏文件名,和head命令中的-v -q选项功能一致。

- 阅读剩余部分 -

一、用法

head命令用于显示文件的开头内容,命令格式为:head file

  • -n <行数>:显示开头指定行的文件内容,默认为10。
  • -c <字符数>:显示开头指定个数的字符数。
  • -q:不显示文件名字信息,适用于多个文件,多文件时默认会显示文件名。
  • -v:显示文件名信息,适用于单个文件,单文件时默认不显示文件名。

- 阅读剩余部分 -

一、用法

使用特定的规则切分文件内容并显示出来,命令格式cut file "m,n"

  • -b:根据字节选取内容。
  • -n:和-b连用,不区分多字节边界。
  • -c:根据字符选取内容。
  • -d:自定义分隔符,默认是\t
  • -f:以字段为单位,一个字段即使一个单词,单词以-d选项设置的作为边界。

- 阅读剩余部分 -