首页 > 代码库 > C语言学习笔记(一)

C语言学习笔记(一)

一、计算机和软件常识

1.计算机运行原理
1)硬件基本组成:硬盘、CPU、内存
技术分享
2.计算机只能识别0和1
1)0和1组成的指令
2)0和1组成的数据
3.计算机和软件的联系
1)软件的基本概念:指令的集合
2)软件的安装运行过程:安装在硬盘,运行在内存
3)为什么要开发软件:写出能控制计算机的指令
4.计算机语言
1)一门跟计算机打交道的语言
2)方便写出一连串的指令

二、计算机语言的发展史

技术分享
1.机器语言
1)简介
    所有代码里面只有0和1,每一条指令称为“机器指令”。
2)优点:
    ※代码能被计算机直接识别,直接对硬件产生作用,程序的执行效率非常高。
    ※能直接访问、控制计算机的各种硬件设备,如:磁盘/CPU/I/O端口等
3)缺点:
    ※程序全部是由0和1组成的指令代码,可读性差,还容易出错。
    ※对硬件的依赖性很强,因此不同型号计算机的机器语言又不一样。也就是说,如果2台不同型号的机器想实现一样的功能,需要编写2套完全不同的代码。
    ※要熟记所用计算机的全部指令和指令的涵义,指令又多又难记。

4)使用场合
    综上所述,机器语言很难掌握和推广现在除了计算机生产厂家的专业人员外绝大多数的程序员已经不再去学习机器语言了。

2.汇编语言
1)简介
    用英文单词等符号代替机器指令。
2)优点:
    ※ 像机器语言一样可以直接访问控制计算机的各种硬件设备
    占用内存少执行速度快
3)缺点:
    ※不同的机器有不同的汇编语言语法和编译器代码缺乏可移植性也就是说一个程序只能在一种机器上运行换到其他机器上就不能运行
    ※符号非常多难记即使是完成简单的功能也需要大量的汇编语言代码很容易产生BUG难于调试
    必须对硬件非常了解开发效率很低周期长且单调
4)使用场合
    操作系统内核、驱动程序、单片机程序
    ※软件的加密、解密、破解
    ※病毒的制作、防治
    ※程序的调试、分析 


3.高级语言
1)简介
    接近自然的语言
2)优点
    ※简单易用易于理解语法和结构类似于普通英文
    ※远离对硬件的直接操作使得一般人经过学习之后都可以编程而不用太熟悉硬件知识
    ※一个程序还可以在不同的机器上运行具有可移植性
3)缺点
    ※程序不能直接被计算机识别需要经编译器翻译成二进制指令后才能运行到计算机上
4)种类
    C语言、C++C#JavaObjective-C  

三、C语言简介

1.学习C语言的原因
1)OC 基于 C
2)OC 跟 C 的思想和语法很多地方不大一样,而且OC能和C混用。
3)C 是所有汇编语言中的经典,很多高级语言都是从C语言中衍生出来的,如JAVA,C++,C#,Objective-C等。

2.简史
1)C语言于1972年发明,首次使用时用于重写UNIX系统。因为UNIX以前主要是用汇编语言写的,调试起来比较困难,它奠定了操作系统的基础。
2)随着UNIX操作系统的成功,C语言也得到了大幅度地推广,被先后使用到大、中、小、微型主机上,至今还是世界上最流行、使用最广泛的高级程序设计语言之一
3)C语言是一门面向过程的语言,非面向对象的语言

3.特点
1)丰富的运算符
2)丰富的数据类型
3)可以直接操作硬件
4)高效的目标代码
5)可移植性好

4.主要用途
1)编写系统软件、图形处理、单片机程序、嵌入式系统开发
2)编写游戏外挂
3)编写android程序
4)编写iOS程序
......

5.版本问题
    1)1983年美国国家标准局(American National Standards Institute,简称ANSI)成立了一个委员
        会,开始制定C语言标准的工作
    2)1989C语言标准被批准,这个版本的C语言标准通常被称为ANSI C/C89
    3)1999年,国际标准化组织ISO又对C语言标准进行修订,在基本保留原来C语言特征的基础上,针对应该    
        的需要,增加了一些功能,命名为C99
    4)2011128日,ISO正式公布C语言新的国际标准草案:C11


四、第一个C语言程序

1.开发工具的选择

可以用来写代码的工具:记事本、UltraEditVimEditplus、Eclipse等都可以,到底只是一个编写代码的工具而已。

2.代码的编写

1)程序结构

    C语言的结构:由函数组成。

    任何一个C语言程序都是由一个或多个程序段构成的,每个程序段都有自己的功能,这个程

序段称为“函数”,所以说C语言程序是由函数组成的。

2)函数的基本概念

    函数名:一个程序由无数个函数组成,每个函数都有自己的名称。

    调用/执行函数:根据函数名就可调用函数,执行相关的功能。

3)C程序的入口

    C程序的入口是一个名字叫做main的函数,简称main函数。

    不管整个程序有多少个函数,都是先执行main函数的。

3.编译

1)什么是编译?

    将C源程序编译成计算机能识别的0和1.

2)使用什么编译器?

    将自己写的源代码,编译成由0和1组成的二进制文件。

    如果代码中有语法问题,编译器会直接报错,并直接指出错误的个数和具体行号。

    只要有1个错误,程序就不能编译成功,也不会生成.0文件。

    警告信息只是编译器的一些建议,并不影响编译通过。


4.链接

1)链接的作用:将.o文件和C语言函数库组合在一起,生成可执行文件。

2)由连接器完成,一般在编译器里面已经包含了链接指令。

    在终端中输入:cc 文件名.o

    链接成功后,Mac OS X系统会生成a.out可执行文件/windows下链接成功后生成a.exe文件


5.运行

1)运行方式

   Mac OS X:./a.out指令

   Windows:a.exe指令

2)修改文件内容后,一定要重新编译、链接、在运行。

3)\n的作用,回车换行


6.搭建开发环境

    CLI 模式:Windows Console + MinGW(GCC + GDB + MAKE)+ VIM(for win32 console)

    下载MinGW软件,在环境变量Path值最后添加:;D:\MinGW\bin


7.其它clang指令

    修改可执行文件名称:cc xxx.o -o 文件名

    一起编译、链接:cc xxx.c


8.初学者常见错误

1)不写分号、用了中文分号

2)字符串少了双引号、或者用了单引号、或双引号里面又有双引号

3)代码没有写在main函数内部、return之前

4)文件扩展名不是.c 或 .C 

5)用绝对路径编译文件,注意目标文件生成的地方。


9.总结

1)整个程序的运行过程

技术分享

2)总结常见文件的扩展名

    .c :     c语言源文件,在编写代码时创建

    .o :     目标文件,编译成功后产生

    .out/.exe :   可执行文件,在链接成功后产生

3)总结 clang指令

    编译: cc -c xx.c

    链接: cc xx.o

    编译、链接: cc xx.c

    运行可执行文件: ./a.out或a.exe

4)开发中遇到哪些错误,如何解决?

    语法错误:可以通过编译器的报错信息解决

    逻辑错误:需要耐心调试程序

10.Windows cmd指令

    上面的一些指令都是在Mac OS X 系统下的指令。

    实际上自己使用的是Windows系统,操作指令:

    编译:gcc first.c,生成first.o文件

    链接:gcc first.o,生成a.exe文件,文件名默认是a.exe

    编译并链接: gcc first.c -g -o first.exe,生成first.exe文件。这里指定了生成后的文件名。

    运行:first.exe/a.exe,将运行程序,将结果打印字控制台上。

   

   因为最近在学习C语言,就把笔记写到博客上了!



C语言学习笔记(一)