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

2019-07-12 22:52发布

提到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 。我们下面编写程序看函数时如何调用参数的? #include int main(int argc, char *argv[]) { int i; for(i = 0;i < argc;i++) printf("%s ",argv[i]); return 0; } 执行结果如下: 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相加。看程序: include 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 ",count); return 0; }
执行结果如下: fs@ubuntu:~/qiang/hanshu$ ls 1 1.c hanshu hashu.c fs@ubuntu:~/qiang/hanshu$ ./hanshu 30 50 80 fs@ubuntu:~/qiang/hanshu$ 是可以的。 当然这里给大家介绍一个将字符数字转化成整型数字的方法,把上面写得程序给大家看看
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,大家要清楚这一点!