我有一个程序,根据程序的状态,需要同一变量的两个不同值。
函数在标头 (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>
这里没有枚举,你只需要 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
常量。