顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶

在这里插入图片描述

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C++、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。关注公粽号 《机器和智能》 回复关键词 “python项目实战” 即可获取美哆商城视频资源!


博主介绍:
CSDN博客专家,CSDN优质创作者,CSDN实力新星,CSDN内容合伙人;
阿里云社区专家博主;
华为云社区云享专家;
51CTO社区入驻博主,掘金社区入驻博主,支付宝社区入驻博主,博客园博主。


C语言必备知识

    • 1. 什么是编程语言
    • 2. 程序和指令
    • 3. 计算机语言的发展
    • 4. CPU内部结构
    • 5. C语言应用领域
    • 6. 包含头文件
    • 7. main函数
    • 8. 代码块与作用域
    • 9. 代码行与注释
    • 10. main函数参数与返回值
    • 11. system函数
    • 12. C程序的编译过程
    • 13. 开发环境


专栏:《精通C语言》


1. 什么是编程语言

编程语言就是人和计算机交流的语言。

2. 程序和指令

指令是对计算机进行程序控制的最小单位,指令的集合构成指令系统。而程序则是为完成一项特定任务而用某种计算机语言编写的一组指令序列。
在这里插入图片描述

3. 计算机语言的发展

  • 计算机的组成
    在这里插入图片描述

  • 机器语言:在上面的计算机组成中可以看到,中央处理器CPU起着控制整个计算机运作的作用,而CPU都有一个指令系统,这个指令系统就是机器语言,机器语言是直接控制计算机硬件工作的语言,它是由0和1二进制数(由硬件电路决定,电平只有高低两种状态)组成的指令码,而这些指令码一般是由CPU厂商从生产CPU时就规定好的,不同型号的计算机其机器语言是互不相通的。

  • 汇编语言:机器语言是由计算机识别的0、1序列,应为计算机的硬件电路只有高电平和低电平两种状态。而对于人类来说,这些0、1序列显然是不可读的(没有人会喜欢看一堆0、1数字吧)。这时候就出现了汇编语言,汇编语言通过标识符来代替0、1序列,对人类来说是可读且易于理解的。但是,计算机只认识二进制的0和1,通过汇编语言是无法直接操作计算机硬件的。那么,如何把人类可读的汇编语言转换成计算机可读的二进制0、1序列呢?这就有了编译器,编译器是一段用来做翻译工作的程序,它既可以识别汇编语言又可以识别二进制机器语言,并且知道二者之间的对应关系。这样,通过编译器就可以把人类认识的汇编语言转换成计算机认识的机器语言了。

  • 高级语言:高级语言是更加通用和便捷的编程语言,通过高级语言,人们更加关注解决问题的逻辑和更高效的求解方式。高级语言有面向过程的C语言、面向对象的C++、Java、Python等。同样,高级语言也需要编译器来翻译为机器语言。实际上,编程语言没有高低之分,面向对象也并不一定就比面向过程高级,C语言一样可以实现面向对象编程,Linus这种顶级大佬不就是使用C语言写出了大名鼎鼎的Linux操作系统吗,而C++、Java、Python等面向对象语言的底层也都是由C语言实现的。

4. CPU内部结构

  • CPU的位数
    CPU内部最基本的存储单元是寄存器,CPU通过总线(地址、控制、数据)来和外部设备交互,总线的宽度是8位,同时CPU的寄存器也是8位,那么这个CPU就叫8位CPU。如果总线是32位,寄存器也是32位,那么这个CPU就是32位CPU。有一种CPU内部的寄存器是32位的,但总线是16位,这种叫做准32位CPU。所有的64位CPU兼容32位的指令,所以在64位的CPU上是可以识别32位的指令。在64位的CPU构架上运行了64位的软件操作系统,那么这个系统是64位,在64位的CPU构架上,运行了32位的软件操作系统,那么这个系统就是32位的,64位的软件不能运行在32位的CPU之上。
  • 寄存器、缓存、内存
    CPU工作时,先预先把要用的数据从硬盘读到内存,然后再把即将要用的数据读到寄存器。也就是说CPU和寄存器进行交互,寄存器和内存进行交互( CPU<—>寄存器<—>内存)。我们知道,操作寄存器的速度远远大于操作内存的速度,缓存是为了缓冲二者之间的速度差,如果总是操作内存中的同一址地的数据,每次都去内存取值,会严重影响速度,于是就在寄存器与内存之间设置一个缓存,从缓存提取数据的速度远高于内存(CPU<—>寄存器<—>缓存 <—> 内存)。

5. C语言应用领域

网站后台、服务器、编写其他语言、操作系统、驱动、嵌入式/物联网、数据库、编译器等等。

6. 包含头文件

头文件的作用

  • 通过头文件提供的接口调用库功能。对于源代码的提供者不能或不愿将源代码公布给用户的情况,用户需要通过头文件或动/静态链接库来调用功能。通过头文件提供的接口可以实现在隐藏底层实现逻辑的前提下向用户提供功能,而用户则在不关心接口实现逻辑的前提下可以调用库功能,根据头文件接口从库中寻找代码的任务由编译器完成。
  • 头文件增强了编译器的类型检查。在使用接口时需要按照头文件中声明的接口形式进行传参并接收返回值,如果调用实现和声明形式不一致会引起编译器报错。

引入头文件的两种方式

  • #include <>:将指定文件引入到当前文件,搜索策略为,直接在编译器指定的路径处开始搜索,如果找不到被引入文件,则程序报错。因此系统提供的头文件推荐使用这种方式引入。如果是集成开发环境,比如VS,这个默认路径一般在VS安装目录下的一个名为 include 的路径下。在Linux中,一般默认路径是 /usr/include 或 /usr/lib 下的目录。
  • #include “”:将指定文件引入到当前文件,搜索策略为,首先在运行程序所在的目录处进行搜索,搜索失败后再到编译器指定的路径处搜索,如果仍然搜索失败,则直接报错。因此,用户自定义头文件必须用这种方式引入,系统提供的头文件也可以使用这种方式,但是会增加没必要的搜索,所以不推荐。
     头文件中一般要加#ifndef/#define/#endif来防止重复包含
    在这里插入图片描述

7. main函数

一个完整的C语言程序,有且只能有一个main()函数(又称主函数)和若干个其他功能函数结合而成,main()函数是必须要有的,而其它功能函数则根据实际需要选择性添加。main函数是C语言程序的入口,程序是从main函数开始执行。

8. 代码块与作用域

{ }内部是一个代码块,也就是一个作用域,代码块执行完毕,作用域内的栈内存被自动释放。在编程时{ }中的每一半括号都应占据单独一行,并上下对齐,这不是C强制要求,而是一种编程规范。

9. 代码行与注释

  • 可执行语句必须由分号;结尾
  • 可执行语句必须在代码块{}内部(函数体内、作用域内)
  • #开头表示预编译指令,不需要分号;结尾
  • C语言只能以/**/注释,尽量不要以//注释
  • C++中使用//进行行注释,使用/**/进行代码块注释

10. main函数参数与返回值

return语句表示函数执行完毕,一般写main函数的时候,都应该定义为int类型返回值,即int main(int argc, char* argv[])。
实际上main函数也是有参数和返回值的,只不过我们在平时的学习中可能很少用到,main的返回值是int类型的,main函数的参数在Linux下编程用的还是比较多的。我们在运行一个可执行文件的时候可以在命令行传入参数给argv[],也就是说argv[]是用来存放我们在命令行传入的参数的,而参数argc用于统计参数的个数。不管我们传不传参数, argv[0]默认就是程序运行的路径名。也就是说argc最小为1(命令行不传参),argv[0]是程序运行路径。
在这里插入图片描述

11. system函数

  • 包含头文件:
    #include <stdlib.h>
  • 函数原型:
    int system(const char *command);
  • 函数功能:
    system() executes a command specified in command by calling /bin/sh -c command, and returns after the command has been completed. During execution of the command, SIGCHLD will be blocked, and SIGINT and SIGQUIT will be ignored. 该函数主要功能是在一个已经运行的程序中执行另一个程序。
  • 函数返回值:
    The value returned is -1 on error (e.g. fork(2) failed), and the return status of the command otherwise.
  • 函数的使用:
    在这里插入图片描述

在使用VS写程序的时候,如果你运行程序的时候,打印窗口一闪而逝,我们可以在main()函数的return语句前加一个system(“pause”); 来表示暂停。

12. C程序的编译过程

C代码编译成可执行程序经过4步:
1)预处理:宏定义展开、头文件展开、条件编译等,同时将代码中的注释删除,这里并不会检查语法。
2)编译:检查语法,将预处理后文件编译生成汇编文件。
3)汇编:将汇编文件生成目标文件(二进制文件)。
4)链接:C语言写的程序是需要依赖各种库的,所以编译之后还需要把库链接到最终的可执行程序中去。
在这里插入图片描述

GCC编译流程

选项含义
-E只进行预处理
-S(大写)只进行预处理和编译
-c(小写)只进行预处理、编译和汇编
-o file指定生成的输出文件名为 file

1) 预处理
在这里插入图片描述

如果不加重定向的话,默认会把预处理后的信息输出到标准输出,所以如果想要保留预处理后的程序,需要重定向到一个文件。可以看到预处理后的.i文件非常大,远远大于源文件,这是因为预处理进行了一系列的代码展开。
2) 编译
生成汇编代码
在这里插入图片描述

3) 汇编
在这里插入图片描述

4) 链接
生成可执行文件
在这里插入图片描述

在这里插入图片描述

13. 开发环境

本系列文章使用的开发环境及工具主要有:

  • Linux:VMware虚拟机、CentOS 6操作系统

  • Windows:Visual Studio 2019

  • 远程终端:SecureCRT

  • 远程编辑:UE编辑器

编写C语言程序,可以使用Linux下的vim编辑器,在Windows系统可以直接使用IDE集成开发环境编写,也可以使用各种编辑器编写,比如notepad++、UE编辑器等等。编写好的C程序必须经过编译器编译为二进制可执行代码才能运行,在Linux操作系统中可以直接通过gcc命令或者编写makefile脚本编译程序,在Windows操作系统可以使用IDE(集成了代码编辑器、编译器、调试器和图形用户界面工具)的编译功能直接编译。
注意:

  • Linux编译后的可执行程序只能在Linux运行,Windows编译后的程序只能在Windows下运行。
  • 64位的Linux编译后的程序只能在64位Linux下运行,32位Linux编译后的程序只能在32位的Linux运行。
  • 64位的Windows编译后的程序只能在64位Windows下运行,32位Windows编译后的程序可以在64位的Windows运行。

附:VS快捷键

VS快捷键含义
Ctrl + k,Ctrl + f自动格式化代码
Ctrl + k,Ctrl + c注释代码
Ctrl + k,Ctrl + u取消注释代码
F9设置断点
F5调试运行
Ctrl + F5不调试运行
Ctrl + Shift + b编译,不运行
F10next调试
F11step调试

在这里插入图片描述
在这里插入图片描述


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

挖K脚本检测指南

免责声明:本文仅做分享... 目录 挖K样本-Win&Linux-危害&定性 Linux-Web 安全漏洞导致挖K事件 Windows-系统口令爆破导致挖K事件 --怎么被挖K了??? 已经取得了权限. 挖K样本-Win&Linux-危害&定性 危害&#xff1a;CPU 拉满&#xff0c;网络阻塞&…

在Linux下使用Docker部署chirpstack

目录 一、前言 二、chirpstack 1、chirpstack是什么 2、chirpstack组件 3、为什么选择Docker部署 三、Linux下部署过程 四、web界面部署过程 一、前言 本篇文章我是在Linux下使用 Docker 进行部署chirpstack&#xff0c;chirpstack采用的是v4 版本&#xff0c;v4 版本 与…

Logstash常用的filter四大插件

以博客<ELK日志分析系统概述及部署>中实验结果为依据 补充&#xff1a;如何用正则表达式匹配一个ipv4地址 &#xff08;[0-9] | [1-9][0-9] | 1[0-9][0-9] | 2[04][0-9] | 25[0-5]&#xff09;\.&#xff08;[0-9] | [1-9][0-9] | 1[0-9][0-9] | 2[04][0-9] | 25[0-5]&a…

基于Java的数码论坛系统设计与实现

你好&#xff0c;我是计算机领域的研究者。如果你对数码论坛系统开发感兴趣或有相关需求&#xff0c;欢迎联系我。 开发语言&#xff1a; Java 数据库&#xff1a; MySQL 技术&#xff1a; Java技术、MySQL数据库、B/S架构、SpringBoot框架 工具&#xff1a; Eclipse、MySQ…

css 文件重复类样式删除

上传文件 进行无关 className 删除 <div style"display: flex;"><input type"file" change"handleFileUpload" /><el-button click"removeStyles" :disabled"!fileContent">Remove Styles and Download&…

antd a-select下拉框样式修改 vue3 亲测有效

记录一下遇到的问题 1.遇到问题&#xff1a; 使用到Vue3 Ant Design of Vue 3.2.20&#xff0c;但因为项目需求样式&#xff0c;各种查找资料都未能解决; 2.解决问题&#xff1a; ①我们审查元素可以看到&#xff0c;下拉框是在body中的; ①在a-select 元素上添加dropdownCla…

运行时异常与一般异常的异同

运行时异常与一般异常的异同 1、运行时异常&#xff08;Runtime Exception&#xff09;1.1 特点 2、 一般异常&#xff08;Checked Exception&#xff09;2.1 特点 3、异同点总结3.1 相同点3.2 不同点 4、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷…

图形学各种二维基础变换,原来线性代数还能这么用,太牛了

缩放变换 均匀缩放 若想将一个图形缩小0.5倍 若x乘上缩放值s等于x撇&#xff0c;y同理&#xff0c;则 x ′ s x y ′ s y \begin{aligned} & x^{\prime}s x \\ & y^{\prime}s y \end{aligned} ​x′sxy′sy​&#xff0c;这样就表示了x缩小了s倍&#xff0c;y也是…

UML中用例之间的可视化表示

用例除了与参与者有关联关系外&#xff0c;用例之间也存在着一定的关系&#xff0c;如泛化关系、包含关系、扩展关系等。 4.2.1 包含关系 包含关系指的是两个用例之间的关系&#xff0c;其中一个用例&#xff08;称为基本用例&#xff0c;Base Use Case&#xff09;的行为包…

温度传感器的常见故障及处理方法

温度传感器作为现代工业、科研及日常生活中不可或缺的重要元件&#xff0c;其稳定性和准确性直接影响到设备的运行效率和安全。然而&#xff0c;由于各种因素的影响&#xff0c;温度传感器在使用过程中常会遇到一些故障。本文将针对这些常见故障进行分析&#xff0c;并提出相应…

如果你想手写Linux系统

哈喽&#xff0c;我是子牙老师。今天咱们聊聊这个话题吧&#xff0c;Linux作为当今科技世界的地基&#xff0c;我们越来越接近真理了&#xff0c;有木有&#xff1f; 这个文章的角度&#xff0c;你可能全网都很难找到第二篇如此系统讲透这个问题的文章 你可能想问&#xff1a…

LabVIEW电滞回线测试系统

铁电材料的性能评估依赖于电滞回线的测量&#xff0c;这直接关系到材料的应用效果和寿命。传统的电滞回线测量方法操作复杂且设备成本高。开发了一种基于LabVIEW的电滞回线测试系统&#xff0c;解决传统方法的不足&#xff0c;降低成本&#xff0c;提高操作便捷性和数据分析的自…

spring boot 3.x版本中集成spring security 6.x版本进行实现动态权限控制解决方案

一、背景 最近在进行项目从jdk8和spring boot 2.7.x版本技术架构向jdk17和spring boot 3.3.x版本的代码迁移&#xff0c;在迁移过程中&#xff0c;发现spring boot 3.3.x版本依赖的spring security版本已经升级6.x版本了&#xff0c;语法上和spring security 5.x版本有很多地方…

Mysql中存储引擎简介、修改、查询、选择

场景 数据库存储引擎 数据库存储引擎是数据库底层软件组件&#xff0c;数据库管理系统&#xff08;DBMS &#xff09;使用数据引擎进行创建、查询、更新和删除数据的操作。 不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能&#xff0c;使用不同的存储引擎还可以…

【C++报错已解决】Invalid Use of ‘this’ Pointer

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 引言 一、问题描述1.1 报错示例1.2 报错分析1.3 解决思路 二、解决方法2.1 方法一&#xff1a;修正‘this’指针使用2…

React+TS前台项目实战(二十六)-- 高性能可配置Echarts图表组件封装

文章目录 前言CommonChart组件1. 功能分析2. 代码详细注释3. 使用到的全局hook代码4. 使用方式5. 效果展示 总结 前言 Echarts图表在项目中经常用到&#xff0c;然而&#xff0c;重复编写初始化&#xff0c;更新&#xff0c;以及清除实例等动作对于开发人员来说是一种浪费时间…

LVS-DR负载均衡

LVS-DR负载均衡 LVS—DR工作模式 原理 客户端访问调度器的VIP地址&#xff0c;在路由器上应该设置VIP跟调度器的一对一的映射关系&#xff0c;调度器根据调度算法将该请求“调度“到后端真实服务器&#xff0c;真实服务器处理完毕后直接将处理后的应答报文发送给路由器&#xf…

EDI安全:如何在2024年保护您的数据免受安全和隐私威胁

电子数据交换&#xff08;EDI&#xff09;支持使用标准化格式在组织之间自动交换业务文档。这种数字化转型彻底改变了业务通信&#xff0c;消除了对纸质交易的需求并加速了交易。然而&#xff0c;随着越来越依赖 EDI 来传输发票、采购订单和发货通知等敏感数据&#xff0c;EDI …

【跨境分享】中国商家如何卷到国外?电商独立站和电商平台的优势对比

为什么要选择独立站而不是电商平台 对于跨境电商经营者而言&#xff0c;采取多平台、多站点的运营策略是至关重要的战略布局。这一做法不仅有助于分散风险&#xff0c;避免将所有投资集中于单一市场&#xff0c;从而降低“所有鸡蛋置于同一篮子”的隐患&#xff0c;而且有利于拓…

【友邦保险-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…