- 主题:所在的公司编码规范极不习惯
在我印象中见过的各种实现里要么true=1 false=0
要么true=-1(二进制全1) false=0
true=0 false=-1就很奇怪了
【 在 lvsoft (Lv(The Last Guardian)) 的大作中提到: 】
: 既然是规范,那我觉得定义true=0,false=-1,比要求true==xxx的问题要严重的多。
: 这么搞就是蓄意挖坑。
: 上,不这么写很容易编译通过但运行出错。
: ...................
--
FROM 122.225.220.*
正确的方式只有一种,错误有很多种,所以这不是boolean。
比如xxxcmp,小于0等于0大于0刚好分别对应对比的三个结果,这是符合直觉的定
义,完全没问题。到不如说,不用0那用啥更合适呢?
errno这里也类似。因为0和非零的概率是不等的。大部分情况下都是正常退出,小
部分是很多种错误中的一种。那么直觉上也是用0表示正常,非零表示具体的错误更
好。因为0比非零值地位要更特殊一点,不然你一样找不出更符合直觉的表达方式。
所以这些例子并不会造成反直觉,不算是挖坑。但明明是boolean的场合,给你来个
if(xxx==true)和if(xxx)的逻辑刚好相反,这个就是埋雷了。
【 在 ArchLinux (a lightweight and flexible distribution) 的大作中提到:
】
: 这样的坑其实很多。UNIX类系统里面程序正常退出返回值就是0,非0就是异常退
出。strcmp, memcmp 比较的内容相等时返回0. 还有LLVM里面有好些函数没出错的
时候也是return false. 不过这几种情况基本上都是正确的方式只有一种,错误有
很多种。
--
修改:lvsoft FROM 101.81.86.*
FROM 101.81.86.*
对,true=-1都比那个定义好。
【 在 adoal (阿豆) 的大作中提到: 】
: 在我印象中见过的各种实现里要么true=1 false=0
: 要么true=-1(二进制全1) false=0
: true=0 false=-1就很奇怪了
--
FROM 101.81.86.*
多人协作的基础,是要尽量降低歧义,减少出错的概率。
代码规范是服务于此的目的,定义false=0也是一样的目的。
并不是说你有了代码规范所以就足够了,可以随便搞了。因为是人就有可能出错,而
且有一万种出错的姿势。区区几条规范根本就cover不住的。
【 在 l0JQKA (-)__(-) 的大作中提到: 】
: 所谓的代码规范不就是为了防止小部分偏离大众习惯的吗,也因此后来的语言大都
引入了布尔型,但是c是改不过来了,java编程规范里就正好相反,推荐if 变量或if
!变量
: :
--
修改:lvsoft FROM 223.104.212.*
FROM 101.81.86.*
很正常,我反正能理解
1,2,4 是为了让代码更容易阅读,你要考虑,将来接手你代码的可能是个刚毕业的新手,
炫技的写法,提高了阅读者的门槛。
至于3,理由就更简单了,因为经常遇到(包括我自己也这么干过),把==写成=的,常量
放前面,可以直接被编译器发现错误。否则这个雷埋下去,等到炸的时候,就有的熬夜
了。
【 在 mykeyboard (scheme) 的大作中提到: 】
: 嵌入式系统,主要用C开发
: 规范举例如下:
: 1)判断指针变量是否为空,不能直接用
: ...................
--
FROM 223.71.139.*
这几个规范主要是用于约束新手,免得制造低级错误。
对老手来说,满足这几项规范并不费事。迁就一下新手管理,可以理解。
【 在 mykeyboard (scheme) 的大作中提到: 】
: 标 题: 所在的公司编码规范极不习惯
: 发信站: 水木社区 (Sun May 24 16:56:56 2020), 站内
:
: 嵌入式系统,主要用C开发
: 规范举例如下:
: 1)判断指针变量是否为空,不能直接用
: if(ptr) 或者 if(!ptr)
:
: 要求用==判断指针变量跟NULL是否相等
:
: 2)判断整型变量是否等于0或者不等于0,(包括其余的变量等于常量的判断),不能直接用
: if(i)或者 if(!i)
:
: 要求用==判断变量跟常量0是否相等
:
: 3)判断是否要相等,要求把常量放在前面,
: 所以1)中的判断是否指针变量为空,
: 要求用 if(NULL == ptr)
: 2)中的判断要求用:
: if(0 == i)
: 或者 if(3 == j)
:
: 4)最夸张的是"布尔型"变量也要求用==与布尔常量值判断是否相等
:
: if( TRUE == isValid)
:
:
: --
:
: ※ 修改:·mykeyboard 于 May 24 17:00:44 2020 修改本文·[FROM: 113.104.212.*]
: ※ 来源:·水木社区 newsmth.net·[FROM: 113.104.212.*]
:
--
修改:mykeyboard FROM 113.104.212.*
FROM 123.103.9.*
这都是老码农的好习惯
我们那个年代都是这样的
防止各种手抖造成的错误
软件大了查错成本太高
【 在 mykeyboard (scheme) 的大作中提到: 】
: 嵌入式系统,主要用C开发
: 规范举例如下:
: 1)判断指针变量是否为空,不能直接用
: ...................
--
修改:fryingbird FROM 219.142.13.*
FROM 219.142.13.*
1、2这两条规则难道是从MISRA C的Rule 14.4学来的?
【 在 mykeyboard (scheme) 的大作中提到: 】
: 嵌入式系统,主要用C开发
: 规范举例如下:
: 1)判断指针变量是否为空,不能直接用
: ...................
--
FROM 59.41.161.*
我咋觉着除了第四个外,其他都还挺好的?
【 在 mykeyboard 的大作中提到: 】
:
: 嵌入式系统,主要用C开发
: 规范举例如下:
: 1)判断指针变量是否为空,不能直接用
: if(ptr) 或者 if(!ptr)
:
: 要求用==判断指针变量跟NULL是否相等
:
: 2)判断整型变量是否等于0或者不等于0,(包括其余的变量等于常量的判断),不能直接用
: if(i)或者 if(!i)
:
: 要求用==判断变量跟常量0是否相等
:
: 3)判断是否要相等,要求把常量放在前面,
: 所以1)中的判断是否指针变量为空,
: 要求用 if(NULL == ptr)
: 2)中的判断要求用:
: if(0 == i)
: 或者 if(3 == j)
:
: 4)最夸张的是"布尔型"变量也要求用==与布尔常量值判断是否相等
:
: if( TRUE == isValid)
:
: --
:
发自「今日水木 on Mi Note 3」
--
FROM 106.121.67.*
前3个一点问题都没有。任何一个想不明白,只能说你搬砖太久了,干的都是体力活
第4个没必要
【 在 mykeyboard 的大作中提到: 】
: 嵌入式系统,主要用C开发
: 规范举例如下:
: 1)判断指针变量是否为空,不能直接用
: ...................
--
FROM 223.72.55.*