在C中可以处理变量变量,就像在PHP中一样。这是我在PHP文档中的一个例子。
http://php.net/manual/en/language.variables.variable.php
我想做这样的事情,以获得我的代码的抽象。
int value1;
int value2;
int value3;
function handle_value(variable_var) {
scanf("%i", &variable_var);
}
这是它的工作方式,但我想减少代码......
int value1;
int value2;
int value3;
scanf("%i", &value1);
scanf("%i", &value2);
scanf("%i", &value3);
答案 0 :(得分:4)
不,C不像PHP那样处理变量变量。
答案 1 :(得分:-1)
您可以使用X macro来实现您提到的内容。
这样做:
#define LIST_OF_VARIABLES X(value1) X(value2) X(value3)
//Declaring the variables
#define X(name) int name;
LIST_OF_VARIABLES
#undef X
//Reading values into the variables
#define X(name) scanf("%i", &name);
LIST_OF_VARIABLES
#undef X
//Printing the values
#define X(name) printf("\n%i", name);
LIST_OF_VARIABLES
#undef X
首先我们定义一个宏LIST_OF_VARIABLES
,它将调用另一个宏X
我们保持LIST_OF_VARIABLES
的方式,因为它将被反复使用。
接下来,我们定义X
正文中使用的宏LIST_OF_VARIABLES
第二个宏是我们修改以满足我们需求的宏。
每次我们更改第二个宏X
的目的时,我们首先使用#undef
取消定义,然后重新定义#define
。
在展开LIST_OF_VARIABLES
宏:
//Declaring the variables
#define X(name) int name;
X(value1) X(value2) X(value3)
#undef X
//Reading values into the variables
#define X(name) scanf("%i", &name);
X(value1) X(value2) X(value3)
#undef X
//Printing the values
#define X(name) printf("\n%i", name);
X(value1) X(value2) X(value3)
#undef X
然后在每次展开X()
宏之后,C pre-processor最终将给出以下内容(然后编译器将使用它):
//Declaring the variables
int value1; int value2; int value3;
//Reading values into the variables
scanf("%i", &value1); scanf("%i", &value2); scanf("%i", &value3);
//Printing the values
printf("\n%i", value1); printf("\n%i", value2); printf("\n%i", value3);
这是你想要的输出。
答案 2 :(得分:-1)
变量变量与示例中的指针类似。所以你可以这样做。
int value1;
int value2;
int value3;
void handle_value(int * var) {
scanf("%i", var);
}
int main(void) {
handle_value(&value1);
handle_value(&value2);
handle_value(&value3);
}