不带类型说明符的参数

  • 本文关键字:参数 说明符 类型 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);

不,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);

这是您想要的输出。

最新更新