main
函数和程序执行
每个 C 程序都有必须命名为 main
的主函数。 main
函数充当程序执行的起点。 它通常通过将调用定向到程序中的其他函数来控制程序执行。
一些限制适用于 main
函数,而不适用于任何其他 C 函数。 main
函数:
- 无法声明为
inline
。 - 无法声明为
static
。 - 无法提取其地址。
- 无法从程序调用。
main
函数签名
main
函数没有声明,因为它内置于语言中。 如果有,则 main
的声明语法如下所示:
int main( void );
int main( int argc, char *argv[ ] );
int main( int argc, char *argv[ ], char *envp[ ] );
main
函数使用其中一个签名隐式声明。 定义 main
函数时,可以使用其中的任何签名。 Microsoft 编译器还允许 main
在未返回值时返回类型 void
。 wmain
的 argv
和 envp
参数还可以定义为类型 char**
。 有关参数的详细信息,请参阅参数说明。
备注
源程序中的函数执行一个或多个特定任务。 main
函数可调用这些函数来执行其各自的任务。 当 main
调用另一个函数时,它会将执行控制权交给该函数,以便执行在该函数中的第一个语句处开始。 当执行 return
语句或到达函数末尾时,函数将控制权返回给 main
。
可以声明任何函数(包括 main
)以包含参数。 术语“参数”或“形参”指的是接收传递到函数的值的标识符。 有关将实参传递到形参的信息,请参阅参数。 当一个函数调用另一个函数时,被调用的函数将从实施调用的函数接收其参数的值。 这些值称为参数。 可以将形参声明为 main
,以便让它使用函数签名中显示的格式从命令行接收实参。
在将信息传递给 main
函数时,通常将参数命名为 argc
和 argv
,尽管 C 编译器不需要这些名称。 传统上,如果将第三个参数传递给 main
,该参数将命名为 envp
。 argc
、argv
和 envp
的类型由 C 语言定义。 还可以将 argv
声明为 char** argv
,将 envp
声明为 char** envp
。 本节后面的示例演示如何使用这三个参数访问命令行自变量。 以下各节说明了这些参数。
如果你的代码遵循 Unicode 编程模型,则可以使用 main
的 Microsoft 特定的宽字符版本 wmain
作为程序的入口点。 有关 main
的此宽字符版本的详细信息,请参阅使用 wmain
。
main
终止
程序通常在从 main
返回或到达其末尾时停止执行,虽然它也可能由于各种原因在程序的其他点终止。 例如,检测到某些错误条件时,你可能需要强制终止程序。 为此,可以使用 exit
函数。 有关 exit
的详细信息和用法示例,请参阅 exit
。