对华为编码习惯中变量的定义风格的疑问(码农们来讨论一下吧)解决方法
对华为编码习惯中变量的定义风格的疑问(码农们来讨论一下吧)
在华为的编码习惯中,说一个函数中使用到的变量,要一次性在函数开头定义好。
但是我觉得有些局部变量不一定要在函数开始的时候一次性定义。比如:
void Test()
{
..... //其他代码
if(false)
{
char szTmpBuf[512]; //
}
}
像szTmpBuf这样的。是否要在函数开始出一次性定义,只在if里定义,当条件不满足的时候,可以少512的内存并减少分配空间的CPU时间,且不是更好。
还有,如果我不一次性创建对象,如:
char szTmpBuf[512];
....//干点别的什么事情代码
int iSum = 0;
这样会不会比一次性定义在效率上低?求大牛!
另外,问一下,大家一般编码的时候,字符串数组,对象数组如何命名呢?
------解决思路----------------------
哎,无奈用的C,必须在开始定义好...
------解决思路----------------------
不管有没有进入if语句,这512个字节都会在栈上分配。
------解决思路----------------------
呵呵,
------解决思路----------------------
命名就和char szTmpBuf[512];差不多
做二次开发的时候还遇到过拼音命名的
------解决思路----------------------
记得effctive c++上提到不要过早定义变量,使用的时候才去定义
------解决思路----------------------
估计编写华为编程规范的人是搞C的。C就是要开始就定义好。我们老大对我使用时定义变量也是不看好。哎~
------解决思路----------------------
真的,不知道是那时候没插件还是咋的,全都顶格写...
------解决思路----------------------
编译器没法去优化这段代码。
------解决思路----------------------
这个无绝对吧.
我认识第一种写法好的。看起来舒服/易维护。这是我的风格.
------解决思路----------------------
像szTmpBuf这样的。是否要在函数开始出一次性定义,只在if里定义,
尤其是你的命名还不能让人一下明白意图
------解决思路----------------------
这个与编译器有关。在函数开始时就分配,可以加快函数执行速度。我觉得vs会这么做。
------解决思路----------------------
不能肯定。问你boss
一次性写在函数开始,我觉得没必要,影响代码逻辑。
------解决思路----------------------
普通C语言的语法要求必须要在函数开始处定义完该函数所有的变量,但现在C++就不再要求了,所以关于效率应该和编绎器有关,而不是在哪定义变量
------解决思路----------------------
数组不管嵌套在几个 { 中定义,其在栈上的空间都是一进入函数就确定分配了的
也不存在优化之说,编译器在编译期就已经计算好每个函数局部变量的占用的空间大小,进入函数的代码总是是push EBP ; mov EBP,ESP; sub ESP,大点儿的数组无非sub ESP减得多点,仅此而已
------解决思路----------------------
为了C代码兼容性吧?
------解决思路----------------------
楼主不懂汇编,可以理解.
------解决思路----------------------
一般使用英文进行命名,要是拼音的话不一定你会想到那个拼音所代表的的词。。。最可恶的是意向词,什么 左定义 写个zd ,这要我怎么想---
------解决思路----------------------
C 中是不支持随用随声明的,老编译器都不支持。现在好多新的才可以了。
------解决思路----------------------
华为用C多吧,所以要求在开始定义好。C++一般是用时再定义,这样代码清晰,利于维护,至于这方面效率,一般可以忽略不计的。
------解决思路----------------------
对华为的编码规范很无语……
------解决思路----------------------
按自己的风格(或公司统一的风格)写就好了,不必纠结于这点效率(估计这两者效率没什么区别),把自己的代码写好才是关键的呢。
------解决思路----------------------
sadgas点噶发挥第三方工具和认同
------解决思路----------------------
拼音和英语结合。
------解决思路----------------------
还有一个好处:
那就是 goto.
全部在开头定义变量后, goto可以满天飞,都不怕跳过了变量
------解决思路----------------------
如果C的话没问题,C++的话就不合适了。
写在开头那么类类型的局部变量都会构造+析构一次的
随用随声名的话,提前return是不会构造+析构下面没执行到的对象的。
------解决思路----------------------
看看讨论意见。
------解决思路----------------------
看不懂这些代码……
------解决思路----------------------
似乎不是这样。曾用过IAR的编译器,从生成的MAP文件看,不同的优化等级,会导致函数使用的栈深度不同。所以我感觉是否一次性分配出来和优化等级有关。
------解决思路----------------------
jiu kan kan
------解决思路----------------------
你们难道没想过代码的可读性吗?把变量全部定义在函数开头的部分,是不是在阅读代码的时候,会方便一点呢??我猜的。。。
------解决思路----------------------
因为华为大部分的业务都是C作为开发语言的。
你应该也属于那些部门下。所以你的leader才会这么要求你的吧。
C和C++的习惯和书写规范是不大一样的。不能从其他语言的角度去评论这样写的好坏。
------解决思路----------------------
兄弟,反了吧。变量全部定义在函数开头的部分,反而不利于阅读代码,因为你随用随定义可以在你的眼睛所及范围就能看到变量定义。如果都在函数开头的部分定义变量,你得翻到前面才能看到变量定义。当前现在IDE的智能提示都很强大,但还是不如立即看到变量定义方便。
------解决思路----------------------
路过看看~~
------解决思路----------------------

------解决思路----------------------
刚开始,还不太懂
------解决思路----------------------
+1
------解决思路----------------------
c就是要求变量在开头都定义好,遵循下标准也没啥坏处
在华为的编码习惯中,说一个函数中使用到的变量,要一次性在函数开头定义好。
但是我觉得有些局部变量不一定要在函数开始的时候一次性定义。比如:
void Test()
{
..... //其他代码
if(false)
{
char szTmpBuf[512]; //
}
}
像szTmpBuf这样的。是否要在函数开始出一次性定义,只在if里定义,当条件不满足的时候,可以少512的内存并减少分配空间的CPU时间,且不是更好。
还有,如果我不一次性创建对象,如:
char szTmpBuf[512];
....//干点别的什么事情代码
int iSum = 0;
这样会不会比一次性定义在效率上低?求大牛!
另外,问一下,大家一般编码的时候,字符串数组,对象数组如何命名呢?
------解决思路----------------------
哎,无奈用的C,必须在开始定义好...
------解决思路----------------------
不管有没有进入if语句,这512个字节都会在栈上分配。
------解决思路----------------------
呵呵,
------解决思路----------------------
命名就和char szTmpBuf[512];差不多
做二次开发的时候还遇到过拼音命名的
------解决思路----------------------
记得effctive c++上提到不要过早定义变量,使用的时候才去定义
------解决思路----------------------
------解决思路----------------------
真的,不知道是那时候没插件还是咋的,全都顶格写...
------解决思路----------------------
编译器没法去优化这段代码。
------解决思路----------------------
这个无绝对吧.
我认识第一种写法好的。看起来舒服/易维护。这是我的风格.
------解决思路----------------------
像szTmpBuf这样的。是否要在函数开始出一次性定义,只在if里定义,
尤其是你的命名还不能让人一下明白意图
------解决思路----------------------
这个与编译器有关。在函数开始时就分配,可以加快函数执行速度。我觉得vs会这么做。
------解决思路----------------------
不能肯定。问你boss
一次性写在函数开始,我觉得没必要,影响代码逻辑。
------解决思路----------------------
普通C语言的语法要求必须要在函数开始处定义完该函数所有的变量,但现在C++就不再要求了,所以关于效率应该和编绎器有关,而不是在哪定义变量
------解决思路----------------------
数组不管嵌套在几个 { 中定义,其在栈上的空间都是一进入函数就确定分配了的
也不存在优化之说,编译器在编译期就已经计算好每个函数局部变量的占用的空间大小,进入函数的代码总是是push EBP ; mov EBP,ESP; sub ESP,大点儿的数组无非sub ESP减得多点,仅此而已
------解决思路----------------------
为了C代码兼容性吧?
------解决思路----------------------
楼主不懂汇编,可以理解.
------解决思路----------------------
一般使用英文进行命名,要是拼音的话不一定你会想到那个拼音所代表的的词。。。最可恶的是意向词,什么 左定义 写个zd ,这要我怎么想---
------解决思路----------------------
C 中是不支持随用随声明的,老编译器都不支持。现在好多新的才可以了。
------解决思路----------------------
华为用C多吧,所以要求在开始定义好。C++一般是用时再定义,这样代码清晰,利于维护,至于这方面效率,一般可以忽略不计的。
------解决思路----------------------
对华为的编码规范很无语……
------解决思路----------------------
按自己的风格(或公司统一的风格)写就好了,不必纠结于这点效率(估计这两者效率没什么区别),把自己的代码写好才是关键的呢。
------解决思路----------------------
sadgas点噶发挥第三方工具和认同
------解决思路----------------------
拼音和英语结合。
------解决思路----------------------
还有一个好处:
那就是 goto.
全部在开头定义变量后, goto可以满天飞,都不怕跳过了变量
------解决思路----------------------
如果C的话没问题,C++的话就不合适了。
写在开头那么类类型的局部变量都会构造+析构一次的
随用随声名的话,提前return是不会构造+析构下面没执行到的对象的。
------解决思路----------------------
看看讨论意见。
------解决思路----------------------
看不懂这些代码……
------解决思路----------------------
似乎不是这样。曾用过IAR的编译器,从生成的MAP文件看,不同的优化等级,会导致函数使用的栈深度不同。所以我感觉是否一次性分配出来和优化等级有关。
------解决思路----------------------
jiu kan kan
------解决思路----------------------
你们难道没想过代码的可读性吗?把变量全部定义在函数开头的部分,是不是在阅读代码的时候,会方便一点呢??我猜的。。。
------解决思路----------------------
因为华为大部分的业务都是C作为开发语言的。
你应该也属于那些部门下。所以你的leader才会这么要求你的吧。
C和C++的习惯和书写规范是不大一样的。不能从其他语言的角度去评论这样写的好坏。
------解决思路----------------------
兄弟,反了吧。变量全部定义在函数开头的部分,反而不利于阅读代码,因为你随用随定义可以在你的眼睛所及范围就能看到变量定义。如果都在函数开头的部分定义变量,你得翻到前面才能看到变量定义。当前现在IDE的智能提示都很强大,但还是不如立即看到变量定义方便。
------解决思路----------------------
路过看看~~
------解决思路----------------------
------解决思路----------------------
刚开始,还不太懂
------解决思路----------------------
+1
------解决思路----------------------
c就是要求变量在开头都定义好,遵循下标准也没啥坏处