春节到今天基本结束,即使放了一个超长春节的我,明天也要回广州了。今晚我放下内心的一切对名利欲求的挣扎,决心无所事事地继续刷旧帖。
一直没找到合适开贴的话题。
直到我看到 RICHENGFENG的 C语言降龙十八掌~~
这里先简单说说 我眼里的 RICHENGFENG
我叫他 方小帅。
对于XX年......让我想想,唔......对于2012年左右以后进入本坛的朋友,大概不知道他,同时不知道的还有仙猫。
当然,如今,仙猫偶尔还会被我诈尸,但方小帅却已经成为传奇。
当然,他还健在~~
15年我在北京玩的时候,有幸蹭了他一顿饭,与会人员级别都很高。
有论坛大姐头农姐,论坛编辑老大琳姐。最低级别的就是我。
关于他的各种风骚八卦就不提了。
只简单提一句。
他出身北航,从事技术工作六年后,现在去了国内某超级牛逼的某为公司,据说是做网络啥方面业务的售前。
当年,我最崇拜的论坛牛逼人物,软件方面就是他,没有之一。
他的这个降龙十八掌系列,其实我只听说过,却没有认真看过,甚至,连浏览一次都没有。
我刚刚顺着老帖,看了一下,发现他当年提及的一些问题,居然和我后来发的一些帖子都是同一个问题。
这让我十分惭愧。
一来,即便当年我如此崇拜的一个人,然而我却连他的历史帖子都没认真看过,这点比起我当年喜欢一个妹子,就恨不得把人家的qq空间全翻个遍——可见,爱情和色相的力量还是远远超过了技术,也说明了我的不谦虚。
二来,他的十八掌,掌掌有始有终,回头看我自己,各种烂尾,诶~~
第一掌 main函数不简单
https://bbs.eeworld.com.cn/forum. ... 7910&fromuid=115166
在这一掌里,其实,方小帅重点提及的是 argv argc 这两个参数。
坦白说,虽然我经常也只是简写 void main(void)
但我是知道这两个参数存在的。
因为看一本书,我也知道getopt这几个函数的存在。
但是,作为第一掌,还煞有介事,我现在想知道的,如果就是不写会怎样?
我猜测,是不是要在这样一种环境里测试才可以。
就是 代码里有对 argv argc的判断和使用,但是,输入时就是没有填入参数,会发生什么事?
作为标准方法,show us the code
所以我决定再仔细看看这个帖子。
逐个提炼出那些问题。
以下这是一个最好的标准方式:
引用: 谁能写出一个main函数,编译以后得到这样的效果:(假设编译出的可执行程序名为gcc默认的a.out,操作系统为unix)
在提示符下输入:
$./a.out RichieFang
程序输出:
Hello, world, I am RichieFang
引用: 正解。
其实在给函数定义形参的时候,char*等同于char[],
同理,char**和char* []是一样的。
而作为实参传递的,本质上是一个指针。因此,描述形参的时候用指针类型更为接近实质。
其实,关于这个 东西,我更感兴趣的一个话题是。不知道 RICHENGFENG怎么看待 “当数组作为参数传递时蜕变为指针” 这个解释的说法。
本帖最后由 辛昕 于 2019-2-21 00:06 编辑
发的帖子不知道出了啥毛病。
直接引用讨论帖的链接居然打不开,直接贴上地址,居然进入审核。
没办法,明天要早起赶高铁,先 把 方小帅 的 帖子列表贴出。
十八掌就在里面。
https://home.eeworld.com.cn/space-uid-118758.html
赶紧去学习一下去,谢谢给的链接!
专注智能产品的研究与开发,专注于电子电路的生产与制造……QQ:2912615383,电子爱好者群: void
关于第一掌 main函数的参数,我的自己的一些看法
1.main函数这个东西的参数,如果是在有操作系统的环境下,我觉得这个参数的确是不容忽视的。
但对于单片机这种只有一个main函数的环境下,我觉得,它可能没有那么重要。
RICHENGFENG说的“嵌入式”——我想,他指的很可能是 跑linux一类的unix的较复杂系统。
我记得他之前在 JUPITER干,做的是硬件防火墙,那东东有点像路由器一类的东西,跑的都是和当今的 arm-linux类似的硬件。
所以,在这种环境下,强调main的参数,当然是很重要的。
就像讨论一个被调用的函数的 参数,尤其是这个参数中有以地址传入的,那自然是要小心谨慎。
2.由于我曾经模模糊糊看过 编译器和连接器相关的一些内容,所以我知道,即使是单片机这种简单环境,其实main也不见得一定就是这么单调的函数。
因为在ld中可以指定或者不指定main函数为入口。
虽然我对这块的认知很模糊,但有理由简单推论,假如需要传递一些参数进main函数,在这里也是可以做到的。
那么这个时候同样需要考虑这个问题。
当然,我仍然认为,如果谈论的是单片机,那大可以不考虑上述的第二种情况。
尽管我在做 CSR的蓝牙SOC的时候,这套官方提供的工程,是我目前见过最奇葩的单片机例程。
它因为包含 了 蓝牙协议栈库,还有应用,以及BOOTLOADER之类的东西。
也不知道它是怎么想的,为了 做到所谓的灵活,把整个程序的结构做得很复杂,比如它的APP main函数就不是真正意义上的MAIN函数,看样子,它真正的MAIN函数应该是在 BOOTLOADER里。
这种情形下的APP MAIN函数,我个人认为就有点像 UNIX环境下编写程序里的MAIN函数了。
当然,孤陋寡闻的我,除了这个经历之外,再没见过单片机的MAIN函数有什么花样的。
嘿嘿,有机会,我写一套 EEWORLD 老人列传。