使用函数c中的枚举定义全局变量

时间:2012-11-22 12:43:45

标签: c function enums global-variables declaration

我有一个程序需要两个不同的同一个变量值,具体取决于程序的状态。

函数在header(test.inc)中声明:

void function_a(int pr)
{
    if (pr == 1)
    enum{
      a = 5,
      b = 5,
      c = 5,
    };
    else
    enum{
      a = 2,
      b = 2,
      c = 2,
    };
}

程序:(main.c)

int main() {
    function_a(1);        
    printf("%d",a);
    return (EXIT_SUCCESS);
}

编译后说:

  

main.c:26:错误:'a'未声明(首次使用此功能)
  main.c:26:错误:(每个未声明的标识符仅报告一次   main.c:26:错误:对于它出现的每个函数。)

如何在标题中的函数中使用枚举进行全局声明?
谢谢

5 个答案:

答案 0 :(得分:2)

这里没有使用枚举,你只需要3个全局变量并设置它们:

int a,b,c;

void function_a(int pr)
{
    if (pr == 1) {
      a = 5,
      b = 5,
      c = 5,
    } else {
      a = 2;
      b = 2;
      c = 2;
    }
}

int main() {
    function_a(1);        
    printf("%d",a);
    return (EXIT_SUCCESS);
}

答案 1 :(得分:2)

我有2个建议:

1)使用结构而不是枚举

struct test_struct {
   int a;
   int b;
   int c;
} test;
void function_a(int pr)
{
    if (pr == 1)
    test = {
      .a = 5,
      .b = 5,
      .c = 5,
    };
    else
    test = {
      .a = 2,
      .b = 2,
      .c = 2,
    };
}

程序:(main.c)

int main() {
    function_a(1);        
    printf("%d",test.a);
    return (EXIT_SUCCESS);
}

2)使用简单变量

int a,b,c;

void function_a(int pr)
{
    if (pr == 1) {
      a = 5;
      b = 5;
      c = 5;
    }
    else {
      a = 2;
      b = 2;
      c = 2;
    }
}

程序:(main.c)

int main() {
    function_a(1);        
    printf("%d",a);
    return (EXIT_SUCCESS);
}

答案 2 :(得分:1)

如果我理解正确,您希望名为x的变量具有不同的值,具体取决于程序的各个部分。变量不能同时引用两个不同的值,但您可以通过赋值在某一点更改变量的值。

我认为你真正需要的是功能。调用函数(在最粗糙的意义上)将值绑定到其参数。

但是看到你笨拙地使用枚举,你可能想退后一步,拿起一本关于C的好书。见list here

答案 3 :(得分:1)

我会用这个

void function_a(int pr)
{
    if (pr == 1)
    { //make them local
    enum{
      a = 5,
      b = 5,
      c = 5,
    };
     common_function(); // move common functionality inside a function and call it
    }
    else
    {  // make them local
      enum{
      a = 2,
      b = 2,
      c = 2,
    };
common_function(); // move common functionality inside a function and call it
}
}

common_function内,您使用枚举值

答案 4 :(得分:1)

由于编译器正在寻找符号a而导致的编译时错误。

由于函数调用在运行时发生,因此将在运行时调用function_1(1),然后a出现。但编译器需要在编译时解析符号或标记a,因此您会遇到此错误。

编译器错误是由于任何语法错误引起的。这是a未声明的事情。

注意:一个翻译单元中使用的所有符号都应在compile time处声明,否则编译器将抛出错误

您可以使用宏调用而不是函数调用来解决此问题。因为宏是预处理的。或者,你做#define常数。