主函数的返回值返回给谁_main函数的调用、传参和返回值

C语言规定main函数是C程序的入口,程序中的其它函数直接或间接被main函数调用后才能被执行,如果没有被main调用,这个函数在程序中就是无用的。那么在linux中,main函数又是被谁调用的呢?

Linux中,父进程fork出子进程,然后程序在子进程中执行,也即程序是被父进程调用的,因此main函数也是被父进程调用的。调用过程中就涉及到父进程传参给main函数和main函数返回值给父进程的问题,这里依次说明。

1给main函数的传参

1.1通过argc和argv给main传参

当不需要给main函数传参时,main函数可以写作:

int main(void)   //void表示不需要传参给main函数

当需要给main函数传参时,main函数可以写作:

int main(int argc,

char *argv[])  //通过C语言预订的参数argc和argv给main传参

argc是int类型,表示运行程序的时给main函数传递参数的数量;

argv是字符串数组,用来存储多个字符串,一个字符串表示传给main函数的一个参数。argv[0]表示传给main函数的第一个参数,这个参数默认固定为我们执行.out程序,无法更改;argv[1]是传给main的第二个参数,才是我们真正可以传递给main函数的参数,依此类推,argv[2]、argv[3]…是第3和第4个参数,可以真正传递参数。

1.2给main函数的传参示例

示例实现的功能是:函数执行时,当传递的参数argv[1]=0时,打印出I am a boy!;参数argv[1]=1时,打印出I am a girl!;argv[1]为其它值时,打印出Argument

argv[1] should be 0 or 1!!!。

#include

#include

int main (int argc,

char *argv[])

{

int i = 0;

printf("Passed main func argument num

is %d.\n", argc);

for (i=0; i

{

printf("Argument Num %d is

%s.\n", i, argv[i]);

}

if(argc != 2)

{

printf("Error!!! \nPls input 2

argument for main func \n");

return -1 ;

}

if(!strcmp(argv[1],"0"))

{

printf("I am a boy !\n");

}

else if(!strcmp(argv[1],"1"))

{

printf("I am a girl !\n");

}

else

{

printf("Argument argv[1] should be 0

or 1 !!!\n");

}

return 0;

}

各种情况的执行结果见图

1.3注意事项

(1)给main函数的参数是在程序执行时传递的,各参数间是通过空格来间隔。

(2)给main函数的参数是字符串类型的,不能是其它类型。

(3)程序内部一定要先检验传递参数数目是否等于argc。

2 main函数的返回值

Linux中,main函数被父进程调用后,可以返回值给父进程,例如,返回0表示执行成功,-1表示失败。

2.1main函数的返回值示例

当main函数执行完成后,返回255(返回值需要在0-255之间,如果为负数,就自动转换为0~255间的数,数值等于256-负数的绝对值)。

#include

int sum(int a, int b)

{

return a+b;

}

int main(void)

{

int a = 0,

b = 3, c = 0;

a = sum(b,

c);

printf("a

= %d.\n", a);

return 255;

}

在linux中使用vi return.sh编写脚本文件,内容是

#!/bin/sh

./a.out

echo $?

编译C程序后执行程序可见

(1)执行./a.out后,仅输出a = 3;

(2)执行source return.sh后,不但输出了a = 3,还输出了返回值255

(3)在window中使用记事本编写脚本文件rtt.sh,内容与return.sh相同,使用ANSI编码格式,然后执行source

rtt.sh,会出现错误。说明在windows下编写的脚本文件,在linux下无法执行,原因是文件格式不同,使用BeyondCompare对比两个文件的16禁止编码,可见rtt中多了0D(回车符号)和0A(换行符号)。

3使用main函数传参实现10以内的加法计算器

#include

#include

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

{

int i = 0;

printf("Passed

main func argument num is %d.\n", argc);

for (i=0;

i

{

printf("Argument

Num %d is %s.\n", i, argv[i]);

}

if(argc !=

3)

{

printf("Error!!!

\nPls input 3 argument for main func \n");

return

-1 ;

}

printf("result=

%d .\n",(*argv[1]-48)+(*argv[2]-48));

return 0;

}

运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值