在
宿主环境
中,C 程序会在操作系统的控制和支持下运行。可得到完整的标准库能力。
在独立环境中,程序开始时所调用的第一个函数,其类型和名称是由正在运行的 C 语言实现版本所决定的。除非是在嵌入式系统上进行 C 程序开发,否则程序一般都运行在宿主环境中。
在宿主环境中编译的 C 程序必须定义一个名为 main 的函数,这是程序开始时调用的第一个函数。
main()函数的定义有以下两种形式:
(1) 函数没有参数,返回值为 int 类型。
int main( void ) { /* … */ }
(2) 函数有两个参数,类型分别是 int 和 char**,返回值是 int 类型。
int main( int argc, char *argv[ ] ) { /* … */ }
这两种定义方式都符合 C 语言标准。除此之外,许多 C 的实现版本还支持第三种、非标准语法的定义方式:
int main( int argc, char *argv[ ], char *envp[ ] ) { /* … */ }
函数返回值是 int,有 3 个参数:第一个是 int,另外两个是 char**。
在上面所有的例子中,main()函数都会把最终的执行状态以整数的方式传递给操作系统。返回值如果是 0 或 EXIT_SUCCESS,就表示程序执行过程一切顺利;任何非 0 的返回值,尤其是 EXIT_FAILURE,则表示程序执行时出现了某种问题。
头文件 stdlib.h 中定义了上述的两个常量 EXIT_SUCCESS 和 EXIT_FAILURE。
main()函数不一定要有 return 语句。如果程序运行到 main()函数块的右括号(}),那么就会自动向执行环境返回状态值 0。
main()函数结束等效于调用标准库函数 exit(),main()的返回值作为 exit()的参数。
参数 argc 和 argv(也可以根据需要另外命名),代表了程序的命令行参数。它们的作用如下:
(1) argc(全称为 argument count)的值为 0 或者为命令行中启动该程序的字符串的数量。程序本身的名称也算作该字符串,也要计算进去。
(2) argv(全称为 arguments vector)是一个 char 指针数组,每个指针都独立的指向命令行中每个字符串:
数组中元素的个数,比 argc 的值多 1;最后一个元素 argv[argc] 是空指针。
如果 argc 大于 0,那么第一个字符串,argv[0],就是程序本身的名称。如果运行环境不支持程序名称,那么 argv[0] 为空。
如果 argc 大于 1,从字符串 argv[1] 到 argv[argc-1] 包含该程序命令行参数。
(3) envp(全称为 environment pointer)在非标准的、有 3 个参数的 main()函数版本中,是一个指针数组,每个指针都指向组成程序环境的一个字符串。通常,这个字符串的格式是“名称=值”。在标准 C 语言中,可以利用函数 getenv()获取得这些环境变量。
例 1 是一个简单的程序,它输出自己的名称以及从操作系统传入的命令行参数。
【例1】命令行
#include <stdio.h>
int main( int argc, char *argv[ ] )
if ( argc == 0 )
puts( "No command line available." );
{ // 输出程序的名称
printf( "The program now running: %s\n", argv[0] );
if ( argc == 1 )
puts( "No arguments received on the command line." );
puts( "The command-line arguments:" );
for ( int i = 1; i < argc; ++i ) // 将每个参数输出到不同行
puts( argv[i] );
假设我们在 Unix 系统上执行程序,输入下面的命令行:
$ ./args one two "and three"
输出结果如下:
The program now running: ./args
The command-line arguments:
and three
关注公众号「
站长严长生
」,在手机上阅读所有教程,随时随地都能学习。内含一款搜索神器,免费下载全网书籍和视频。
微信扫码关注公众号
一套完整的嵌入式开发学习路线(高薪就业版)
一套课程卖1万,TMD太贵了!
跑了3000公里,见了一位大佬
动态语言、静态语言、强类型语言、弱类型语言的区别
Java可以做什么?9种Java实际用途汇总
什么是个人品牌?如何打造个人品牌?
程序员离职会给公司带来多大的伤害?答案超出你的预料
曝光一下腾讯的工资待遇和职位级别
裁员、缩招、降薪,互联网究竟怎么了?
冒死揭露一点真相