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



我有一个程序,根据程序的状态,需要同一变量的两个不同值。

函数在标头 (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,
    };
}

和程序:(主要.c)

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

编译后说:

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

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

div class="one_answers">

这里没有枚举,你只需要 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);
}

我有 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,
    };
}

和程序:(主要.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;
    }
}

和程序:(主要.c)

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

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

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

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

我会用这个

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 中,您可以使用枚举值

由于编译器查找符号a而获得的编译时错误。

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新