Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如果某事物是常量volatile int,它是否可以根据变量的状态进行更改?_C_Freestanding_Gnu99 - Fatal编程技术网

C 如果某事物是常量volatile int,它是否可以根据变量的状态进行更改?

C 如果某事物是常量volatile int,它是否可以根据变量的状态进行更改?,c,freestanding,gnu99,C,Freestanding,Gnu99,我有一个无符号常量volatile short int*。我希望它是(x+y),在定义时设置为0。但是,如果由于某种原因y变为5,我希望无符号常量volatile short int*也会改变 这在C语言中可能吗 (注意:我使用的是带有GNU扩展的独立C99模式,我的意思是它可以自动更改,而不是使用函数。)无法使变量基于其他变量自动更新,如C中的变量 而不是在变量中存储 x和 y>代码>,您应该考虑只需要在需要时再计算一个函数的函数。添加速度应该相当快: int get_the_sum() {

我有一个
无符号常量volatile short int*
。我希望它是(x+y),在定义时设置为0。但是,如果由于某种原因y变为5,我希望
无符号常量volatile short int*
也会改变

这在C语言中可能吗


(注意:我使用的是带有GNU扩展的独立C99模式,我的意思是它可以自动更改,而不是使用函数。)

无法使变量基于其他变量自动更新,如C中的变量

<>而不是在变量中存储<代码> x和<代码> y>代码>,您应该考虑只需要在需要时再计算一个函数的函数。添加速度应该相当快:

int get_the_sum()
{
    return x + y;
}

可选地,您可以考虑将<代码> x和<代码> y>代码>为静态变量,这些变量只能用SETER函数来改变。

x
y
的setter函数将负责更新任何需要更新的变量。如果不进一步了解您的应用程序,很难判断这种方法是否值得

void change_y(int new_y)
{
  y = new_y;
  sum = x + y;
}

假设
y
被声明为

volatile unsigned short int y = -x;
(或等效值),并且
y
的值最初不同于5,您可以定义

unsigned const volatile short int *p = &y;
这将满足您提出的要求,尽管它强加了您未指定的条件。除了上面明确给出的那些,它假设您需要更改以响应
y
中的更改,但不提及响应
x
中的更改,这意味着指向的值实际上不需要响应
x
中的更改


当然,我倾向于认为这根本不能代表你真正的意思。这不能在C中实现。指针指的是内存中的位置,但表达式的值(如
x+y
)不在内存中。

C中的变量不会分别更新其值:没有依赖关系系统(与电子表格不同)。另外,如果您不希望它是
常量,请删除
常量
。而且
const
volatile
不矛盾吗?指针不是
const
限定的,所以是的,当然允许更改。@WeatherVane否,const与volatile不矛盾@Olaf您的意思是,它是
const
限定的指针,而不是它指向的对象吗?OP并没有改变任何指针,但它指向的是什么。@WeatherVane:我只是读了文本;没有。“我有一个
无符号常量volatile short int*
”-这是一个指针。“我希望它是
(x+y)
”-不知道
x
y
是什么,但他明确要求用它们的总和设置指针。