• 鸟瞰“中国围屋之乡” 造型独特如城堡 2019-04-16
  • 先想好如何处理可能的危害,要有经济“卫国战争”的准备,要将困难多设想一点,想到了就不会很被动。 2019-04-16
  • 实现中华民族伟大复兴是近代以来中华民族最伟大的梦想(认真学习宣传贯彻党的十九大精神) 2019-04-13
  • 报道新闻记录历史 70载人民日报见证中国发展大事 2019-04-13
  • 新华网评:凝聚打赢脱贫攻坚战的强大合力 2019-04-02
  • 打造历史文化名城 “安宁记忆”项目启幕 2019-04-02
  • 打开设计图纸的说明。 2019-03-30
  • 一语惊坛(5月15日):川航备降,是临危不惧的中国智慧的中国奇迹。 2019-03-25
  • 社长手记造车奇人尹同跃并非只为奇瑞而来 2019-03-17
  • 三代航天人做客人民网 共话中国航天创建60年 2019-03-01
  • 回复@寻找失落的真理:跟你的铁环玩去!咱真的没兴趣碾压你也。 2019-03-01
  • 有人踢球踢进了手术室 有人看球看到脖子扳牢了 2019-02-23
  • 朋友圈买过这些东西吗?原来都是不靠谱的! 2019-02-05
  • 为宣传奇绝秀美旅游风光 鹰潭市委书记自拍上央视(图) 2019-02-05
  • 统一监管缺位容易出现监管套利 2018-11-22
  • 时时彩任三技巧与攻略:社区导航

     

    广东十一选五开奖图

    搜索
    查看: 1007|回复: 24
    打印 上一主题 下一主题

    [原创] C/C++回忆录

      [复制链接]

    广东十一选五开奖图 www.guu6.com 5584

    TA的帖子

    207

    TA的资源

    版主

    Rank: 6Rank: 6

    跳转到指定楼层
    楼主
    发表于 2019-3-13 01:33 | 只看该作者 |倒序浏览 |阅读模式
    本帖最后由 lcofjp 于 2019-3-13 01:37 编辑

    这两天坐地铁之余,翻看了《C陷阱与缺陷》这本书,这本书的作者Andrew Koenig是个大神,他和他夫人合著的另一本书《C++沉思录》都是C/C++书籍中的经典之作。这两本书都是出版于这两种语言的标准化之前,《C陷阱与缺陷》出版于1989年,C的第一版标准是C90,《C++沉思录》出版于1997年,C++的第一版标准是C++98。虽然看上去有些古老,但是却值得一看,有些经典的东西不过时。
    《C陷阱与缺陷》这本书并没有其名字那么可怕,因为本书写作之时C标准还是没有敲定,因此编译器实现的一些的差异可能会导致可移植性问题或者怪异的行为。如今来看,标准C经过将近30年的考验,早已成熟稳重。虽然C90之后又发布了C99,C11,C18等版本,但是基本变化不大,新加的功能也是可有可无,尤其对于嵌入式开发来说。因此目前C语言是一个相当稳定的语言,编译器之间的差异非常小,可移植性很高,所以书中提到的一些问题自然而然就不存在了。另外,如果在编写C代码时保持良好的风格习惯,那么就可以避免绝大多数的常见问题。

    大学开设的第一门程序设计就是C++,这门课无疑是难度系数最高的,因为C++是最难掌握的编程语言之一(虽然能与其难度相当的语言我还没接触过,但是不排除有的可能性),虽然在当年看似“大神”的我,其实是菜鸟一个。究其原因就是书读得少也不够深,同时缺少项目实战,学编程必须要理论与实践相结合才能掌握的牢固。所以,毕业后工作难找的唯一原因就是水平太菜,当时有一家单位来招人,我就去面试,面试官翻开笔记本给我指了一道题,当时就给我整懵逼了:

    解释: a +++++ b的含义
    卧槽,我哪见过这么奇葩的代码,完全无法解释,只能pass了,然后出了另外两道题目回答的也是马马虎虎,这面试也就不了了之了,但是这道题却是令我终身难忘。这就是《C陷阱与缺陷》的课后练习1-4,看到此处,十多年前的场景立马浮现在脑海中,差一点就老泪纵横了。其实这题不难,书中1.3节 词法分析中的“贪心法”讲的就是这个问题,编译器在词法分析过程中,会尽可能多的给一个符号匹配字符,比如一个+号后面跟一个+号,就会组成++操作符,因此上式最终解析出的结果就是((a++)++)+b。因为a++返回的结果不是一个左值,再对其进行++操作将会产生语法错误,最终结果就是编译报错。
    那么问题来了,这样的题目作为面试题有意义吗?我觉得没啥意义,这种问题对于实际编码来说,并没有什么指导意义。
    一说到这种没意义的题目,还会联想起一堆,比如
    i = i++ + ++i; 最终i=?
    再比如:
    func(++i, ++i);函数调用,函数中形参的值是多少?
    类似的这种题目肯定是出现在书本上的,因为我根本没这种智商想出这样的题目,这些题目钻了C标准未定义的空子,你怎么解释都能说得通,C中并没有规定求值的时间点,下面一题考察函数调用约定(函数传参顺序,参数栈维护等),我觉得也是超纲。


    怪异的文件保存失败
    几年前,我成为了一名js程序员,不过项目中还有部分代码是C/C++写的,其中一部分就是文件的读写。后来有用户向我们反馈,说保存文件失败!经过反复测试,最终得出结论:在安装金山毒霸的电脑上,在文件保存到桌面的时候,会保存失败。后来发现问题是这样的,由于保存的文件的时候,是分多次打开文件并向其中追加数据,但是金山毒霸这个老鬼,在文件写入一次后便被他占用了,估计是他扫描杀毒去了,然后文件打不开结果导致保存失败。不过怪异的是,只有保存在桌面的时候才会出现这个问题。后来保存改成一次性写入就彻底解决了这个问题。


    转行js后,有时切换到C就会犯一些很低级的错误,比如字符串的写法,在js(以及其他很多编程语言,字符串可以用单引号或者双引号包裹,因为这些语言没有字符与字符串的区分,字符就是长度为1的字符串)中,习惯用单引号来写字符串常量,比如'hello world', 为啥单引号是习惯性用法,因为在按引号键的时候不必同时按住shift键。写c代码时习惯性的就把字符串写成单引号的了,结果就是一堆语法错误。那么,在C中,

    关于字符常量,比如说'a', 他是什么类型?
    字符常量,那肯定是字符型(char)了,例如 char c = 'a'; 肯定没毛病。那么如果字符常量是一个汉字呢,比如'啊',此时用char肯定是表示不了,赋值给char类型后,是被截断的数据。也就是说,字符常量不是字符型,而是整型(这一点可以通过sizeof 'a'的大小来验证),因此字符常量可以像整型一样参与各种运算。


    说到类型,我之前有一个疑惑,就是浮点数的输入输出,调用scanf和printf时,格式符存在一定的差异,float和double在输入的时候,格式符分别时%f和%lf,在输出时却是统一的%f,这是为什么呢?原因在于,

    函数参数的类型提升,大家对于类型提升应该都有一定的了解,就是,两个类型的操作数进行运算,如果这两个类型不同,则运算之前要把较低的类型提升位较高的类型,且要保证至少提升至整型。具体规则内容有点多,可以搜索相关内容,或者参考K&R的《C程序设计语言》2.7类型转换。为啥函数参数也存在类型提升呢?如果函数在原型中指定了具体的类型,是不存在类型提升问题的,声明的是什么类型就是什么类型。但是printf这样的函数,是一个不定参数函数,不仅参数类型不定,参数个数也是未知,因此在给这样的函数传参的时候,为了方便处理,小于整型的类型一律提升到整型,浮点型一律提升到double,具体的类型,需要在函数内部根据格式符再进行取舍,因此传入printf函数的浮点数只有double一种,因此不必再区分lf还是f。


    在此向大家推荐两本书,K&R的《C程序设计语言》,这是C语言的权威指南?;褂小禖专家编程》,是进阶必备。


    此内容由EEWORLD论坛网友lcofjp原创,如需转载或用于商业用途需征得作者同意并注明出处


    此帖出自编程基础论坛

    评分

    4

    查看全部评分

    • 赞一个! 威望 + 5 分 " class="mtn mbn">

      shinykongcn

    • 赞一个! 芯币 + 199 枚 威望 + 10 分 " class="mtn mbn">

      eric_wang

    • 队长最近思考很多啊。 芯币 + 20 枚 威望 + 10 分 " class="mtn mbn">

      辛昕

    • 很给力! 芯币 + 20 枚 威望 + 10 分 " class="mtn mbn">

      RCSN

    EEWORLD开发板置换群:309018200,——电工们免费装β的天堂,虽然在群里买不到板子,但是可以学会开车;虽然学不到技术,但是可以学会开车;商家勿入!加群暗号:喵


    772

    TA的帖子

    2

    TA的资源

    纯净的硅(初级)

    Rank: 4

    沙发
    发表于 2019-3-13 09:10 | 只看该作者
    干货~前排小板凳学习~
    物致DIY 欢迎你的加入~
    QQ群:646461928 公众号:智物知心致成
    小店


    363

    TA的帖子

    8

    TA的资源

    一粒金砂(高级)

    Rank: 3Rank: 3

    板凳
    发表于 2019-3-13 09:11 | 只看该作者
    队长,我书读的少,说不出什么赞美的语言。我只能说一句:队长流弊


    19

    TA的帖子

    0

    TA的资源

    一粒金砂(中级)

    Rank: 2

    4
    发表于 2019-3-13 09:16 | 只看该作者
    队长,我书读的少,说不出什么赞美的语言。我只能说一句:队长流弊


    655

    TA的帖子

    2

    TA的资源

    一粒金砂(高级)

    Rank: 3Rank: 3

    5
    发表于 2019-3-13 09:43 | 只看该作者
    队长,我书读的少,说不出什么赞美的语言。我只能说一句:队长流弊                                          
    Hello astroturfers


    8249

    TA的帖子

    2

    TA的资源

    管理员

    Rank: 13Rank: 13Rank: 13Rank: 13

    6
    发表于 2019-3-13 10:47 | 只看该作者
    虽然不懂C和C++,但看完本文觉得楼主是个有趣的灵魂。


    3348

    TA的帖子

    0

    TA的资源

    纯净的硅(高级)

    Rank: 6Rank: 6

    7
    发表于 2019-3-13 12:12 | 只看该作者
    好嚣张的展示,堆栈牛逼
    So what......


    1328

    TA的帖子

    7

    TA的资源

    版主

    Rank: 6Rank: 6

    8
    发表于 2019-3-13 13:21 | 只看该作者
    1)  代码规范性可以看《代码大全》,这本书比较厚,睡觉前翻翻,睡觉时可以当枕头
    2) 《C专家编程》可能经常翻翻,真的不错
    3)  《c与指针》,《c缺陷与陷阱》,《c专家编程》,C语言要经??吹氖?br /> 4)   关于面试中这些题目,有的是为了考察基础,有的可能是为了考察敏捷思维,这个看出笔试人的心情还有性格

    点评

    很好的建议,如果这几本书都看会,看明白,那就不得了了  详情 回复 发表于 2019-3-14 11:14
    是的,经典书要常翻  详情 回复 发表于 2019-3-13 18:26
    专注智能产品的研究与开发,专注于电子电路的生产与制造……QQ:2912615383,电子爱好者群: void


    7864

    TA的帖子

    54

    TA的资源

    版主

    Rank: 6Rank: 6

    9
    发表于 2019-3-13 13:48 | 只看该作者
    此处召唤@Eric-Wang 赠送队长芯比1000

    点评

    感谢教主的赏赐  详情 回复 发表于 2019-3-13 18:26
    收到,已操作  详情 回复 发表于 2019-3-13 13:56


    8249

    TA的帖子

    2

    TA的资源

    管理员

    Rank: 13Rank: 13Rank: 13Rank: 13

    10
    发表于 2019-3-13 13:56 | 只看该作者
    辛昕 发表于 2019-3-13 13:48
    此处召唤@Eric-Wang 赠送队长芯比1000

    收到,已操作


    5584

    TA的帖子

    207

    TA的资源

    版主

    Rank: 6Rank: 6

    11
     楼主| 发表于 2019-3-13 18:26 | 只看该作者
    懒猫爱飞 发表于 2019-3-13 13:21
    1)  代码规范性可以看《代码大全》,这本书比较厚,睡觉前翻翻,睡觉时可以当枕头
    2) 《C专家编程》可能 ...

    是的,经典书要常翻
    EEWORLD开发板置换群:309018200,——电工们免费装β的天堂,虽然在群里买不到板子,但是可以学会开车;虽然学不到技术,但是可以学会开车;商家勿入!加群暗号:喵


    5584

    TA的帖子

    207

    TA的资源

    版主

    Rank: 6Rank: 6

    12
     楼主| 发表于 2019-3-13 18:26 | 只看该作者
    辛昕 发表于 2019-3-13 13:48
    此处召唤@Eric-Wang 赠送队长芯比1000

    感谢教主的赏赐
    EEWORLD开发板置换群:309018200,——电工们免费装β的天堂,虽然在群里买不到板子,但是可以学会开车;虽然学不到技术,但是可以学会开车;商家勿入!加群暗号:喵


    1636

    TA的帖子

    1

    TA的资源

    纯净的硅(高级)

    Rank: 6Rank: 6

    13
    发表于 2019-3-13 18:49 来自手机 | 只看该作者
    居然坐地铁有座看书。。。

    点评

    哪有座,都是站着看  详情 回复 发表于 2019-3-13 19:30


    5584

    TA的帖子

    207

    TA的资源

    版主

    Rank: 6Rank: 6

    14
     楼主| 发表于 2019-3-13 19:30 | 只看该作者
    freebsder 发表于 2019-3-13 18:49
    居然坐地铁有座看书。。。

    哪有座,都是站着看

    点评

    队长流弊,我坐地铁的时候手机都摆不开,只能塞个耳机这样子~~  详情 回复 发表于 2019-3-14 18:02
    EEWORLD开发板置换群:309018200,——电工们免费装β的天堂,虽然在群里买不到板子,但是可以学会开车;虽然学不到技术,但是可以学会开车;商家勿入!加群暗号:喵


    268

    TA的帖子

    1

    TA的资源

    一粒金砂(中级)

    Rank: 2

    15
    发表于 2019-3-13 22:24 | 只看该作者
    队长流弊?;八涤行┟媸蕴庹媸敲媸怨偻嫒说?。。


    7488

    TA的帖子

    4951

    TA的资源

    博客管理员

    Rank: 6Rank: 6

    资源大师勋章

    16
    发表于 2019-3-14 11:12 | 只看该作者
    a +++++ b的含义。这样的题目用在学??际曰剐?,作为公司的面试题没有意义


    7488

    TA的帖子

    4951

    TA的资源

    博客管理员

    Rank: 6Rank: 6

    资源大师勋章

    17
    发表于 2019-3-14 11:14 | 只看该作者
    懒猫爱飞 发表于 2019-3-13 13:21
    1)  代码规范性可以看《代码大全》,这本书比较厚,睡觉前翻翻,睡觉时可以当枕头
    2) 《C专家编程》可能 ...

    很好的建议,如果这几本书都看会,看明白,那就不得了了


    1429

    TA的帖子

    1

    TA的资源

    纯净的硅(中级)

    Rank: 5Rank: 5

    18
    发表于 2019-3-14 18:02 | 只看该作者
    lcofjp 发表于 2019-3-13 19:30
    哪有座,都是站着看

    队长流弊,我坐地铁的时候手机都摆不开,只能塞个耳机这样子~~

    点评

    好几千块钱的耳机,戴着也舒服  详情 回复 发表于 2019-3-14 22:39
    HELLO_WATER


    5584

    TA的帖子

    207

    TA的资源

    版主

    Rank: 6Rank: 6

    19
     楼主| 发表于 2019-3-14 22:39 | 只看该作者
    shinykongcn 发表于 2019-3-14 18:02
    队长流弊,我坐地铁的时候手机都摆不开,只能塞个耳机这样子~~

    好几千块钱的耳机,戴着也舒服

    点评

    no,好几十块的~  详情 回复 发表于 2019-3-18 10:14
    EEWORLD开发板置换群:309018200,——电工们免费装β的天堂,虽然在群里买不到板子,但是可以学会开车;虽然学不到技术,但是可以学会开车;商家勿入!加群暗号:喵


    9

    TA的帖子

    2

    TA的资源

    一粒金砂(初级)

    Rank: 1

    20
    发表于 2019-3-17 09:53 | 只看该作者
    受教了,感恩!


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

    本版积分规则

    • 论坛活动 E手掌握

      扫码关注
      EEWORLD 官方微信

    • EE福利  唾手可得

      扫码关注
      EE福利 唾手可得

    Archiver|手机版|小黑屋|广东十一选五开奖图 ( 京ICP证 060456 )

    GMT+8, 2019-4-19 01:19 , Processed in 0.517501 second(s), 18 queries , Gzip On, MemCache On.

    快速回复 广东十一选五开奖图 返回列表
  • 鸟瞰“中国围屋之乡” 造型独特如城堡 2019-04-16
  • 先想好如何处理可能的危害,要有经济“卫国战争”的准备,要将困难多设想一点,想到了就不会很被动。 2019-04-16
  • 实现中华民族伟大复兴是近代以来中华民族最伟大的梦想(认真学习宣传贯彻党的十九大精神) 2019-04-13
  • 报道新闻记录历史 70载人民日报见证中国发展大事 2019-04-13
  • 新华网评:凝聚打赢脱贫攻坚战的强大合力 2019-04-02
  • 打造历史文化名城 “安宁记忆”项目启幕 2019-04-02
  • 打开设计图纸的说明。 2019-03-30
  • 一语惊坛(5月15日):川航备降,是临危不惧的中国智慧的中国奇迹。 2019-03-25
  • 社长手记造车奇人尹同跃并非只为奇瑞而来 2019-03-17
  • 三代航天人做客人民网 共话中国航天创建60年 2019-03-01
  • 回复@寻找失落的真理:跟你的铁环玩去!咱真的没兴趣碾压你也。 2019-03-01
  • 有人踢球踢进了手术室 有人看球看到脖子扳牢了 2019-02-23
  • 朋友圈买过这些东西吗?原来都是不靠谱的! 2019-02-05
  • 为宣传奇绝秀美旅游风光 鹰潭市委书记自拍上央视(图) 2019-02-05
  • 统一监管缺位容易出现监管套利 2018-11-22