C/C++中左花括号位置的争论由来已久,本文分析了两种写法产生的历史缘由,并提出现在我们应该采用的写法和理由。

下面是引起争论的两种风格:

K&R风格:

if (a > 100) {//do somthing…
}

(注:1978年贝尔实验室正式发表了C语言。同时由B.W.Kernighan和D.M.Ritchie (K&R)合著了著名的《The C Programming Language》一书。书中推荐了一套代码编写标准,有人称之为《K&R》标准。)

微软风格:

if (a > 100)
{//do somthing…
}

网上的朋友有些支持K&R, 因为是它更经典,有的支持微软,因为它更现代,有的认为只是一种习惯,哪种都可以,无须纠结。但我还是存在一个疑问:从观感来看,微软的风格显然更悦目,更对称,为什么K&R要推荐这种看上去有些怪异的风格?除了习惯之外,我想不出这样做的哪怕是一个好处。

最近忽然想到,这可能和早期显示器的分辨率有关:以1981年IBM推出的第一台计算机彩色显示器标准CGA为例,它的最高分辨率为640*200。竖向分辨率居然只有200, 现在一台普通的22寸显示器的竖向分辨率是1080,大约是它的5倍!在这种情况下,屏幕空间就金贵了,K&R的风格可以省一行的空间,否则一屏根本显示不了几行代码。有时候令人非常困惑的问题,答案往往意想不到的简单,不是吗?

明白了这一点,争论就可以结束了:今天当然是用微软风格,因为K&R风格的理由已经不存在了,今天你能找到的再旧显示器分辨率恐怕也不会低于1024*768吧?所以还是要知其所以然,不能死记硬背大牛的教条。


注意:刚开始我用的是 左括号换行,后面改成了 不换行,让代码紧凑些,详情参考:

PHP团队 编码规范 & 代码样式风格规范

代码风格研究:左花括号 是否换行???相关推荐

  1. Java命名规范和代码风格

    Java命名规范和代码风格 基本命名规范 包命名 包名按照域名的范围从大到小逐步列出,恰好和Internet上的域名命名规则相反. 由一组以"."连接的标识符构成,通常第一个标识符 ...

  2. eslint 换行_ESLint代码风格检测

    ESLint是一款开源的 JavaScriptlint工具,由 Nicholas C. Zakas 于2013 年创建. 借助 ESLint,可将 静态代码分析 和 问题代码协助修复 集成到 编码.提 ...

  3. 良好的代码风格养成记

    综述 优秀的代码风格如同一身得体的打扮,能够给人以良好的印象.初学程序设计,首先必须建立良好的编程习惯,这其中就包括代码风格.本文就代码风格中的几个重点问题进行了讨论,并在文后给出了一份优秀的代码作为 ...

  4. 零基础自学Python:安装Python、解释器、代码风格等

    Python是一种面向对象.解释型计算机程序设计语言.语法简洁清晰,强制用空白符作为语句缩进.Python具有丰富和强大的库,又被称为胶水语言.能把其他语言(主要C/C++)写的模块很轻松的结合在一起 ...

  5. C++ Google代码风格

    C++ Google代码风格 0 index(扉页) 0.0 声明 0.1 译者前言 0.2 背景 headers(头文件) 1.1 Self-contained 头文件 1.2. #define 保 ...

  6. google代码风格(C++)

    from    http://code.google.com/p/google-styleguide/ 版本: 3.133 原作者: Benjy Weinberger Craig Silverstei ...

  7. eslint规范_规范统一前端代码风格

    背景 众所周知,前端项目的代码质量和代码格式的校验是不可或缺的.很早之前在一个人开发的时候,脚手架生成vue项目的时候都没有打开过eslint,后面有位大佬加入,给boss说,加了个插件(eslint ...

  8. Python 代码风格指南谷歌版

    非常感谢我们的忠实读者 shendeguize,在后台留言告诉我,已经翻译了<谷歌Python代码风格指南> ,大家这样相互帮助,感觉真是太好. Update: 2020.01.31 Tr ...

  9. 大括弧之战 代码风格

    伟大的大括弧之战已经持续了多年,开发人员们仍然在毫不让步地争吵着大括弧在代码中应该摆放的位置.在多人的项目组里,每个人都给别人的代码重新排版是件很糟糕的事情,版本记录里大量的无用格式变化淹没了重要的有 ...

最新文章

  1. es6 匿名函数求阶乘
  2. android 模块不编译错误,Android 编译出错版本匹配问题解决办法
  3. 【CV】MTCNN:3个CNN,胜过1个诸葛亮
  4. linux主从服务器不能同步,Linux下redis的持久化、主从同步与哨兵详解
  5. ExtJs学习笔记(21)-使用XTemplate结合WCF显示数据
  6. idea中二级包为什么创建不了_IDEA通过Maven打包JavaFX工程(OpenJFX11)
  7. 快给你的代码来点彩虹屁
  8. C#工程添加了DLL编译运行时却提示”无法加载DLL“的解决方案
  9. Linux安装redis及redis的php扩展。
  10. python如何实现清屏
  11. ubuntu安装rtx
  12. 互亿无线短信接口开发
  13. 搭建sql-libs的环境
  14. SpringBoot集成文件 - 如何基于POI-tl和word模板导出庞大的Word文件?
  15. 用labview设计jk触发器_编写数字电路JK触发器仿真程序
  16. spyder pyecharts不显示_逆袭的IGZOIPS!微星电竞显示器新品评测:色彩好且拖影少...
  17. python numpy 实现与(and),非与(not),或(or),异或(xor)逻辑运算!
  18. python实现证件照更换背景颜色
  19. 遇到jQuery 中的 slideUp ,slideToggle和 slideDown 动画重复执行
  20. 发明专利和实用新型专利区别

热门文章

  1. 《财产》评最受尊重公司:苹果第一谷歌第二
  2. 大数据之-Hadoop之HDFS_NameNode多目录配置_把元数据存放多份_放到namenode的多个文件夹下_提高元数据的可靠性_案例---大数据之hadoop工作笔记0076
  3. ES9新特性_ES9正则扩展-命名捕获分组---JavaScript_ECMAScript_ES6-ES11新特性工作笔记054
  4. 大数据_Hbase-Filter 索引(优化)_根据column查询---Hbase工作笔记0020
  5. 微信小程序开发学习笔记007--微信小程序项目01
  6. C中的volatile用法
  7. NOX+ Open vSwitch安装相关命令【备份】
  8. mysql+同步大师,mysql同步异常 - 低调的糊涂虫的个人页面 - OSCHINA - 中文开源技术交流社区...
  9. hci0 没反应_哄女朋友专用表情包~你说你没女朋友?先收藏着嘛,万一有了呢?...
  10. android8.0电脑壁纸,Android用原生分享多张图片适配7.0、8.0