gpt4 book ai didi

c - 是否有任何特定原因表明函数调用不应用于 C 中的变量初始值设定项

转载 作者:行者123 更新时间:2023-11-30 16:18:42 27 4
gpt4 key购买 nike

我正在阅读多种风格指南,试图标准化我的编程风格。在阅读 KNF 上的 FreeBSD 和 OpenBSD 风格指南时,我注意到以下段落相当令人困惑。

Be careful not to obfuscate the code by initializing variables in the declarations. Use this feature only thoughtfully. DO NOT use function calls in initializers!

是否存在技术原因导致初始化数据时不应使用函数调用?

最佳答案

Is there a technical reason that function calls should not be used when initializing data?

函数调用不仅不应该而且不能用于初始化静态变量或在文件范围内声明的变量。但是,它们可以用于初始化函数内的自动变量。执行此操作的语义已明确定义,因此我认为不存在应避免此类初始化的技术原因。

我认为该样式规则背后的基本原理由引文的第一句给出:

Be careful not to obfuscate the code by initializing variables in the declarations.

该风格指南的作者显然认为使用初始化器可能会造成混淆,我在最后一句中强调他们认为使用函数调用进行初始化肯定会造成混淆。

无论如何,我不同意这些风格指南。根据我的说法,如果变量实际上在此时有一个有意义的、语义上正确的值,并且该值可以通过初始化器方便地表达,那么通常应该在其声明中进行初始化。我也不反对初始化程序中的函数调用。特别是,我通常会修改这一点:

void foo(void) {
int result;
result = do_something();
// ...
}

对此:

void foo(void) {
int result = do_something();
// ...
}

。我认为后者实际上稍微清晰一些,而且我认为它少了一行。

关于c - 是否有任何特定原因表明函数调用不应用于 C 中的变量初始值设定项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55839129/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com