在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);
不,C 不像在 PHP 中那样处理变量变量。
变量变量类似于示例中的指针。所以你可以做这样的事情。
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);
}
您可以使用 X 宏来实现您提到的内容。
只需这样做:
#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
的方式,因为它将被一遍又一遍地使用。
接下来,我们定义在LIST_OF_VARIABLES
正文中使用的宏X
。
第二个宏是我们修改以满足我们需求的宏。
每次我们更改第二个宏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 预处理器最终会给出以下内容(然后编译器将使用(:
//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);
这是您想要的输出。