C++学习2:main()函数深入学习
来源:互联网 发布:sql语句采用的编写语言 编辑:程序博客网 时间:2024/06/01 09:06
main()函数是每一个程序的开始,它是所有程序的入口,其它的函数都是直接换间接在main()中被调用来发挥作用的。
在程序运行时,编译器会为程序增加启动代码,由启动代码调用main()函数,从而进入程序。因此,启动代码是程序和操作系统之间的桥梁。
main()函数一般情况下有以下三种函数头定义:
1、void main(),无形参,无返回值。
2、int main(),无形参,返回一个int值,返回值用来记录程序状态。如果返回0,则代表程序正常退出;返回其它数字的含义则由系统决定。通常,返回非零代表程序异常退出。
3、int main(int argc,char *argv[]),返回一个int值,用于记录程序状态。带有两个形参:第一个形参是一个int值argc,用来统计命令行总的参数个数。第二个形参是一个指向字符串的指针数组argv[],是程序的路径名称和输入的变量。在系统中使用空格把各个字符串隔开,一般情况下,把程序的路径和名字赋值给argv[0],后面的argv[1]、argv[2]等用来存储输入的变量。
这种方法主要是为了方便修改深入参数,每次修改时,不需要从代码中改变变量值,只要在调试中改动命令参数即可,其具体使用方法如下:
现在我编写了一个很简单的程序,用来演示下int main(int argc,char *argv[])的功能。
#include "iostream"#include <stdlib.h>int main(int argc, char ** argv){int i;printf("argc = %d \n",argc);for (i=0; i < argc; i++)printf("这是第%d个参数,为 %s.\n", i+1,argv[i]);system("pause");return 0;}
可见,此时并没有输入命令,默认情况下argv[0]是用来存放程序的路径和名字,此时argc = 1,程序就只进行了一次读取。
那怎么样来给argc和argv[]赋值呢?有两个方法:
1、cmd命令行
首先对程序进行编译,然后通过命令行输入程序路径和名称+变量,如D:\Test\Test1\Debug\Test1.exe a b,共三个参数,此时,argc会被置为3,D:\Test\Test1\Debug\Test1.exe将会被赋给argv[0],a赋给argv[1],b赋给argv[2]。
运行效果如下:
2、VS中配置命令参数
右击项目打开属性,选择配置属性中的调试,修改其命令参数。
运行效果和上面相同。这里解释下,没有输入命令的情况下,其程序的路径和名字是在VS自动赋给argv[0]的,因此会有刚才的结果。
注意,是存在不包含main()函数一些例外情况。例如在Windows编程中,可以编写一个动态链接库(DLL)模块,这是其他Windows程序可以使用的代码。由于DLL独立的程序,incident不需要main()函数。用于专门环境的程序——如机器人中的控制器芯片——可能不需要main()函数。有些编程环境提供了一个框架程序,改程序调用一些非标准函数如_tmain(),这种情况下,有一个隐藏的main(),它调用t_main()。但是常规的独立程序都是需要main()函数的。
- C++学习2:main()函数深入学习
- [C学习]Main函数
- C语言学习之main函数解析
- Gearmand学习2:main函数
- 深入学习main()和UIApplication
- 深入学习c#(2)
- main函数学习
- 个人学习:main()函数
- GeekOS源代码学习(2)Main函数
- C语言深入学习--checklist6:函数、变量
- linux 0.11 内核学习 -- main.c,调用函数而已。
- Linux C编程学习--main()函数简析
- Linux C编程学习--main()函数简析
- JAVA学习 (1) main函数
- 深入学习main()返回值问题
- C++学习之main函数以及带形参的main函数
- C51 main 函数学习以及函数跳转
- Socket函数深入学习
- Android中的ImageLoader实现思路
- MD5算法实现
- 如何检查 Android 应用的内存使用情况
- 我的liunx学习笔记之访问网络共享文件系统
- 资深数据库SQL工程师整理的常用MySQL语句
- C++学习2:main()函数深入学习
- DeepFashion: Powering Robust Clothes Recognition and Retrieval with Rich Annotations – CVPR 2016
- Java基础--IO-文件的切割和合并
- 华为机试——魔术索引
- maven的使用教程
- CSAPP第二章-信息的表示和处理
- Oracle数据库语句大全
- 如何在无序数组中寻找两个出现奇数次整数
- 二叉树的5个性质