2020年度钻石C++C学习笔记(1)《博学谷》

1.C语言概述

2020年度钻石C++C提娶码:xb2k编程

1.1 什么是C语言

一提到语言这个词语,天然会想到的是像英语、汉语等这样的天然语言,由于它是人和人交换信息不可缺乏的工具。windows

而今天计算机遍及了咱们生活的每个角落,除了人和人的相互交流以外,咱们必须和计算机角落。缓存

用什么的什么样的方式和计算机作最直接的交流呢?人们天然想到的是最古老也最方便的方式——语言,而C语言就是人和计算机交流的一种语言。markdown

语言是用来交流沟通的。有一方说,有另外一方听,必须有两方参与,这是语言最重要的功能:
说的一方传递信息,听的一方接收信息;
说的一方下达指令,听的一方遵循命令作事情。V(cmL46679910)网络

语言是人和人交流,C语言是人和机器交流。只是,人能够不听另一我的,可是,计算机是无条件服从。框架

语言有独特的语法规则和定义,双方必须遵循这些规则和定义才能实现真正的交流。编程语言

1.2 为何要学习C语言

1.2.1 C语言特色

  1. 优势

代码量小
执行速度快
功能强大
编程自由编辑器

  1. 缺点

写代码实现周期长
可移植性较差
过于自由,经验不足易出错
对平台库依赖较多函数

1.2.2 学习C语言理由

 

1.2.3 C语言应用领域

C语言的应用极其普遍,从网站后台,到底层操做系统,从多媒体应用到大型网络游戏,都可使用C语言来开发:工具

C语言能够写网站后台程序
C语言能够专门针对某个主题写出功能强大的程序库
C语言能够写出大型游戏的引擎
C语言能够写出另外一个语言来
C语言能够写操做系统和驱动程序,而且只能用C语言编写
任何设备只要配置了微处理器,就都支持C语言。从微波炉到手机,都是由C语言技术来推进的

 

1.2.4 C语言的简洁


C语言仅有32个关键字,9种控制语句,34种运算符,却能完成无数的功能:

 

 

 

 

1.2.5 学习C语言的常见困惑

 

1.3 第一个C语言程序:HelloWorld

1.3.1 编写C语言代码:hello.c


#include <stdio.h>

int main()
{
//这是第一个C语言代码
printf("hello world\n");
return 0;
}
C语言的源代码文件是一个普通的文本文件,但扩展名必须是.c。

1.3.2 经过gcc编译C代码

  1. gcc编译器介绍\

编辑器(如vi、记事本)是指我用它来写程序的(编辑代码),而咱们写的代码语句,电脑是不懂的,咱们须要把它转成电脑能懂的语句,编译器就是这样的转化工具。就是说,咱们用编辑器编写程序,由编译器编译后才能够运行!
编译器是将易于编写、阅读和维护的高级计算机语言翻译为计算机能解读、运行的低级机器语言的程序。
gcc(GNU Compiler Collection,GNU 编译器套件),是由 GNU 开发的编程语言编译器。gcc本来做为GNU操做系统的官方编译器,现已被大多数类Unix操做系统(如Linux、BSD、Mac OS X等)采纳为标准的编译器,gcc一样适用于微软的Windows。

gcc最初用于编译C语言,随着项目的发展gcc已经成为了可以编译C、C++、Java、Ada、fortran、Object C、Object C++、Go语言的编译器你们族。

编译命令格式:
gcc [-option1] ...
g++ [-option1] ...
命令、选项和源文件之间使用空格分隔
一行命令中能够有零个、一个或多个选项
文件名能够包含文件的绝对路径,也可使用相对路径
若是命令中不包含输出可执行文件的文件名,可执行文件的文件名会自动生成一个默认名,Linux平台为a.out,Windows平台为a.exe

gcc、g++编译经常使用选项说明:
选项 含义
-o file 指定生成的输出文件名为file
-E 只进行预处理
-S(大写) 只进行预处理和编译
-c(小写) 只进行预处理、编译和汇编

  1. Windows平台下gcc环境配置\

windows命令行界面下,默认是没有gcc编译器,咱们须要配置一下环境。因为咱们安装了Qt,Qt是一个集成开发环境,内部集成gcc编译器,配置一下环境变量便可使用gcc。

a)进入Qt安装目录:


b)拷贝gcc所在的路径(不一样安装目录有所差别) C:\Qt\Qt5.5.0\Tools\mingw492_32\binV(cmL46679910)


c) 设置windows环境变量
计算机(右击)-> 属性:

 


若是是win7,双击Path后,把拷贝的路径追加到后面,路径之间须要英文” ; ”分隔:

若是是win10,界面作得友好一下,新建添加路径便可:


d)测试gcc命令:

 

  1. Windows平台下编译代码

 

1.3.3 代码分析

  1. include头文件包含

#include的意思是头文件包含,#include <stdio.h>表明包含stdio.h这个头文件
使用C语言库函数须要提早包含库函数对应的头文件,如这里使用了printf()函数,须要包含stdio.h头文件
能够经过man 3 printf查看printf所需的头文件

#include< > 与 #include ""的区别:
< > 表示系统直接按系统指定的目录检索
"" 表示系统先在 "" 指定的路径(没写路径表明当前路径)查找头文件,若是找不到,再按系统指定的目录检索

stdio.h是在操做系统的系统目录下:


2) main函数
一个完整的C语言程序,是由一个、且只能有一个main()函数(又称主函数,必须有)和若干个其余函数结合而成(可选)。
main函数是C语言程序的入口,程序是从main函数开始执行。

  1. {} 括号,程序体和代码块

{}叫代码块,一个代码块内部能够有一条或者多条语句
C语言每句可执行代码都是";"分号结尾
全部的#开头的行,都表明预编译指令,预编译指令行结尾是没有分号的
全部的可执行语句必须是在代码块里面

  1. 注释

//叫行注释,注释的内容编译器是忽略的,注释主要的做用是在代码中加一些说明和解释,这样有利于代码的阅读
/**/叫块注释
块注释是C语言标准的注释方法
行注释是从C++语言借鉴过来的

  1. printf函数

printf是C语言库函数,功能是向标准输出设备输出一个字符串
printf(“hello world\n”);//\n的意思是回车换行

  1. return语句

return表明函数执行完毕,返回return表明函数的终止
若是main定义的时候前面是int,那么return后面就须要写一个整数;若是main定义的时候前面是void,那么return后面什么也不须要写
在main函数中return 0表明程序执行成功,return -1表明程序执行失败
int main()和void main()在C语言中是同样的,但C++只接受int main这种定义方式

1.4 system函数

1.4.1 system函数的使用


#include <stdlib.h>
int system(const char *command);
功能:在已经运行的程序中执行另一个外部程序
参数:外部可执行程序名字
返回值:
成功:0
失败:任意数字

示例代码:
#include <stdio.h>
#include <stdlib.h>

int main()
{
//system("calc"); //windows平台
system("ls"); //Linux平台, 须要头文件#include <stdlib.h>

return 0;
}

1.5 C语言编译过程

1.5.1 C程序编译步骤


C代码编译成可执行程序通过4步:
1)预处理:宏定义展开、头文件展开、条件编译等,同时将代码中的注释删除,这里并不会检查语法
2)编译:检查语法,将预处理后文件编译生成汇编文件
3)汇编:将汇编文件生成目标文件(二进制文件)
4)连接:C语言写的程序是须要依赖各类库的,因此编译以后还须要把库连接到最终的可执行程序中去

1.5.2 gcc编译过程

  1. 分步编译

预处理:gcc -E hello.c -o hello.i
编 译:gcc -S hello.i -o hello.s
汇 编:gcc -c hello.s -o hello.o
链 接:gcc hello.o -o hello

选项 含义
-E 只进行预处理
-S(大写) 只进行预处理和编译
-c(小写) 只进行预处理、编译和汇编
-o file 指定生成的输出文件名为 file

文件后缀 含义
.c C 语言文件
.i 预处理后的 C 语言文件
.s 编译后的汇编文件
.o 编译后的目标文件

 


2) 一步编译
gcc hello.c -o demo(仍是通过:预处理、编译、汇编、连接的过程):

 

1.5.3 查找程序所依赖的动态库

Windows平台下,须要相应软件(Depends.exe):

 

1.6 CPU内部结构与寄存器(了解)

1.6.1 64位和32位系统区别


寄存器是CPU内部最基本的存储单元
CPU对外是经过总线(地址、控制、数据)来和外部设备交互的,总线的宽度是8位,同时CPU的寄存器也是8位,那么这个CPU就叫8位CPU
若是总线是32位,寄存器也是32位的,**V(cmL46679910)**那么这个CPU就是32位CPU
有一种CPU内部的寄存器是32位的,但总线是16位,准32为CPU
全部的64位CPU兼容32位的指令,32位要兼容16位的指令,因此在64位的CPU上是能够识别32位的指令
在64位的CPU构架上运行了64位的软件操做系统,那么这个系统是64位
在64位的CPU构架上,运行了32位的软件操做系统,那么这个系统就是32位
64位的软件不能运行在32位的CPU之上

1.6.2 寄存器名字(了解)


8位 16位 32位 64位
A AX EAX RAX
B BX EBX RBX
C CX ECX RCX
D DX EDX RDX

1.6.3 寄存器、缓存、内存三者关系


按与CPU远近来分,离得最近的是寄存器,而后缓存(CPU缓存),最后内存。

CPU计算时,先预先把要用的数据从硬盘读到内存,而后再把即将要用的数据读到寄存器。因而 CPU<--->寄存器<--->内存,这就是它们之间的信息交换。

那为何有缓存呢?由于若是常常操做内存中的同一址地的数据,就会影响速度。因而就在寄存器与内存之间设置一个缓存。

由于从缓存提取的速度远高于内存。固然缓存的价格确定远远高于内存,否则的话,机器里就没有内存的存在。

由此能够看出,从远近来看:CPU〈---〉寄存器〈---> 缓存 <---> 内存。

1.7 汇编语言

1.7.1 VS中C语言嵌套汇编代码(了解)


#include <stdio.h>

int main()
{
//定义整型变量a, b, c
int a;
int b;
int c;

__asm
{
mov a, 3 //3的值放在a对应内存的位置
mov b, 4 //4的值放在b对应内存的位置
mov eax, a //把a内存的值放在eax寄存器
add eax, b //eax和b相加,结果放在eax
mov c, eax //eax的值放在c中
}

printf("%d\n", c);//把c的值输出

return 0;//成功完成
}

1.7.2 VS反汇编


#include <stdio.h>

int main()
{
//定义整型变量a, b, c
int a;
int b;
int c;

a = 3;
b = 4;
c = a + b;

printf("%d\n", c);//把c的值输出

return 0;//成功完成
}

1)设置断点F9


2)选择反汇编按钮

3)根据汇编代码分析程序

1.8 集成开发环境IDE


集成开发环境(IDE,Integrated Development Environment )是用于提供程序开发环境的应用程序,通常包括代码编辑器、编译器、调试器和图形用户界面工具。集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套。全部具有这一特性的软件或者软件套(组)均可以叫集成开发环境。

1.8.1 Qt Creator


Qt Creator是跨平台的 Qt IDE,V(cmL46679910) Qt Creator 是 Qt 被 Nokia 收购后推出的一款新的轻量级集成开发环境(IDE)。此 IDE 可以跨平台运行,支持的系统包括 Linux(32 位及 64 位)、Mac OS X 以及 Windows。根据官方描述,Qt Creator 的设计目标是使开发人员可以利用 Qt 这个应用程序框架更加快速及轻易的完成开发任务。

快捷键 含义 Ctrl + i 自动格式化代码 Ctrl + / 注释/取消注释 Alt + Enter 自动完成类函数定义 F4 .h 文件和对应.cpp 文件切换 F9 设置断点 F5 调试运行 Ctrl + r 编译,但不调试运行 Ctrl + b 编译,不运行 F10 next调试 F11 step调试

相关文章
相关标签/搜索