C++基础---主函数

1. 主函数

1.1 主函数的定义

  • 一般而言,编写一个能运行在操作系统上的程序,都需要一个主函数
  • 主函数意味着建立一个独立进程,既是程序的入口,又是程序的出口;
  • 主函数的返回值类型必须是int,这样返回值才能传递给程序的激活者(如操作系统);
  • 主函数的返回值用于说明程序的退出状态,如果返回0,则代表程序正常退出,如果返回非0,则代表程序异常退出
    注:最好不要把太多的细节方面的逻辑直接放在主函数内,这样不利于维护和扩展。主函数应该尽量简洁,具体的实现细节应该封装到被调用的子函数里面去。

1.2 主函数的定义形式

  • main函数中的参数列表为空

    int main(void)
    {
        //函数体
        return 0;
    } 
  • main函数中的参数列表带两个参数

    int main(int argc, char *argv[])    
    {
        //函数体
        return 0; 
    }

    注:C++ 之父 Bjarne Stroustrup 在他的主页上的FAQ中明确地写着”The definition void main(){ /* … */ } is not and never has been C++, nor has it even been C.”(译:void main()从来就不存在于C++或者C)。

1.3 关于void main

  • 在C和C++中,不接收任何参数也不返回任何信息的函数原型为“void foo(void);”。可能正是因为这个,所以很多人都误认为如果不需要程序返回值时可以把main函数定义成void main(void) ,这是错误的
  • main函数的返回值应该定义为int类型,C和C++标准中都是这样规定的。虽然在一些编译器中,void main 可以通过编译(如vc6),但并非所有编译器都支持 void main ,因为标准中从来没有定义过 void main 。g++3.2 中如果main函数的返回值不是int类型,就根本通不过编译。而 gcc3.2 则会发出警告。所以,如果你想你的程序拥有很好的可移植性,请一定要用int main

1.4 int main(void)

  • 不需要从命令行中获取参数

    int main(void)
    {
        //函数体内容
        return 0;
    } 

1.5 int main(int argc, char* argv[])

  • 需要从命令行中获取参数
  • int main(int argc, char* argv[])是UNIX和Linux中的标准写法,而int main()只是UNIX及Linux默许的用法;
  • argc为整数;
  • argv为指针的指针,char** argv 、char* argv[]、char argv[][];
  • 没有任何参数输入的条件下,数组argv并不为空,而是含有一个参数,也就是当前执行文件的路径及文件名,这个可执行文件存储在argv[0]中;
  • 利用VS2010的项目属性->调试->命令参数设置输入参数“My name is Cainv.”,继续运行程序,观察输出参数:

    
    #include <iostream>
    
    using namespace std;
    int main(int argc, char* argv[])
    {
        cout<<argc<<endl;
        for(int i=0; i<argc; i++)
        {
            cout<<argv[i]<<endl;
        }
        system("pause");
        return 0;
    }
    =>5->共5个,1个是路径(固定),其余4个是参数设置
      应用程序路径->argv[0]
      My->argv[1]
      name->argv[2]
      is->argv[3]
      Cainv.->argv[4]

    这里写图片描述

1.6 main函数的执行前后

  • main函数被执行前 : 一些全局变量、对象和静态变量、对象的空间分配和赋初值就是在执行main函数之前 ;
  • main函数被执行后 :main函数执行完后,还要去执行一些诸如释放空间、释放资源使用权等操作,全局对象的析构函数会在main函数之后执行,用atexit注册的函数也会在main之后执行;

    
    #include<iostream>
    
    using namespace std;
    class Decorator
    {
    public:
        Decorator()
        {
            cout << "I'm before main!" << endl;
        }
        ~Decorator()
        {
            cout << "I'm after main!" << endl;
            system("pause");
        }
    };
    
    Decorator deco;//定义全局对象
    
    int main()
    {
        cout << "I'm in main!" << endl;
        //system("pause");
        return 0;
    }
    =>打开~Decorator()中的system("pause");的注释,关闭int main()中的system("pause");的注释
      I'm before main!
      I'm in main!
      I'm after main!
    =>打开int main()中的system("pause");注释,关闭~Decorator()中的system("pause");的注释
      I'm before main!
      I'm in main!

参考文献:
[1]《C++全方位学习》范磊——第十章
[2]《C++程序设计教程(第二版)》钱能——第五章、第六章、第七章
[3]《C++ Primer(第5版)》王刚 杨巨峰——第一章、第六章
[4] 百度搜索关键字:C++函数、主函数

  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
*1.1 从C到C++ 计算机诞生初期,人们要使用计算机必须用机器语言或汇编语言编写程序. 世界上第一种计算机高级语言诞生于1954年,它是FORTRAN语言.先后出现了 多种计算机高级语言.其中使用最广泛.影响最大的当推BASIC语言和C语言 . BASIC语言是1964年在FORTRAN语言的基础上简化而成的,它是为初学 者设计的小型高级语言. C语言是1972年由美国贝尔实验室的D.M.Ritchie研制成功的.它不是为 初学者设计的,而是为计算机专业人员设计的.大多数系统软件和许多应用软件 都是用C语言编写的. 但是随着软件规模的增大,用C语言编写程序渐渐显得有些吃力了. C++是由AT&T Bell(贝尔)实验室的Bjarne Stroustrup博士及其同事于20世 纪80年代初在C语言的基础上开发成功的.C++保留了C语言原有的所有优点, 增加了面向对象的机制. C++是由C发展而来的,与C兼容.用C语言写的程序基本上可以不加修改 地用于C++.从C++的名字可以看出它是C的超集.C++既可用于面向过程的结 构化程序设计,又可用于面向对象的程序设计,是一种功能强大的混合型的程序设 计语言. C++对C的―增强‖,表现在两个方面: (1) 在原来面向过程的机制基础上,对C语言的功能做了不少扩充. (2) 增加了面向对象的机制. 面向对象程序设计,是针对开发较大规模的程序而提出来的,目的是提高软 件开发的效率. 不要把面向对象和面向过程对立起来,面向对象和面向过程不是矛盾的,而 是各有用途.互为补充的. 学习C++,既要会利用C++进行面向过程的结构化程序设计,也要会利用C++ 进行面向对象的程序设计.本书既介绍C++在面向过程程序设计中的应用,也介 绍C++在面向对象程序设计中的应用. *1.2 最简单的C++程序 例1.1 输出一行字符: ―This is a C++ program.‖. 程序如下: #include <iostream> //包含头文件iostream using namespace std; //使用命名空间std int main( ) { cout<<″This is a C++ program.″; return 0; } 在运行时会在屏幕上输出以下一行信息: This is a C++ program. 用main代表―主函数‖的名字.每一个C++程序都必须有一个 main 函数 .main前面的int的作用是声明函数的类型为整型.程序第6行的作用是向操作 系统返回一个零值.如果程序不能正常执行,则会自动向操作系统返回一个非零 值,一般为-1.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值