gcc的使用
1、计算机能识别的唯一语言是二进制语言
语言的发展:
机器语言 | 二进制数据:1101 0101 |
|
汇编语言 | 用符号表示一组操作 add call mov… | 优:直接操作硬件,速度快 |
高级语言 | 以语句为单位进行操作 | 优:可移植 |
c语言是中级语言,具备汇编语言的特性,同时也具备高级语言可移植的特性
不管什么语言,要想被计算机执行,必须先转换为机器码
编译器:将原来的代码(源代码)编译成计算机可执行的代码(程序)
相同的代码经过不同的编译器编译,可以被不同的设备执行
Linux系统常用的编译c语言的编译器是:gcc
2、c语言程序编译步骤
预处理(预编译) | 处理"#"开头的内容,进行替换,去掉注释。。 | 生成预处理文件.i |
编译 | 编译器对代码进行编译——>最复杂、耗时的过程 | 生成汇编文件.s |
汇编 | 把汇编文件编译成二进制文件 | 生成目标文件.o |
链接 | 把多个目标文件按一定的规则整合成一个可执行文件 | 生成最终可执行程序 |
3、gcc的命令
gcc -E | 对文件进行预处理,生成预处理文件 |
gcc -S | 对文件进行编译,生成汇编文件 |
gcc -c | 对文件进行汇编,生成目标文件 |
gcc -o | 对文件进行重命名 |
gcc 默认生成文件名为 a.out
如果想自定义生成的文件名,编译时加" -o 新文件名"
如果在程序中使用了"math.h"文件,编译时要在后面加" -lm"
4、程序执行
Linux下执行程序,直接在终端敲文件名(带上路径,相对路径或者绝对路径)
./a.out "./ "不是命令,是相对路径的写法,代表当前目录
/mnt/hgfs/code/171/4/a.out 绝对路径
网卡设置
改虚拟机为固定IP:/etc/network/interfaces
网卡重启:/etc/init.d/networking restart
关网卡:ifdown eth0
开网卡:ifup eth0
hello wold
1、头文件的包含方式
#include <stdio.h> | 默认从/usr/include/目录下搜索文件 |
#include "stdio.h" #include "../stdio.h" | 先在当前目录下搜索文件,如果没有,再去/usr/include 下找 |
2、stdio.h
c语言的标准输入输出头文件
3、main
1、有返回值,返回值是int类型,用来表示程序结束状态,如果程序正常结束,返回0,异常结束,返回其他值
2、c语言有且只有一个main函数
3、程序是从main函数开始执行的
4、{} :代码块
5、return : 表面函数结束,下面的部分都不执行
6、printf():stdio.h中定义的一个函数,使用该函数必须包括stdio.h头文件
7、注释:
1、// 单行注释
1、/* */ 多行注释
8、编码规范
1、"{"下面一行内容和"{"要有4个空格的缩进
2、单词之间要有空格
3、不同的逻辑之间要有空行
9、c语言语句是以";"结尾
内存
程序:
1、没有运行的程序 就是一堆代码,存在存储设备中,如:硬盘,U盘
2、运行的程序 程序会被读到内存中执行,内存中存该程序的可执行代码,数据等
存储单位:
1、bit | 位,比特,是一个二进制数字,只能表示0或1,单位是b |
2、Byte | 字节,单位是B 1B=8b ==> 是内存的最小存储单位 |
3、KB | 1KB=1024B = 210 ? |
4、MB | 1MB=1024KB = 220 ? |
5、GB | 1GB=1024MB = 230 ? |
内存最小的存储单位是字节,如何管理?
内存为每个字节分配了一个编号,类似于人多身份证号==>这个编号就是内存的地址
编号?==>是一个数字,是否有范围?
内存为字节分配的编号位数和身份证号一样是固定的
1、 32位系统 | 编号是32位 | 进制二进制 | 0000000……101010(32位) |
2、 64位系统 | 编号是64位 | 进制二进制 | 0000000……101010(64位) |
32位系统 ————>内存编号是4字节编号—————>最大能有多少字节?
范围:0000…0000(32个)————> 1111…1111(32个)
0 ————> 232−1
总共232字节==4G?
数据存储
内存存的是二进制数据,以1个字节为例:
1、无符号数:0000 0000 ————> 1111 1111
0 ————> 255(28−1)
2、有符号数:带正负的数
内存取最高位为符号位
最高位 | 类型 |
0 | 正 |
1 | 负 |
存:
正数在内存中的存的数据本身
负数是要转换成二进制,对其取反,符号位不变,然后+1
比如:
5:实际在内存中的值为:0000 0101
-5:1000 0101(-5)————>1111 1010(取反)————>1111 1011(+1)
所有,-5实际上在内存中的值为:1111 1011
0在内存中为: 0000 0000
-0=-128: 1000 0000
有符号数取值范围:1000 0000~01111111
(−27) -128 ~ 127 (27−1)
有符号数,在一个字节范围内:
127+1 = -128
127 在内存中的存储: 0111 1111
1在内存中的存储: 0000 0001
和 : 1000 0000 ===>-128
1111 1111 代表 -1