C++:main 函数和命令行参数
main 函数和命令行参数
所有 c + + 程序必须具有 main 函数。 如果尝试编译没有函数的 c + + 程序 main ,编译器将引发错误。 (动态链接库和 static 库没有 main 函数。 ) main 函数是源代码开始执行的位置,但在程序进入 main 函数之前,所有 static 没有显式初始值设定项的类成员都将设置为零。 在 Microsoft c + + 中,全局 static 对象还会在进入之前进行初始化 main 。 一些限制适用于 main 不适用于任何其他 c + + 函数的函数。 main 函数:
无法重载 。
不能声明为 inline 。
不能声明为 static 。
无法获取其地址。
不能从程序调用。
main函数签名
该 main 函数不具有声明,因为它内置于该语言中。 如果是这样,的声明语法将如下所 main 示:
int main();
int main(int argc, char *argv[]);
如果未在中指定返回值 main ,则编译器将提供返回值零。
标准命令行参数
的参数 main 允许自变量的命令行分析。 argc 和 argv 的类型由语言定义。 名称 argc 和 argv 是传统的,但你可以将其命名为你喜欢的任何名称。
自变量定义如下所示:
argc
一个整数,其中包含后面的参数的计数 argv 。 argc 参数始终大于或等于1。
argv
表示由杂注用户输入的命令行自变量的以 null 结尾的字符串的数组。 按照约定, argv[0] 是用于调用程序的命令。 argv[1] 是第一个命令行参数。 命令行中的最后一个参数为 argv[argc - 1] ,并且 argv[argc] 始终为 NULL。
备注
按照约定, argv[0] 是程序的文件名。 但是,在 Windows 上,可以使用来生成进程 CreateProcess 。 如果同时使用第一个和第二个参数 (lpApplicationName 和 lpCommandLine) ,则 argv[0] 可能不是可执行的名称。 您可以使用 GetModuleFileName 检索可执行文件名称及其完全限定路径。
Microsoft 专用扩展
以下各节介绍了特定于 Microsoft 的行为。
wmain函数和 _tmain 宏
如果将源代码设计为使用 Unicode 宽 char acters,则可以使用特定于 Microsoft 的 wmain 入口点,这是的 char acter 版本 main 。 下面是的有效声明语法 wmain :
int wmain();
int wmain(int argc, wchar_t *argv[]);
你还可以使用 Microsoft 特定的 _tmain ,它是在中定义的预处理器宏 tchar.h 。 _tmain 解析为,