前言
通常,我们在编写main函数时,习惯于不带参数的写法。然而,标准的main函数应包含两个参数:argc和argv。那么,这两个参数的意义和使用方法是什么呢?本文将为您详细讲解main函数中这两个参数的用法,帮助您理解这种写法的含义。
main函数的返回值及其意义
01 函数为何需要返回值
在设计函数时,参数和返回值是必不可少的部分。参数是函数的输入,而返回值则是函数的输出。由于函数需要向外输出数据(即运行结果),因此需要返回值。函数被调用时,返回值作为函数结果返回给调用者。总之,函数的返回值是为调用者提供一个结果值。
立即学习“C语言免费学习笔记(深入)”;
02 main函数的调用者
(1) main函数是一个特殊的函数,名字本身具有特殊性。在C语言中,main函数被指定为程序的入口点。其它函数只有被main函数直接或间接调用时才会执行,如果未被main函数调用,则在整个程序中无用。
(2) 从某种角度来看,main函数代表了当前程序的整体。main函数的开始标志着整个程序的执行开始,而其结束返回则标志着整个程序的结束。
(3) 执行这个程序的实体就是main函数的调用者。
03 Linux下程序执行的本质
(1) 在Linux中,通过命令行输入./xx来执行一个可执行程序。
(2) 我们可以使用shell脚本来调用和执行一个程序(后续将展示一个shell脚本)。
(3) 在程序中也可以通过fork和exec来调用执行一个程序,这在Linux应用编程的文章中有详细介绍,参考《Linux系统下进程编程之exec族函数解析(四)》。
(4) 尽管有多个执行程序的方法,但其本质是相同的。在Linux中,执行一个新程序意味着创建、加载、运行并最终终止一个进程。新进程是由父进程通过fork创建的。
(5) 命令行本身是一个进程(即我们在Linux中打开的一个终端)。在命令行中执行./xx时,新程序作为命令行进程的子进程运行。总之,一个程序由其父进程调用。
(6) 总结:main函数的返回值传递给调用它的父进程。父进程为何需要这个返回值?父进程通过调用子进程执行任务,子进程完成后通过main函数的返回值向父进程反馈执行结果(0表示成功,负数表示失败)。
04 实践验证获取main函数的返回值
(1) 使用shell脚本执行程序并获取返回值:
#include <stdio.h>
int main(void)
{
return 0;
}然后创建一个shell脚本:

shell脚本内容如下:
#!/bin/sh ./a.out echo $?
执行结果为:

说明:在Linux shell中,$?符号用于存储和表示上一个程序的执行结果(这里是./a.out)。#!/bin/sh是编写shell脚本的标准格式。
argc和argv的解析
01 main函数的标准写法
标准的main函数写法有三种:
int main(void) int main(int argc, char **argv) int main(int argc, char *argv[])
02 main函数的参数来源
(1) main函数所在程序的父进程向main函数传递参数,并接收其返回值。
03 main函数为何需要参数
(1) 虽然main函数可以不带参数,即父进程调用子进程并传递参数并非必须。int main(void)这种形式即为不传递参数。
(2) 有时为了增加程序的灵活性,我们希望在执行程序时通过参数来控制程序的运行,达到无需重新编译就能改变程序运行结果的效果。下面以一个简单程序为例,展示这种灵活性:

如果要修改程序内容,必须更改源代码,这种灵活性不够。接下来,我们将通过向main函数传递参数来提高程序的灵活性。
04 如何向main函数传递参数
(1) 通过argc和argv这两个C语言预定义的参数来实现。
(2) argc是一个int类型,表示在运行程序时传递给main函数的参数个数;argv是一个字符串数组,用于存储多个字符串,每个字符串即为传递给main函数的一个参数。argv[0]是第一个参数,argv[1]是第二个参数,以此类推。

运行结果:

然后在执行程序时,可以添加参数:

注意:
(1) main函数的参数都是通过字符串形式传递的。
(2) 程序被调用时,各参数之间用空格分隔。
(3) 在程序内部使用argv时,最好先检查argc的值。
总结
今天的分享就到这里,关于shell脚本的教程,未来将会有专门的系列文章进行详细讲解。
C语言怎么学习?C语言怎么入门?C语言在哪学?C语言怎么学才快?不用担心,这里为大家提供了C语言速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号