嵌入式之linux下的c语言编写运行

2019-07-12 14:21发布

1;先解决一个小问题
当我们直接使用vi 打开文件 进行命令模式和输入模式转化时并没有什么显示来表示我们当前所在的模式 ,而我们看朱有鹏老师的视频时在命令模式下左下方应该显示文件类型 而输入模式应该显示–insert–如图
这里写图片描述
百度了很久,
其原因是 我们之前安装linux的ubantu系统的时候并没有将vim安装完全有些东西并没有安装进去 所以才会出现之前那个没有区分命令模式和输入模式 的区别
在终端输入 apt-get install vim进行安装即可 注意安装需要在root权限下 并且虚拟机需要连接上网络。
安装完毕后再打开vi,就会显示两个命令的区别了。 2;在linux中编辑执行c语言程序
这里写图片描述 3;VMware的共享文件
3.1共享文件的相关设置
这里写图片描述
3.2;共享文件的文件操作
这里写图片描述
3.3;共享文件的复制文件夹操作
这里写图片描述
3.4总结
我们linux在/mnt/hgfs/winshare目录和Windows的winshare操作的是同一个内存区域
两个可以都进行访问和修改。
例如Windows在winshare目录下创建一个a.c文件 我们可以在linux中的/mnt/hgfs/winshare目录找到这个a.c文件并且可以进行编译gcc a.c生成的可执行文件a.out也会出现在这块内存区中 。
最后的学习都是在Windows下编写代码 在linux下执行则这个就需要共享文件的作用了。 4;多文件c语言项目
4.1:为什么需要多文件项目?为什么不在一个.c文件中写完所有的功能?
因为一个真正的C语言项目是很复杂的,包含很多个函数,
写在一个文件中不利于查找、组织、识别,所以人为的将复杂项目中的很多函数,
分成了一个一个的功能模块,然后分开放在不同的.c文件中,于是乎有了多文件项目。
4.2;怎么执行多文件的c项目
1、简单的C语言程序(项目)只有一个C文件(a.c),编译的时候gcc a.c -o a,执行的时候./a
gcc a.c 编译产生a.out文件 ./a.out即可执行
两种方式;
这里写图片描述
2,复杂的C语言程序(项目)是由多个C文件构成的。譬如一个项目中包含2个c文件(a.c, b.c),编译的时候 gcc a.c b.c -o ab,执行的时候 ./ab 3;跨文件使用
3.1——在a.c和b.c中分别定义main函数,各自单独编译时没问题;但是两个文件作为一个项目来编译gcc a.c b.c -o ab的时候,就会报错。multiple definition of `main’
为什么报错?因为a.c和b.c这时候组成了一个程序,而一个程序必须有且只能有一个main函数。
这里写图片描述
3.2——跨文件使用函数
注意函数要记得定义声明调用三步,无论文件内还是外
这里写图片描述
3.3——跨文件的变量引用
讨论跨文件使用问题,只用讨论全局变量和函数就可以了。
这里写图片描述 3.4——总结
讨论跨文件使用问题,只用讨论全局变量和函数就可以了。 4头文件
4.1——为什么需要头文件?
从之前可以看到,函数的声明是很重要的。
当我们在一个庞大的项目中,有很多个源文件,每一个源文件中都有很多个函数,并且需要在各个文件中相互穿插引用函数。
怎么解决函数的声明问题?靠头文件。整体上的整体把要用的函数声明 extern可加可不加….
4.2#include包含头文件时,用<>和”“的区别
<>用来包含系统自带的头文件,系统自带指的是不是你写的,是编译器或者库函数或者操作系统提供的头文件。
“”用来包含项目目录中的头文件,这些一般是我们自己写的。
这里写图片描述
linux系统头文件的源码
一般都在/usr/include/目录下
这里写图片描述
4.4、防止重复包含头文件 #ifndef __A_H__ #define __A_H__ // C语言头文件中的声明 #endif 4.5写程序时,最好不要在头文件中定义变量。//容易错 未赋初值时是没错的,赋值就报错
因为这时该头文件被多个源文件包含时,就会出现重复定义问题。
全局变量的定义就应该放在某个源文件中,
然后在别的源文件中使用前是extern声明。