gpt4 book ai didi

c - 这个函数返回什么

转载 作者:行者123 更新时间:2023-12-05 01:14:41 27 4
gpt4 key购买 nike

如果在函数中传递了一个 volatile 变量,如下所示......

这个函数是否总是返回一个平方值,我的意思是有时值会改变,因为声明了一个 volatile 变量。

基本上,我想说的是传递的变量是一个易变的。希望,我很清楚。但是,如果我通过引用传递会改变整个场景......我是对的吗??

volatile int a;
int main()
{
function(a);
return 1;
}
int function b(int a)
{

int x=a;

int y=a;

return x*y;

}

最佳答案

volatile 限定符告诉编译器变量可能会改变而不是它会改变。它在任何情况下都不能自发地改变;某些事情必须导致它发生变化 - 即使该原因在代码之外。

在这种情况下,代码是错误的(或者至少没有以您想要的方式举例说明 volatile 的效果),因为传递给 function() 的参数声明为 volatile。它与全局变量同名的事实可能令人困惑,但是通过将全局变量 a 分配给函数参数 a,您立即将它与波动性。

如果代码被修改(并使其有效和可编译):

volatile int a;

int function( void )
{
int x=a;
int y=a;

return x*y;
}

int main()
{
function();
return 1;
}

volatile 的效果很简单,编译器将显式分配 xy,而不应用任何可能的优化。如果没有限定符,编译器可能会以其他方式(启用优化时)将 function() 减少为:

int function( void )
{
return a * a ;
}

甚至可能内嵌整个函数。此外,由于函数的返回值未分配给任何东西,编译器可能会将整个代码优化为仅

int main()
{
return 1;
}

如果 a 是可变的,那么如果 function () 被调用。

volatile 的目的是向编译器表明变量可能会在编译器生成的代码之外更改(而不是它更改)。当变量引用硬件寄存器或在线程、进程甚至处理器或处理器内的内核之间共享的内存时,它通常用于确保正确的行为。它还可以用于防止“优化掉”所需的代码(例如空的忙等待循环计数器)。在您的示例(或者更确切地说是我的修订版)中,a 未引用任何此类实体,因此代码将按预期运行,但可能效率较低。

关于c - 这个函数返回什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9553011/

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