Linux——Ubuntu环境C编程

配置vim编辑器

设置一个tab键为4个空格

打开/etc/vim/vimrc文件,此文件为只读,所以要用sudo访问boot权限:

set ts=4(设置一个tab键为4空格)

set nu(vim编辑器下显示行号) 

 gcc编译器

gcc命令

gcc -c main.c(只编译不链接为可执行文件,将main.c文件编译为.o的目标文件)

gcc main.c -o main(-o表示将main.c编译为可执行文件main,如果不加-o,默认编译为a.out的可执行文件)

 

gcc的编译流程:预处理、编译、汇编和链接。预处理就是对程序中的宏定义等相关的内容先进行前期的处理。编译是将经过预编译处理的代码编译成汇编代码,也就是我们常说的程序编译。汇编就是将汇编语言文件编译成二进制目标文件。链接就是将汇编出来的多个二进制目标文件链接在一起,形成最终的可执行文件。

make工具和Makefile文件

当源码文件比较多的时候就不适合通过直接输入gcc命令来编译,这时候就需要一个自动化的编译工具。

make:一般说GNU Make,是一个软件,用于将源代码文件编译为可执行的二进制文件,make工具主要用于完成自动化编译,make工具编译的时候需要makefile文件提供编译文件。

Makefile:make工具所使用的文件,Makefile指明了编译规则。

Makefile规则格式

Makefile里面是由一系列的规则组成,这些规则格式如下:

下面的规则的目标是main,main.o、input.o和calcu.o是生成main的依赖文件,如果要更新目标main,就必须要先更新它的所有依赖文件,如果依赖文件中的如何一个有更新,那么目标文件也必须更新,“更新”就是执行一遍格则中的命令列表。

命令列表中的每条命令必须以TAB键开始,不能使用空格!!!

make只编译修改过的文件,当我们修改了input.c时再次使用make进行编译时,如下:

删除编译后产生的.o文件和可执行文件main,使用命令make clean:

 

 make的执行过程:

1、make命令会在当前目录下查找以Makefile(makefile也可以)命名的文件。

2、当找到Makefile文件以后就会按照Makefile中定义的规则去编译生成最终的目标文件。

3、当发现目标文件不存在,或者目标文件所依赖的文件比目标文件新(也就是最后修改时间比目标文件晚)的话就会执行后面的命令来更新目标。

        这就是make的执行过程,make工具就是在makefile中一层一层的查找依赖关系,一旦写好了Makefile文件,以后只需要一个make命令即可完成整个工程的编译,极大地提高了开发效率。

#Makefile变量的使用

objects = main.o input.o calcu.o

main: $(objects)

        gcc -o main $(objects)

注意:Makefile的注释符号为#,不能用C语言中的“//”或者“/**/”

在上面的示例中我们使用了“=”对变量进行赋值,Makefile变量的赋值符还有其它两个“:=”和“?=”

1、赋值符“=”

使用“=”在给变量赋值的时候,不一定要用已经定义好的值,也可以使用后面定义的值,比如如下代码:

最终输出:

 “=”赋值符就是变量的真实值取决于它所引用的变量的最后一次有效值。

2、赋值符“:=”

输出:

 

赋值符“:=”不会使用后面定义的变量,只能使用前面已经定义好的,这就是“=”和“:=”的区别。

3、赋值符“?=”

 上述代码的意思就是,如果变量curname前面没有被赋值,那么此变量就是“zhangzhongsheng”,如果前面已经赋值过,那么就使用前面赋的值。

输出:

因为curname前面没有被赋值过,所以赋值为zhangzhongsheng

4、追加赋值“+=”

将+=后面的内容追加到变量后面去 

 

Makefile模式规则

        模式规则中,至少在规则的目标定定义中要包涵“%”,否则就是一般规则,目标中的“%” 表示对文件名的匹配,“%”表示长度任意的非空字符串,比如“%.c”就是所有的以.c 结尾的 文件,类似与通配符,a.%.c 就表示以 a.开头,以.c 结束的所有文件。 当“%”出现在目标中的时候,目标中“%”所代表的值决定了依赖中的“%”值,使用方 法如下:

自动化变量

所谓自动化变量就是这种变量会把模式中所 定义的一系列的文件自动的挨个取出,直至所有的符合模式的文件都取完,自动化变量只应该 出现在规则的命令中,常用的自动化变量如下:

模式规则和自动化变量使用如下:

 Makefile伪目标

 使用伪目标主要是为了避免 Makefile 中定义的执行命令的目标和工作目录下的实际文件出 现名字冲突,有时候我们需要编写一个规则用来执行一些命令,但是这个规则不是用来创建文 件的,比如在前面的Makefile文件中有如下代码用来完成清理工程的功能:

当我们的目录下存在clean文件,我们可以使用伪目标来进行区分:

 Shell脚本

shell仅支持整形,数值计算使用$((表达式))

read表示读入数据,-p后跟提示信息,在输入前进行信息提示。

 test命令

test命令用来查看文件是否存在、权限等信息,可以进行数值、字符、文件三方面的测试。

&&命令和||命令

cmd1&&cmd2 当cmd1执行完毕并正确,那么cmd2开始执行,如果cmd1执行完毕错误,那么cmd2不执行。

cmd1||cmd2 当cmd1执行完毕并正确,那么cmd2不执行,反之cmd2执行。

中括号[ ]判断符

 默认参数

$0~$n 表示shell脚本的参数,包括shell脚本命令本身,shell脚本命名本身为$0

$#:#表示最后一个参数的标号。

$@:表示$1、$2、$3...

执行结果:

条件判断if elif else

if 判断语句; then

        执行语句

elif 判断语句; then

        执行语句

else

        执行语句

fi

 

 case语句

 case $变量 in

        "第一个变量内容")

                程序段

                ;;

        "第二个变量内容")

                程序段

                ;;

esac

 shell脚本函数

函数写法如下:

function fname(){

        //函数代码段

}

执行结果如下:

函数传参:

执行结果:

shell循环

shell脚本也支持循环,比如while do done,表示当条件成立的时候就一直循环,直到条件不成立。

while [条件]  //括号内的状态是判断式

do   //循环开始

        //循环代码段

done

执行结果:

还有另外一种until do done,表示条件不成立的时候循环,条件成立以后就不循环了,写法如下:

until [条件]

do

        //循环代码段

done

for循环,使用for循环可以知道有循环次数,写法

for var con1 con2 con3......

do

        //循环代码段

done

执行结果:

第二个for循环写法:

for((初始值;限制值;执行步长))

do

        //循环代码段

done

执行结果:

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

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

相关文章

Java毕业设计-基于微信小程序的校园二手物品交易系统的实现(V2.0)

博主介绍:✌stormjun、8年大厂程序员经历。全网粉丝15w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&…

WPF+MVVM案例实战(十九)- 自定义字体图标按钮的封装与实现(EF类)

文章目录 1、案例效果1、按钮分类2、E类按钮功能实现与封装1.文件创建与代码实现2、样式引用与封装 3、F类按钮功能实现与封装1、文件创建与代码实现2、样式引用与封装 3、按钮案例演示1、页面实现与文件创建2、运行效果如下 4、源代码获取 1、案例效果 1、按钮分类 在WPF开发…

各地级市能源消耗量数据-基于灯光数据的反演(2000-2022年)

今天带来的数据是的全国各省市能源消耗量数据,省级的能源消耗量数据可以在统计年鉴之中查到,但市级的数据却暂无统计。但今天我们基于一篇论文提供的思路,通过夜间灯光与省级能源消耗量对更小尺度的地区能源消耗量进行反算。原文提供1995-200…

告别登录,这款插件直接复制CSDN内容,真棒!

前言 我们在开发过程中,肯定会遇到这样或者那样的问题,这时候,我们想到最多的就是用搜索引擎去搜索各种资料,查看各种博客。以前,查看博客是很方便的,不过后来,像CSDN的,就是必须要…

ssm《数据库系统原理》课程平台的设计与实现+vue

系统包含:源码论文 所用技术:SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习,获取源码看文章最下面 需要定制看文章最下面 目 录 目 录 I 摘 要 III ABSTRACT IV 1 绪论 1 1.1 课题背景 1 1.2 研究现状 1 1.3 研究内容…

Altium Designer使用技巧(三)

PCB规则 1、间距规则 间距一般>6mil。 2、线宽规则 线宽规则>6mil,一般10mil; 电源线宽>15mil,般20mil; 3、过孔规则。 一般孔与盘的关系,盘是孔的2倍。 比如孔是12mil,盘是24mil。 如果过孔没按规则的话,点右上角设置或DP&…

[自动化测试:实践02-01]:Selenium整合Autoit:自动调用百度识图

前置准备 https://blog.csdn.net/Abraxs/article/details/142905693 [自动化测试:WebDriver]:AutoIt安装 https://blog.csdn.net/Abraxs/article/details/142931813 [自动化测试:Selenium]:环境部署和Webdriver的使用 一&#x…

服务器数据恢复—RAID5阵列中部分成员盘重组RAID5阵列后如何恢复原raid5阵列数据?

服务器数据恢复环境: 一台服务器挂接一台存储,该存储中有一组由5块硬盘组建的RAID5阵列。 服务器故障: 存储raid5阵列中有一块硬盘掉线。由于RAID5的特性,阵列并没有出现问题。工作一段时间后,服务器出现故障&#xff…

你还在用一串数字访问你的系统吗?

大家还记得第一次启动SpringBoot应用并在浏览器访问是如何进行的吗?在SpringBoot启动后,我们会看到如图所示: SpringBoot内置tomcat以端口8080启动,然后根据指引,我们在浏览器输入: http://127.0.0.1:8080…

穿越数据迷宫

第一章 在未来的世界里,人类的生活已经被高度数字化。互联网不再是简单的信息交换平台,而是成为了一个庞大的虚拟世界——“数据迷宫”。在这个世界里,每个人都有一个独特的数字身份,他们的生活、工作、娱乐都离不开这个虚拟空间…

六、元素应用CSS的习题

题目一&#xff1a; 使用CSS样式对页面元素加以修饰&#xff0c;制作“ 旅游攻略 ”网站。如下图所示 运行效果&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>旅游攻略</title><…

网络优化系列:探讨网络请求的性能提升策略

文章目录 引言一、网络请求优化1.1 DNS 解析耗时因素优化措施相关文章 1.2 创建连接耗时因素优化措施相关文章 1.3 发送 / 接收数据耗时因素优化措施相关文章 1.4 关闭连接耗时因素优化措施相关文章 二、网络库2.1 网络库的角色2.2 网络库的比较2.3 实际应用中的选择相关文章 三…

RabbitMQ 的集群

大家好&#xff0c;我是锋哥。今天分享关于【RabbitMQ 的集群】面试题&#xff1f;希望对大家有帮助&#xff1b; RabbitMQ 的集群 RabbitMQ 是一种流行的开源消息代理&#xff0c;广泛用于构建分布式系统中的消息队列。随着应用程序规模的扩大&#xff0c;单一的 RabbitMQ 实…

微服务架构深入理解 | 技术栈

微服务架构深入理解 | 技术栈 服务网关 服务网关是在微服务架构中扮演重要角色的组件&#xff0c;它是系统对外的入口&#xff0c;负责接收和处理客户端的请求&#xff0c;并将请求路由到相应的微服务。服务网关常常与API管理、负载均衡、安全认证、流量控制等功能结合&#xf…

OpenSLL下载,环境变量配置

https://slproweb.com/products/Win32OpenSSL.html 环境变量 新建一个path为安装选择的目录的bin路径

AI图像相似性搜索对比:VIT, CLIP, DINO-v2, BLIP-2

图像相似性搜索的核心在于一个简单的想法&#xff1a;图像可以表示为高维空间中的向量。当两个图像相似时&#xff0c;它们的向量应该在这个空间中占据相似的位置。我们可以通过测量角度&#xff08;或余弦相似度&#xff09;来确定这些向量的相似程度。如果角度小&#xff0c;…

零基础Java第十二期:类和对象(三)

目录 一、static成员&#xff08;补&#xff09; 1.1. static修饰成员方法 1.2. static成员变量初始化 二、代码块 2.1. 静态代码块和实例代码块 ​三、对象的打印 一、static成员&#xff08;补&#xff09; 1.1. static修饰成员方法 public class Linear {public st…

三层交换技术,eNSP实验讲解

三层交换技术&#xff0c;eNSP实验讲解 一、简要介绍1、概念2、工作原理3、优点4、应用场景5、与路由器的区别 二、eNSP仿真实验1、步骤一&#xff1a;创建连接&#xff0c;明确参数。2、步骤二&#xff1a;设置PC1和PC2参数3、步骤三&#xff1a;配置交换机&#xff0c;通过命…

【Linux】掌握库的艺术:我的动静态库封装之旅

&#x1f308;个人主页&#xff1a;Yui_ &#x1f308;Linux专栏&#xff1a;Linux &#x1f308;C语言笔记专栏&#xff1a;C语言笔记 &#x1f308;数据结构专栏&#xff1a;数据结构 &#x1f308;C专栏&#xff1a;C 文章目录 1.什么是库1.2 认识动静态库1.2.1 动态库1.2.2…

访问控制技术原理与应用

目录 访问控制概述实现访问控制目标访问控制参考模型常见访问控制模型访问控制模型-DAC自主访问控制访问控制模型-MAC强制访问控制访问控制模型-RBAC基于角色的访问控制访问控制模型-ABAC基于属性的访问控制 访问控制概述 访问控制是对资源对象的访问授权控制的方法以及运行机…