需要在运行时初始化的预期常量变量

时间:2013-07-01 12:01:31

标签: c

我有一个变量,我希望在程序的其余部分运行之前在运行时初始化。初始化后,我不希望变量的值发生变化。是否有任何C语言构造可以执行此操作?

让我的主C程序包含在Prog.c文件中

//Contents of Prog.c
//...includes.. and variable initialization

int main(..)
{
    //Initialize variables here
    //.. Huge program after this where I don't want these constants to change
}

3 个答案:

答案 0 :(得分:2)

你可以通过const指针间接地做到这一点,至少:

typedef struct  {
  int answer;
} state;

const state * state_init(void)
{
  static state st;

  st.answer = 42;  /* Pretend this has to be done at run-time. */

  return &st;
}

int main(void)
{
  const state *st = state_init();
  printf("the answer is %d, and it's constant\n"," st->answer);
}

这样,所有main()都有一个指向某些const的{​​{1}}指针,无法修改。

答案 1 :(得分:2)

一个恒定的全局应该有效,是吗?

const int val = 3; // Set before main starts
                   // const, so it will never change.

int main(void)
{
    printf("%d\n", val);  // using val in code
}

但是,如果在编译时未知该值,则可以通过以下方式在运行时设置该值:

const int const* g_pVal;

int main(void)
{
    static const int val = initialize_value();

    g_pVal = &val;

    printf("%d\n", *g_pVal);
}

答案 2 :(得分:0)

我能想到的唯一方法是,如果您将值读作非常量,然后调用一个取值为常数并将变量传递给它的函数。在函数内部,您可以完成所有希望的操作。