深入理解C语言main函数的参数

原创 乐创客 2021-04-29 07:05

文/Edward



 1  命令就是程序
我想绝大多数看这篇文章的读者基本上都用过Windows操作系统下的命令提示符。比起图形化界面的操作,如果熟悉了Windows的命令提示符,你将会更快地操作这个操作系统。Windows图形化界面如图1所示。

图1 Windows图形化界面

不过,在Windows底下,大部分操作者还是习惯于图形化界面的操作,因为作为一个商用化个人电脑操作系统,Windows的图形化界面做的非常流利,功能非常齐全。而如果你是一名服务器运维人员,你的服务器操作系统是Linux,而且Linux主机位于云端,那么你在运维的时候大概率会通过ssh工具远程登陆,展开日常的运维工作。此时,这种Linux下的终端命令操作,将会是你日常的操作,如图2所示。

图2 Linux下的终端界面

在操作Linux终端时,我们会在终端里面输入常用的命令,在Linux操作系统“一切皆文件”的设计哲学下,你日常输入的这些命令,其实都是一个个“小程序”。然而,几乎所有的操作系统都一样,你想要操作一个命令,这个命令对应的可执行文件必须位于操作系统的环境变量中,在Linux操作系统下,这个环节变量的名称叫做“PATH”,我们可以使用”echo $PATH”命令将环境变量打印出了,如图3所示。

图3 Linux下的环境变量

通过环境变量的打印,我们可以清楚的看到此Linux操作系统的环境变量路径,只要可执行文件或者链接(软连接)文件位于这些文件目录下,那么我们直接在终端里面输入对应的应用程序名称即可运行。
现在,我们使用“cd /bin”命令打开根目录下的“bin”文件夹,我们可以发现很多平时常用的命令,如“cp”,“chmod”等,如图4所示。

图4 /bin文件夹下的可执行文件

 2  Linux下命令执行的原理
上述内容,我们大致了解了Linux下操作命令终端运行可执行文件的原理,这些命令说到底都是应用程序。但是大家是否想过,这些命令在运行时后面可以跟上命令选项,如“ls -l”可以列出当前文件夹下所有文件的详细信息,“ls -s”可以列出所有文件的大小。那么命令后面的参数是如何传进命令的应用程序里面的呢?如图5所示。

图5 ls命令不同参数下的输出

 3  C语言main函数的入口
这些Linux命令程序大多都是采用C语言开发而成的,我们平时都知道,C语言整个程序的唯一入口就是“main”函数,一般我们在做一些简单程序的时候都是用“int main(void)”的形式来定义主函数,而Linux下,一个C语言“main”函数的标准原型应该是“int main(int argc, char *argv[], char *env[] );”,其中的三个参数分别是:
int argc:传入参数的数量;
char *argv[]:传入的参数列表;
char *env[]:环境表地址。
在ANSI C中,规定main函数只有两个参数,argc和argv,而且第三个参数与全局变量environ相比也没有带来更多益处,所以POSIX.1也规定应使用environ而不使用第三个参数。通常用getenv和putenv函数来存取特定的环境变量,而不是用environ变量。所以我们见到的main函数的原型多是下面这种 形式:“int main ( int argc, char* argv[]);”。
比如,我们假设在Linux下有一个“小程序”x,在我们使用x命令的时候,后面会有可变的参数a,b,c。一般我们使用这个x命令的时候,它的形式为“x  ”,也就是说,x后面可以跟0个,1个,2个,3个参数,那当这个命令执行的时候,传入x的main函数时,“agrc”表示参数个数,如当用户使用“./x a b”运行这个程序时,“agrc”为3,而这时候,*agrv[]这变成了长度为3的字符串数组,其中agrv[0]=”./x”,agrv[1]=”a”, agrv[2]=”b”。按照这个思路,我们可以写出如图6所示的代码。

图6 x命令的实现

最后,我们只需要将x可执行文件放到环境变量路径中去,就可以在终端的任何地方运行这个x命令了。由于x名称太过简单,我们首先先将x改名成“xccmd”,再将其移入“/usr/sbin”文件夹中。接着,我们退到根目录底下来运行命令“xccmd a b c d e f”。如图7所示。

图7 将编译结果添加到环境变量

以上就是Linux操作系统下添加自定义程序的方法,Windows下也适用,如果想实现具体的功能,只需要在代码里面实现即可。

 附 程序源码
#include <stdio.h>int main(int argc, char* argv[]){    int i;     printf("argc:%d\n", argc);    for(i=0;i<argc;i++)    {        printf("argv[%d]:%s\n", i, argv[i]);    }    return 0;}


乐创客 我们从来不培养程序猿,我们只是嵌入式技术的搬运工
评论 (0)
  • 引言:POPO声的成因与影响在语音芯片应用中,WT588F08A作为一款支持DAC+功放输出的高集成方案,常因电路设计或信号处理不当,在音频播放结束后出现POPO声(瞬态噪声)。这种噪声不仅影响用户体验,还可能暴露电路设计缺陷。本文将基于实际案例,解析POPO声的成因并提供系统化的解决方案。一、POPO声的根源分析1. 功放电路状态切换的瞬态冲击当DAC输出的音频信号突然停止时,功放芯片的输入端若处于高阻态或无信号状态,其内部放大电路会因电源电压突变产生瞬态电流,通过喇叭表现为POPO声。关键因
    广州唯创电子 2025-04-07 09:01 64浏览
  • 在科技浪潮奔涌的当下,云计算领域的竞争可谓是如火如荼。百度智能云作为其中的重要参与者,近年来成绩斐然。2024年,百度智能云在第四季度营收同比增长26%,这样的增速在行业内十分惹眼。回顾全年,智能云业务的强劲增长势头也十分明显,2024年第一季度,其收入达到47亿元,同比增长12%;第二季度营收51亿元,同比增长14%。从数据来看,百度智能云在营收方面一路高歌猛进,展现出强大的发展潜力。然而,市场对百度智能云的表现似乎并不完全买账。2024年,尽管百度智能云数据亮眼,但百度股价却在震荡中下行。在
    用户1742991715177 2025-04-06 20:25 55浏览
  • 在追求环境质量升级与产业效能突破的当下,温湿度控制正成为横跨多个行业领域的核心命题。作为环境参数中的关键指标,温湿度的精准调控不仅承载着人们对舒适人居环境的期待,更深度关联着工业生产、科研实验及仓储物流等场景的运营效率与安全标准。从应用场景上看,智能家居领域要求温湿度系统实现与人体节律的协同调节,半导体洁净车间要求控制温湿度范围及其波动以保障良品率,而现代化仓储物流体系则依赖温湿度的实时监测预防各种产品的腐损与锈化。温湿度传感器作为实现温湿度监测的关键元器件,其重要性正在各行各业中凸显而出。温湿
    华普微HOPERF 2025-04-07 10:05 65浏览
  • 文/杜杰编辑/cc孙聪颖‍2025年的3月,成功挺过造车至暗时刻的小米创始人雷军,接连迎来人生的高光。(详情见:雷军熬过黑夜,寄望小米SU7成为及时雨)在颜值即正义的舆论导向之下,全国两会期间,雷军凭借得体的衣着、挺拔的身姿赢得赞誉。面对雷军的压人表现,连行事一向沉稳、不愿跟风的海尔,都推出“leadership”组合拳,试图助力自家boss,不落下风。(详情见:两会声音|本届全国两会,周云杰为海尔省了多少广告费?)喜事接连不断,紧接着的3月18日,雷军重磅宣布小米 “史上最强年报”。雷军的公关
    华尔街科技眼 2025-04-03 20:30 32浏览
  • 【拆解】+沈月同款CCD相机SONY DSC-P8拆解 这个清明假期,闲来无事,给大伙带来一个老古董物品的拆解--索尼SONY DSC-P8 CCD相机。这个产品是老婆好几年前在海鲜市场淘来的,由于显示屏老化,无法正常显示界面了,只有显示背光。但是这也无法阻止爱人的拍照。一顿盲操作依旧可以拍出CCD古董相机的质感。如下实拍: 由于这个相机目前都在吃灰。我就拿过来拆解,看看里面都是怎样个设计,满足下电子爱好者的探索。 首先给大伙展示下这台老相机的全貌。正视图  后视图 
    zhusx123 2025-04-06 17:38 77浏览
  • 【拆解】+南孚测电器拆解 之前在天猫上买了一盒南孚电池,他给我送了一个小东西—测电器。今天我们就来拆解一下这个小东西,看看它是怎么设计和工作的。 三颗指示灯显示电池剩余电量。当点亮3颗LED时,则表示点亮充足。当点亮2颗LED时,则表示还能用。当点亮1颗LED时,表示点亮地建议更换,当无法点亮LED时,则表示没电了。外壳上还印有正负极,以免用户将电池放反。 这个小东西拆解也很方便,一个螺丝刀稍微撬几下。外壳就下来了,它是通过卡扣连接。 开盖后,测电线路板清晰呈现在眼前。 让我们看看小小的线路板有
    zhusx123 2025-04-05 15:41 44浏览
  • 医疗影像设备(如CT、MRI、超声诊断仪等)对PCB的精度、可靠性和信号完整性要求极高。这类设备需要处理微伏级信号、高频数据传输,同时需通过严格的EMC/EMI测试。制造此类PCB需从材料选择、层叠设计、工艺控制等多维度优化。以下是关键技术与经验分享。 1. 材料选择:高频与生物兼容性优先医疗影像设备PCB常采用 Rogers RO4000系列 或 Isola FR4高速材料,以降低介电损耗并保证信号稳定性。例如,捷多邦在客户案例中曾为某超声探头厂商推荐 Rogers RO4350B
    捷多邦 2025-04-07 10:22 64浏览
  • 引言:小型化趋势下的语音芯片需求随着消费电子、物联网及便携式设备的快速发展,产品设计对芯片的小型化、高集成度和低功耗提出了更高要求。厂家凭借其创新的QFN封装技术,推出WTV系列(如WTV380)及WT2003H系列语音芯片,以超小体积、高性能和成本优势,为紧凑型设备提供理想解决方案。产品核心亮点1. QFN封装技术赋能超小体积极致尺寸:WTV380采用QFN32封装,尺寸仅4×4毫米,WT2003H系列同样基于QFN工艺,可满足智能穿戴、微型传感器等对空间严苛的场景需求。高密度集成:QFN封装
    广州唯创电子 2025-04-07 08:47 51浏览
  • 在影像软的发展历程中,美图曾凭借着美图秀秀等一系列产品,在“颜值经济”的赛道上占据了领先地位,成为了人们日常生活中不可或缺的一部分,也曾在资本市场上风光无限,2016 年上市时,市值一度超过46亿美元,备受瞩目。 然而,随着市场的不断发展和竞争的日益激烈,美图逐渐陷入了困境。商业模式单一,过度依赖在线广告收入,使得其在市场波动面前显得脆弱不堪;多元化尝试,涉足手机、电商、短视频、医美等多个领域,但大多以失败告终,不仅未能带来新的增长点,反而消耗了大量的资源。更为严峻的是,用户流失问题日
    用户1742991715177 2025-04-05 22:24 53浏览
  • 及时生产 JIT(Just In Time)的起源JIT 起源于 20 世纪 70 年代爆发的全球石油危机和由此引发的自然资源短缺,这对仰赖进口原物料发展经济的日本冲击最大。当时日本的生产企业为了增强竞争力、提高产品利润,在原物料成本难以降低的情况下,只能从生产和流通过程中寻找利润源,降低库存、库存和运输等方面的生产性费用。根据这种思想,日本丰田汽车公司创立的一种具有特色的现代化生产方式,即 JIT,并由此取得了意想不到的成果。由于它不断地用于汽车生产,随后被越来越多的许多行业和企业所采用,为日
    优思学院 2025-04-07 11:56 77浏览
  • 伴随无线技术的迅速发展,无线路由器市场商机日益庞大。现代消费者在选购无线路由器(Wi-Fi AP)时,通常依赖的是该产品在无干扰的实验室环境中,量测得到的数据报告。然而,这些数据往往是在受控的RF隔离环境中进行测试,无法完全反映真实使用场景。这种情况导致许多消费者抱怨,他们购买的产品效能与宣称的数据不符。在实际应用中,消费者常因Wi-Fi讯号不稳定、传输速度不如预期或设备过热而产生客诉。产品仰赖实验室的数据够吗?无线路由器(Wi-Fi AP)ODM供货商遇到什么挑战?一家台湾知名的无线路由器(W
    百佳泰测试实验室 2025-04-05 00:12 35浏览
  •   安全生产预警系统作为现代工业与安全管理的重要组成部分,正以前所未有的技术引领力,创新性地塑造着未来的安全管理模式。这一系统通过集成多种先进技术,如物联网、大数据、人工智能、云计算等,实现了对生产环境中潜在危险因素的实时监测、智能分析与及时预警,为企业的安全生产提供了坚实的技术保障。   技术引领:   物联网技术:物联网技术使得各类安全监测设备能够互联互通,形成一张覆盖全生产区域的安全感知网络。传感器、摄像头等终端设备实时采集温度、压力、气体浓度、人员位置等关键数据,为预警系统提供丰富的
    北京华盛恒辉软件开发 2025-04-05 22:18 46浏览
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦