【问题标题】:If something is a const volatile int, can it change based on the status of a variable?如果某物是 const volatile int,它可以根据变量的状态而改变吗?
【发布时间】:2017-02-23 19:23:59
【问题描述】:

我有一个unsigned const volatile short int*。我希望它是 (x + y),在定义时设置为 0。但是,如果由于某种原因 y 更改为 5,我希望 unsigned const volatile short int* 也更改。

这在 C 中是否可行?

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

【问题讨论】:

  • C 中的变量不会追溯更新它们的值:没有依赖系统(不像电子表格)。此外,如果您实际上不希望它是 const,请删除 constconstvolatile 不矛盾吗?
  • 指针不是const限定的,所以是的,当然是允许改变的。
  • @WeatherVane 不,const 与 volatile 并不矛盾。 They're orthogonal in C.
  • @Olaf 你的意思是它是const 限定的指针,而不是它指向的指针吗? OP 不会更改任何指针,而是更改它指向的内容。
  • @WeatherVane:我刚看了文字;没有minimal reproducible example。 “我有一个unsigned const volatile short int*”——这是一个指针。 “我希望它是 (x + y)” - 不知道 xy 是什么,但他明确要求用它们的总和设置指针。

标签: c freestanding gnu99


【解决方案1】:

没有办法让变量像 C 中那样基于其他变量自动更新。

不要将xy 的总和存储在一个变量中,您应该考虑只创建一个在需要时重新计算总和的函数。添加应该很快:

int get_the_sum()
{
    return x + y;
}

或者,您可以考虑将xy 设为只能使用setter 函数更改的静态变量。 xy 的 setter 函数将负责更新任何需要更新的变量。如果不了解您的应用程序的更多信息,很难判断这种方法是否值得。

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

【讨论】:

    【解决方案2】:

    假设y被声明为

    volatile unsigned short int y = -x;
    

    (或等价物),并且y的值最初不是5,你可以定义

    unsigned const volatile short int *p = &y;
    

    这将满足您提出的要求,尽管它强加了您未指定的条件。除了上面明确给出的那些之外,它假设您需要更改以响应y 的更改,但没有提及响应x 的更改的更改意味着指向的值实际上并不需要响应x的变化。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-08
      • 1970-01-01
      • 1970-01-01
      • 2012-11-02
      • 2013-08-06
      • 2017-11-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多