Linux终端创建文件指令: https://blog.csdn.net/xtho62/article/details/118194873
vim编辑器基本指令
1.过vim编辑器打开/创建文件:vim 文件名
2.进入文件,默认在正常模式,按 i 进入编辑模式
3.在编辑模式中,按ESC退出编辑模式,返回正常模式
4.正常模式,按**:**进入命令行模式
q+回车 退出
wq+回车 保存并退出
『已解决』Linux vi/vim处于insert模式ESC无法退出且无反应
C语言编译过程:
预处理:去掉注释、加载头文件、替换宏定义、不进行语法检查
cpp -o a.i 001.c(.c文件>.i文件)
gcc -E
编译
gcc -S(.c文件>.i文件>.s文件)
汇编
gcc -c(.c文件>.i文件>.s文件>.o文件)
链接
gcc -o(.c文件>.i文件>.s文件>.o文件>build 可执行文件)
例:gcc -o build 001.c
linux终端执行命令
./build
在当前文件夹下执行build文件
注意:define、include不是关键字(YU)
C语言常见错误
一.预处理错误
1.
#include “name” 当前目录下寻找/自定义文件
#include< name > 在系统环境变量中寻找/不在当前目录中寻找
not find
abc.h: No such file or directory
#include <abc.h> 错 //自定义头文件
#include"abc.h" 对
若.h头文件与c文件不在一个文件夹而是在在当前目录的inc文件夹内:
1.#include <./inc/abc.h>
2.gcc -I./inc -o build 001.c
二.编译错误
语法错误
;{ }
三.链接错误
1.原材料不够
undefined reference to ‘fun’
寻找标签是否实现了,链接时是否一起加入了链接
2.原料多了
multiple definition of ‘fun’
多次实现了标签,只保留一个标签实现。
3.怎么将两个.c文件合一链接
1.gcc -o build fun.c 001.c
or2.gcc -c -o a.o 001.c
gcc -c -o b.o fun.c
gcc -o build a.o b.o
预处理的使用
1.
#include 包含头文件
#define 宏 //(替换不进行语法检查)(宏名一般大写)#define 宏名 宏体 // (注意加括号)eg: #define ABC 5+3printf("the %d\n",ABC*5)#define ABC (5+3)printf("the %d\n",ABC*5)
#define ABC(x) (5+(x)) //宏函数
条件预处理
#ifdef
#else
#endif
eg:
#define ABC 0 //只要定义了ifdef就通过int main()
{
#ifdef ABCfunction();
#endif
}
预定义宏(系统定义宏)
__宏名__
__FUNCTION__ //函数名
__LINE__ //行号
__FILE__ //文件名
printf("the %s,%s,%d",__FILE__,__FUNCTION__,__LINE__)//打印当前行所在文件、函数和行号
宏展开下的#、##
#:字符串化
#include<stdio.h>
#define ABC(x) #x
int main()
{printf(ABC(ab123));return 0;
}
##:连接符号(前缀)
#include<stdio.h>
#define DAY(x) myday##x
int main()
{int myday1=10;int maday2=20;printf("the day is %d ",DAY(1)); //DAY(1)==myday1 return 0;
}
关键字概念
关键字一共32个
关键字是编译器预先定义了一定意义的字符串。
关键字sizeof():编译器给我们查看变量内存空间容量的工具(单位:字节)(不是函数,底层可直接调用
)
#include<stdio.h>
int main()
{int a;printf("the a is %lu\n",sizeof(a));return 0;
}
关键字return :返回值
C语言操作:资源/内存(内存类型资源,eg:lcd、led)
C语言如何描述这些资源的属性呢?资源属性之一资源的大小,并使用关键字(数据类型)定义大小。
数据类型关键字:
char 1字节
int 4字节
long 4字节 OR 8字节
short 2字节
unsigned、signed
float、double
void
注意:关键字代表几字节由编译器决定
char
硬件操作的最小单位 :bit(比特) 1/0
软件操作的最小单位:8bit ==1B(1字节)
网速4M ==4Mbit ==500kB
应用
- 通信中1次8bit char buf[ ] √ int buf[ ] ×
- ASCII码 8位 256个数(0-255)
int
大小由编译器决定,编译器最优的处理大小:系统一个周期所能接受的最大处理单元,int
32bit 4B int
16bit 2B int
unsigned、signed
无符号:数据(一段内存空间)
有符号:数字(加减乘除,移位时符号位不变)
区别内存空间中最高字节 是符号位还是数据位
char a = 0xff (-128)
unsigned char a =0xff (256)
float、double
float 4B
double 8B
浮点数与整数在内存中的表示形式不同
浮点型常量
1.0、1.1 (double)
1.0f (float)
void
占位标准/声明标志
自定义数据类型(还是关键字)
C编译器默认定义的内存分配不符合实际资源的形式
自定义 = 基本元素之和
struct 结构体
union 共用体
enum 枚举
typedef 定义别名
struct
元素之间的和
定义一种内存空间(下面这种写法不占用内存空间,只是定义/声明了数据类型)
eg:
struct myacbd{unsigned int a;unsigned int b;unsigned int c;unsigned int d;
}
struct myabcd mybuf;//占用了内存空间,//将 mybuf定义为myabc这样类型的内存
注意:结构体中数据之间的顺序有意义。
union 共用体
技巧性强
union共用起始地址的一段内存
/*声明一个union,不占用内存空间*/
union myabc{ char a;int b;
}
/*使用一个union,占用内存空间*/
union myabc abc; //将abc定义为myabc这样类型的内存
union与struct的区别
一个struct中不同数据的地址是首位相连的(这一个的首地址与上一个的尾地址相连)
一个union共用起始地址的一段内存(共用体中的前后数据可能会产生干涉)
enum 枚举
可用性低