嵌入式全栈开发学习笔记---C语言知识复习大全1

目录

Linux开发者的基本素养-文件分类

补充命令1-pwd

补充命令2-clear

在Linux上编写C程序

在Linux上编译程序

思考:C语言中一定要main函数吗


我们为什么要学习C语言?学习C语言有助于理解计算机底层工作原理!

后面我们的很多项目也都是用C语言操作的。

说明:我们学过单片机的一般都是有C语言基础的了,网上关于C语言的资料有很多,大家如果对C语言不熟悉的话可以先去详细学一下,再以这篇博文作为复习资料学习。

这篇博文的目的是复习C语言,以30多个编程题作为复习要点,这30多个编程题基本涵盖了C语言所有的内容了,只要你掌握了这30多个编程题,那么你的C语言基本就没什么问题了。

注意:由于本专栏是嵌入式全栈开发专栏,为了我们能熟悉以后实际工作中的开发环境,我们写C语言全部在Linux中的vim编辑器中写,这么做事为了我们能够熟练掌握Linux系统的常用命令以及Linux上的vim编辑器的常用工作命令,以达到对口训练的目的!

vim编辑器的一些工作命令在上一篇博文中已经详细介绍过了,如果不了解可以先去看看。

我们正式开始:

首先我们现在Linux终端创建一个文件夹,不知道怎么创建的,可以去翻看本栏目中的Linux基础命令介绍博文。

Linux开发者的基本素养-文件分类

今后我们要在Linux终端进行很多学习,在学习过程中会有很多文件要创建,所以最好是一开始就分类好:

补充命令1-pwd

pwd 即 Print Working Directory 打印工作目录,其主要功能是显示目前所在目录,即显示出当前目录所在的路径。

补充命令2-clear

如果你的Linux终端敲的这些命令行太多了,可以用clear把它清除掉。

回车就清除了,但是我们只是清除那些命令,我们还是处于清除前所在的目录下

输入vim 1-helloworld.c回车后我们就用vim编辑器打开了1-helloworld.c文件。

现在可以编写C语言代码了。

在Linux上编写C程序

先介绍一下程序编写时会涉及到的一些基础操作:

我们先上C语言的基本框架

如果想要加上注释的话,要在插入模式下进行

如果要在Linux的vim编辑器中输入中文,可以在右上角的这里设置

我们先简单写出打印一个helloworld的程序

在Linux上编译程序

那在vim上写的代码如何编译呢?

我们先保存并退出1-helloworld.c文件 (保存并退出的命令在前面几篇博文中都介绍过了,在这里不再赘述,不懂的可以去翻看一下)

我们用gcc这个工具来编译我们的程序,它是Linux中的一个编译器

注意:敲这段命令的时候千万不要贪图省事用tab键自动补全-o后面的”1-helloworld”,因为这样敲的话它会重新生成一个二进制文件“1-helloworld.c”,这个二进制文件会覆盖掉原来的即-o前面的1-helloworld.c,那我们刚刚写的代码就白写了。

-o就是output输出的意思,那这段命令的意思就是用gcc编译1-helloworld.c文件,输出1-helloworld文件

回车

如果我们的程序没有错误的话,就可以很顺利地编译出来,就会是像上图一样的回车后的结果。

如果程序有bug的话,回车后它就会给出有bug提示

我们可以根据它的提示进行修改程序,再次编译,就好了

编译完成了,就会输出一个1-helloworld二进制文件,我们访问这个文件就能看到程序运行的结果

它的确成功运行并打印出来了一个”helloworld”

思考:C语言中一定要main函数吗

我们来思考一个问题:

main作为程序的入口,C语言中一定要main函数吗?不一定。

我们来验证一下:

我们用vim写打开一个2-nomain.c文件

写一个没有main函数的程序

编译一下看看会不会报错

如果我们按照有main函数的程序的编译命令来写的话就会报错,但是我们如果在命令后面加上“-nostartfiles”即没有开始文件的话,即就不会报错了

虽然这么写它也会报一个警告,但也只是警告warning,不错报错error,我们也看到它已经编译出了一个2-nomain文件了,说明没有main函数它也可以运行。

我访问一下这个2-nomain文件看看能不能成功打印出“helloworld”

的确成功打印出来了。

但是我们还看到它报出“段错误”

这是因为没有main函数,程序运行结束后,不知道退回到哪里去,

一般像这种没有main函数的程序我们要指定它退出的方式。

exit就是退出的意思

我们再次编译一次看看

这样它就没有“段错误”警告了。

没有main函数它也正常输出了,但是这样的代码没有意义,上面只是为了验证一下。

以上验证的结果就是没有main函数的程序在Linux上也是能够运行的。

以上就是这篇内容,如想了解更多,欢迎订阅本专栏!

如有问题可评论区或者私信留言,如果想要进交流群请私信!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/587274.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ML.NET机器学

一、新建项目MLL 二、选择方案 我们这里选择的是计算机视觉-->图像分类 三、选择环境 本地(CPU) 四、选择数据 我自己造了2个验证码的目录 五、训练 六、评估 7、代码中使用 运行效果:

MySQL中索引的数据结构

2.3.1. 索引数据结构 索引就是能够提高查询速度的一种数据结构,在数据插入时就进行了排序(会影响插入和更新的性能),索引广泛使用的是B树索引。 B树索引结构: 目前是基于磁盘排序效率最高的数据结构,树非…

Linux:浏览器访问网站的基本流程(优先级从先到后)

浏览器访问网站的基本流程(优先级从先到后) 首先查找浏览器是否存在该网站的访问缓存 其次查找本机的域名解析服务器 windows:C:\Windows\System32\drivers\etc\hostsLinux:/etc/hosts 使用外部的域名解析服务器解析&#xff…

如何安装cuda版本的torch-sparse和torch-scatter

安装对应cuda版本的torch,确保cuda可用 使用nvidia-smi查看cuda版本,我的是11.4,然后就找到pytorch历史版本,页面搜索cuda 11.4,没搜到,继续往小版本搜,搜到cuda 11.3,果断安装&…

【深度学习实战(29)】后处理之NMS(非极大值抑制)

一、NMS工作原理 NMS 的工作原理: 置信度排序:对于每个类别,NMS 首先根据每个边界框的置信度(即预测框中含有目标的概率)进行排序。选择最高置信度框:从置信度最高的边界框开始,将其作为当前考…

# 从浅入深 学习 SpringCloud 微服务架构(七)Hystrix(2)

从浅入深 学习 SpringCloud 微服务架构(七)Hystrix(2) 一、Hystrix:基于 RestTemplate 的统一降级配置 1、Hystrix:基于 RestTemplate 的统一降级配置 步骤: 1)在项目的 pom.xml …

前端 CSS

目录 选择器 复合选择器 伪类-超链接 结构伪装选择器 伪元素选择器 画盒子 字体属性 CSS三大属性 Emmet写法 背景属性 显示模式 盒子模型 盒子模型-组成 盒子模型-向外溢出 盒子模型-圆角 盒子模型-阴影 flex position定位 CSS小精灵 字体图标 垂直对齐方式…

《R语言与农业数据统计分析及建模》学习——logistic回归和poisson回归

普通线性回归通常用来描述变量y与x之间的线性关系: 普通线性模型的假设是:响应变量y是连续型变量而且,服从正态分布分布。但在很多现实情况y并不是正态分布,如:二值问题/多分类问题,计次问题等,…

防火墙远程桌面端口号修改,如何用防火箱修改远程桌面的端口号

在网络安全日益重要的今天,修改远程桌面服务的默认端口号已成为提高系统安全性的重要手段。通过修改端口号,可以有效防止潜在的恶意攻击者通过扫描常见端口来发现并利用系统的漏洞。本文将详细介绍如何在Windows系统中修改远程桌面服务的端口号&#xff…

2024 五一杯高校数学建模邀请赛(C题)| 煤矿深部开采冲击地压危险预测 |建模秘籍文章代码思路大全

铛铛!小秘籍来咯! 小秘籍团队独辟蹊径,构建了这一题的详细解答哦! 为大家量身打造创新解决方案。小秘籍团队,始终引领着建模问题求解的风潮。 抓紧小秘籍,我们出发吧~ 让我们看看五一杯的C题! 完…

动静态库(完结版)

文章目录 接上篇完成blog第三方库安装演示动态库加载原理一二三四 接上篇完成blog 上篇链接 第三方库安装演示 sudo yum install -y ncurses-devel下载完成之后 在系统目录下面一定能找到对应的头文件和库文件 此时使用第三方库: 编译之后按错误提示是对应的函数找不到,所以链…

C语言 | Leetcode C语言题解之第60题排列序列

题目&#xff1a; 题解&#xff1a; char* getPermutation(int n, int k) {int factorial[n];factorial[0] 1;for (int i 1; i < n; i) {factorial[i] factorial[i - 1] * i;}--k;char* ans malloc(n 1);ans[n] \0;int valid[n 1];for (int i 0; i < n; i) {val…

“云卷数潮”云原生数据库分论坛亮点回顾!

4月29日&#xff0c;2024中国移动算力网络大会“云卷数潮”云原生数据库分论坛在江苏苏州举行。本次论坛不仅是技术交流的盛宴&#xff0c;更是行业发展趋势的风向标。论坛汇聚了众多企业领袖、专家学者及行业精英&#xff0c;共话云原生数据库技术发展&#xff0c;探讨行业最新…

git 配置相关

问题一&#xff1a;ssh-keygen -t ed25519 -C "Gitee SSH Key" 这个命令中的 ed25519 字符是什么意思&#xff1f; ssh-keygen 是一个用于生成SSH密钥的工具&#xff0c;SSH&#xff08;Secure Shell&#xff09;是一种网络协议&#xff0c;用于加密方式远程登录和其…

数据库(MySQL)—— DML语句

数据库&#xff08;MySQL&#xff09;—— DML语句 什么是DML语句添加数据给全部字段添加数据批量添加数据 修改数据删除数据 什么是DML语句 在MySQL中&#xff0c;DML&#xff08;Data Manipulation Language&#xff0c;数据操纵语言&#xff09;语句主要用于对数据库中的数…

http的basic 认证方式

写在前面 本文看下http的basic auth认证方式。 1&#xff1a;什么是basic auth认证 basic auth是一种http协议规范中的一种认证方式&#xff0c;即一种证明你就是你的方式。更进一步的它是一种规范&#xff0c;这种规范是这样子&#xff0c;如果是服务端使用了basic auth认证…

java:EasyExcel使用(一)读excel

java&#xff1a;EasyExcel使用&#xff08;一&#xff09;读excel 1 前言 EasyExcel相比于传统使用poi进行excel文件读写&#xff0c;编程使用操作上更加方便快捷&#xff0c;且对于内存溢出进行了优化处理。本文是EasyExcel读excel操作。 Java解析、生成Excel比较有名的框…

24.什么是跨域?解决方案有哪些?

为什么会出现跨域问题 存在浏览器同源策略&#xff0c;所以才会有跨域问题。那么浏览器是出于何种原因会有跨域的限制呢。其实不难想到&#xff0c;跨域限制主要的目的就是为了用户的上网安全。 同源策略导致的跨域是浏览器单方面拒绝响应数据&#xff0c;服务器端是处理完毕…

【C++】学习笔记——string_3

文章目录 六、string类5. string类的操作6. string类的转换7. string类的模拟实现 未完待续 搭配文档食用 六、string类 5. string类的操作 上面的函数中&#xff0c;有些是不常用的&#xff0c;咱们只挑几个重要的进行讲解。 c_str 就是将字符串转换成 C语言 字符串的格式。…

(附源码)超级简单的SSM图书交易系统,包含技术栈、架构图、设计图、教程

先看首页效果&#xff0c;包含买家、卖家、管理员三个端口。启动有问题可以联系我解决&#xff0c;微信&#xff1a;keepgoing4u 架构图&#xff1a; 用到软件 Jdk1.8 Mysql IntelliJ IDEA Maven 项目技术&#xff1a; Spring Boot SSM JSP mybatis Maven B/S模式 配置…