纠纷奇闻作文社交美文家庭
家庭城市
爱好生活
创业男女
能力餐饮
美文职业
心理周易
母婴奇趣
两性技能
社交传统
新闻范文
工作个人
思考社会
作文职场
家居中考
兴趣安全
解密魅力
奇闻笑话
写作笔记
阅读企业
饮食时事
纠纷案例
初中历史
说说童话
乐趣治疗

C实用学习指南

6月2日 长歌行投稿
  C发展得非常快!例如,C标准的页数从C9803的879页增加到了C20的1834页,多了近1000页!更重要的是,C每次修订后,我们都会获得几十个新特性。你需要学习所有这些东西才能写出好代码吗?如何在当今的C世界中保持理智?
  介绍
  你可能知道C是一种复杂的语言。我甚至发现了一整页Wiki是讲对Cpp的批判的。现代C甚至为生态添加了更多内容。
  以下是我之前提到的规范页数的完整数据:C9803879,N1905,2005年10月C111324,最后草案,N3337,2012年1月C141368,最后草案,2014年11月C171586,草案,N4606C201834,草案,N4861
  看起来C17几乎比C9803大了80,而C的最新草案比C03多了将近1000页。你可以抱怨增加的这些复杂性,想学好所有这些东西也很困难。但这有那么可怕吗?面对这样的情况,你能做些什么?
  首先,我们来看看你在C中可能会遇到的一些问题。
  一些问题
  仅举几例:节奏太慢节奏太快特性的混乱复杂性编译时间慢缺乏依赖管理
  我们来仔细研究一下。
  节奏太慢
  2017年,我们迎来C17。虽然每三年就迎来一个新标准是很棒的,但许多开发人员抱怨新版本并不是每个人都期待的。
  很多特性:比如概念(concept)、模块、范围(range)、协程(coroutine)都没有被接受,我们至少需要再等三年才能让它们进入规范。
  在2020年,C20已经准备就绪,并且这些重要特性将随编译器一起提供!但我们还是会抱怨合约(contract)还没加进来,反射(reflection)、执行器(executor)或网络(networking)仍在讨论中。它们可能出现在C23甚至更高版本中。
  看起来有些特性接受起来比较慢而且总有东西值得抱怨。
  节奏太快
  像往常一样,我们在这里可能有两种相互矛盾的意见。尽管对某些人来说升级节奏很慢,但对其他人来说却很难跟上变化。
  你刚刚学习了C1114现在你就需要更新C17的知识,然后C20就在路上了。三年并不是那么短的时间,但请记住,编译器一致性、公司政策、团队指南可能会以不同的节奏前进。
  你的公司是立即更新到最新的C版本还是等待几年?
  特性的混淆复杂性
  只需阅读这条评论:
  CallMeDonk:
  我喜欢C。这是我的首选语言,但你必须承认,它对值类的大杂烩实现是很怪异的。包括我在内的大多数程序员更喜欢简单的、定义明确的语言结构,而不是奇怪和复杂的语法。
  C在各个方面都很清晰吗?可能不是
  以下是一些可能难以理解并可能让程序员糊涂的主题:
  移动语义
  移动语义的原则非常明确:不要复制,而是尝试窃取托管资源的内部结构,你应该获得不错的性能提升。但魔鬼都藏在细节中。
  我不会写很多通用代码,所以幸运的是,我不必一直考虑移动语义。但是,当我遇到move和const时会很困惑请参阅我上一篇关于该主题的文章。我不相信所有C开发人员都会理解这里的规则。特别是你现在需要记住编译器生成的六个默认操作:默认构造器、析构函数、复制构造器、移动构造器、赋值运算符和移动赋值运算符。
  RvaluesxvaluesprvaluesmyValues、fooValues
  最后一个是我编的但那么多值类别实在太让人头疼了!
  在C(或C9803)中,你只需要知道左值与右值,现在它有点微妙了。
  不过,问题是你是否需要记住它?
  一些不错的评论:
  c0r3ntin:
  这很复杂,但不是每天都能遇到。这个值可以address吗?可以复制吗?可以移动吗?应该移动吗?只有在极少数情况下,你才需要主动去澄清并充分理解它们。(模板化库编写、热路径等)。大多数时候C并不比java或其他东西复杂。可悲的是大多数人都忘了这一点。C可能是最复杂的语言,但是你可以编写非常好的代码而无需关心具体的细节。BigObjectogetBigObject();
  初始化
  现在有18种方式(从C17开始)!
  参阅:
  C中的初始化是疯狂的
  https:www。reddit。comrcppcomments5p5ed7initializationincisbonkers?fileGuidHjDhgwWw6jPKDcCK;
  rcpp线程
  https:blog。tartanllama。xyzinitializationisbonkers
  模板(和模板推导)
  当我看到C17的所有变更时,我很迷茫;关于模板的细节太多了。
  同样的情况发生在C20中,我们迎来了一个重大且期待已久的改进:概念它彻底改变了C。
  然而,如果你想学习模板,一开始可能会不知所措。
  ABI
  随着新特性列表的不断增长,从头开始修复C设计中的旧问题可能是很诱人的主题。但这种语言的原则是不能破坏旧代码,所以委员会非常严格,不喜欢改变已引入特性的路线。
  这个问题没有正确的答案,但无论如何,一个经过充分讨论的主题要比仓促的举动更好。
  ABI
  随着新特性列表的不断增长,从头开始修复C设计中的旧问题可能是很诱人的主题。但这种语言的原则是不能破坏旧代码,所以委员会非常严格,不喜欢改变已引入特性的路线。
  这个问题没有正确的答案,但无论如何,一个经过充分讨论的主题要比仓促的举动更好。
  缺乏依赖管理工具
  我们可以抱怨C没有交付一个很酷的依赖管理系统。但现实情况是,在可预见的未来,这可能都不会实现。拥有一个标准的包管理器是一个艰难的选择,尤其是它必须处理如此多的可用C的平台和系统。
  不够安全
  前段时间,你可以读到提到这个问题的一些文章(这篇和这篇):
  谷歌工程师本周表示,Chrome代码库中大约70的严重安全漏洞是内存管理和安全漏洞。
  微软也是如此。由于大部分代码是C或C,所以每个人都指责C不够安全。
  其他问题?
  你在这种语言上遇到的主要问题都有哪些?
  到目前为止,我们已经讨论了一些问题那么如何应对它们呢?有机会解决这些问题吗?
  如何保持理智
  没有完美的编程语言;每种语言都有一些问题。以下是我关于如何处理现代C问题的建议:保持乐观使用最佳指南使用最好的工具跟上最新进展不要打开引擎盖使用你需要的增量变更最后的底线:你的旧代码仍然安全并且可以编译
  保持乐观,语言在不断发展
  没有人愿意使用旧的语法和结构来编写代码。我们已经看到很多关于C11之前的旧版C的抱怨。人们花了将近13年的时间(从主要的C98算起,不包括次要的C03)才提出新的主要版本:C11。现在我们可以很高兴回到了正轨,每三年都会有一些变化。归根结底,你不能说你的语言已经死了。
  虽然某些特性非常庞大,可能会带来混乱或需要学习更多东西,但实际情况其实很简单:在C03之后添加的1000个新页面中的大部分用于标准库。这意味着你可以使用更多助手和子系统,而无需查找第三方库。这绝对会让你的生活更轻松。对于移动语义,你可以依赖库类型,因为它们会为你完成正确的工作。例如,你现在可以安全地返回std::vector并确保它可能被移动甚至被删除,而无需额外副本。至于模板,它变得越来越容易使用。概念让代码更安全,没有像SFINAE这样的技巧。更重要的是,我们有了constexpr和auto,让泛型代码更简单了(几乎就像常规代码一样)。至于安全性:在这里查看C指南的安全配置文件的自动化工具。CCoreCheck中的新安全规则C团队博客。我们可以期待新的、更好的工具来执行代码分析甚至检测,以尽快发现潜在的安全问题。或者看这篇文章:使用静态分析原理缩小Rust和C之间的差距SunnyChatterjeeCppCon
  使用指南
  如果你对C代码的许多方面都感到困惑,那么你应该查阅C核心指南。它由热心的C开发社区创建,主要编辑是HerbSutter和BjarneStroustrup。
  看这里:
  C核心指南Github
  https:github。comisocppCppCoreGuidelinesblobmasterCppCoreGuidelines。md?fileGuidHjDhgwWw6jPKDcCK
  这里有一个漂亮的网站:
  C核心指南:网站
  https:isocpp。github。ioCppCoreGuidelinesCppCoreGuidelines?fileGuidHjDhgwWw6jPKDcCK
  只需输入你面临的问题(例如returnvalue),你就可以轻松找到建议例如:指南:返回值
  使用这些指南将为你节省大量时间,并且你可以非常快地学习一些好的模式。
  还有工具!
  感谢Clang以及其他平台上的开发速度提升,我们获得了如下工具:ClangTidy(以前是clangmodernise)ClangFormatClangStaticAnalyzerVisualAssistClionResharperCVisualStudio像CCoreChecker这样的工具PVSStudio用于VisualStudio的ClangPowerTools新的C核心检查规则C团队博客C核心指南检查器参考微软文档介绍vcperftimetrace,用于C构建时间分析C团队博客CCoreCheck中的新安全规则C团队博客C和Rust一样安全吗?
  或者查看我关于其他工具的文章:
  C生态系统:编译器、IDE、工具、测试等
  https:www。cppstories。com201910cppecosystem?fileGuidHjDhgwWw6jPKDcCK
  虽然它不像其他语言(主要基于Java或基于。NET)那么好,但它正在变得越来越好。请记住,由于C语法复杂,因此很难实现即时分析代码的工具。
  努力跟上最新进展
  C社区非常活跃。有很多博客、书籍、会议甚至有可能在你所在的城市有本地社区。
  首先,我建议去isocpp。org查看所有事件新闻文章。然后你可以查看MeetingC和有关本地C小组的信息。还有redditcpp,你可以在那里看到一些最棒的C故事。
  还有CppCast一个针对C开发人员的每周播客。
  并参考以下书籍:C编程语言第4版高效的现代C编程:使用C的原理和实践发现现代C:科学家、工程师和程序员的强化课程C之旅(C深入系列)第2版
  你还可以查看推荐的C资源列表:
  Bartek的编程博客:
  https:www。cppstories。compresources?fileGuidHjDhgwWw6jPKDcCK
  细节太多了?
  C如此强大的原因之一是它允许你实现非常接近底层的代码。你可以控制所有细节、内存布局、性能优化等同时,这些能力增加了语言的复杂性。
  不过,如果你不需要走那么远,你可以停留在相对较高的抽象级别。
  例如,你不需要编写可选类型,因为你可以使用标准库中的std::optional。如果你不想涉及低级别和容易出错的联合类型,你应该意识到std::variant是一个安全的选项。
  使用你需要的东西
  C是一种多范式语言;你可以以多种不同的方式使用它。最近,我读到了一条有趣的评论,说Cpp程序员在不接触模板元编程甚至异常等高级内容的情况下,也能持续多年表现出色。这在很大程度上取决于项目的代码风格。
  例如,即使像谷歌这样的公司也限制了C的特性,比如说他们不使用异常。
  如果你不是库开发人员,你可能不会遇到自定义移动运算符或移动构造器的麻烦。同样,高级元编程的内容也可能不是你的代码的关键部分。
  增量变更
  如果你是从头开始或只有一个小的代码库,那么转到C1114应该相对容易一些。可是20年(或更久!)前开始创建的上百万行代码呢?
  只需一步一步来就行了。
  至少对于新代码,你应该开始使用现代C。此外,通过应用童子军规则,你可以改进你所接触的那些代码。
  这可能会带来一些混合代码,但还是比只保留老旧风格要好。
  最后的底线:你的旧代码仍然可以编译
  C规范越来越大的原因之一是该语言向后兼容。所以委员会通常会引入新特性,但很少删除旧的东西。所以你的代码仍然可以编译。如果你不想前进,不想使用新的东西,那么你还是可以保持当前的风格。
  有时你会收到一些关于不推荐使用的内容或删除特性的警告(如C17中的autoptr),但即使在这种情况下,你也可以将编译器切换到一些较旧的C标准。
  总结
  这篇文章有一些抱怨,也有一些美化。我试图找出这种语言及其演变过程中存在的各种问题,以及一些积极的改进迹象。虽然我们可以抱怨复杂性、变化的速度等,但我认为我们不能说这种语言已经死掉了。这是好事!:)
  我认为你不必快速追逐新特性并立即重写现有代码。试着跟上进展,使用真正改进你工作的特性,你的代码应该逐渐改进并变得更加现代化(这是可以定义的,请参阅meetingcpp的相关文章http:meetingcpp。comindex。phpbritemswhatdoesmoderncreallymean。html?fileGuidHjDhgwWw6jPKDcCK)。在采用C11141720的新特性时,你的方法是什么?你使用C的主要问题是什么?你在工作中使用现代C吗?
搜索 投诉 评论 转载

今天才发现,微信长按2秒隐藏5大功能,很多人都还不知道,真好如果问你的手机每天必用的APP是哪个?微信肯定榜上有名。但天天使用微信,你对它的功能真的都很了解吗?图片来源网络今天才知道微信长按2秒,会有这5个隐藏小功能,……C实用学习指南C发展得非常快!例如,C标准的页数从C9803的879页增加到了C20的1834页,多了近1000页!更重要的是,C每次修订后,我们都会获得几十个新特性。你需要学习所有这些东西……让我开眼界的江布拉克第二故乡:新疆之行文于聚义流火的七月,我载着夫人驱车翻过天山走北线,由巴里坤前往奇台县辖时,一路上两旁不一会儿就有一块江布拉克(江布拉克是哈萨克语圣水之源的意思),……荣耀新成员H100H200原声手提音响上市它,拥有震撼音效它,能唱能播功能多它,续航超强适应长时间工作它,能满足居家、会议、培训、户外等多种场景它,就是十度十周年扛鼎之作荣耀系列新品……杜海涛婚后近照曝光瘦一圈,和友人露营吃烧烤,时刻把老婆挂嘴边近日,有网友晒出一组动态,曝光了知名主持人杜海涛结婚后的近照,引发大家的热议。当天杜海涛和友人们一起在外露营,还有其他游客参加,大家很快就打成一片,聚在一起吃饭聊天非常开心。……2022。11。04当日复盘及2022。11。07预案当日回顾:大盘情绪:美联储加息落地后,大盘在3000点稳住,带来一波a50权重行情,大盘情绪可以重点下关注恒生指数,这个位置不要追高,在国内经济基本面未改善的前提下……果酸换肤术并发症的护理1、局部刺激症状:多数患者在果酸换肤治疗过程中自觉轻度刺痛感、瘙痒及皮肤轻度红斑反应,这是果酸治疗的正常反应,给予修复面膜冷湿敷后症状可消退;若红斑持续时间超过3周或伴有水肿、……一种新式的碳纤维复合材料结构超级电容器的设计与制备港理工黄海涛教授、南科大周利民教授,CEJ:一种新式的碳纤维复合材料结构超级电容器的设计与制备【文章信息】一种新式的多功能碳纤维复合材料结构超级电容器的设计与制备……玉米须有什么功效呢?玉米须【基源】本品为禾本科植物玉蜀黍的花柱和柱头。【性味归经】甘,平。归肾、肝胆、膀胱经。滇南本草》:性微温,味甘。《现代实用中药:甘,平。四川中……在地球轨道这条公路上,究竟有多少颗卫星在行驶呢?答案有点多你知道有多少颗卫星在绕着地球转吗?(图片来源:NASA,CCBYNC)环绕地球运行的数千颗卫星都很小就像这颗从国际空间站释放的立方体卫星一样。(这篇文章最初是……官方中超第12轮5场延期,广州踢成都沧州战泰山本周进行北京时间8月8日,中超官方对赛程进行了调整。第12轮有5场比赛延期,同时第16轮的2场比赛,提前到原定12轮的比赛日内进行(8月12日),也就是本周进行。由于海南的突发情……安徽人游安徽丨迎江古城新探之旅安庆迎江区,一座历史悠久的古城,迎江区依江而城,地处惊涛拍岸的长江之滨,岁月变迁,给这片土地留下了丰富灿烂的历史文化,来这休闲度假,体验古城韵味,感受魅力迎江。一条古城新……
巴特勒话里有话,恩比德暗讽76人管理层,美媒爆三方大交易今日劲爆!大巴黎要和梅西续约!卡塔尔财团为了世界杯拼了高通骁龙778G到底有多强?摩托罗拉X30Pro测评全能骁龙8旗舰,诚意满满到广州南沙看大型烟花表演!除夕夜首秀,初一十五各一场CES2023华硕推出ROGSwiftProPG248QP显芯片大基金,如何被关系户掏空赚钱重要还是陪伴孩子重要?有多少家庭面临两难的抉择糖尿病人多吃鱼和蛋,又治糖尿又益肾?欧露莲速溶香蒜粉大蒜多糖的功能特点和实际应用有哪些?育碧喜加一,细胞分裂混沌理论免费领取看了米兰时装周发现今年流行穿长不穿短,个性时髦一把抓
溶液稀释(样品稀释10倍怎么稀释)有关爱在盛夏作文范文爱在盛夏希尔斯堡惨案个球迷死亡数千人自杀教堂鸣钟声谁之过遇见你,我愿意让心靠岸木棉树作文600字致父母聪明孩子6岁前表现突出,观察各种迹象,别埋没天才76人4换2新方案!放弃马克西哈里斯,费城豪赌三巨头争冠?山核桃选购兄弟之间借钱要写借条吗交互式心理教学薄荷品种多养过种的是大神看看你家有几类花生酸功能、合成及调控热闻聚热点网

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找美丽时装彩妆资讯历史明星乐活安卓数码常识驾车健康苹果问答网络发型电视车载室内电影游戏科学音乐整形