我可能是想多了,已经断断续续地写了几个月的代码,但我正在寻找一些非常简单的最佳实践建议。问:做这样的事情是不是很不受欢迎?
uint8_t dotPos = GetDotPos(&buffer[0], len);
字符串还是更好的做法是这样做(如在示例中经常看到的):
uint8_t dotPos = 0; dotPos = GetDotPos(&buffer[0], len);
型还是说没有偏好?
xdyibdwo1#
const uint8_t dotPos = GetDotPos(&buffer[0], len);
字符串是更好的实践。变量声明和初始化应该紧密地结合在一起,以提高代码的可读性。此外,如果变量未更改,则将其设置为const。遵循这个约定可以大大简化我们头脑中代码的流分析。来自https://google.github.io/styleguide/cppguide.html#Local_Variables:将函数的变量放在尽可能窄的范围内,并在声明中初始化变量。
const
int i; i = f(); // Bad -- initialization separate from declaration. int i = f(); // Good -- declaration has initialization.
型https://wiki.c2.com/?DeclareVariablesAtFirstUse
cyej8jka2#
”或者没有偏好吗?“*你的问题的措辞表明你可能已经有了一个自然的偏好。试试看。尽管乐于学习语法和语义方面的新信息是件好事,但要注意从哪里或从谁那里接受这些信息。程序员在教导(或说服)他人以适合某个特定观点的方式形成习惯时,通常会建议 * idiomatic constructs,尽管意图是好的。然而,在接受想法时要小心,特别是当它们范围狭窄时,使用太多绝对的语言。( 总是 * 这样做,* 永远 * 使用...在确定之前,应该仔细审查那些表述流畅但过于迂腐的授权。你的问题解决了一个非常具体的场景,但是考虑一下你可能遇到的其他场景,以完全解决如何/何时创建和初始化变量...
这些因素中的每一个都将影响到您如何创建、初始化和维护变量的完整性,因此可能会导致您再次考虑新的信息。
bqf10yzr3#
两者都被广泛使用。有些人可能更喜欢其中之一,这完全是一个品味的问题。有些人可能会认为,后者允许在函数顶部声明所有函数变量,这可以被认为是更干净的。
cetgtptt4#
这取决于你想要的“i”的范围。如果你在循环或条件中设置“i”,并计划在外部使用它,那么你需要在它之前和循环/作用域{}之外有声明,否则编译器会在你引用相同的变量而没有声明时抱怨。否则,声明和赋值的单个语句是正确的和最佳的。另外,如果变量是一个指向内存位置的指针,那么作为最佳实践,你肯定需要调用memset/calloc来在赋值之前清除该位置,因为你不知道指向的位置中隐藏着什么。
myzjeezk5#
通常编译器会进行代码优化,如常量折叠和常量传播,因此赋值不会影响性能。这取决于您喜欢哪种方法,或者您的组织是否指定了某种方法。
5条答案
按热度按时间xdyibdwo1#
字符串
是更好的实践。变量声明和初始化应该紧密地结合在一起,以提高代码的可读性。此外,如果变量未更改,则将其设置为
const
。遵循这个约定可以大大简化我们头脑中代码的流分析。来自https://google.github.io/styleguide/cppguide.html#Local_Variables:
将函数的变量放在尽可能窄的范围内,并在声明中初始化变量。
型
https://wiki.c2.com/?DeclareVariablesAtFirstUse
cyej8jka2#
”或者没有偏好吗?“*
你的问题的措辞表明你可能已经有了一个自然的偏好。试试看。
尽管乐于学习语法和语义方面的新信息是件好事,但要注意从哪里或从谁那里接受这些信息。程序员在教导(或说服)他人以适合某个特定观点的方式形成习惯时,通常会建议 * idiomatic constructs,尽管意图是好的。然而,在接受想法时要小心,特别是当它们范围狭窄时,使用太多绝对的语言。( 总是 * 这样做,* 永远 * 使用...在确定之前,应该仔细审查那些表述流畅但过于迂腐的授权。
你的问题解决了一个非常具体的场景,但是考虑一下你可能遇到的其他场景,以完全解决如何/何时创建和初始化变量...
这些因素中的每一个都将影响到您如何创建、初始化和维护变量的完整性,因此可能会导致您再次考虑新的信息。
bqf10yzr3#
两者都被广泛使用。有些人可能更喜欢其中之一,这完全是一个品味的问题。有些人可能会认为,后者允许在函数顶部声明所有函数变量,这可以被认为是更干净的。
cetgtptt4#
这取决于你想要的“i”的范围。如果你在循环或条件中设置“i”,并计划在外部使用它,那么你需要在它之前和循环/作用域{}之外有声明,否则编译器会在你引用相同的变量而没有声明时抱怨。
否则,声明和赋值的单个语句是正确的和最佳的。
另外,如果变量是一个指向内存位置的指针,那么作为最佳实践,你肯定需要调用memset/calloc来在赋值之前清除该位置,因为你不知道指向的位置中隐藏着什么。
myzjeezk5#
通常编译器会进行代码优化,如常量折叠和常量传播,因此赋值不会影响性能。
这取决于您喜欢哪种方法,或者您的组织是否指定了某种方法。