gpt4 book ai didi

c++ - 我可以知道变量是否改变了它的值而不用在函数调用 C 中将它与以前的值进行比较吗?

转载 作者:搜寻专家 更新时间:2023-10-30 23:59:40 25 4
gpt4 key购买 nike

用于以下 C/C++ 代码

void fun(int* x)
{
//SOMECODE;//WITHOUT SAVING PREVIOUS VALUE
if(SOME CONDITION)
printf("VALUE OF X IS DIFFERENT THAN PREVIOUS CALL \n");
}

int main()
{
int a;
a=9;
fun(&a);
a=12;
fun(&a);
return 0;
}

是否有任何函数或标志值可以为我们提供有关变量是否更改的信息所以如果有任何解决方案请回复

最佳答案

如果不提供一些额外的代码来存储参数 'during' 'last' 调用您的函数,根本没有机会检测它是否被调用相同的值或另一个值。

由于 x 的“当前” 值将仅存在于堆栈中,一旦您的函数调用完成,它将完全丢失。

pre-multi-threading 时代,只要使用静态变量在函数 func 的最后一次运行期间缓存 x 的值就可以(几乎)解决你的问题:

void fun (int x) {
static int old_value = VALUE_INVALID;

if(x != old_value)
printf("VALUE OF X IS DIFFERENT THAN PREVIOUS CALL \n");

old_value = x;
}

这种方法仍然存在的唯一问题是可重入性——这意味着如果在信号处理程序中调用 func,缓存的值可能会被搞砸。

如果在多线程应用程序中运行,您在使用这种方法时还必须提供某种锁定机制,否则您迟早会搞砸的。

在这种情况下,您可能无论如何都会搞砸,因为您必须弄清楚“最后” 调用函数和值“期间” 执行的确切含义。

当前右值是在线程B之前进入func但还在执行的线程A的当前右值还是在B之后进入但已经执行完func的线程B的当前右值?

关于c++ - 我可以知道变量是否改变了它的值而不用在函数调用 C 中将它与以前的值进行比较吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15482496/

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