一、C语言概述

  • 1.1 什么是C语言
  • 1.2 为什么要学C语言
    • 1.2.1 C语言的特点
    • 1.2.2 C语言应用领域
    • 1.2.3 C语言的简洁
  • 1.3 第一个C语言程序:HelloWorld
    • 1.3.1 编写C语言代码:hello.c
    • 1.3.2 通过gcc编译C代码
    • 1.3.3 代码分析
  • 1.4 system函数
  • 1.5 C语言编译过程
    • 1.5.1 C程序编译步骤
    • 1.5.2 gcc编译过程
  • 1.6 CPU内部结构与寄存器(了解)
    • 1.6.1 64位和32位系统区别
    • 1.6.2 寄存器名字(了解)
    • 1.6.3 寄存器、缓存、内存三者关系
  • 1.7 汇编语言(了解):C语言嵌套汇编代码
  • 1.8 集成开发环境IDE
    • 1.8.1 Qt Creator
    • 1.8.2 Microsoft Visual Studio

1.1 什么是C语言

人和人交换信息的工具:像英语、汉语等这样的自然语言,以沟通为目的。
人和计算机交流的工具高级语言(C,C++,Java,python)→汇编语言→机器语言(只有0和1,因为电路只有高电平\通电和低电平\断电的状态),以命令为目的。
语言有独特的语法规则和定义,双方必须遵循规则和定义才能实现真正交流。

1.2 为什么要学C语言

1.2.1 C语言的特点

优点:
①在高级语言中执行速度最快:能与底层直接交互的语言;
②编程自由,语法规则最简单;
③功能强大。
缺点:
①在高级语言中实现周期最长:C语言不像其他语言有丰富的函数库可以调用,很多函数需要自定义;
②过于自由,经验不足容易出现错;
③可移植性差。

1.2.2 C语言应用领域

C语言的应用极其广泛,从网站后台,到底层操作系统,从多媒体应用到大型网络游戏,均可使用C语言来开发
①任何设备(硬件)只要配置了微处理器(手机、微波炉等),都是需要C语言技术
嵌入式、操作系统、驱动程序、服务器(淘宝,12306)只能用C语言编写
③C语言可以专门针对某个主题写出
功能强大的程序库(.dll动态库)

④C语言可以写出大型游戏的引擎和外挂(unity3D写的王者荣耀跟绝地求生)
C语言可以写出另一个语言(python)
⑥可以写网站后台程序,绝大部分JavaScript、PHP和少量ASP、JSP
⑦高性能服务:开发apache、nginx、redis等高性能web服务器和数据库

1.2.3 C语言的简洁

C语言仅有32个关键字,9种控制语句,34种运算符,却能完成无数功能:
一、C语言概述(易懂易学习,附代码案例)-编程知识网
一、C语言概述(易懂易学习,附代码案例)-编程知识网
一、C语言概述(易懂易学习,附代码案例)-编程知识网

1.3 第一个C语言程序:HelloWorld

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

打开Visual Studio 2013→文件→新建→项目
一、C语言概述(易懂易学习,附代码案例)-编程知识网
点击Visual C++→Win32控制台应用程序→写名字和选择路径(写路径名字养成不要写带有中文名字的习惯)→确定
一、C语言概述(易懂易学习,附代码案例)-编程知识网
一、C语言概述(易懂易学习,附代码案例)-编程知识网
如果不选择空项目,头文件会编译失败,因为会产生其他头文件
一、C语言概述(易懂易学习,附代码案例)-编程知识网
找不到窗口的方法一
一、C语言概述(易懂易学习,附代码案例)-编程知识网
找不到窗口的方法二
一、C语言概述(易懂易学习,附代码案例)-编程知识网
右击源文件→添加→新建项
一、C语言概述(易懂易学习,附代码案例)-编程知识网
选择Visual C++→C++文件→名称后缀一定是.c不是.cpp(cpp是C++文件后缀,C语言的源文件扩展名必须是.c)
一、C语言概述(易懂易学习,附代码案例)-编程知识网
编写第一个C语言代码HelloWorld.c,ctrl+F5运行

#include <stdio.h>
int main(void){					//一个程序只有一个主函数,void可不写,表示无参数printf("hello world\n");	//除了字符串,其他都是英文符号下书写//{}{}{}{}					//空函数体,写入不会报错,无实际意义,可不写//;;;;;;;;;					//空语句,写入不会报错,无实际意义,可不写return 0;					//0表示函数的返回值,要和函数返回值类型对应
}

一、C语言概述(易懂易学习,附代码案例)-编程知识网
点击视图→错误列表→显示报错信息→双击报错信息→切换到报错位置
一、C语言概述(易懂易学习,附代码案例)-编程知识网
如果出现’\xxx’这种错误的,一般是因为输入非英语符号导致的错误

1.3.2 通过gcc编译C代码

  1. gcc编译器介绍:
    编辑器(如vi、记事本)是用它来编辑代码,但电脑不懂代码,因此通过编译器把代码转成电脑能懂的语句(机器语言),即用编辑器编写程序,由编译器编译后才可以运行
    gcc(GNU Compiler Collection,GNU编译器套件)由GNU开发的编程语言编译器。gcc原本作为GNU操作系统的官方编译器,现已被大多数类Unix操作系统(如Linux、BSD等)采纳为标准的编译器,gcc同样适用于微软的Windows。gcc最初用于编译C语言,随着项目发展,gcc也能够编译C、C++、Java、fortran、Object C、Object C++、Go语言
  2. Windows平台下gcc环境配置:
    windows命令行界面下,默认是没有gcc编译器,我们需要配置一下环境。由于我们安装了Qt,Qt是一个集成开发环境,内部集成gcc编译器,配置一下环境变量即可使用gcc。
    ①进入Qt安装目录:
    一、C语言概述(易懂易学习,附代码案例)-编程知识网
    ②拷贝gcc所在的路径(不同安装目录有所差异)
    一、C语言概述(易懂易学习,附代码案例)-编程知识网
    ③设置windows环境变量
    一、C语言概述(易懂易学习,附代码案例)-编程知识网
    一、C语言概述(易懂易学习,附代码案例)-编程知识网
    一、C语言概述(易懂易学习,附代码案例)-编程知识网
    对于win7,双击Path后,把拷贝的路径追加到后面,路径之间用英文;分隔:
    一、C语言概述(易懂易学习,附代码案例)-编程知识网
    如果是win10,界面做得友好一下,新建添加路径即可:
    一、C语言概述(易懂易学习,附代码案例)-编程知识网
    ④测试gcc命令:win+R输入cmd打开界面,输入gcc –v,如果显示如下图所示,说明可以编译C文件。
    一、C语言概述(易懂易学习,附代码案例)-编程知识网
    Windows平台下编译代码:
    一、C语言概述(易懂易学习,附代码案例)-编程知识网
    一、C语言概述(易懂易学习,附代码案例)-编程知识网

1.3.3 代码分析

  1. #include
    #include表示导入一个文件,#include <stdio.h>导入stdio.h头文件。
    <>表示导入系统文件,“” 表示导入所有自定义文件(源文件、txt)。
    “” 表示系统先在 “” 指定的路径(没写路径代表当前路径)查找头文件,如果找不到,再按系统指定的目录检索。

  2. stdio.h
    std是一个标准库,i是input,o是output,.h是头文件,所以stdio.h是标准输入输出头文件。
    使用C语言库函数需要提前包含库函数对应的头文件,如这里使用了printf()函数,需要包含stdio.h头文件。

  3. main函数
    int作用:①定义整型变量;②定义函数的返回值是int型。
    程序有且只有一个主函数main(),程序是从main函数开始执行。
    ()里面表示参数数据类型和函数的参数,参数可有可无(void),若有多个中间用逗号分隔(数据类型1 参数1,数据类型2 参数2……)。

  4. {}
    {}叫函数体,又称代码体或者程序体,一个函数体内部可以有0条(空语句)、1条或多条语句。
    C语言每句可执行代码都是";"分号结尾
    所有的#开头的行,都代表预编译指令,预编译指令行结尾是没有分号的。

    所有的可执行语句必须是在代码块里面。

  5. 注释
    //两个反斜杠表示行注释,只能注释一行。
    /这是一个块注释,可以注释多行
    注释内容不参与程序编译
    /

  6. printf函数
    printf是C语言库函数,功能是向标准输出设备打印字符串。

  7. return语句
    return如果出现在其他函数中表示函数结束,如果出现在main函数中表示程序结束。所以return 0后面写的任何语句都不会执行。
    0表示函数的返回值,要和函数返回值类型对应。如果main定义的时候前面是int,那么return后面就需要写一个整数;如果main定义的时候前面是void,那么不写return语句。
    在main函数中return 0代表程序执行成功,return -1代表程序执行失败。
    int main()和void main()在C语言中是一样的,但C++只接受int main这种定义方式。

1.4 system函数

#include <stdlib.h> //标准系统管理库
int system(const char *command); //鼠标触摸函数会有参数提示
功能:在已经运行的程序中执行另外一个外部程序
参数:外部可执行程序地址+名字
返回值:
成功:0
失败:任意数字

#include <stdio.h>
#include <stdlib.h>		//按ctrl+j可以代码自动填充提示
int main(){int a,b,c;a = system("dir");	//windows平台, 返回0b = system("ls");	//Linux平台命令,windows平台打开失败,返回非0任意数c = system("D:/QQ/Bin/QQScLauncher.exe");//启动QQ(带路径),路径用双反斜杠\\或正斜杠/表示,因为反斜杠表示转义字符printf("a = %d,b = %d,c = %d\n",a,b,c);return 0;
}

1.5 C语言编译过程

1.5.1 C程序编译步骤

C代码编译成可执行程序经过4步:
1)预处理:宏定义展开(把宏定义的数值直接显示出来)、头文件展开(由于头文件封装成库,库里面很多函数,预处理后直接把#include的代码全部展开)、条件编译等(),同时将代码中的注释删除(变成空行),这里并不会检查语法
2)编译:检查语法,将预处理后文件编译生成汇编文件
3)汇编:将汇编文件生成目标文件(二进制文件)
4)链接:C语言写的程序是需要依赖各种库的,所以编译之后还需要把库链接到最终的可执行程序中去

一、C语言概述(易懂易学习,附代码案例)-编程知识网

1.5.2 gcc编译过程

  1. 分步编译
    ①预处理:gcc -E hello.c -o hello.i (产生源码文件hello.i)
    例如:给代码加上常变量和注释
    一、C语言概述(易懂易学习,附代码案例)-编程知识网
    CMD输入预处理命令,产生C/C++源码文件
    一、C语言概述(易懂易学习,附代码案例)-编程知识网
    把#include <stdio.h>包装的库函数全部展开
    一、C语言概述(易懂易学习,附代码案例)-编程知识网
    把文件拖到最后,发现头文件被封装的库函数取代,常变量被数值取代,注释也被删除变成空行。因为不检查语法,所以该步骤一定不报错
    一、C语言概述(易懂易学习,附代码案例)-编程知识网
    ②编 译:gcc -S hello.i -o hello.s
    执行命令②,产生汇编语言文件,如果有语法错误,则报错,不产生汇编文件

    一、C语言概述(易懂易学习,附代码案例)-编程知识网
    一、C语言概述(易懂易学习,附代码案例)-编程知识网
    编 译:gcc -c hello.s -o hello.o
    产生目标文件hello.o,记事本打开是乱码的

    一、C语言概述(易懂易学习,附代码案例)-编程知识网
    链 接:gcc hello.o -o hello
    一、C语言概述(易懂易学习,附代码案例)-编程知识网
gcc、g++编译常用选项 含义
-E 只进行预处理
-S(大写) 只进行预处理和汇编
-c(小写) 只进行预处理、汇编和编译
-o file 指定生成的输出文件名为file
文件后缀 含义
.c 源文件
.i 预处理后的源文件
.s 汇编文件
.o 目标文件(二进制文件)

一、C语言概述(易懂易学习,附代码案例)-编程知识网
2) 一步编译
gcc hello.c -o demo(还是经过:预处理、编译、汇编、链接的过程):

一、C语言概述(易懂易学习,附代码案例)-编程知识网

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

1.6.1 64位和32位系统区别

寄存器是CPU内部最基本的存储单元。
CPU对外是通过总线(地址、控制、数据)来和外部设备交互的,总线的宽度是8位,同时CPU的寄存器也是8位,那么这个CPU就叫8位CPU。
如果总线是32位,寄存器也是32位的,那么这个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<—>寄存器<—>内存,这就是它们之间的信息交换。
那为什么有缓存呢?因为如果经常操作内存中的同一址地的数据,就会影响速度。于是就在寄存器与内存之间设置一个缓存。
因为从缓存提取的速度远高于内存。当然缓存的价格肯定远远高于内存,不然的话,机器里就没有内存的存在。

1.7 汇编语言(了解):C语言嵌套汇编代码

#include <stdio.h>
int main(){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相加,结果放在eaxmov c, eax	//eax的值放在c中}			//加断点方法:①在该行左边左击;②点击该行任意位置,按F9printf("%d\n",  c);return 0;
}

1.8 集成开发环境IDE

Linux用外部编辑器vim和gedit,然后手工gcc编译,最后手工运行。
集成开发环境(IDE,Integrated Development Environment )是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面工具。集成代码编写、代码预处理、分析、编译、汇编、调试、链接、运行功能等一体化的开发软件服务套,把开发所需要的工具和步骤都放到一个程序进行。所有具备这一特性的软件或者软件套(组)都可以叫集成开发环境。例如:Qt Creator、Microsoft Visual Studio、Keil uVision、IAR等。

1.8.1 Qt Creator

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

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

1.8.2 Microsoft Visual Studio

Microsoft Visual Studio(简称VS)是美国微软公司的开发工具包系列产品。VS是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具、代码管控工具、集成开发环境(IDE)等等,所写的目标代码适用于微软支持的所有平台。Visual Studio是目前最流行的Windows平台应用程序的集成开发环境。VS常用快捷键如下:

快捷键 含义
Ctrl + K,Ctrl + F 自动格式化代码
Ctrl + K,Ctrl + C 注释代码
Ctrl + K,Ctrl + U 取消注释代码
Ctrl + J 代码自动提示
Alt + → 智能补全代码
Alt + 上下键 移动一行代码
Ctrl + shift + U 将选中区域的字母大写小写
Shift + Tab 缩进
Enter 在下方开辟一个新的空行
Ctrl + Enter 在上方开辟一个新的空行
F5 调试运行
Ctrl + F5 不调试运行
Ctrl + Shift + b 编译,不运行
F9 先选中行,设置断点(或者改行左边左击)
F11 逐语句执行:逐步执行每条语句
F10 逐过程执行:对于定义的语句逐条执行,作用同F11。对于函数,按F10即可执行整个函数,不逐条执行函数里面的语句

码字不易,如果大家觉得有用,请高抬贵手给一个赞让文章上推荐让更多的人看到吧,也可以评论提出意见让后面的文章内容越来越生动丰富。