您的位置:首页 > 运维架构 > Linux

Linux C编程学习--main()函数简析

2016-06-18 22:52 429 查看
提到C语言的函数,有太多内容要讲,今天我们要看的是main()函数。

main()函数时程序的入口点,任何程序都要有main()函数,一般大家都怎么写main()函数啊?

main();

void main();

void main(void);

int main();

int main(void);

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

好像哪种都可以啊!是这样吗?好像编译器从没报过错啊?这时因为编译器对main()函数的扩展,如果编译器不支持这块,则有可能会报错,而标准的写是什么呢?有两种:

int main(void);

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

有的同学做过单片机,好像都是main()啊,也没问题啊,这时因为单片机程序中没人调用main()函数,直接从main()函数调用完了,没返回值。而对我们嵌入式linux C 呢?这里是有操作系统的,是会调用main()函数的,所以这里一般会有返回值,所以
int main(int argc,char *argv[])是最标准的写法。我们今天要讲的就是int main(int argc,char *argv[])!

argc是什么?是参数的个数,什么参数?是我们执行程序时所附给的参数,argv[]是什么,是存放参数的数组,argv[0]是什么呢?是我们执行的程序,例如: ./a.out 。我们下面编写程序看函数时如何调用参数的?

[cpp] view
plain copy

#include <stdio.h>

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

{

int i;

for(i = 0;i < argc;i++)

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

return 0;

}

执行结果如下:

[cpp] view
plain copy

fs@ubuntu:~/qiang/hanshu$ gcc -o 1 1.c

fs@ubuntu:~/qiang/hanshu$ ./1 xiao zhi qiang

./1

xiao

zhi

qiang

fs@ubuntu:~/qiang/hanshu$

大家可以看到参数被存在什么位置,是怎么存放的。

那我们能不能对传入的参数进行运算呢?当然可以了!比如下面 传入参数 ./ 1 30 50,将30和50相加。看程序:

[cpp] view
plain copy

include <stdio.h>

int tt(char *p)

{

int sum = 0;

while(*p)

sum = sum*10 + *p++ -'0';

return sum;

}

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

{

int j;

int count = 0;

for(j = 1;j < argc;j++)

{

count += tt(argv[j]);

}

printf("%d\n",count);

return 0;

}

执行结果如下:

[cpp] view
plain copy

fs@ubuntu:~/qiang/hanshu$ ls

1 1.c hanshu hashu.c

fs@ubuntu:~/qiang/hanshu$ ./hanshu 30 50

80

fs@ubuntu:~/qiang/hanshu$

是可以的。

当然这里给大家介绍一个将字符数字转化成整型数字的方法,把上面写得程序给大家看看

[cpp] view
plain copy

int tt(char *p)

{

int sum = 0;

while(*p)

{ sum *= 10;

sum += (*p++) -'0';

}

return sum;

}

就是 '8' - '0' = 8;ASCII码值相减,我们的目的是得到8,而不是将字符'8'转化成整数8,这时没法转换的,因为'8'是字符,存放的是ASCII码,是56,所以是没法转化成int数据的,但我们可以利用上面的方法得到8,大家要清楚这一点!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: