码迷,mamicode.com
首页 > 编程语言 > 详细

C++ main()函数及其参数

时间:2016-03-14 18:18:43      阅读:223      评论:0      收藏:0      [点我收藏+]

标签:

1、首先,想想C/C++在main函数之前和之后会做些什么?

我们看看底层的汇编代码:

__start:

     :
     init stack;
     init heap;
     open stdin;
     open stdout;
     open stderr;
     :
     push argv;
     push argc;
     call _main; (调用 main)
     :
     destory heap;
     close stdin;
     close stdout;
     close stderr;
     :

     call __exit;

我们可以看到main函数也只是其中的一个函数调用而已。

在调用main函数之前,会先进性初始化栈,堆,打开标准输入,输出,错误流,把参数压栈。还有一些全局变量、对象和静态变量、对象的空间分配和赋初值。

在调用main函数之后,要销毁堆内存,关闭标准输入,输出,错误流。

这些都是编译器帮助我们自动生成的,帮助我们启动main函数。

 

2、main()函数及其参数

C++标准允许主函数main()有或没有参数列表。 您能在主函数main()中使用一个或更多的参数。 如下是一些惯例:
int main(int argc, char *argv[])
第一个参数argc,指明有多少个参数将被传递给主函数main(),真正的参数以字符串数组(即第2个参数argv[])的形式来传递。每一个字符串均有自己意思。在这句法上面, 记住, argc代表参数的数量, main()函数本身是在索引0为的第一参数。 所以, argc总是至少为1 。它的总数是从argv列阵的元素数目。 这意味着, argv[0]的值是至关重要的。 如果用户在控制台环境中程序名称后键入含参数的指令, 那么随后的参数将传递给argv[1]。

例如:在vs2015中构建代码,

#include <stdio.h>
int main(int argc, char *argv[])
{
	int i;
	for (i = 0; i < argc; i++)
		printf("Argument %d is %s.\n", i, argv[i]);
	return 0;
}

保存并编译后,程序名称为---vs2015之main参数测试,在cmd中键入:

技术分享

简单说,这两个就是用于接受参数和记录参数信息的。

因为在LINUX或DOS中, 使用命令后面一般都加上参数等

 

3、C/C++中如何在main()函数之前执行一条语句?

(1)在C++中,利用全局变量和构造函数的特性,通过全局变量的构造函数执行

#include <Iostream>
using namespace std;

class TestClass
{
        public:
                TestClass();
};


TestClass::TestClass()
{
        cout<<"TestClass"<<endl;
}

TestClass Ts;//定义个全局变量,让类里面的代码在main之前执行

int main()
{
        cout<<"main"<<endl;

        return 0;
}

 执行结果:

技术分享

(2)、全局变量的赋值函数

#include <iostream>
using namespace std;

int foo(void);
int i = foo();

int foo(void)
{
	cout << "before main" << endl;
	return 0;
}

int main(void)

{
	cout << "i‘m main" << endl;
}

执行结果:

技术分享
(3)、指定入口点,入口点中调用原来的入口点

C++ main()函数及其参数

标签:

原文地址:http://www.cnblogs.com/carsonzhu/p/5276317.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!