首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >c语言main函数里的参数argv和argc解析

c语言main函数里的参数argv和argc解析

作者头像
用户6280468
发布于 2022-03-21 01:19:14
发布于 2022-03-21 01:19:14
3.5K00
代码可运行
举报
文章被收录于专栏:txp玩Linuxtxp玩Linux
运行总次数:0
代码可运行

前言

一般我们平时写main函数的话,一般都是写不带参数的比较多,而且也习惯了这样写;其实标准的形式写法,main函数是带两个参数的,这两个参数分别是:argc和argv,那么这两个参数是表示什么意思,怎么用呢?今天就给大家分享main函数里面这两个参数的使用,下面看到这样的写法,要明白这样写的意思哦!

main函数返回给谁

01函数为什么需要返回值

  • 函数在设计的时候设计了参数和返回值,参数是函数的输入,返回值是函数的输出。
  • 因为函数需要对外输出数据(实际上是函数运行的一些结果值),因此需要返回值。
  • 形式上来说,函数被另外一个函数所调用,返回值作为函数式的值返回给调用这个函数的地方。
  • 总的来说,函数的返回值就是给调用的地方返回一个值。

02main函数被谁调用

(1)main函数是特殊的,首先这个名字是特殊的;因为在c语言里面规定了main函数是整个程序的入口;其它函数只有直接或者间接被main函数所调用才能被执行,如果没用被main函数直接或者间接调用,则这个函数在整个程序中无用。

(2)main函数从某种角度来讲,它代表了当前这个程序,或者说是整个程序;main函数的开始意味着整个程序开始执行,main函数的结束返回意味着整个程序的结束。

(3)谁执行了这个程序,谁就调用了main函数。

03Linux下一个程序执行的本质

(1)表面来看,Linux中在命令行中去./xx去执行一个可执行程序。

(2)我们可以通过shell脚本来调用执行一个程序(下面会写一个shell脚本)。

(3)我们还可以在程序总去调用执行一个程序(fork exec),这个在Linux应用编程里面的文章里面有写过这个,可以参考这篇文章——Linux系统下进程编程之exec族函数解析(四)

(4)我们有多种方法来执行一个程序,但是本质上都是相同的。Linux中一个新程序的执行本质上是一个进程的创建、加载、运行、消亡。Linux中执行一个程序其实就是创建一个新进程,然后把这个程序丢进这个进程中去执行,直到结束。新进程是被谁开启?在Linux中进程都是被它的的父进程fork出来的。

(5)命令行本身就是一个进程(就是我们平时在Linux下打开一个终端),在命令行下去./xx执行一个程序,其实这个新程序是作为命令行进程的一个子进程去执行的。总之一句来说,一个程序被它的父进程所调用。

(6)小结:main 函数返回给调用这个函数的父进程;父进程要这个这个返回值干嘛?父进程调用子进程来执行一个任务,然后子进程执行完后,通过main函数的返回值返回给父进程一个答复,这个答复一般是表示子进程的任务执行结果完成了还是错误的(0表示执行成功,负数时表示执行失败)。

04实践验证获取main的返回值

(1)用shell脚本执行程序可以获取程序的返回值并且打印出来:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  #include <stdio.h>
  int main(void)
  {
                       return 0;
  }

然后我再创建一个shell脚本:

shell脚本里面的内容为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  #!/bin/sh

 ./a.out
 echo $?

执行结果为:

说明:Linux  shell中用$?这个符号来存储和表示上一个程序执行结果(这里就是./a.out)。#!/bin/sh这个书写shell脚本的格式。

argc、argv

01main的书写形式

一般正规main函数的书写形式有三种:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 int main(void)
 int main(int argc, char **argv)
 int main(int argc, char *argv[])

02谁给main函数传参

(1)调用main函数所在的程序的它的父进程给main函数传参,并且接收main的返回值。

03为什么要给main函数传参

(1)首先,main函数不传参是可以的,也就是说父进程调用子进程并且给子进程传参不是必须的;int main(void)这种形式就是不要传参了。

(2)有时候我们希望程序有一种灵活性,所以选择在执行程序时通过传参来控制程序中的运行,达到不需要重新编译程序就可以改变程序运行结果的效果。下面我先一个简单的程序为例来引出这个程序的灵活性:

我们可以看到如果要改程序里面的内容的话,必须得修改源代码才行,这样灵活不是很好。下面就是我们要讲的,给main函数传参,来提高程序的灵活性。

04给main怎样来传参

(1)给main传参通过argc和argv这两个c语言预订的参数一起实现。

(2)argc是int类型的,表示运行程序的时候给main函数传递了几个参数;而argv是一个字符串数组,这个数组用来存储多个字符串,每个字符串就是我们给main函数传的一个参数,argv[0]就是我们给main函数的第一个传参,argv[1]就是传给main的第二个参数,以此类推后面的传参。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
运行结果:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
然后我在执行程序的时候,可以加参数:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
注意:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
     (1)main函数传参都是通过字符串传进去。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
     (2)程序被调用时传参,各个参数之间是通过空格来间隔的。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
     (3)在程序内部如果要使用argv,那么最好先检查一下argc。

总结

今天的分享就到这里结束了,关于shell脚本的教程,后面也会专门写一系列的文章来讲的。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 txp玩Linux 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
iOS小技能:富文本编辑器
使用[_webView loadHTMLString:html baseURL:baseURL]; 进行代码加载
公众号iOS逆向
2022/08/22
2.4K0
iOS小技能:富文本编辑器
小程序富文本编辑器editor初体验
在5月6日的时候写了一篇小程序富文本解析的「伪需求」,从wxParse到towxml的坑,当时还在感慨官方什么时候出个比较全面的富文本组件,谁知道没几天就发布了editor富文本组件。
Bug生活2048
2019/06/05
9.3K0
小程序富文本编辑器editor初体验
wangeditor富文本编辑器的使用(超详细)
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/137644.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/05
11.8K1
iOS小经验·Masonry布局时因不熟悉Cell生命周期而导致死循环
设置UICollectionView的footer的时候,可能有新的小伙伴这样写:
陈满iOS
2018/10/09
1.8K0
iOS_系统自带地图圆形区域选择范围
5.聚集操作:删除原理的大头针,在新经纬度添加大头针,并将地图移动到新的经纬度(反地理编码获得位置信息)
mikimo
2022/07/20
2.4K0
iOS_系统自带地图圆形区域选择范围
自制在线富文本编辑器,精简完整版
 不需要插入图片功能的去掉php代码然后将.php文件改为.html即可变成本地文本编辑器,是不是很酷!当然功能跟world比没那么强大!
超级小可爱
2023/02/17
2K0
自制在线富文本编辑器,精简完整版
iOS TABAnimated 使用技巧一
由于第一次使用TABAnimated,遇到了很多问题,首先就是对xib支持不怎么友好。
赵哥窟
2021/07/21
1.4K0
iOS TABAnimated 使用技巧一
iOS小技能:适配安全区域距离(safeAreaInsets)
应用场景3: 适配上拉加载更多控件 _vcView.tableView.mj_footer.ignoredScrollViewContentInsetBottom = k_ignoredScrollViewContentInsetBottom;
公众号iOS逆向
2022/08/22
5.1K0
iOS小技能:适配安全区域距离(safeAreaInsets)
iOS 自定义tab滑块: segment功能+label混合显示;( Slider 双区间)
前言 在这里插入图片描述 原文: https://blog.csdn.net/z929118967/article/details/105076636 需求:商户交易汇总表使用tab滑块进行切换/筛
公众号iOS逆向
2021/03/24
9310
iOS 自定义tab滑块: segment功能+label混合显示;( Slider 双区间)
iOS UICollectionView 从右向左对齐的实现
iOS UICollectionView 从右向左对齐(Aligning right to left on UICollectionView)
公众号iOS逆向
2021/07/29
2.8K0
iOS广告轮播图
1.1 cell 头文件 1.2 cell 实现文件 1.3 cell的使用 引言 在这里插入图片描述 需求背景: 信用卡网申接入(IOS) 实现思路: 自定义cell封装CycleScrollVie
公众号iOS逆向
2021/07/05
7940
iOS广告轮播图
vue富文本编辑器tinymce
TinyMCE是一款易用、且功能强大的所见即所得的富文本编辑器。同类程序有:UEditor、Kindeditor、Simditor、CKEditor、wangEditor、Suneditor、froala等等。
py3study
2021/04/14
2.9K0
iOS自动布局框架之Masonry
目前iOS开发中大多数页面都已经开始使用Interface Builder的方式进行UI开发了,但是在一些变化比较复杂的页面,还是需要通过代码来进行UI开发的。而且有很多比较老的项目,本身就还在采用纯代码的方式进行开发。而现在iPhone和iPad屏幕尺寸越来越多,虽然开发者只需要根据屏幕点进行开发,而不需要基于像素点进行UI开发。但如果在项目中根据不同屏幕尺寸进行各种判断,写死坐标的话,这样开发起来是很吃力的。所以一般用纯代码开发UI的话,一般都是配合一些自动化布局的框架进行屏幕适配。苹果为我们提供的适配
xiangzhihong
2018/01/26
2.2K0
iOS小技能: tableView section间距失效的解决方案
iOS tableView设置style:UITableViewStyleGrouped 时,非第一个section的间距失效的解决方案: 必须全部实现FooterInSection及FooterInSection对应的四个代理方法才有效(四个必须同时实现)
公众号iOS逆向
2022/08/22
1.5K0
iOS小技能: tableView section间距失效的解决方案
iOS学习——输入验证码界面封装
  在很多App中都有输入验证码的功能需求,最近项目需要也有这个功能。做完之后简单整理了一下,将实现的基本思路做下记录。实现后的效果大致如下图所示,当四位签到码全部输入时,提交按钮是可以提交的,否则提交按钮失效,不允许提交。
mukekeheart
2018/12/27
2K0
iOS小技能:APP内的本地化语言切换(案例:登录界面切换中英文)
选 make Localize代表会将Localizable.strings加入到英语的本地化文件夹en.lproj中去
公众号iOS逆向
2022/08/22
3.4K0
iOS小技能:APP内的本地化语言切换(案例:登录界面切换中英文)
UEditor富文本编辑器的简单入门
UEditor富文本编辑器的简单入门 首先既然我们要用UEditor插件,我们就需要引入对应的文件,在UEditor官网下载,然后将static文件夹拷贝到我们项目的根目录下,接下来就是引用: ---- * 引入配置文件 <script src="static/UE/ueditor.config.js"></script> * 引入all.js <script src="static/UE/ueditor.all.min.js"></script> * 引入parse.js <script
Rattenking
2021/01/29
1.3K0
UEditor富文本编辑器的简单入门
Vue实战Vue-Quill-Editor富文本编辑器
     做博客系统、商城系统、cms系统等系统的时候需要自动生成网页,自动生成多媒体等图片网页的时候我们就用到了富文本编辑器。以前用jquery的时候经常使用的有百度富文本编辑器UEditor,不过因为后期自适应不大好使,也就换成别的了,有时候用过Ckeditor。自从用了element ui后打算做一个博客系统,后来就研究了一下Vue-Quill-Editor,嵌入到element ui中。Vue-Quill-Editor,这是一款基于Quill、适用于Vue的富文本编辑器。
十分钟空间
2022/08/17
1.6K0
富文本编辑器开发简介
富文本编辑器,Rich Text Editor, 简称 RTE, 是一种可内嵌于浏览器,所见即所得的文本编辑器。
江米小枣
2020/06/15
4.9K0
vue中使用富文本编辑器(wangeditor)
<template> <div class="subcontainer"> <!-- de --> <div class="editor" id="editor" ref="editor"></div> <div class="a-btn"> <a href="javascript:void(0)">提交</a> </div> </div> </template> <script> import pcSet from "@/components/p
用户4344670
2020/04/02
8820
相关推荐
iOS小技能:富文本编辑器
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档