我想返回一个带有变量的函数,我可以在返回它的函数内初始化它。可能,还是没有?
int get_char (char *c)
{
static circular_queue *cir; // this needs to be initialized in the function below
if (circular_queue_empty(cir))
return 0;
else
*c = circular_queue_pop(cir);
return 1;
}
int (*generate_get_char(circular_queue *cir)) (char *c)
{
// do something to set cir
return &get_char;
}
我将指向getchar的指针传递给我无法控制的API,因此我无法更改get_char
的格式;话虽如此,有没有更好的方法来做到这一点,因为我很确定以上是不可能的。 (我宁愿不使用静态全局,但这就是我所能想到的)。
TY
答案 0 :(得分:0)
这是不可能的 - cir
只能从get_char
访问,并且无法从外部访问它。您需要两个函数都可以看到静态全局。
答案 1 :(得分:0)
具有静态存储分配的变量默认初始化为零。因此,以下陈述实际上是等同的。
static circular_queue *cir;
// equivalent to
static circular_queue *cir = 0;
// equivalent to
static circular_queue *cir = NULL;
变量cir
具有函数范围,即只能在函数get_char
中访问它。因此,你的问题的答案
我想在其中返回一个包含变量的函数 在返回它的函数内初始化。可能,还是没有?
不是。您需要一个对get_char
和generate_get_char
函数都可见的全局变量。另请注意,函数名称会隐式转换为指针。因此,以下是等效的 -
return &get_char;
// equivalent to
return get_char;