【C语言】09-深入解析main函数
作者简介Nebula嵌入式 | 嵌入式软件工程师技术背景22届普通二本院校毕业生专注于嵌入式软件开发MCU/RTOS/Linux应用/Linux驱动开发 持续学习中内容创作小红书、抖音、B站同名账号分享嵌入式知识和日常工作欢迎关注商务合作/需要学习资料联系️nebula0419备注商务合作/学习资料修订记录版本修改时间修改内容1.02023.4.6初稿main 与 argc/argv2.02024.5.21补充命令行传参场景说明3.02026.3.1优化排版4.02026.7.30修正 argc 遍历示例、补充小结4.12026.8.1细化 argc/argv 布局与遍历注意点补强退出码与应用场景说明一、前言在 C 语言学习与开发中main是宿主环境hosted environment如 Linux/Windows 用户态程序下程序的入口。独立环境freestanding常见于裸机启动可能没有标准main由启动文件跳到自定义入口本文以常见的 Linux / 桌面 C 程序为主。本文将从语法格式、声明形式、argc/argv细节入手结合可运行示例说明命令行参数的用法。读图要点宿主环境Linux/桌面入口是main裸机 freestanding 常由启动文件跳到自定义入口。本文以常见main为主MCU 工程以启动文件与链接脚本为准。二、main 函数的语法格式读图要点返回int0成功非 0 错误可供脚本读取。argc含程序名argv是指针数组且argv[argc] NULL。int main(int argc, char *argv[]) { return 0; }核心要素返回值类型int。在 Linux 中返回0表示正常退出非 0 表示错误可由调用方或脚本读取。argcargument count命令行参数个数含程序名本身。argvargument vector指向参数字符串的指针数组argv[argc]为NULL。三、main 函数声明读图要点无参用int main(void)收参用char *argv[]或等价的char **argv。不要写int main()在 C 中表示参数未指定规范性差。形式一不接收命令行参数int main(void) { return 0; }建议使用int main(void)不要写int main()——后者在 C 中表示参数列表未指定可读性与规范性较差。形式二接收命令行参数两种等价写法int main(int argc, char *argv[]) { return 0; } int main(int argc, char **argv) { return 0; }四、参数说明读图要点./test 123 abc→argc3argv[0]程序名其后为用户参数末尾NULL。自定义参数个数 argc - 1有效下标0 ~ argc-1。参数 / 用法说明argc参数个数至少为 1程序名argv[0]通常为程序路径或名称argv[1] … argv[argc-1]用户传入的参数argv[argc]固定为NULL自定义参数个数 argc - 1有效下标为0 ~ argc-1。五、代码示例读图要点推荐for (i 0; i argc; i)或走到argv[i] NULL。不要先while (argc--)再按下标用已被改掉的argc若要递减另存副本。下面用下标遍历打印参数推荐写法。不要先while (argc--)再按argc循环——前者会改掉argc后者就会失效。#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]); } /* 也可写到 argv[argc]NULL 为止 */ for (i 0; argv[i] ! NULL; i) { printf(via NULL: argv[%d] %s\n, i, argv[i]); } return 0; /* 0 表示成功退出 */ }编译并运行假设可执行文件名为test./test 123 abc此时argc为 3对应./test、123、abc。若要边走边减计数应另存副本且与下标循环二选一即可int n argc; char **p argv; while (n--) { printf(%s\n, *p); }六、应用场景读图要点常见用途运行时配置、exec传参、批量任务区间。argv元素都是字符串数值需自行strtol/atoi并做校验。6.1 运行时动态配置无需改代码重编译即可切换行为例如日志级别./app debug/./app info运行模式./server tcp/./server udp文件路径./read_file /home/data.txt6.2 进程启动传参父进程通过exec系列函数启动子进程时可把参数写入子进程的argv完成简单配置传递。6.3 批量任务例如./process_data 100 200表示处理区间提高复用性。七、小结读图要点return 0或exit(0)表示成功非 0 表示错误便于脚本与自动化检测。错误码尽量语义明确不要随意返回随意整数。宿主环境下用int main(void)或int main(int argc, char *argv[])。argc含程序名argv[argc]为NULL成功退出返回0。遍历参数用下标或argv[i] ! NULL避免先破坏argc再循环。嵌入式裸机可能没有标准main以启动文件与链接脚本为准。

相关新闻

长沙中央空调维修-欧米到家金牌师傅全城区30分钟火速上门覆盖芙蓉/雨花/岳麓/天心/开福等全域各区 专治不制冷/漏水/异响/跳闸

长沙中央空调维修-欧米到家金牌师傅全城区30分钟火速上门覆盖芙蓉/雨花/岳麓/天心/开福等全域各区 专治不制冷/漏水/异响/跳闸

在长沙,中央空调突发故障是家庭、商铺与写字楼的高频烦心事——中央空调不制冷、内机漏水、外机异响跳闸、开机没反应等问题,往往在盛夏高温、回南天潮湿时节集中爆发。很多用户会搜索“长沙中央空调维修”“长沙附近中央空调上门师傅”“长沙中央空调漏…

2026/9/28 17:11:02 阅读更多 →
SSDTTime黑苹果配置终极指南:一键生成DSDT补丁的完整教程

SSDTTime黑苹果配置终极指南:一键生成DSDT补丁的完整教程

SSDTTime黑苹果配置终极指南:一键生成DSDT补丁的完整教程 【免费下载链接】SSDTTime SSDT/DSDT hotpatch attempts. 项目地址: https://gitcode.com/gh_mirrors/ss/SSDTTime 你是否在为黑苹果配置中的ACPI补丁问题而烦恼?面对复杂的DSDT和SSDT补丁…

2026/10/2 12:18:56 阅读更多 →
分布式系统时钟精度:Accuracy、Tolerance与Jitter的深度解析与实战优化

分布式系统时钟精度:Accuracy、Tolerance与Jitter的深度解析与实战优化

1. 从一次线上故障说起:为什么时钟的“准”与“不稳”如此致命? 去年,我们团队负责的一个分布式实时数据处理系统,在业务高峰期突然出现了大量数据乱序和重复计算的问题。监控大盘上,各个节点的处理延迟曲线像心电图一…

2026/9/26 13:03:09 阅读更多 →

最新新闻

web-video-presentation 章节开发完全指南:从“视频感“设计到代码红线与完工自检

web-video-presentation 章节开发完全指南:从“视频感“设计到代码红线与完工自检

人工智能AI 技能/插件提示工程 【免费下载链接】garden-skills ConardLis open-source Skills collection, featuring web design, knowledge retrieval, image generation, and more. 项目地址: https://gitcode.com/GitHub_Trending/we/garden-skills 点击查看 免…

2026/10/4 10:22:05 阅读更多 →
用不完 Claude Code 额度?把 settings 改到 TaoToken 还能这样高效调用

用不完 Claude Code 额度?把 settings 改到 TaoToken 还能这样高效调用

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 10:22:05 阅读更多 →
在 Rust 中构建 LLM 驱动的 MCP 客户端:mcp-for-beginners 示例的配置、运行与源码解析

在 Rust 中构建 LLM 驱动的 MCP 客户端:mcp-for-beginners 示例的配置、运行与源码解析

教程文档人工智能 【免费下载链接】mcp-for-beginners This open-source curriculum introduces the fundamentals of Model Context Protocol (MCP) through real-world, cross-language examples in .NET, Java, TypeScript, JavaScript, Rust and Python. Designed for deve…

2026/10/4 10:22:05 阅读更多 →
Pulsar的Topic、Subscription和Cursors工作原理:从消息模型到消费位点管理

Pulsar的Topic、Subscription和Cursors工作原理:从消息模型到消费位点管理

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 10:22:05 阅读更多 →
工业控制计算机在数控机床中的应用:从数据采集到边缘智能

工业控制计算机在数控机床中的应用:从数据采集到边缘智能

数控机床这个行业,我接触了快十年。早些年提起工业控制计算机,很多人脑子里还是“工控机就是个耐用的电脑主机”这种印象,觉得它干的是显示界面、跑个组态软件之类的边角料活。但这几年跑现场下来,我越来越明显地感觉到一个变化&a…

2026/10/4 10:22:05 阅读更多 →
嵌入式多态实战:5种零开销C/C++实现方案

嵌入式多态实战:5种零开销C/C++实现方案

1. 项目概述:为什么嵌入式里谈多态,不是“炫技”而是“刚需”在嵌入式软件设计中,“多态”这个词常被初学者误读为C高级特性的花架子——毕竟我们写的代码要跑在几十KB RAM、主频几十MHz的MCU上,哪有闲心搞虚函数表、RTTI这些“重…

2026/10/4 10:21:05 阅读更多 →

日新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 10:36:31 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 9:43:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:36 阅读更多 →