gpt4 book ai didi

c - 将全局变量传递给函数有问题吗?

转载 作者:太空狗 更新时间:2023-10-29 16:25:28 28 4
gpt4 key购买 nike

考虑以下函数声明:

int abmeld(char *strsend)

这样称呼

abmeld(str);

其中 str 是在程序文件的开头(包含之后)声明和初始化的全局变量,如下所示:

char str[300] = "";

现在我已经知道这是不必要的代码(您可以从任何函数中访问和修改 char 数组而无需传递它),但这实际上是否有问题?

将已经全局作用域的变量传递给函数是否会产生后果(如硬错误可能性或未定义行为)?

最佳答案

我会说相反,将全局变量传递给函数几乎从来没有问题(使用大量全局变量通常很脏,代码变得不可读)。

轻度(或根本不)依赖于全局状态的函数通常比使用大量全局(甚至静态)变量的函数更具可读性和更易理解。在许多函数中更改的全局变量会使您的程序难以理解。

(永远不要忘记,您不仅为计算机编写代码,而且还为您的同事编写代码——甚至可能在几个月后为您自己编写代码——他们将不得不改进您的源代码)

此外,使用全局状态的函数通常不是 reentrant .

最后,undefined behavior主要与全局 vs 参数数据正交。特别是 buffer overflow可以与全局变量一起出现,也可以与指向某个数组(例如参数或某个局部变量)的指针一起出现。

一个非常粗略的经验法则是避免让开发人员的大脑加载超过 7 个项目 ( magical number 7, + or - 2 );因此民间传说的规则是避免超过 7 个参数或超过 7 个全局变量。

关于c - 将全局变量传递给函数有问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35309562/

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