14732|50

1672

帖子

0

TA的资源

裸片初长成(初级)

楼主
 

C语言降龙十八掌——第一掌 main函数不简单 [复制链接]

几乎每个电类工科学生大学都学过C语言程序设计,几乎每所大学的C语言程序设计的教材都离不开谭浩强教授的《C程序设计》这本经典著作。《C程序设计》开篇就提到,操作系统下,一个独立C程序的总入口是main函数。


写出一个独立合格的main函数,实现打印“hello, world”的功能,是C语言的第一课。其实,main函数可不是简单的几句话。大家有没有想过,它的参数和返回值的意义?
进一步提示大家,其实unix下的很多命令,如ls, cp等,都是C语言编写的。main函数的本质是对命令参数的分类处理。

谁能写出一个main函数,编译以后得到这样的效果:(假设编译出的可执行程序名为gcc默认的a.out,操作系统为unix)
在提示符下输入:
$./a.out RichieFang
程序输出:
Hello, world, I am RichieFang

这样的功能,main函数应当如何写呢?
此帖出自编程基础论坛

最新回复

是argv[1]吧?argv[0]是./a.out  详情 回复 发表于 2011-12-11 22:48
点赞 关注
 

回复
举报

34

帖子

0

TA的资源

一粒金砂(高级)

沙发
 
谢谢分享,楼主笑得很甜了

[ 本帖最后由 zoufeihu 于 2009-10-21 16:09 编辑 ]
此帖出自编程基础论坛
 
个人签名处处留心皆学问,落花水面皆文章!
 
 

回复

328

帖子

0

TA的资源

纯净的硅(高级)

板凳
 
呵呵,能通俗易懂得写出来也不简单啊!
此帖出自编程基础论坛
 
 
 

回复

1672

帖子

0

TA的资源

裸片初长成(初级)

4
 

回复 楼主 richiefang 的帖子

我们知道,教科书的hello, world是这样写的:

#include
int main (int argc, char** argv)
{
    printf ("Hello, world!\n");
    return 0;
}

注意到main函数的入参argc, argv,以及返回值。它们有什么玄机呢?
此帖出自编程基础论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

5
 
突然感觉自己白学了,没注意过这东西
此帖出自编程基础论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

6
 
真好。
此帖出自编程基础论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

7
 
$./系统命令提示符
a.out调用的文件
程序:
#include
int main (int argc, char* argv[])
{
    printf ("Hello, world! argv[0]\n",%s);
    return 0;
}
此帖出自编程基础论坛
 
 
 

回复

120

帖子

0

TA的资源

五彩晶圆(中级)

8
 
不错~~~嘿嘿i
此帖出自编程基础论坛
 
 
 

回复

1672

帖子

0

TA的资源

裸片初长成(初级)

9
 
原帖由 qin2805 于 2009-10-21 23:38 发表
$./系统命令提示符
a.out调用的文件
程序:
#include
int main (int argc, char* argv[])
{
    printf ("Hello, world! argv[0]\n",%s);
    return 0;
}


不错,这段代码的确能达到前面提出的需求,但是,你想过没有,如果直接运行a.out,没有任何参数,这么做的后果是什么?
此帖出自编程基础论坛
 
 
 

回复

71

帖子

0

TA的资源

五彩晶圆(中级)

10
 
include
int main (int argc, char* argv[])
{
    printf ("Hello, world! ,I'm %s\n",argc>0?argv[0]:"");
    return 0;
}

解释一下:
argc 参数个数,以空格作为分割
argv[] 参数字符串数组
比如编译好的exe文件名为 main.exe
运行main.exe -a -b -c

argc = 3
argv[0]=“-a”
argv[1]=“-b”
argv[2]=“-c”

[ 本帖最后由 xinzai 于 2009-10-22 10:24 编辑 ]
此帖出自编程基础论坛
 
 
 

回复

1672

帖子

0

TA的资源

裸片初长成(初级)

11
 

回复 10楼 xinzai 的帖子

hehe, 这个解释得很完美...
此帖出自编程基础论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

12
 

回复 10楼 xinzai 的帖子

en,学习了
此帖出自编程基础论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

13
 

回复 9楼 richiefang 的帖子

额,需要研究
此帖出自编程基础论坛
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

14
 
这样写是不是更好一些

#include

int main (int argc, char** argv)
{
    printf ("Hello, world! I'm %s\n", argv[1]);
    return 0;
}


char **argv 与char *argv[]用在这里是一样的.
此帖出自编程基础论坛
 
 
 

回复

1672

帖子

0

TA的资源

裸片初长成(初级)

15
 

回复 14楼 wubingsweat 的帖子

正解。
其实在给函数定义形参的时候,char*等同于char[],
同理,char**和char* []是一样的。
而作为实参传递的,本质上是一个指针。因此,描述形参的时候用指针类型更为接近实质。
此帖出自编程基础论坛
 
 
 

回复

947

帖子

0

TA的资源

五彩晶圆(中级)

16
 
看帖学学,谢谢!!!!!!!!!!!!
此帖出自编程基础论坛
 
 
 

回复
redstone9910 该用户已被删除
17
 
提示: 作者被禁止或删除 内容自动屏蔽
 
 
 

回复

1672

帖子

0

TA的资源

裸片初长成(初级)

18
 

回复 17楼 redstone9910 的帖子

呵呵,这两个参数的确没什么可神秘的,之所以在这里热烈地讨论,是因为,这个东西很有用,但是学校的C语言课程里面不教啊。
此帖出自编程基础论坛
 
 
 

回复

1672

帖子

0

TA的资源

裸片初长成(初级)

19
 

回复 19楼 zhangkai0215 的帖子

其实没什么可迷人的,可以认为指针数组是实体,指向指针的指针是代表这个实体的符号
此帖出自编程基础论坛
 
 
 

回复

15

帖子

0

TA的资源

一粒金砂(中级)

20
 

你好!

请问lz,现在到底是学C好?还是学习C++好?
此帖出自编程基础论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表