gpt4 book ai didi

c: 风格:就地改变变量

转载 作者:太空宇宙 更新时间:2023-11-04 01:37:29 26 4
gpt4 key购买 nike

假设我们有类似的东西

int f(int n);

....

do{
int a = b;
int b = f(a);
}

这样说有没有风险

do{
int b = f(b);
}

相反,假设 a 没有在别处使用?做前者在风格上更可取吗?

最佳答案

重要的是要了解您不是在“更改”此处的任何变量,只是更改名称的含义。

重要的概念叫做 point of declaration .

让我们看看你的例子:

int b = 42;
{
int a = b;
int b = 23 * a;
printf("%d\n", b);
}
printf("%d\n", b);

int b = 42;
{
int b = 23 * b;
printf("%d\n", b);
}
printf("%d\n", b);

名称 b 引用了两个对象,根据您在代码中的位置,我们称它们为 b1 和 b2。这在情况 1 中不足为奇:

int b1 = 42;
{
int a = b1;
int b2 = 23 * a;
printf("%d\n", b2);
}
printf("%d\n", b1);

因为在 C 中声明点是在初始化器之前,所以第二个例子解析不同:

int b1 = 42;
{
int b2 = 23 * b2;
printf("%d\n", b2);
}
printf("%d\n", b1);

请注意,这里 b1 和 b2 之间没有链接,您正在用它自己的(未定义的)值初始化 b2。勤奋的编译器会就此警告您,例如

x.c:7:13: warning: 'b' is used uninitialized in this function [-Wuninitialized]

关于c: 风格:就地改变变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12000563/

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