没有类型说明符的参数

时间:2017-07-13 15:56:10

标签: c

在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);

3 个答案:

答案 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);
}