从外部初始化函数

时间:2014-04-24 09:56:57

标签: c static return function-pointers

我想返回一个带有变量的函数,我可以在返回它的函数内初始化它。可能,还是没有?

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

2 个答案:

答案 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_chargenerate_get_char函数都可见的全局变量。另请注意,函数名称会隐式转换为指针。因此,以下是等效的 -

return &get_char;
// equivalent to
return get_char;