“C的abc”或“C:从A到z”?- - - - - -

“该死的愚蠢的事”——C的起源

今天,C可能是程序员之间的通用语言。这是它(简略)的历史。

也许相信努力,不仅仅是出生在wellworn平装本形式。
扩大 /也许相信努力,不仅仅是出生在wellworn平装本形式。

在一种或另一种形式,C的形状影响几乎所有编程语言开发了自1980年代以来。一些语言,像c++, c#,和objective - C的目的是直接继承人语言,而其他语言只是接受和适应了C的语法。程序员熟悉的Java、PHP、Ruby、Python或Perl理解简单的C程序,不会有什么困难,在这个意义上,C可能认为几乎是程序员之间的通用语言。

但C没有完全成形的凭空出现一些编程的庞然大物。C的故事开始于英国,阿兰·图灵的同事和一个玩跳棋的程序。

上帝保佑国王

克里斯托弗•斯特雷奇被称为“人写了完美的计划,”中指出长剖面的杂志,历史上计算以他在1951年收购了在曼彻斯特大学计算中心。斯特雷奇结束了,在学校的Ferranti马克我电脑通过一个老国王学院,剑桥,连接,阿兰·图灵。

斯特雷奇生于1916年变成一个出身名门的英国俊秀叔叔,斯特雷布卢姆斯伯里集团的创始成员,而他的父亲,奥利弗·斯特雷奇在两次世界大战期间盟军破译密码的活动。

斯特雷奇最终被公认的专家在编程和计算机科学是多少有些惊讶他的公立学校,剑桥大学讲师。斯特雷奇一直显示科学的人才但很少应用。

如果他希望从事学术研究,他们被一个不起眼的性能造成了严重的打击,他的期末考试。相反,斯特雷奇在第二次世界大战为英国一家电子公司工作,成为一名教师之后,最终降落在哈罗公学,在伦敦最著名的公立学校之一。

在1951年斯特雷奇,他有了第一次的机会使用电脑,当他被介绍给迈克Woodger英国国家物理实验室。呆了一天后他的圣诞假期越来越熟悉实验室的王牌飞行员,他花了他的空闲时间耙弄清楚如何教计算机下棋。作为马丁Campbell-Kelly,斯特雷奇在晚年的同事所说,“任何人都有经验或少信心解决广场。”

这第一次的努力最终没有实现;王牌飞行员根本没有所需的存储容量下棋,但它确实说明斯特雷奇的兴趣的一个方面,证明仪器的发展导致c语言的时候电脑是价值主要为他们能够快速解决方程,斯特雷奇更感兴趣的能力执行逻辑任务(正如他后来证实在1952年计算机协会会议)。

Ferranti春天以后,他发现了马克我电脑被安装在曼彻斯特大学,在阿兰·图灵计算机实验室的主任助理。图灵写了程序员的手册,和斯特雷奇从他们在一起的时间很了解他在剑桥大学向他索要了一份手册。

1951年7月,斯特雷奇有机会访问曼彻斯特和讨论他的跳棋程序图灵的人。适当的印象,图灵提出,作为第一步,他编写一个程序,将使Ferranti马克我模拟本身。模拟器将允许程序员看到的,一步一步,电脑将如何执行程序。这样的“跟踪”计划将突出的地方项目瓶颈或运行效率低下造成的。在计算机内存和处理器周期花一大笔钱,这是编程的一个重要方面。

跟踪程序斯特雷奇写包含超过一千个指令,时间最长的项目,曾经为Ferranti编写的马克。斯特雷奇运行起来熬夜后,当程序终止,它扮演“上帝拯救国王”在计算机的扬声器,据Campbell-Kelly

这个成就,业余,Halsbury勋爵的关注,国家研究和发展公司的董事总经理,他很快就招募了斯特雷奇矛头政府努力促进快速发展的实际应用计算机科学在英国大学。

正是在这种能力,他发现一个项目在剑桥被由三个程序员名叫大卫。

大卫和歌利亚泰坦

剑桥大学有很强的面向服务的计算中心。数学实验室的第一个电脑,EDSAC和EDSAC 2,得到了在其他地方大学研究人员写程序是穿孔纸带,送入机器。

计算中心,这些纸带剪到晾衣绳和执行一个接一个在营业时间。这一悬而未决的程序被称为“工作队列,”仍在使用的术语,用来描述更复杂的组织计算任务的手段。

在55马克,享受一些EDSAC“作业队列”行动。

仅仅两年后EDSAC 2在线,大学需要意识到一个更强大的机器,为了实现这一目标,他们需要购买商业大型机。大学认为Ferranti IBM 7090和阿特拉斯,但它能买得起他们两人。1961年,彼得•霍尔,Ferranti部门经理,建议他们可以开发一个精简版的阿特拉斯计算机与剑桥大学的共同。剑桥的原型,被称为“泰坦”和Ferranti能够市场新电脑顾客买不起Atlas系统。

为了提供计算服务的其他大学,这新电脑需要一个操作系统和至少一个高级编程语言。

几乎没有考虑扩大语言,开发了EDSAC 2。“在1960年代早期,普遍认为,“我们正在建设一个新电脑,所以我们需要一个新的编程语言,“”大卫·哈特利召回2017年播客。大卫·惠勒和大卫·巴伦哈特利将参与这个新电脑的早期发展的编程语言。

“新操作系统是不可避免的,”据哈特利,但一种新的编程语言。“我们认为这是一个机会与语言——一个新的乐趣,事后来看,是一个该死的愚蠢的事情。”

莫里斯·威尔克斯,他是负责泰坦项目,觉得没有必要为一种新的编程语言。泰坦的主要理由是提供计算服务的剑桥大学,为此,最好如果机器尽快启动并运行,装有一个语言用户已经熟悉。

威尔克斯需要分析可用的编程语言之前批准提议建立一个新的语言。“我们选择他们非常小心,”哈特利说,“为了决定,他们中没有一个是合适的。“值得注意的是,工作组评估Fortran IV没有咨询Fortran用户在剑桥谁能解释Fortran的附加功能包括与其他品种。正因为如此,哈特利回忆集团相信”我们可以很容易地定义和开发更好的东西,“在他之前,“这失败回到家中,栖息在几年。”

三人最终在1962年6月准备一篇论文,认为一门新语言是必要的,“我们成功了,”哈特利总结道。

这个新的编程语言被称为CPL(剑桥的编程语言),和工作起步于1963年。剑桥程序员已经加入了约翰•巴克斯顿和埃里克·尼克松CPL来自伦敦大学,已经修订站结合编程语言。随着项目的增长,威尔克斯决定把克里斯托弗•斯特雷奇监督项目和CPL很快就意味着“克里斯托弗的编程语言”对于那些与之关联,根据Campbell-Kelly

组研究人员致力于语言将剑桥或者在伦敦会晤,有时在伦敦大学的,但在其他场合的艺术家的工作室在肯辛顿市政厅斯特雷奇与他的妹妹。后方的房间配备有维多利亚的家是椅子和垫子在地板上,在墙上装饰着各种布鲁姆斯伯里团体成员的画像画的斯特雷奇的一个亲戚。这是斯特雷奇会“上朝”,偶尔在晨衣,大卫·巴伦回忆几年后,“我们认为世界之前的权利分散我们的各种家庭在晚上。”

那时,大卫·惠勒已经转移到其他项目,留下一组五:哈特利,巴伦,巴克斯顿尼克松和斯特雷奇。,

哈特利享受工作线;“实际上这是一部相当有趣的工作,”他回忆道。会议,而非正式的事务。“我们会非常激烈的事情,最终开始扔纸飞镖(飞机)在另一个地方。”

集团一开始用ALGOL 60的规范,编写一个“完美”的目标语言:一种是为各种用户实际也是美学上令人满意的和有效的。

几乎立即,他们有一些困难优先,大卫·巴伦斯特雷奇指出,“这是他坚持要小点的特征的差异与相同的力量,他坚持要大点。”一个小挑剔是斯特雷奇反对语法的“如果…那么…”语句。“我不能让我的名字与一个明确的有关建议使用无知地不正确的英语,”在他看来,作为以后哈特利历史上计算写道斯特雷奇首选”或”矛盾的方式”或“在几乎每一个其他编程语言的存在。尽管如此,他的喜好进行一天,CPL的参考手册包括”或“用户预期的地方“其他”。

CPL的手册,网上< a href = < / >。" src="https://cdn.arstechnica.net/wp-content/uploads/2020/12/Ars_HistoryOfC.png" width="624" height="509">
CPL的手册,网上当然可以。

宝贵的时间也投资于开发一种方法避免使用星号来表示乘法。这里,审美的担忧导致并发症,延迟一个可用的编程语言的实现,复杂的规则必须开发区分“3 a”意味着“3 *”和“3”是一个变量的名字。

自始至终,剑桥用户越来越沮丧,缺乏一个可用的大学新阿特拉斯计算机编程语言。语言的规范主要是完成了,但是没有编译器可用。CPL工作组做了这么复杂,早期尝试写编译器导致机器代码,效率极低。

449年读者评论

  1. 谢谢你的好文章!
    4734个帖子|注册
  2. 我做了一个职业相关的C和语言。但是如果有一个不必要的继承的可维护性的错误我可以删除,这是三元操作符。

    randomThing吗?就是:noDoThat;

    这只是废话,如果你不同意你错了(如果你没见过成千上万的嵌套的三元运算符在相同的功能你还没住。如果你相信我,你希望你是死)

    最后一次编辑koolraap在2020年12月09年结婚,7:54

    1960个帖子|注册
  3. 作为一个非代码,不过一直对计算机感兴趣从8位时期开始,这是伟大的背景信息。

    也许最令人惊讶的——作为一个英国人是贵族和中产阶级的角色在早期形成的计算。利顿·斯特雷奇人文学科是一个著名的人物,当然,Ada Lovelace的角色(一个伯爵夫人,没有少)在早期的编程。计算矫直机。我无法想象任何现代等价的。
    524个帖子|注册
  4. koolraap写道:
    我做了一个职业相关的C和语言。但是如果有一个不必要的继承的可维护性的错误我可以删除,这是三元操作符。

    randomThing吗?就是:noDoThat;

    这只是废话,如果你不同意你错了


    给了,你不喜欢使用它!
    180个帖子|注册
  5. koolraap写道:
    我做了一个职业相关的C和语言。但是如果有一个不必要的继承的可维护性的错误我可以删除,这是三元操作符。

    randomThing吗?就是:noDoThat;

    这只是废话,如果你不同意你错了


    给了,你不喜欢使用它!

    我不,老兄。我不喜欢。但我不独自工作。
    1960个帖子|注册
  6. koolraap写道:
    我做了一个职业相关的C和语言。但是如果有一个不必要的继承的可维护性的错误我可以删除,这是三元操作符。

    randomThing吗?就是:noDoThat;

    这只是废话,如果你不同意你错了(如果你没见过成千上万的嵌套的三元运算符在相同的功能你还没住。如果你相信我,你希望你是死)


    在这一点上达成一致。每一个风格指南我使用禁止使用的操作符。这是垃圾。

    一行程序不需要括号也一样。把括号。如果——就像一个程序员我共事——你认为括号使代码慢,忘记括号和选择一个不同的职业。
    34366个帖子|注册
  7. SixDegrees写道:
    koolraap写道:
    我做了一个职业相关的C和语言。但是如果有一个不必要的继承的可维护性的错误我可以删除,这是三元操作符。

    randomThing吗?就是:noDoThat;

    这只是废话,如果你不同意你错了(如果你没见过成千上万的嵌套的三元运算符在相同的功能你还没住。如果你相信我,你希望你是死)


    在这一点上达成一致。每一个风格指南我使用禁止使用的操作符。这是垃圾。

    一行程序不需要括号也一样。把括号。如果——就像一个程序员我共事——你认为括号使代码慢,忘记括号和选择一个不同的职业。

    我同意,总是把牙套在一个衬垫——它犯错误在未来不太可能。

    如果(someCondition)
    foobar = 1;

    如果(someCondition)
    日志(“一些错误的% someCondition”)
    foobar = 1;
    1960个帖子|注册
  8. SixDegrees写道:
    koolraap写道:
    我做了一个职业相关的C和语言。但是如果有一个不必要的继承的可维护性的错误我可以删除,这是三元操作符。

    randomThing吗?就是:noDoThat;

    这只是废话,如果你不同意你错了(如果你没见过成千上万的嵌套的三元运算符在相同的功能你还没住。如果你相信我,你希望你是死)


    在这一点上达成一致。每一个风格指南我使用禁止使用的操作符。这是垃圾。

    一行程序不需要括号也一样。把括号。如果——就像一个程序员我共事——你认为括号使代码慢,忘记括号和选择一个不同的职业。


    我喜欢简单的三元的回报。

    返回(测试?答:零/南);
    196个帖子|注册
  9. 艾德里安写道:
    SixDegrees写道:
    koolraap写道:
    我做了一个职业相关的C和语言。但是如果有一个不必要的继承的可维护性的错误我可以删除,这是三元操作符。

    randomThing吗?就是:noDoThat;

    这只是废话,如果你不同意你错了(如果你没见过成千上万的嵌套的三元运算符在相同的功能你还没住。如果你相信我,你希望你是死)


    在这一点上达成一致。每一个风格指南我使用禁止使用的操作符。这是垃圾。

    一行程序不需要括号也一样。把括号。如果——就像一个程序员我共事——你认为括号使代码慢,忘记括号和选择一个不同的职业。


    我喜欢简单的三元的回报。

    返回(测试?答:零/南);


    啊。

    有一个地方少是……。如上所述,所有的风格指南我使用简单的禁止使用三元运算符,该函数作为一个文学减速带对那些被迫读代码包含它。
    34366个帖子|注册
  10. 艾德里安写道:
    SixDegrees写道:
    koolraap写道:
    我做了一个职业相关的C和语言。但是如果有一个不必要的继承的可维护性的错误我可以删除,这是三元操作符。

    randomThing吗?就是:noDoThat;

    这只是废话,如果你不同意你错了(如果你没见过成千上万的嵌套的三元运算符在相同的功能你还没住。如果你相信我,你希望你是死)


    在这一点上达成一致。每一个风格指南我使用禁止使用的操作符。这是垃圾。

    一行程序不需要括号也一样。把括号。如果——就像一个程序员我共事——你认为括号使代码慢,忘记括号和选择一个不同的职业。


    我喜欢简单的三元的回报。

    返回(测试?答:零/南);

    有多个可维护性失败在这条线,根据语言、编译器和调试器。

    你在哪里设置断点呢?

    该方法的返回值是什么,你能看到在你调试器?

    我如何添加日志的A / B分支如果我需要没有*重写*当前产品代码?如果我需要从根本上* *产品代码重写原作者已经失败了。

    考虑一下我的开发人员:你花1%的时间写代码和99%的你的时间来阅读它。不要让我思考
    1960个帖子|注册
  11. koolraap写道:
    我做了一个职业相关的C和语言。但是如果有一个不必要的继承的可维护性的错误我可以删除,这是三元操作符。

    randomThing吗?就是:noDoThat;

    这只是废话,如果你不同意你错了。

    很多小古怪C基本上都是直接翻译)时组装贝尔实验室组使用习语。当他们写C的一个真正的好主意汇编编译器的输出将是他们想要的C编译器能够生成优化的类型代码用于在汇编语言编写。

    我不确定,这绝对是三元操作符的理由,因为它有一段时间我读过Unix)时的代码,但它不会让我感到吃惊的话。

    最后一次编辑校长在2020年12月09年结婚,八16

    938个帖子|注册
  12. koolraap写道:
    SixDegrees写道:
    koolraap写道:
    我做了一个职业相关的C和语言。但是如果有一个不必要的继承的可维护性的错误我可以删除,这是三元操作符。

    randomThing吗?就是:noDoThat;

    这只是废话,如果你不同意你错了(如果你没见过成千上万的嵌套的三元运算符在相同的功能你还没住。如果你相信我,你希望你是死)


    在这一点上达成一致。每一个风格指南我使用禁止使用的操作符。这是垃圾。

    一行程序不需要括号也一样。把括号。如果——就像一个程序员我共事——你认为括号使代码慢,忘记括号和选择一个不同的职业。

    我同意,总是把牙套在一个衬垫——它犯错误在未来不太可能。

    如果(someCondition)
    foobar = 1;

    如果(someCondition)
    日志(“一些错误的% someCondition”)
    foobar = 1;


    里面可能什么都振作起来!

    文章太好了!有趣的是小决策,严重影响我们如何工作和玩电脑。
    877个帖子|注册
  13. 本文错过了一个小点是Ken Thompson的语言B是一种解释型语言。丹尼斯·里奇把它自己为B,发明了C编写编译器还我确信,之前的语言被称为C结构补充道。

    B和C之间最大的区别是输入变量。B代码看起来很像老式的C代码,直到你注意到缺乏类型。
    938个帖子|注册
  14. koolraap写道:
    SixDegrees写道:
    koolraap写道:
    我做了一个职业相关的C和语言。但是如果有一个不必要的继承的可维护性的错误我可以删除,这是三元操作符。

    randomThing吗?就是:noDoThat;

    这只是废话,如果你不同意你错了(如果你没见过成千上万的嵌套的三元运算符在相同的功能你还没住。如果你相信我,你希望你是死)


    在这一点上达成一致。每一个风格指南我使用禁止使用的操作符。这是垃圾。

    一行程序不需要括号也一样。把括号。如果——就像一个程序员我共事——你认为括号使代码慢,忘记括号和选择一个不同的职业。

    我同意,总是把牙套在一个衬垫——它犯错误在未来不太可能。

    如果(someCondition)
    foobar = 1;

    如果(someCondition)
    日志(“一些错误的% someCondition”)
    foobar = 1;


    我完全同意在括号。

    也不介意冗余括号中重要的方程。
    他们可以为人类的读者更容易解析。
    196个帖子|注册
  15. koolraap写道:
    艾德里安写道:
    SixDegrees写道:
    koolraap写道:
    我做了一个职业相关的C和语言。但是如果有一个不必要的继承的可维护性的错误我可以删除,这是三元操作符。

    randomThing吗?就是:noDoThat;

    这只是废话,如果你不同意你错了(如果你没见过成千上万的嵌套的三元运算符在相同的功能你还没住。如果你相信我,你希望你是死)


    在这一点上达成一致。每一个风格指南我使用禁止使用的操作符。这是垃圾。

    一行程序不需要括号也一样。把括号。如果——就像一个程序员我共事——你认为括号使代码慢,忘记括号和选择一个不同的职业。


    我喜欢简单的三元的回报。

    返回(测试?答:零/南);

    有多个可维护性失败在这条线,根据语言、编译器和调试器。

    你在哪里设置断点呢?

    该方法的返回值是什么,你能看到在你调试器?

    我如何添加日志的A / B分支如果我需要没有*重写*当前产品代码?如果我需要从根本上* *产品代码重写原作者已经失败了。

    考虑一下我的开发人员:你花1%的时间写代码和99%的你的时间来阅读它。不要让我思考


    我喜欢许多链的三元在Perl中简单的if / else语句(即简单的替换,因为任何情况下在Perl中)。
    我和条件格式为两列,在左和价值在右。
    A = B ?C
    :D ?E
    :E ?F
    :G
    我认为它更清晰没有语法使其更清晰。(尽管它有助于使用非均衡的字体,与上面不同的是,我想让它看起来不错,但不能)

    不过,公平地说,当我后来回来几个月后,需要添加一个,不是那么简单,我倾向于重构所有使用科里括号,以便不混合的代码风格。
    128个帖子|注册
  16. brdv写道:
    koolraap写道:
    艾德里安写道:
    SixDegrees写道:
    koolraap写道:
    我做了一个职业相关的C和语言。但是如果有一个不必要的继承的可维护性的错误我可以删除,这是三元操作符。

    randomThing吗?就是:noDoThat;

    这只是废话,如果你不同意你错了(如果你没见过成千上万的嵌套的三元运算符在相同的功能你还没住。如果你相信我,你希望你是死)


    在这一点上达成一致。每一个风格指南我使用禁止使用的操作符。这是垃圾。

    一行程序不需要括号也一样。把括号。如果——就像一个程序员我共事——你认为括号使代码慢,忘记括号和选择一个不同的职业。


    我喜欢简单的三元的回报。

    返回(测试?答:零/南);

    有多个可维护性失败在这条线,根据语言、编译器和调试器。

    你在哪里设置断点呢?

    该方法的返回值是什么,你能看到在你调试器?

    我如何添加日志的A / B分支如果我需要没有*重写*当前产品代码?如果我需要从根本上* *产品代码重写原作者已经失败了。

    考虑一下我的开发人员:你花1%的时间写代码和99%的你的时间来阅读它。不要让我思考


    我喜欢许多链的三元在Perl中简单的if / else语句(即简单的替换,因为任何情况下在Perl中)。
    我和条件格式为两列,在左和价值在右。
    A = B ?C
    :D ?E
    :E ?F
    :G
    我认为它更清晰没有语法使其更清晰。(尽管它有助于使用非均衡的字体,与上面不同的是,我想让它看起来不错,但不能)

    不过,公平地说,当我后来回来几个月后,需要添加一个,不是那么简单,我倾向于重构所有使用科里括号,以便不混合的代码风格。

    Perl”有多个方法”只是普通的粪便。拉里,保佑他的心,创造了一种语言,像一颗超新星开花了。

    和良好的* * * * * * *了。

    编辑:和你的例子吗?这是一个直接公关拒绝我工作的地方。它让我思考。我不想思考。我只是想解决问题,不会造成2点电话。

    2020年)你使用Perl。失败。
    b)嵌套三元。FFS。不。失败
    c)让我们在酒吧谈论这个:)

    最后一次编辑koolraap在2020年12月09年结婚,八24

    1960个帖子|注册
  17. koolraap写道:
    我做了一个职业相关的C和语言。但是如果有一个不必要的继承的可维护性的错误我可以删除,这是三元操作符。

    randomThing吗?就是:noDoThat;

    这只是废话,如果你不同意你错了(如果你没见过成千上万的嵌套的三元运算符在相同的功能你还没住。如果你相信我,你希望你是死)

    它可以严重虐待,但适量可以明智地使用。像所有工具重要的是适当地使用它们。

    甚至不是近C最糟糕的“特性”。实现依赖于尺寸的原始类型int,指针算术,作业是有效的在一个表达式,中缀或后缀增加了长表达式的中间……的例子不胜枚举
    1483个帖子|注册
  18. “C”:一种语言与组装的速度,和可读性的……组装
    ,)

    (我的书实际上是由克尼汉签名。)
    2031个帖子|注册
  19. 我一直认为使用x + +代替x = x + 1是直接编译器one-operand公司而不是两个操作数的增加,它节省空间而不是字符串“x = x + 1”这篇文章似乎暗示。
    28日发布|注册
  20. 我不是一个程序员,但是C是“饼干”,对我来说已经够好了。
    39073个帖子|注册
  21. 引用:
    斯特雷奇一直显示科学的人才但很少应用。

    男孩,变成了一个成功的预测任何开往从事软件开发。
    1033个帖子|注册
  22. 引用:
    像Unix C是一个成功的失败。在两种情况下,程序员把最好的部分项目是注定要失败的,因为他们试图做太多。Multics催生了Unix,在peak只用于全球约80台计算机,CPL,最终导致C,剑桥大学的研究人员于1967年被废弃而不被完成。



    你首先需要做的一切都错了,你可以做一件事之前。
    40个帖子|注册
  23. koolraap写道:
    brdv写道:
    koolraap写道:
    艾德里安写道:
    SixDegrees写道:
    koolraap写道:
    我做了一个职业相关的C和语言。但是如果有一个不必要的继承的可维护性的错误我可以删除,这是三元操作符。

    randomThing吗?就是:noDoThat;

    这只是废话,如果你不同意你错了(如果你没见过成千上万的嵌套的三元运算符在相同的功能你还没住。如果你相信我,你希望你是死)


    在这一点上达成一致。每一个风格指南我使用禁止使用的操作符。这是垃圾。

    一行程序不需要括号也一样。把括号。如果——就像一个程序员我共事——你认为括号使代码慢,忘记括号和选择一个不同的职业。


    我喜欢简单的三元的回报。

    返回(测试?答:零/南);

    有多个可维护性失败在这条线,根据语言、编译器和调试器。

    你在哪里设置断点呢?

    该方法的返回值是什么,你能看到在你调试器?

    我如何添加日志的A / B分支如果我需要没有*重写*当前产品代码?如果我需要从根本上* *产品代码重写原作者已经失败了。

    考虑一下我的开发人员:你花1%的时间写代码和99%的你的时间来阅读它。不要让我思考


    我喜欢许多链的三元在Perl中简单的if / else语句(即简单的替换,因为任何情况下在Perl中)。
    我和条件格式为两列,在左和价值在右。
    A = B ?C
    :D ?E
    :E ?F
    :G
    我认为它更清晰没有语法使其更清晰。(尽管它有助于使用非均衡的字体,与上面不同的是,我想让它看起来不错,但不能)

    不过,公平地说,当我后来回来几个月后,需要添加一个,不是那么简单,我倾向于重构所有使用科里括号,以便不混合的代码风格。

    Perl”有多个方法”只是普通的粪便。拉里,保佑他的心,创造了一种语言,像一颗超新星开花了。

    和良好的* * * * * * *了。

    编辑:和你的例子吗?这是一个直接公关拒绝我工作的地方。它让我思考。我不想思考。我只是想解决问题,不会造成2点电话。

    2020年)你使用Perl。失败。
    b)嵌套三元。FFS。不。失败
    c)让我们在酒吧谈论这个:)


    几乎所有的Perl代码我已经一次性写的。还对编写快速概念验证脚本或快速修补,只需要在有限的时间内工作。但是如果一个人试图编写Perl代码的方式使它可维护的长期使用,显示其年龄和语言失去了它所有的优点,和一个使用更现代的可能会更好。
    1450个帖子|注册
  24. koolraap写道:
    randomThing吗?就是:noDoThat;

    这只是废话,如果你不同意你错了(如果你没见过成千上万的嵌套的三元运算符在相同的功能你还没住。如果你相信我,你希望你是死)

    我可能是错的(不会是第一次),但我还是不同意。

    三元不是伟大的你给的例子。他们更有用的在哪里吗

    值= (someCondition) ?选项a: optionB

    否则——取决于你的括号风格——你只是浪费到8行一些你可能已经写在一个。

    和引用杰瑞Seinfield,我将一行程序的任何一天。:-)
    1033个帖子|注册
  25. HungryBadger写道:
    koolraap写道:
    我做了一个职业相关的C和语言。但是如果有一个不必要的继承的可维护性的错误我可以删除,这是三元操作符。

    randomThing吗?就是:noDoThat;

    这只是废话,如果你不同意你错了(如果你没见过成千上万的嵌套的三元运算符在相同的功能你还没住。如果你相信我,你希望你是死)

    它可以严重虐待,但适量可以明智地使用。像所有工具重要的是适当地使用它们。

    甚至不是近C最糟糕的“特性”。实现依赖于尺寸的原始类型int,指针算术,作业是有效的在一个表达式,中缀或后缀增加了长表达式的中间……的例子不胜枚举

    所有这些东西是贝尔实验室的人滚。他们是“真正的程序员。“这是一个函数从troff:

    代码:
    setch () {
    我注册,* j, k;
    extern int chtab [];

    如果((i = getrq()) = = 0)回复(0);
    (j = chtab; * j ! =我;j + +)如果(*(+ +)= = 0)回复(0);
    k = * (+ + j) | chbits;
    返回(k);
    }


    如果你想了解它,chtab定义一个指向外部关联数组(双int:钥匙,val,钥匙,val,等等)。getrq()返回一个两个字母的缩写特殊字符(如“有限公司”版权符号)。
    938个帖子|注册
  26. SixDegrees写道:
    艾德里安写道:
    SixDegrees写道:
    koolraap写道:
    我做了一个职业相关的C和语言。但是如果有一个不必要的继承的可维护性的错误我可以删除,这是三元操作符。

    randomThing吗?就是:noDoThat;

    这只是废话,如果你不同意你错了(如果你没见过成千上万的嵌套的三元运算符在相同的功能你还没住。如果你相信我,你希望你是死)


    在这一点上达成一致。每一个风格指南我使用禁止使用的操作符。这是垃圾。

    一行程序不需要括号也一样。把括号。如果——就像一个程序员我共事——你认为括号使代码慢,忘记括号和选择一个不同的职业。


    我喜欢简单的三元的回报。

    返回(测试?答:零/南);


    啊。

    有一个地方少是……。如上所述,所有的风格指南我使用简单的禁止使用三元运算符,该函数作为一个文学减速带对那些被迫读代码包含它。


    有三元操作符的情况实际上是很好。其精确的语法使其以一种可读的方式很难窝三元操作符(所以我从不做),但对于任何人发现上面的例子“减速”我建议他们学习他们的语言。
    429个帖子|注册
  27. 那幅画的C参考文本,提醒我,我还是咸,有人偷走了我的工作在90年代末的副本。

    h *谁会走了别人的k和r C参考封面里写着我的名字在国防承包商在工作吗?

    Effin 20多年后,我仍然很生气。

    Re:三元运算符——他们是邪恶的。

    同样的语法“开关…“真是奇怪。

    但我不得不说,在C语言编程竞赛不会存在,如果不是所有的怪癖C。 https://www.ioccc.org/
    创建的条目的比赛是真正疯狂的计算机科学家,和真正的“散文”或“艺术”作品。

    最后一次编辑bbf在09年12月结婚,2020年首度

    1867个帖子|注册
  28. malain1956写道:
    我一直认为使用x + +代替x = x + 1是直接编译器one-operand公司而不是两个操作数的增加,它节省空间而不是字符串“x = x + 1”这篇文章似乎暗示。

    同样,如果x是一个指针,它调用自动增量寻址模式 也这是一个表达而x = x + 1是一个声明,不能合并成一个更大的表达式。所有这些原因包括它。

    最后一次编辑校长在2020年12月09年结婚,9:56)

    938个帖子|注册
  29. dmccarty写道:
    koolraap写道:
    randomThing吗?就是:noDoThat;

    这只是废话,如果你不同意你错了(如果你没见过成千上万的嵌套的三元运算符在相同的功能你还没住。如果你相信我,你希望你是死)

    我可能是错的(不会是第一次),但我还是不同意。

    三元不是伟大的你给的例子。他们更有用的在哪里吗

    值= (someCondition) ?选项a: optionB

    否则——取决于你的括号风格——你只是浪费到8行一些你可能已经写在一个。

    和引用杰瑞Seinfield,我将一行程序的任何一天。:-)

    三元100%罚款,直到他们不工作,然后他们不可维护的垃圾就不首先使用它们。


    我是咸的经验丰富的开发人员,这意味着我花一辈子出错的屎。

    没有调用脾气暴躁的灰色胡子说“嘿,Koolraap,我想谈谈一些作品”。不,这是“有一些真的他妈的发生了奇怪的狗屎,我们需要你的帮助”
    1960个帖子|注册
  30. koolraap写道:
    我做了一个职业相关的C和语言。但是如果有一个不必要的继承的可维护性的错误我可以删除,这是三元操作符。

    randomThing吗?就是:noDoThat;

    这只是废话,如果你不同意你错了(如果你没见过成千上万的嵌套的三元运算符在相同的功能你还没住。如果你相信我,你希望你是死)


    没有它,95%的Javascript(及其后代)将不存在。
    396个帖子|注册
  31. 我仍然做所有我在Pascal编程…
    482个帖子|注册
  32. 铁钩写道:
    koolraap写道:
    我做了一个职业相关的C和语言。但是如果有一个不必要的继承的可维护性的错误我可以删除,这是三元操作符。

    randomThing吗?就是:noDoThat;

    这只是废话,如果你不同意你错了(如果你没见过成千上万的嵌套的三元运算符在相同的功能你还没住。如果你相信我,你希望你是死)


    没有它,95%的Javascript(及其后代)将不存在。

    打消念头。
    17163个帖子|注册
  33. koolraap写道:
    艾德里安写道:
    SixDegrees写道:
    koolraap写道:
    我做了一个职业相关的C和语言。但是如果有一个不必要的继承的可维护性的错误我可以删除,这是三元操作符。

    randomThing吗?就是:noDoThat;

    这只是废话,如果你不同意你错了(如果你没见过成千上万的嵌套的三元运算符在相同的功能你还没住。如果你相信我,你希望你是死)


    在这一点上达成一致。每一个风格指南我使用禁止使用的操作符。这是垃圾。

    一行程序不需要括号也一样。把括号。如果——就像一个程序员我共事——你认为括号使代码慢,忘记括号和选择一个不同的职业。


    我喜欢简单的三元的回报。

    返回(测试?答:零/南);

    有多个可维护性失败在这条线,根据语言、编译器和调试器。

    你在哪里设置断点呢?

    该方法的返回值是什么,你能看到在你调试器?

    我如何添加日志的A / B分支如果我需要没有*重写*当前产品代码?如果我需要从根本上* *产品代码重写原作者已经失败了。

    考虑一下我的开发人员:你花1%的时间写代码和99%的你的时间来阅读它。不要让我思考


    几乎所有的可维护性不适用于任何返回语句,返回值是一个表达式。他们不是特定于三元操作符。唯一一个不将日志A / B分支,但即使这样,逻辑运算符的表达式有不同的执行路径。
    429个帖子|注册
  34. dmccarty写道:
    三元不是伟大的你给的例子。他们更有用的在哪里吗

    值= (someCondition) ?选项a: optionB


    特别是在“价值”是常量。
    888个帖子|注册
  35. koolraap写道:
    我做了一个职业相关的C和语言。但是如果有一个不必要的继承的可维护性的错误我可以删除,这是三元操作符。

    randomThing吗?就是:noDoThat;

    这只是废话,如果你不同意你错了(如果你没见过成千上万的嵌套的三元运算符在相同的功能你还没住。如果你相信我,你希望你是死)



    但问题是嵌套三元操作符。当你使用一种语言没有它们,你想念他们non-nested情况。(他们可以表达非常清楚和succintly,否则需要如果. .。)

    最后一次编辑下面的潜伏者在2020年12月09年结婚,51

    572个帖子|注册
  36. 铁钩写道:
    koolraap写道:
    我做了一个职业相关的C和语言。但是如果有一个不必要的继承的可维护性的错误我可以删除,这是三元操作符。

    randomThing吗?就是:noDoThat;

    这只是废话,如果你不同意你错了(如果你没见过成千上万的嵌套的三元运算符在相同的功能你还没住。如果你相信我,你希望你是死)


    没有它,95%的Javascript(及其后代)将不存在。


    为什么?Javascript没有一个if - then - else构造吗?
    34366个帖子|注册

你必须置评。

通道Ars Technica