C语言从入门到放弃

article/2025/9/29 22:03:49

Unix是C的作者开发的。
Unix附属诞生物,当时使用的是cc编译器
然后有了linux就封装成了gcc编译器,但由于考虑到老家伙的使用习惯,还保留了cc
C语言是结构化程序语言(一个程序能包含多个函数).C语言简单粗暴,主要由两大块组成,头文件和函数。
Nginx就是由C语言编写的比Apache性能优越。

关于VIM的使用:
:set nu   (打开行号显示命令)

编辑c文件
直接编译命令$ cc hello.c
如果hello.c中需要引入其他文件中的函数

可以将目标文件先编译成编译成.o文件(二进制文件)$ gcc -c max.c -o max.o,然后编译$ gcc max.o hello.c (这样编译可以大大提高编译效率)
这样可以调用别人写的功能函数文件。但是当比人将自己写的c文件编译成了.o文件我们是看不到源码的,这时我们怎么知道使用方法呢?
解决方案:模仿.h文件的编写。在.h文件中描述用法,然后导入.h文件即可。

然后在主c文件中导入:

这时再$ gcc max.o min.o hello.c 即可完成编译。
这样做的优点: 提高编译效率,和代码完整性,以及工作上的解耦(分工合作)。

方便编译源代码: 
上述我们使用cc/gcc命令编译源代码。但是问题来了,如果你的文件中导入了几千个别人写的.o文件那该怎么编译,一个个敲嘛?这显然是不可取的。针对这个问题,make工具就应运而生了。
先介绍一下make:
make是属于GUN项目的封装了gcc的批量自动编译工具,介绍完毕。
make的安装及使用:
sudo apt-get update  更新源
sudo apt-get install make
很多人写的文件组合起来需要编译及使用,先潜规则约定一个Makefile文件用于说明多个与本项目有关的文件,可以在里面写注释,里面的编写规则主要是按照make的规则,让它识别即可。  
Makefile文件编码规则: tab缩进需6个空格的规格。如果是四个空格的缩进则make编译时会出现异常,并且缩进必须为tab,不能使用6个Space代替。

Makefile一行一行的读,如果碰到没有的文件则向下递归查找并执行,最后回归执行主命令。
编写好Makefile文件后,之接在当前文件下 $ make 即可自动完成编译。
指定文件名称输出$ gcc max.o min.o hello.c -o hello.out

linux中的shell指令: && (类似于管道‘|’指令),传输连接执行, 并且&&前面执行返回值为0时后面的命令才执行,每一条命令都相当于执行一个可执行文件,而可执行文件又是c语言编译过来的。
$ echo $? 查看上条指令是否执行成功,如果返回值是0则代表成功,否则为不成功。
将默认的return 0; 改为别的,也能执行但是返回值就变成修改的那个了,这样不符合系统有些命令的规则,就会出现上面的情况。

标准输入流,输出流,错误流的效果实现:

printf/scanf是由fprintf/fscanf后期封装形成的,也就是默认的执行输出/输入/错误流都被封装好了(默认的都是变准流:比如键盘屏幕等)。
运行效果如下:

如果输入小于0的参数就触发了错误流分支,返回自定义的错误信息。linux也就是由若干个小工具组成的。

关于linux的重定向


标准输出流重定向(>>追加模式, >表示覆盖重写 , 红框中的1可以省略,默认自带。 ):


标准输入流重定向(反向重定向,将即将输入的数据/参数提前写到一个文档中然后敲命令):


标准错误流:
先修改main.c文件:

然后编译$ cc main.c
运行$ ./main.out
如果将j输入值为0即出发标准错误流机制。

上图中画红线的命令意思: 执行a.out文件,将标准输出流重定向到t.txt文件,将标准错误流重定向到f.txt文件中(2代表标准错误流)。

当前没有建立input.txt文件,所以执行后会向错误流文件(f.txt)中打印错误信息。

关于管道( | )的原理以及应用:
linux管道可以将linux shell中多个小工具集合起来一起使用。
有了管道linux才可以变得无比强大,没有管道多个程序很难结合在一起工作形成一个大项目。

为了理解管道的作用,写个小实例,内容如下图,然后分别编译:


将编译后的可执行文件(小工具)通过管道串行执行,input的输出流正好是avg的输入流,然后得出最终结果。

到此,入门C基本知识点将告一段落。

接下来将讲到C语言的核心知识(灵魂): 指针和内存

未完待续 ... ...












http://chatgpt.dhexx.cn/article/S4ewXRl6.shtml

相关文章

c语言从入门到秃头表情包,c语言从入门到放弃表情包 - c语言从入门到放弃微信表情包 - c语言从入门到放弃QQ表情包 - 发表情 fabiaoqing.com...

从入门到精神异常(资深病友狗头著)_精神异常_病友_狗头表情 不好意思拿错了(Java Web从入门到精通)_拿错_JAVA_Web表情 C语言从研发到脱发_脱发_研发_语言表情 我也只是新手入门第一次见有人就如此会装逼 幸会幸会 哪里的话_新手入门_装逼_幸会幸表情 熊猫头写个C语言(666)_666…

深度学习---从入门到放弃(七)CNN进阶,迁移学习

深度学习—从入门到放弃(七)CNN进阶,迁移学习 引入 图像是高维的。即image_length* image_width*image_channels是一个很大的数字,而上一教程里所提到的CNN的权值共享便是一种解决图像和其他领域高维问题的方法。 从上图中可以…

【傻瓜攻略】深度学习之从入门到放弃

从研究生进来之后,一直到现在已经进行了一年关于DP的学习,写篇文章总结一下我蹒跚的学习过程。总结来说是一个从入门学习到几乎想要放弃的过程。顺带列举下面几个坑,希望能帮助一下同样在这条路上行走的旅人们。 1、overfitting这个东西 很…

android异步编程,使用RxAndroid处理异步任务

欢迎Follow我的GitHub, 关注我的简书. 其余参考Android目录. Demo Android Rx是响应式编程的意思, 本质是观察者模式, 是以观察者(Observer)和订阅者(Subscriber)为基础的异步响应方式. 在Android编程时, 经常会使用后台线程, 那么就可以使用这种方式. 目前的异步编程方式都会导…

RxAndroid 入门笔记

参考链接: http://gank.io/post/560e15be2dca930e00da1083#toc_10 https://mcxiaoke.gitbooks.io/rxdocs/content/Observables.html http://blog.chengyunfeng.com/?p948 http://www.apkbus.com/blog-705730-62567.html 要了解RxAndroid,必须先要了解RxJava,应…

【Rxandroid】Rxandroid源码解读

目录 1.AndroidSchedulers类的源码 2.RxAndroidPlugins类的源码 3.RxAndroidSechedulersHook类的源码 4.LooperScheduler类的源码 5.HandlerScheduler类的源码 6.BuildConfig类的源码 7.MainThreadSubscription类的源码 总结 将Rxandroid(1.2.1)…

Retrofit + RxAndroid 实践总结

在接入 Retrofit RxAndroid 之前,项目代码中主要存在如下问题: 服务器 API 的定义方式不一致,有的集中定义,有的定义在业务代码中,没有分类不便于维护。Request / Response / API 三者没有对应关系(Reque…

Rxjava3 RxAndroid

文章目录 Rxjava && Rxandroid引用方式 概念流程图代码示例ObservableObservable#subscribeOn(NonNull Scheduler scheduler)Observable#observeOn(NonNull Scheduler scheduler)ObservableSubscribeOnObservableObserveOn本文开头的代码示例等同于如下代码 Schedulers…

RxJava和RxAndroid学习记录

目录 1 概念和说明 1.1 响应式编程 1.2 RxJava 1.3 关于RxJava和RxAndroid 1.4 关于响应式编程和普通编程 2. 基本使用 2.1 基本元素关系图 2.2 代码示例: 2.3 关于subscribe() 2.4 线程调度 2.4.1 线程调度 2.4.2 RxJava内置的常用…

RxAndroid的基础使用

作为一个android开发者,在开发应用的过程中避免不了异步这个问题。android系统为我们提供了Handler这个类帮助我们进行线程间的通信和切换,但是GitHub上也有很多其他非常优秀的开源框架来帮助我们进行异步处理,比如今天学习的RxAndroid。 简…

rxandroid 基础知识

概述 在Android 中, 使用 rxandroid , rxandroid和rxJava的关系是,rxandroid包 依赖rxJava包,在其功能上增加了一些Android特有功能,项目中如果不需要指定rxJava包的版本,只需引入rxandroid包即可,如果需要更改 rxandroid包中默认的rxJava包版本 , 在项目中引入指定的rxJava包即…

RxAndroid使用初探;简洁、优雅、高效

引言 RxAndroid是一个开发库、是一种代码风格、也是一种思维方式。 正如标题所言,RxAndroid的特点是简洁、优雅、高效,它的优点是多线程切换简单、数据变换容易、代码简洁可读性好、第三方支持丰富易于开发;缺点是学习成本较高、出错难以排查。 用途与优势 起源 RxAndroid…

RxAndroid的学习和研究

1.什么是RxAndroid RxAndroid的含义为响应式编程,Rx含义是响应式编程,其本质就是观察者模式,以观察者(Observer)和订阅者(Subscriber)为基础的异步响应方式。    Observables发出一系列事件&a…

linux基本功系列之dd命令实战

文章目录 前言🚀🚀🚀一. dd 命令介绍二. 语法格式及常用选项三. 参考案例3.1 创建指定大小的文件3.2 清空磁盘数据3.3 给磁盘做备份还原3.4 把光盘拷贝到root下3.5 内存不足的处理方法 四. 文中出现的概念解释swapon命令介绍4.2 /dev/zero 介…

Linux系统中dd命令用法详解

命令介绍: Linux dd 命令用于读取、转换并输出数据。dd 可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。 参数介绍 if 代表输入文件。如果不指定 if,默认就会从 stdin 中读取输入。of …

dd 命令详解

dd命令是Linux/Unix下的一个很常见的文件拷贝工具。 我们先列下dd命名的常用的参数,再详细分析: bsBYTES read and write up to BYTES bytes at a time cbsBYTES convert BYTES bytes at a time convCONVS convert the file as pe…

dd命令使用总结

dd命令介绍 dd是Linux下一个非常有用的命令,该命令用于读取、转换并输出数据;dd命令在Android shell下也支持使用。 语法格式: dd [option]dd指令选项详解 iffile:输入文件名,缺省为标准输入 offile:输…

dd命令相关整理

对于一个软件测试人员而言,工作开展前就是准备自己的测试环境,那么重装系统就是首当其冲的一个必备技能。最近因为手边工作环境没有windows的系统,所以没有条件利用软碟通这类刻录软件直接刻录启动盘。被逼无奈之下用命令来刻录,整…

Linux:shell 脚本 自动解压压缩文件tar.gz到指定目录

具体情境 Ubuntu16.04系统,将.tar.gz格式的文件从/home/myftp/upload/nuodongiot目录自动解压到/home/myftp/upload/backupcopy目录中,并将源目录/home/myftp/upload/nuodongiot中的文件移动至/home/myftp/upload/extarct目录中 该过程进行单个文件进行…

tar解压文件至指定目录,不包含原目录

1、tar解压文件至指定目录,不包含原目录 要解压的压缩包原目录结构如下 tar -zxf log.tar.gz --strip-components 1 -C /opt/new_test注: --strip-components 1 解压至下一级目录,若为2则解压至下下级目录 2、压缩只指定的目录&#xff0c…