我有一个程序需要两个不同的同一个变量值,具体取决于程序的状态。
函数在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:错误:对于它出现的每个函数。)
如何在标题中的函数中使用枚举进行全局声明?
谢谢
答案 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
常数。