C 参考手册
- C 语言
- C 的历史
- 基本概念
- 表达式
- 声明
- 初始化
- 函数
- 语句
- 静态断言
- 字符常量
- 函数声明
- 函数定义
- 转义序列
- 翻译阶段
- 标识符
- 作用域
- 生存期
- 查找与命名空间
- ASCII 码表
- 类型
- 遵从性
- 算术类型
- restrict 类型限定符
- 类型
- 对象与对齐
- 主函数
- 未定义行为
- 内存模型
- if 语句
- switch 语句
- for 循环
- while 循环
- do-while 循环
- continue语句
- break 语句
- goto语句
- return 语句
- 值类别
- 求值顺序
- 整数常量
- 浮点常量
- 字符串字面量
- 复合字面量
- 常量表达式
- 隐式转换
- 成员访问运算符
- 逻辑运算符
- 比较运算符
- 算术运算符
- 赋值运算符
- 自增/自减运算符
- 其他运算符
- sizeof 运算符
- _Alignof 运算符
- 转型运算符
- C 运算符优先级
- 泛型选择
- 标量初始化
- 数组初始化
- 结构体与联合体初始化
- 指针声明
- 数组声明
- 枚举
- 存储类指定符
- const 类型限定符
- volatile 类型限定符
- 结构体声明
- 联合体声明
- 位域
- _Alignas
- typedef 声明
- 原子类型
- 外部及试探性定义
- inline 函数指定符
- _Noreturn 函数指定符
- 变长参数
- 内联汇编
- 可分析性
- 替用运算符及记号
- C 关键词
- 预处理器
- C 标准库头文件
- 类型支持
- 程序支持工具
- 变参数函数
- 错误处理
- 动态内存管理
- 日期和时间工具
- 字符串库
- 算法
- 数值
- 文件输入/输出
- 本地化支持
- 原子操作库
- 线程支持库
- 实验性 C 标准库
- 有用的资源
- 符号索引
- 注释
主函数
每个要在宿主环境运行的编码 C 程序都含有称作 main
的函数定义(非原型),它是函数的受指定起始点。
int main (void) { body }
|
(1) | ||||||||
int main ( int argc, char *argv[]) { body }
|
(2) | ||||||||
/* 其他实现定义签名 */ (C99 起) | (3) | ||||||||
参数
argc | - | 代表程序所运行的环境传递给程序的参数数量。 |
argv | - | 指向 argc + 1 个指针的数组的首元素的指针。数组末元素为空指针,而若前面有元素,则它们指向表示从宿主环境传递给程序的参数的字符串。若 argv[0] 不是空指针(或等价地 argc > 0 ),则它指向表示程序名的字符串。若程序名从宿主环境不可用则该字符串为空。 |
名称 argc
和 argv
,还有这些参数的类型表示是任意的: int main(int ac, char** av) 同样合法。
main
的常见实现定义形式是 int main(int argc, char *argv[], char *envp[]) ,其中第三参数类型为 char*[]
,指向指向宿主环境变量的指针的数组。
返回值
若使用返回语句,则返回值会用作隐式调用 exit() 的参数(细节见下)。值零和 EXIT_SUCCESS 指示成功终止,值 EXIT_FAILURE 指示不成功终止。
解释
在程序启动时,初始化所有静态存储期对象后调用 main
函数。它指明执行于宿主环境(即在操作系统中)的程序入口点。任何独立程序(引导程序、操作系统核心等)的入口点的名称和类型是实现定义的。
主函数的双参数形式允许从执行环境传递任意的多字节字符串(常称作命令行参数)。指针 argv[1] .. argv[argc-1]
指向每个这些字符串的首字符。 argv[0]
指向代表用于调用程序自身的名称的,空终止多字节字符串的首字符(或者若宿主环境不支持此做法,则保证 argv[0][0]
为零)。
若宿主环境不能一同提供大写和小写字母,则转换命令行参数为小写。
字符串可修改,而且任何修改会留存到程序终止时,尽管这些修改不会传播回宿主环境:例如能以 strtok 使用它们。
argv
所指的数组大小至少是 argc+1
,并保证末元素 argv[argc]
为空指针。
main
函数拥有几个特殊属性:
main
的初次调用(但不是任何后继、递归调用)返回,等价于以主函数返回值为参数执行 exit 函数(将调用 atexit 所注册的函数,冲入并关闭所有流,删除 tmpfile 所创建的文件,并返还控制给执行环境)。
若 main 函数执行不指定值的 return ,或同样地未执行 return 就抵达结尾的 } ,则返回给宿主环境的终止状态未定义。 |
(C99 前) |
若 main 函数的返回类型与 int 不兼容(如 void main(void) ),则返回给宿主环境的值未指定。若返回类型与 int 兼容且控制抵达结尾的 } ,则返回给执行环境的值与如同执行 return 0; 的结果相同。 |
(C99 起) |
示例
演示如何告知程序其寻找输入处及写结果处。 调用: ./a.out indatafile outdatafile
可能的输出:
argc = 3 argv[0] --> ./a.out argv[1] --> indatafile argv[2] --> outdatafile argv[argc] = (nil)
引用
- C11 standard (ISO/IEC 9899:2011):
- 5.1.2.2.1 Program startup (p: 13)
- C99 standard (ISO/IEC 9899:1999):
- 5.1.2.2.1 Program startup (p: 12)
- C89/C90 standard (ISO/IEC 9899:1990):
- 5.1.2.2 Hosted environment