编程第一课

目录

重视基础

技术学习理念

如何调用第三方模块

在此期间遇到的问题


重视基础

结论是:不推荐初学者将C++作为第一门语言学习。正确的学习顺序应该是先学习C语言,然后学习编程基础4大件(主要是数据结构和算法(在牛客网或者leetcode上会刷题并不代表有数据结构和算法思维,但是这是需要必经的过程)、计算机网络、操作系统、设计模式,Linux系统编程和网络编程。基础并不代表简单,越是基础的东西可能越难,一定要重视基础学习。会进行app的开发并不能说明你基础好,两者之间没什么逻辑关系。),等到基础夯实之后再去学习C++。因为在基础不牢的情况下学习C++,理解不了其中的奥秘。

比如cout是对象,运算符重载,4种编程范式:面向过程、面向对象、泛型编程和函数式编程。语法特性是C++学习的一个难点,可以对应编程范式来学习,比如面向对象学习类和对象、友元函数等;泛型编程时学模板等。工程代码实现时,不能出现using namespace std,要用std::cout来代替。

技术学习理念

学习技术最重要的是学习“错误”。学习方式和学习工具(Linux是专业的编程环境)不一样,最后会导致学习的效果不一样,对某个知识点的理解深度不一样,这里以声明和定义举例子。学习的时候一定要刨根问底,拆开来学习,用的时候可以忽略其中的细节。

只会gcc main.c和./a.out的操作,称为盲人工程师。这种学习方法的缺点就是对知识理解的深度不够。以实现两个数的加法为例,下面的这种学习方法会加深我们对概念以及知识点的理解深度。

编程第一课

只进行编译gcc -c main.c,产生main.o文件,查看里面的内容nm -C main.o,结果如图所示。对象文件中是自身存储符号(这里是add和main)的定义以及对外部符号(printf)的引用。

编程第一课

编译阶段只是进行语法检查(如何深刻理解这个概念呢)

第一种情况:如果去掉函数的定义,会出现什么情况呢?答案是编译依然能通过。查看main.o文件,可以看到此时的对象文件中自身存储符只有main,没有了add。

编程第一课

 

编程第一课

第二种情况:去掉函数的声明之后再进行编译会出现如下的错误提示(这种情况是未定义,还有重定义)。

编程第一课

编程第一课

 

定义和声明为什么分开???

这是工程开发中的一个规范,如果违反这个规范可能给开发带来很大的麻烦。声明装在头文件中,作用于编译阶段;定义装在源文件中,作用于链接阶段。所以有时会说包含头文件是为了通过编译阶段。

编程第一课

 

编程第一课

 

编程第一课

 

如何调用第三方模块

编程第一课

第三方模块在提供功能的时候,是以静态链接库和一组头文件的形式给出的。头文件包含声明,作用在编译阶段;静态链接库包含定义,作用在链接阶段。

在此期间遇到的问题

  1. Ubuntu18.04 VMwareTools安装方法
  2. Ubuntu 18.04 共享文件夹
  3. 安装gcc出现could not get lock