int main参数详解

合集下载

main函数的c++标准

main函数的c++标准

main函数的c++标准在C++中,main函数是程序的入口点,所有的C++程序都必须包含这个函数才能正常运行。

main函数有两个常用的标准写法,即:1. int main()2. int main(int argc, char* argv[])第一种写法是不带参数的main函数,它表示程序不接受命令行参数,返回值是一个整数类型。

这种写法在大多数情况下都足够使用。

第二种写法是带参数的main函数,它表示程序可以接受命令行参数,参数个数由argc表示,参数内容由argv数组存储。

argc是一个整数类型,表示参数个数;argv是一个指向字符指针数组的指针,每个指针指向一个命令行参数的字符串。

以下是两种写法的示例代码:1. int main()```cpp#include <iostream>int main(){// 程序逻辑代码return 0;```2. int main(int argc, char* argv[])```cpp#include <iostream>int main(int argc, char* argv[]){// 程序逻辑代码return 0;}```当程序运行时,操作系统会调用main函数作为程序的入口点,并传递相应的参数。

如果使用第一种写法,程序会直接进入main函数中,执行函数体内的代码。

在函数体内,我们可以编写程序的逻辑代码,来实现相应的功能。

最后,通过return语句返回一个整数值,一般来说,返回0表示程序执行成功,其他返回值表示程序执行失败。

如果使用第二种写法,程序可以接受命令行传递的参数。

argc表示参数个数,argv是一个指向字符指针数组的指针,可以通过遍历argv数组来依次获取命令行传递的参数。

下面是一个带参数的main函数的示例代码:```cpp#include <iostream>int main(int argc, char* argv[]){if (argc > 1) {std::cout << "命令行参数个数:" << argc - 1 << std::endl; std::cout << "命令行参数内容:" << std::endl;for (int i = 1; i < argc; ++i) {std::cout << argv[i] << std::endl;}} else {std::cout << "没有命令行参数" << std::endl;}return 0;}```在上述示例代码中,通过判断argc的值,可以确定是否有命令行参数传递给程序。

main函数与命令行参数

main函数与命令行参数

main函数与命令⾏参数main函数的概念C语⾔中main函数称之为主函数⼀个c程序从main函数开始执⾏的下⾯的main函数定义正确吗?main函数的本质main函数是操作系统调⽤的函数操作系统总是将main函数作为应⽤程序的开始操作系统将main函数的返回值作为程序的退出状态例⼦1:main函数的返回值test.c#include<stdio.h>int main(){printf("hello world");return 99;}gcc test.c -o test./testecho $? --> 99test2.c#include<stdio.h>int main(){printf("hello world2");return 0;}gcc test2.c -o test2./test && ./test2 --> hello world操作系统认为test不是正常退出,发⽣短路main函数的参数程序执⾏时可以向main函数传递参数例⼦2:main函数的参数#include <stdio.h>int main(int argc, char* argv[], char* env[]){int i = 0;printf("============== Begin argv ==============\n");for(i=0; i<argc; i++){printf("%s\n", argv[i]);}printf("============== End argv ==============\n");printf("\n");printf("\n");printf("\n");printf("============== Begin env ==============\n");for(i=0; env[i]!=NULL; i++){printf("%s\n", env[i]);}printf("============== End env ==============\n"); return 0;}⼩技巧main函数⼀定是程序执⾏的第⼀个函数吗?例⼦2:gcc中的属性关键字#include <stdio.h>#ifndef __GNUC__#define __attribute__(x)#endif__attribute__((constructor))void before_main(){printf("%s\n",__FUNCTION__); //gcc拓展宏代表函数名}__attribute__((destructor))void after_main(){printf("%s\n",__FUNCTION__);}int main(){printf("%s\n",__FUNCTION__);return 0;}⼩结⼀个c程序从main函数开始执⾏main函数是操作系统调⽤的函数main函数有参数和返回值现代编译器⽀持在main函数前调⽤其他函数。

C语言命令行参数解析函数

C语言命令行参数解析函数

C语言命令行参数解析函数在C语言中,命令行参数是在程序启动时从命令行中传递给程序的参数。

这些参数可以用来指定程序的行为,例如传递文件名、启用一些功能等。

C语言通过main函数的参数来获取命令行参数,通过解析这些参数可以实现参数的验证、处理等功能。

C语言的main函数定义如下:```cint main(int argc, char *argv[])```其中,argc表示命令行参数的个数,argv是一个指向指针数组的指针,每个指针都指向一个字符串,即命令行参数的值。

命令行参数的格式一般为 `程序名参数1 参数2 ...` ,参数与参数之间使用空格或制表符分隔。

例如:`./myprogram -f filename.txt -l`。

为了更方便地解析命令行参数,可以编写一个解析函数来处理。

下面是一个简单的命令行参数解析函数的实现:```c#include <stdio.h>#include <string.h>void parseArguments(int argc, char *argv[])for (int i = 1; i < argc; i++)//判断当前参数是否为选项if (argv[i][0] == '-')//处理选项switch (argv[i][1])case 'f'://参数以选项后的字符串形式存在printf("文件名:%s\n", argv[i+1]);i++;//跳过下一个参数break;case 'l':printf("启用l选项\n");break;case 'h':printf("启用h选项\n");break;default:printf("未知选项:%c\n", argv[i][1]); break;}}else//处理非选项参数printf("参数:%s\n", argv[i]);}}int main(int argc, char *argv[])parseArguments(argc, argv);return 0;```上述函数中,首先通过一个for循环遍历命令行中的所有参数。

带参数main 函数的理解

带参数main 函数的理解

如前面所说有参数时,参数形式必须为:void main(int argc,char *argv[]), 当一个C的源程序经过编译、链接后,会生成扩展名为.exe的可执行文件,这是可以在操作系统下直接运行的文件,即由系统来启动运行的!对于main()函数,既然不能由其它函数调用和传递参数,那只能有系统启动运行的时候自动传递参数了!
main函数是C语言的主函数,或者没参数,或者有两个参数.如果有参数,则必须是两个,第一个参数是整形变量(一般命名为argc),第二个参数是一个指向字符串的指针数组(一般命名为argv)! 如:int main(int argc,char *argv[])
在一般程序中,对main()函数始终作为主调函数处理,也就是说允许main()函数调用其他函数来传递参数,但对于有参数的形式来说,就需要向其传递参数,但是其他任何函数均不能调用main()函数,同样也无法向其传递参数,这只能有程序之外传递过来,这该怎么样去操作呢?
设命令行为:program str1 str2也就是一个由program.c经编译、链接后生成的可执行文件program.exe,其后各跟5个参数。对main()函数来说,它的参数argc记录了命令行中命令与参数的个数,共6个,指针数组的大小由参数argc的值决定,即为char *argv[6]。数组的各指针分别指向一个字符串。应当引起注意的是接收到的指针数组的各指针是从命令行的开始接收的,首先接收到的是命令,其后才是参数
在操作系统环境下,一条完整的运行命令包括两部分:命令与相应的参数。
格式为:
命令 参数1 参数2 参数3 …… 参数n;
此格式也称命令行。命令行中的命令就是可执行文件的文件名,其后所跟参数需要用空格分隔,并对命令做进一步的补充,即传递给main()函数的参数!

C++main函数命令行参数使用

C++main函数命令行参数使用

C++main函数命令⾏参数使⽤1. C/C++语⾔中的main函数,经常带有参数argc,argv,如下:int main(int argc, char** argv)int main(int argc, char* argv[])C语⾔还规定argc(第⼀个形参)必须是整型变量,argv( 第⼆个形参)必须是指向字符串的指针数组。

加上形参说明后,main函数的函数头应写为:main (int argc,char *argv[])2. 由于main函数不能被其它函数调⽤,因此不可能在程序内部取得实际值。

那么,在何处把实参值赋予main函数的形参呢? 实际上,main函数的参数值是从命令⾏上获得的。

如何在操作系统命令⾏获取参数呢?(1)在VS中设置时右键项⽬->属性->调试->命令参数,在命令参数中添加所需参数,字符串之间⽤空格分开即可。

如果是.txt⽂件,要放在当前⽬录下(.cpp所在⽬录),不然找不到。

(2)或者:假如你的程序是hello.exe,如果在命令⾏运⾏该程序,(⾸先应该在命令⾏下⽤ cd 命令进⼊到 hello.exe ⽂件所在⽬录)运⾏命令为:01. hello.exe data.txt //.txt也在.exe所在⽬录下但是应该特别注意的是,main 的两个形参和命令⾏中的参数在位置上不是⼀⼀对应的。

因为,main的形参只有⼆个,⽽命令⾏中的参数个数原则上未加限制。

argc参数表⽰了命令⾏中参数的个数(注意:⽂件名本⾝也算⼀个参数),argc的值是在输⼊命令⾏时由系统按实际参数的个数⾃动赋予的。

3. 举例:在调⽤⼀个可执⾏程序时,某些情况下需要向程序传递参数。

如我们可以在控制台中键⼊notepad.exe,回车后将执⾏记事本程序。

如果我们希望在打开notepad时同时打开⼀个⽂本⽂件,可以在notepad.exe后⾯跟上⽂件的路径和名字,如notepad.exe example.txt(⽂件在当前路径)。

关于int main(int argc, char argv[])的一些解读By Richard

关于int main(int argc, char argv[])的一些解读By Richard

关于int main(int argc, char *argv[])的一些解读By Richard argc是命令行总的参数个数,即argv的参数个数,不需要我们输入。

当我们输入命令后会自己判断个数。

argv[]是我们输入的命令参数,其中argv[0]是程序的名字,即编译后的程序名,比如说是:Test.exe举例详细说明:(环境是VS2008)#include<stdio.h>int main(int argc, char *argv[]){printf("argc=%d\n",argc);for (int i=0;i<argc;i++)printf("%s\n",argv[i]);return 0;}生成解决方案后,在Debug文件夹下会有Test.exe。

方法一:Windows键+R,输入cmd,进入命令提示符窗口,输入cd C:\Users\Administrator\Desktop\SDK源代码\Test\Debug进入Test.exe的文件目录输入:Test.exe Hello World输出:argc=3Test.exe(argv的第一个参数名是程序名称)HelloWorld方法二:在VS2008中加命令参数(更加方便)右击Test,选择【属性】-【配置属性】-【调试】,在右边第二行【命令参数】输入Test.exe Hello World输出:argc=4C:\Users\Administrator\Desktop\SDK源代码\Test\Debug\Test.exe Test.exeHelloWorld为什么参数变成4个了呢?原因是我们没设置程序的路径,如果设置了,就不会出现这个多余的argv如何设置呢?右击Test,选择【属性】-【配置属性】-【调试】,在右边第一行【命令】选择Test.exe的路径,即C:\Users\Administrator\Desktop\SDK源代码\Test\Debug\Test.exe之后,在【命令参数】中只需输入参数Hello World即可这时输出是:argc=3C:\Users\Administrator\Desktop\SDK源代码\Test\Debug\Test.exe HelloWorld============================================= 下面详细的说明一个具体的例子(关于cudaEncoder的一个程序,在CUDA SDK4.0中可以找到源程序,这里仅是main.cpp中的一个输入参数函数)static char *sAppName= "CUDA H.264 Encoder";static char *sAppFilename = "cudaEncode.exe";//输入输出及配置文件#define VIDEO_SOURCE_FILE"plush_480p_60fr.yuv"#define VIDEO_CONFIG_FILE"704x480-h264.cfg"#define VIDEO_OUTPUT_FILE"plush_480p_60fr.264"//我们关注的函数开始bool ParseInputParams(int argc, char *argv[], NVEncoderParams*pParams)// NVEncoderParams是一个关于编码器的结构体,不考虑它,一些不需要的操作这里都删掉{int argcount=0;printf("[ %s ]\n", sAppName);for (argcount=0; argcount< argc; argcount++) {printf(" argv[%d] = %s\n", argcount, argv[argcount]);}//argv[0]为程序名称printf("\n");if (argc > 1) {//输入参数不输入时为1(默认配置),其他情况下都大于1 int filename_length = 0;for (argcount = 1; argcount < argc; argcount++) {int string_start = 0;while (argv[argcount][string_start] == '-')string_start++;const char *string_argv = &argv[argcount][string_start];//这样理解:当输入的为cudaEncoder.exe –qatest时,argv[0]为cudaEncoder.exe,argv[1]为-qatest,argv[1][0]即为“-”,遇到该符号,string_argv存储“-”后面的字符串。

main函数的参数详解

main函数的参数详解

main函数的参数详解1、定义C语言规定main函数的参数只能有两个,习惯上这两个参数写为argc和argv。

因此,main函数的函数头可写为:main (argc,argv)C语言还规定argc(第一个形参)必须是整型变量,argv( 第二个形参)必须是指向字符串的指针数组。

加上形参说明后,main函数的函数头应写为:int main (int argc,char *argv[]){…} int main (int argc,char **argv){…}其中第一个argc表示参数的个数;第二个参数中argv[0]为自身运行目录路径和程序名,argv[1]指向第一个参数、argv[2]指向第二个参数……完整程序如下:#include <iostream>#include <string>using namespace std;int main(int argc, char **argv){string str;cout<<'argc:'<<argc<<endl;for (int i = 0; i != argc; i){cout << 'arg[' << i << ']' << argv[i] << endl;}return 0;}2、执行由于main函数不能被其它函数调用,因此不可能在程序内部取得实际值。

那么,在何处把实参值赋予main函数的形参呢? 实际上,main函数的参数值是从操作系统命令行上获得的。

当我们要运行一个可执行文件时,在Linux运行时,后面跟上参数即可把这些实参传送到main的形参中去。

在Linux下运行上面的程序结果为:可以看出:arg[0]是程序的名称,后面的参数,从arg[1]开始都按顺序存放在字符数组中,argc数至少是1个。

main函数的输入参数

main函数的输入参数

main函数的输入参数main函数是C/C++程序中的一个特殊函数,它是程序的入口点,也是程序执行的起点。

在main函数中,我们可以定义输入参数来从命令行或其他地方接收外部数据。

输入参数是main函数的参数列表,它可以帮助程序从外部获取数据,以便程序在执行过程中进行操作或做出相应的处理。

通常情况下,main函数的输入参数有两个:argc和argv。

1. argc(argument count)表示传递给main函数的命令行参数的个数。

它是一个整型变量,用于记录命令行参数的个数。

2. argv(argument values)是一个指向字符指针数组的指针,用于存储每个命令行参数的字符串。

它类似于一个字符串数组,每个元素指向一个命令行参数的字符串。

下面是一个示例代码,展示了如何使用这两个参数:```c#include <stdio.h>int main(int argc, char* argv[]) {printf("argc: %d\n", argc);for (int i = 0; i < argc; ++i) {printf("argv[%d]: %s\n", i, argv[i]);}return 0;}```在上面的示例中,我们使用了printf函数来输出argc和argv的值。

其中,%d是格式说明符,用于输出整型变量的值,%s用于输出字符串。

运行这个程序时,可以在命令行中输入参数来测试输出结果。

例如,运行命令`./program arg1 arg2 arg3`,将输出:```argc: 4argv[0]: ./programargv[1]: arg1argv[2]: arg2argv[3]: arg3```可以看到,argc的值为4,表示传递了4个命令行参数(包括程序本身)。

argv[0]存储了程序名称,而argv[1]、argv[2]、argv[3]分别存储了输入的命令行参数arg1、arg2、arg3。

int main(int argc,char argv[])详解

int main(int argc,char argv[])详解

int main(int argc,char argv[])详解int main(int argc,char* argv[])详解argc是命令行总的参数个数argv[]为保存命令行参数的字符串指针,其中第0个参数是程序的全名,以后的参数为命令行后面跟的用户输入的参数,argv参数是字符串指针数组,其各元素值为命令行中各字符串(参数均按字符串处理)的首地址。

指针数组的长度即为参数个数argc。

数组元素初值由系统自动赋予。

比如:int main(int argc, char* argv[]){int i;for (i = 0; i&lt;argc; i++)cout&lt;&lt;argv[i]&lt;&lt;endl;cin&gt;&gt;i;return 0;}执行时敲入F:\MYDOCU~1\TEMPCODE\D1\DEBUG\D1.EXE aaaa bbb ccc ddd输出如下:F:\MYDOCU~1\TEMPCODE\D1\DEBUG\D1.EXEaaaabbbcccddd--------------------------------------------------------------------char *argv[]是一个字符数组,其大小是int argc,主要用于命令行参数argv[] 参数,数组里每个元素代表一个参数;比如你输入test a.c b.c t.c则argc = 4 argv[0] = "test"argv[1] = "a.c"argv[2] = "b.c"argv[3] = "t.c"--------------------------------------------------------------------------------------------argc记录了用户在运行程序的命令行中输入的参数的个数。

int main参数说明

int main参数说明

Main()是C/C++的一重要函数,叫主函数。

无论程序多复杂,代码中必须有这么一个函数,也只能有一个main()函数;程序执行时就是从这个函数进入的。

int指明了main()函数的返回类型。

浏览老版本的C代码,将会发现程序常常以main()这种形式开始。

C90标准允许这种形式,但是C99标准不允许。

因此即使你当前的编译器允许,也不要这么写。

函数名后面的圆括号一般包含传递给函数的信息。

void表示没有给函数传递参数。

具体到main()来讲,main为主函数不存在上一级的函数,所以
int main(void)表示不接受命令行参数,int main(int argc,char *argv[])则会接受命令行参数:第一个int argc,是记录你输入在命令行上的字符串个数;第二个*argv[]是个指针数组,存放输入在命令行上的字符串。

如果你将此函数完成后编译成为一个程序test,当你在命令行输入test a.c b.c t.c时:
argc = 4
argv[0] = "test"
argv[1] = "a.c"
argv[2] = "b.c"
argv[3] = "t.c"。

C语言main函数的使用方法

C语言main函数的使用方法

C语言main函数的使用方法C语言main函数里的参数使用方法在学C语言的时候,我们也许常常见到int main(int argc,char* argv[])的写法,但是不知道这个argc和argv[]是干什么的,书上也没有讲到。

接下来我们来学习一下这两个参数的使用。

main()函数是C语言控制台应用程序的入口函数,就是程序启动时运行的第一个函数,既然是函数,就可以带参数,也可以不带。

我们学C语言的时候,书上的例子都是不带参数的main函数,有关参数的输入都是在程序启动后,用其他函数来执行的。

比如求两个数的最大值,一般的写法是:int max(int a,int b){if(a>=b)return a;else return b;}int main(){int a,b;scanf("%d%d",&a,&b);printf("the max num is:%d",max(a,b));return 0;}这样在程序启动之后,再输入两个数,然后输出最大值。

然而控制台应用程序以前都是在CMD或DOS命令行下进行调用的,在调用这个程序的时候,人们想直接在程序名后面跟上要输入的参数,这样程序一运行就能输出结果,而不需要在程序启动后再输入各参数,所以需要用到带参数的main函数。

main函数里的形参是固定的格式,系统给我们规定好了,就是main(int argc,char* agrv[])两个形参,argc这个形参是用来记录程序启动时就传入的实参个数,argv[]这个形参是字符指针数组,用来记录每个实参的地址的。

例如:(程序名称为test.exe)在VC++6.0或VS里运行一下,结果如下:因为它是直接就运行了,没有在程序名后跟上参数,所以argc为1,就是程序本身的名称(包含路径)。

argv[0]就指向程序名这个字符串。

在CMD命令行里先cd到该程序所在的目录,然后调用它,在程序名后跟上几个参数,然后回车。

main在c语言的意思

main在c语言的意思

main在c语言的意思
在C语言中,`main`是程序的入口点,也是程序执行的起始函数。

它是C语言程序中必须存在的一个函数,没有`main`函数的程序无法被编译和执行。

`main`函数有以下特点:
1. `main`函数的返回类型必须是`int`,表示函数返回一个整数值作为程序的退出状态码。

2. `main`函数可以带有参数,这些参数可以是命令行传递给程序的参数,也可以没有参数。

3. `main`函数在程序中只能有一个,它标识了程序的起始点。

4. `main`函数可以调用其他函数,也可以被其他函数调用。

`main`函数的定义可以有两种形式:
1. `int main(void)`:表示不接受任何参数。

2. `int main(int argc, char *argv[])`:表示接受两个参数,`argc`表示命令行参数的个数,`argv`表示一个指向字符串数组的指针,每个字符串都是一个命令行参数。

`main`函数的执行过程如下:
1. 程序从`main`函数开始执行。

2. 执行`main`函数中的语句。

3. 当程序执行到`return`语句时,将返回值作为程序的退出状态码,传递给操作系统。

4. 操作系统根据退出状态码判断程序的执行情况,通常0表示程序正常结束,非0表示程序发生错误。

在`main`函数中,可以编写程序的逻辑代码,包括变量的声明、赋值、函数的调用、条件判断、循环等。

`main`函数的返回值可以被用于判断程序的执行结果,根据不同的返回值可以采取不同的处理方式。

main函数传参

main函数传参

main函数传参 在有些C语⾔程序中,我们会看到main函数有如下的写法:int main(int argc, char* argv[]); 或者是这样的:int main(int argc, char** argv); 给main传参通过argc和argv这两个参数来实现。

执⾏程序时,可以从命令⾏传值给 C 程序。

这些值被称为命令⾏参数,它们对程序很重要,特别是当您想从外部控制程序,⽽不是在代码内对这些值进⾏硬编码时,就显得尤为重要了。

命令⾏参数是使⽤ main() 函数参数来处理的,其中,argc 是指传⼊参数的个数,argv[ ] 是⼀个字符指针数组,指向传递给程序的每个参数。

下⾯是⼀个通过指定命令⾏参数实现简单计算器的程序#include <string.h>#include <stdio.h>#include <stdlib.h>int Add(int, int);int Sub(int, int);int Mul(int, int);int Div(int, int);int main(int argc, char* argv[]){if(argc != 4){printf("Parameters should be 4.\n");return -1;}int param1 = atoi(argv[1]);int param3 = atoi(argv[3]);if(!strcmp(argv[2], "+")){printf("%s %s %s = %d\n", argv[1], argv[2], argv[3], Add(param1, param3));}else if(!strcmp(argv[2], "-")){printf("%s %s %s = %d\n", argv[1], argv[2], argv[3], Sub(param1, param3));}else if(!strcmp(argv[2], "x")){printf("%s %s %s = %d\n", argv[1], argv[2], argv[3], Mul(param1, param3));}else if(!strcmp(argv[2], "/")){printf("%s %s %s = %d\n", argv[1], argv[2], argv[3], Div(param1, param3));}else{printf("Parameters fault."); return -1;}return0;}int Add(int a, int b){return a + b;}int Sub(int a, int b){return a - b;}int Mul(int a, int b){return a * b;}int Div(int a, int b){return a / b;} 其中C 库函数 int atoi(const char *str) 把参数 str 所指向的字符串转换为⼀个整数(类型为 int 型)。

c语言中int main的含义

c语言中int main的含义

c语言中int main的含义C语言中的intmain()函数是程序的入口点,也是程序中最重要的部分之一。

在程序运行时,操作系统会首先调用main函数来执行程序的初始化工作,然后再根据程序的逻辑执行其他的函数和语句。

因此,对于C语言的初学者来说,理解int main()函数的含义和用法是非常重要的。

一、int main()函数的定义在C语言中,每个程序都必须包含一个int main()函数,这个函数是程序的入口点,也是程序中最重要的部分之一。

int main()函数的定义如下:int main(){//程序的主要逻辑代码return 0;}在上面的代码中,int main()是函数的定义,它告诉编译器这个函数的返回值是一个整型数。

函数体中的代码是程序的主要逻辑代码,它会在程序运行时被执行。

最后一行的return 0;是函数的返回语句,它告诉操作系统程序的执行结果是0。

二、int main()函数的作用int main()函数的作用是执行程序的初始化工作,并且根据程序的逻辑执行其他的函数和语句。

具体来说,int main()函数的作用包括以下几个方面:1. 程序的初始化工作在程序运行时,操作系统会首先调用int main()函数来执行程序的初始化工作。

这些工作包括设置程序的环境变量、初始化全局变量、打开文件等等。

只有当程序的初始化工作完成后,才能开始执行其他的函数和语句。

2. 程序的主要逻辑代码int main()函数中的代码是程序的主要逻辑代码,它会根据程序的逻辑执行其他的函数和语句。

具体来说,程序的主要逻辑代码可以包括输入输出、计算、判断、循环等等。

在程序运行时,这些代码会被执行,从而实现程序的功能。

3. 程序的返回值int main()函数的返回值是一个整型数,它表示程序的执行结果。

通常情况下,返回值为0表示程序执行成功,返回值为非零数表示程序执行失败。

在程序运行时,操作系统会根据int main()函数的返回值来判断程序的执行结果,并且根据需要采取相应的措施。

main函数的输入参数

main函数的输入参数

main函数的输入参数1. 简介函数是程序中一个重要的模块,可以完成特定的任务并返回结果。

在程序中,我们经常需要编写自己的函数来实现特定的功能。

本文将详细介绍如何编写一个全面、详细、优美的函数。

2. 函数定义在C语言中,函数由函数头和函数体组成。

函数头包括返回类型、函数名和参数列表三个部分,用于指定函数返回值类型、名称和参数类型及名称。

例如:```cint add(int a, int b) {return a + b;}```上述代码定义了一个名为add的函数,它有两个int类型的参数a和b,并返回它们的和。

3. 函数调用在程序中调用一个函数时,需要使用该函数名及其参数列表来调用它。

例如:```cint result = add(2, 3);```上述代码调用了add函数,并将其返回值赋给result变量。

4. 函数参数C语言中的函数可以有零个或多个参数,每个参数都有一个类型和一个名称。

当我们调用一个带有参数的函数时,需要按照定义顺序传递相应数量和类型的实参。

4.1 参数传递方式C语言中有两种主要的参数传递方式:值传递(call by value)和引用传递(call by reference)。

值传递是指将实参复制一份作为形参传递给函数,函数对形参的修改不会影响实参的值。

例如:```cvoid swap(int a, int b) {int temp = a;a = b;b = temp;}int main() {int x = 2, y = 3;swap(x, y);printf("x=%d, y=%d\n", x, y);return 0;}```上述代码定义了一个swap函数,它交换了两个整数的值。

在main函数中调用swap函数时,传递了x和y的值作为实参。

由于是值传递,swap函数对a和b的修改不会影响到x和y的值,因此输出结果为“x=2, y=3”。

引用传递是指将实参的地址作为形参传递给函数,函数通过指针访问实参的值并可以修改它。

intmain()

intmain()

intmain()
main()函数
main() 函数是 C++ 程序的⼊⼝函数,C++ 标准规定 main() 函数的返回值类型为 int,返回值⽤于表⽰程序的退出状态,返回 0 表⽰程序正常退出,返回⾮ 0,表⽰出现异常。

为什么C++程序的主函数是int main()⽽不能是void main()?
在刚开始学习c语⾔的时候,我也有这样的困惑(其实困惑⼀直持续到了今天,然后才想着要搞明⽩...),之所以会产⽣这样的疑惑,是因为这样的形式让我联想到了函数的定义
//下⾯这可以说是我们⾃⼰定义的函数
int main2(){
//balabala
return 0;
}
void main3(){
//balabala
return;
}
//这是c++⾃⼰定义好的主函数,这⾥是在作为程序⼊⼝了
int main(){
//balabla
return 0;//如果没有出现 return 语句,同样可以通过编译并正常运⾏。

这是因为编译器在 main() 函数的末尾⾃动添加了return 0;语句。

}
//在极个别版本如vc6能通过编译,但这样可移植性太差了,反正void main()别⽤就好了
void main(){
//
}。

探寻main函数的“标准”写法,以及获取main函数的参数、返回值

探寻main函数的“标准”写法,以及获取main函数的参数、返回值

探寻main函数的“标准”写法,以及获取main函数的参数、返回值main函数表⽰法很多同学在初学C或者C++时,都见过各种各样的main函数表⽰法:main(){/*...*/}void main(){/*...*/}int main(){/*...*/}int main(void){/*...*/}int main(int argc, char *argv[]){/*...*/}int main(int argc, char **argv){/*...*/}......看过这么多写法之后,不禁顿⽣疑惑,到底哪个才是main函数的标准写法?main函数的标准写法先看C语⾔标准⽂档⾥对main函数的描述:再看C++标准⽂档⾥对main函数的描述:附:标准⽂档下载跳转链接————⾄此,可以看到,在C语⾔中,标准写法是int main(void)和int main(int argc, char *argv[]),在C++中,标准写法是int main()和int main(int argc, char *argv[])。

那么写成main()或者void main()到底⾏不⾏?答案是不⼀定⾏。

在旧的编译器上,这样写也能通过,但主要是为了兼容C/C++标准未出来之前的历史代码。

在较新的编译器上,这样写都会得到⼀个警告信息,或者,⼲脆就是错误信息,⽆法通过编译。

所以,为了代码的规范性,通⽤性,请坚持按标准⽂档⾥推荐的写法来写。

尤其是初学者,按标准来写是⼀种很好的习惯,⽽编程中的好习惯甚⾄⽐编程本⾝还重要!还有⼈疑惑main函数第⼆个参数到底是char *argv[]还是char **argv?答案是都⾏,argv⾸先是⼀个数组,其数组元素的类型是字符指针,每⼀个字符指针都指向⼀个特定的字符串,如下图:此外,也许还有⼈对main函数的参数名称有疑问,既然main函数也是个函数,那么它的参数名称argc、argv可以替换成其它合法的标识符吗?这个答案也是肯定的,如果⼼⾎来潮,写成int main(int a, char *b[])这种形式也是被允许的,但是仍然建议按argc、argv写,避免不必要的疑惑。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

int main(int argc,char* argv[])详解argc是命令行总的参数个数argv[]是argc个参数,其中第0个参数是程序的全名,以后的参数命令行后面跟的用户输入的参数,比如:int main(int argc, char* argv[]){int i;for (i = 0; i<argc; i++)cout<<argv[i]<<endl;cin>>i;return 0;}执行时敲入F:\MYDOCU~1\TEMPCODE\D1\DEBUG\D1.EXE aaaa bbb ccc ddd输出如下:F:\MYDOCU~1\TEMPCODE\D1\DEBUG\D1.EXEaaaabbbcccddd--------------------------------------------------------------------char *argv[]是一个字符数组,其大小是int argc,主要用于命令行参数argv[] 参数,数组里每个元素代表一个参数;比如你输入test a.c b.c t.c则argc = 4argv[0] = "test"argv[1] = "a.c"argv[2] = "b.c"argv[3] = "t.c"--------------------------------------------------------------------------------------------argc记录了用户在运行程序的命令行中输入的参数的个数。

arg[]指向的数组中至少有一个字符指针,即arg[0].他通常指向程序中的可执行文件的文件名。

在有些版本的编译器中还包括程序文件所在的路径。

-------------------------------------------------------------------------在调用一个可执行程序时,某些情况下需要向程序传递参数。

如我们可以在控制台中键入notepad.exe,回车后将执行记事本程序。

如果我们希望在打开notepad时同时打开一个文本文件,可以在notepad.exe后面跟上文件的路径和名字,如notepad.exe example.txt(文件在当前路径)。

那么程序中如何能得到这些输入参数呢?这个工作是编译器帮我们完成的,编译器将输入参数的信息放入main函数的参数列表中。

main函数的参数列表保存了输入参数的信息,第一个参数argc记录了输入参数的个数,第二个参数是字符串数组的,字符串数组的每个单元是char*类型的,指向一个c风格字符串。

以notepad.exe example.txt为例argc是2,就是说argv数组中有两个有效单元第一单元指向的字符串是"notepad.exe"第二单元指向的字符串是"example.txt"argv数组中的第一个单元指向的字符串总是可执行程序的名字,以后的单元指向的字符串依次是程序调用时的参数。

这个赋值过程是编译器完成的,我们只需要读出数据就可以了。

-----------------------------------------------------------------------------int main( int argc , char *argv[] , char *envp[] )main()函数一般用int或者void形的。

我比较喜欢用int型定义main。

因为在结束的时候可以返回给操作系统一个值以表示执行情况。

int argc这个东东用来表示你在命令行下输入命令的时候,一共有多少个参数。

比方说你的程序编译后,可执行文件是test.exeD:\tc2>test这个时候,argc的值是1但是D:\tc2>test.exe myarg1 myarg2的话,argc的值是3。

也就是命令名加上两个参数,一共三个参数char *argv[]这个东东用来取得你所输入的参数D:\tc2>test这个时候,argc的值是1,argv[0]的值是"test"D:\tc2>test myarg1 myarg2这个时候,argc的值是3,argc[0]的值是"test",argc[1]的值是"myarg1",argc[2]的值是"myarg2"。

这个东东一般用来为程序提供非常重要的信息,如:数据文件名,等等。

如:copy a.c b.txt这个时候,a.c和b.txt就是所谓的“非常重要的信息”。

不指定这两个文件,你没法进行拷贝。

当你的程序用到argc和argv这两个参数的时候,可以简单地通过判断argc的值,来看看程序的参数是否符合要求char *envp[]这个东东相对来说用得比较少。

它是用来取得系统的环境变量的。

如:在DOS下,有一个PATH变量。

当你在DOS提示符下输入一个命令(当然,这个命令不是dir一类的内部命令)的时候,DOS会首先在当前目录下找这个命令的执行文件。

如果找不到,则到PATH定义的路径下去找,找到则执行,找不到返回Bad command or file name在DOS命令提示符下键入set可查看系统的环境变量同样,在UNIX或者LINUX下,也有系统环境变量,而且用得比DOS要多。

如常用的$PATH,$USER,$HOME等等。

envp保存所有的环境变量。

其格式为(UNIX下)PATH=/usr/bin;/local/bin;HOME=/home/shuui即:环境变量名=值DOS下大概也一样。

环境变量一般用来为程序提供附加信息。

如,你做了一个显示文本的内容的程序。

你想控制其一行中显示的字符的个数。

你可以自己定义一个环境变量(UNIX下)%setenv NUMBER = 10%echo $NUMBER10然后你可以在程序中读入这个环境变量。

然后根据其值决定一行输出多少个字符。

这样,如果你不修改环境变量的话,你每次执行这个程序,一行中显示的字符数都是不一样的下面是一个例子程序#include<stdio.h>int main( int argc , char *argv[] , char *envp[] ){int i;printf( "You have inputed total %d argments\n" , argc );for( i=0 ; i<argc ; i++){printf( "arg%d : %s\n" , i , argv[i] );}printf( "The follow is envp :\n" );for( i=0 ; *envp[i]!='\0' ; i++ ){printf( "%s\n" , envp[i] );}return 0;}D:\>argtest this is a test programe of main()'s argmentsYou have inputed total 9 argmentsarg0 : D:\TC\NONAME.EXEarg1 : thisarg2 : isarg3 : aarg4 : testarg5 : programearg6 : ofarg7 : main()'sarg8 : argmentsThe follow is envp :TMP=C:\WINDOWS\TEMPTEMP=C:\WINDOWS\TEMPPROMPT=$p$gwinbootdir=C:\WINDOWSPATH=C:\WINDOWS;C:\WINDOWS\COMMANDCOMSPEC=C:\WINDOWS\SBPCI=C:\SBPCIwindir=C:\WINDOWSBLASTER=A220 I7 D1 H7 P330 T6CMDLINE=noname this is a test programe of main()'s argments----------------------------------------------------------------------------------------- 命令行参数啊。

argc 是参数的个数,argv[]是参数,argv[0]是文件名,argv[1]是第一个参数...如你得exe文件名是:myprog.exe,那么myprog 12 22 32则argv[0]="myprog",argv[1]="12",argv[2]="22"...exit()是程序退出时的返回码。

可以用其他程序接收,判断是否正常退出。

如exit(-1)认为异常退出。

---------------------------------------------------------------------------------------------请问这里为什么要设置这两个参数呢?不要不行吗?谢谢有些时候程序运行时需要提供一些参数。

比如copy命令,需要指明源文件和目标文件名,就得通过argc和argv来传递。

相关文档
最新文档