0

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

函数在头文件(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: error: `a' undeclared (first use in this function)
main.c:26: error: (每个未声明的标识符只报告一次
main.c:26: error: 对于它出现的每个函数。 )

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

4

5 回答 5

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);
}
于 2012-11-22T13:04:09.867 回答
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);
}
于 2012-11-22T13:09:07.343 回答
1

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

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

但是看到您对枚举的笨拙使用,您可能想退后一步,拿起一本关于 C 的好书。请参阅此处的列表

于 2012-11-22T13:02:27.693 回答
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,你使用枚举值

于 2012-11-22T13:06:19.653 回答
1

由于编译器查找符号而导致的编译时错误a

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

编译器错误是由于任何语法错误造成的。a这是没有声明的事情。

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

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

于 2012-11-22T13:06:34.887 回答