C语言 一次调用函数和创建变量

9lowa7mx  于 2023-08-03  发布在  其他
关注(0)|答案(5)|浏览(83)

我可能是想多了,已经断断续续地写了几个月的代码,但我正在寻找一些非常简单的最佳实践建议。问:做这样的事情是不是很不受欢迎?

uint8_t dotPos = GetDotPos(&buffer[0], len);

字符串
还是更好的做法是这样做(如在示例中经常看到的):

uint8_t dotPos = 0;
dotPos = GetDotPos(&buffer[0], len);


还是说没有偏好?

xdyibdwo

xdyibdwo1#

const uint8_t dotPos = GetDotPos(&buffer[0], len);

字符串
是更好的实践。变量声明和初始化应该紧密地结合在一起,以提高代码的可读性。此外,如果变量未更改,则将其设置为const。遵循这个约定可以大大简化我们头脑中代码的流分析。
来自https://google.github.io/styleguide/cppguide.html#Local_Variables:
将函数的变量放在尽可能窄的范围内,并在声明中初始化变量。

int i;
i = f();      // Bad -- initialization separate from declaration.

int i = f();  // Good -- declaration has initialization.


https://wiki.c2.com/?DeclareVariablesAtFirstUse

cyej8jka

cyej8jka2#

  • 做这种事会不会让人不快 *
  • 还是更好的练习... *

”或者没有偏好吗?“*
你的问题的措辞表明你可能已经有了一个自然的偏好。试试看。
尽管乐于学习语法和语义方面的新信息是件好事,但要注意从哪里或从谁那里接受这些信息。程序员在教导(或说服)他人以适合某个特定观点的方式形成习惯时,通常会建议 * idiomatic constructs,尽管意图是好的。然而,在接受想法时要小心,特别是当它们范围狭窄时,使用太多绝对的语言。( 总是 * 这样做,* 永远 * 使用...在确定之前,应该仔细审查那些表述流畅但过于迂腐的授权。
你的问题解决了一个非常具体的场景,但是考虑一下你可能遇到的其他场景,以完全解决如何/何时创建和初始化变量...

  • 变量是否也是 * used as an argument * 的函数?
  • 变量是否必须具有 * global * 作用域?
  • 或者,它是否旨在具有本地(自动)范围?
  • 变量将在线程环境中使用吗?

这些因素中的每一个都将影响到您如何创建、初始化和维护变量的完整性,因此可能会导致您再次考虑新的信息。

bqf10yzr

bqf10yzr3#

两者都被广泛使用。有些人可能更喜欢其中之一,这完全是一个品味的问题。有些人可能会认为,后者允许在函数顶部声明所有函数变量,这可以被认为是更干净的。

cetgtptt

cetgtptt4#

这取决于你想要的“i”的范围。如果你在循环或条件中设置“i”,并计划在外部使用它,那么你需要在它之前和循环/作用域{}之外有声明,否则编译器会在你引用相同的变量而没有声明时抱怨。
否则,声明和赋值的单个语句是正确的和最佳的。
另外,如果变量是一个指向内存位置的指针,那么作为最佳实践,你肯定需要调用memset/calloc来在赋值之前清除该位置,因为你不知道指向的位置中隐藏着什么。

myzjeezk

myzjeezk5#

通常编译器会进行代码优化,如常量折叠和常量传播,因此赋值不会影响性能。
这取决于您喜欢哪种方法,或者您的组织是否指定了某种方法。

相关问题