c语言学习--基础知识与开发流程(一)

背景知识

计算机语言有机器语言,汇编语言,高级语言三个阶段
机器语言是直接使用二进制数来编写的语言,直接与底层硬件打交道,速度快但是移植性差
汇编语言是用助记符表示二进制代码,方便人们的理解与记忆,
高级语言有更接近自然语言的形式,同时可以移植到不同的平台

高级语言是不能被计算机直接执行的,需要编译或解释为汇编,最后变为机器语言才能被计算机执行

编译型语言:将源代码一次性编译成可被该平台硬件执行的机器码

  • 速度比解释性快,消耗更少的内存
  • 与特定平台相关,编译后的执行程序无法移植到其他平台
  • 有C、C++、Objective-C、Pasca

解释型语言:解释型语言不需要事先编译,其直接将源代码解释成机器码并立即执行

  • 需要一行行解释后运行,效率较慢,比较占用内存
  • 一个代码可在多个平台运行
  • python,java

目前主流的编程语言有:c,c++,java,python,php等等

分享一个有趣的网址编程语言排行榜:https://www.tiobe.com/tiobe-index/

起源

c语言起源

c语言标准

美国国家标准协会(ANSI),给c语言制定了一套标准,被称为ANSI C 或 C89,后来被做了一点小改动,被ISO采用,被称为ISO C 或 C90 ,实际上是差不多的

2000年C99被采纳,增加了一些特性(如下),但是

  • 支持不定长数组
  • 变量声明不必在语句块开头
  • for依据提倡写为for(int i=0;i<10;i++)的形式,即 i 只在内部有效

2011年发布了C11标准,增加了复数的支持等等

需要注意的是,虽然C99,C11已经发布一段时间,但是也不是所有的编译器都实现了新的特性,所以采用新标准编写代码可能会有编译不通过的风险

无特殊要求,尽量还是使用C89的标准


c程序开发

c程序结构

预处理指令
所有以#开头的行代表预处理指令,在编译阶段由预处理器处理
一般都位于程序的前部

代码注释
单行注释以 // 开头,代码块注释以 /* 开头以 */ 结尾
也可以通过预处理条件编译 #if 0 … #endif来实现代码块注释
代码应写好必要的注释,方便他人和自己日后查看,没有注释的代码是丑陋的

函数
函数是一组实现某个特定功能的一段语句
每个c程序都会有一个主函数 main()是程序的入口
在编写代码时,应当将每个基本功能封装成一个个函数

语句和表达式
是c程序的基本单位,每个语句以 ;结尾

在这里插入图片描述

软件开发流程

在这里插入图片描述
在很多人的观念里面,写代码是软件开发的主要工作,其实不是在整个开发过程中,写代码只是一小部分

代码编写和编译运行,一般是由低级程序员负责,内卷严重的也是这一阶段,
而深入理解开发过程的高级程序员一般在概要设计和详细设计部分工作

编译程序

在Windows下编译一个程序,只需要点击编译器的对应按键即可

在Linux使用命令编译程序,如下编译hello.c程序

gcc -o hello hello.c
//gcc -o 生成文件的文件名 程序名

执行程序前需要确定是否有执行权限,可以使用chmod修改权限

sudo chmod 777 hello

执行程序

./hello

生成可执行文件 的过程包括编译链接两个过程
编译器把源代码转化成中间代码
链接器把中间代码和其他代码合并,生成可执行文件

编译器生成的中间文件,只是将源代码“翻译”成了目标文件(机器语言代码),但是还不是完整的程序还缺少启动代码和库函数

启动代码是程序和操作系统之间的接口,不同系统的启动代码不一样


交叉编译

在x86架构Linux下使用gcc编译生成直接在x86架构系统下运行的编译叫本地编译

在x86架构Linux下使用支持ARM的编译器编译生成在ARM架构下运行的编译叫交叉编译

就是在电脑的Linux开发想放去开发板的Linux上运行的话,大概率就需要交叉编译

安装ARM-Linux交叉编译器

sudo apt install -y gcc-arm-linux-gnueabihf

交叉编译

 arm-linux-gnueabihf-gcc -o helloarm hello.c

编译成功后,在本机是无法运行的,需要放到arm架构的Linux系统上运行

使用file命令可查看可执行文件的架构

file helloarm

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GuanFuXinCSDN

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值