我们应该如何从一个名为'n'no的函数中调用一次函数。从主函数中不使用静态变量的次数?

时间:2014-01-04 10:55:16

标签: c

我正在使用vs 2008,这是我面临的问题的示例程序

int main()
{
    abc();
    abc();
    abc();
    abc();
    return 0;
}

void abc()
{
    static int Val = 0;

    if(Val == 0)
    {
        xyz();
        val++;
    }

    printf("This is abc");
}

void xyz()
{
    printf("This is xyz");
}

这种方法适用于第一个调试会话,xyz()只调用一次,但在下一个调试会话中,静态variableVal仅将其值保留为1,因此根本不调用xyz(),如何调用xyz ()一次不使用静态,因为静态对我的问题没有任何帮助??

3 个答案:

答案 0 :(得分:2)

我会将参数而不是static int传递给可重入。 然后调用者可以决定在需要时重新启动状态。

int main()
{
    int state = 0;

    abc(&state);
    abc(&state);
    abc(&state);
    abc(&state);
    return 0;
}

void abc(int* state)
{
    if (*state == 0)
    {
        xyz();
        ++*state;
    }
    printf("This is abc");
}

答案 1 :(得分:1)

控制是否在同一执行中调用了某个函数可能会以类似于以下的方式完成

#include <stdio.h>
#include <stdlib.h>


typedef struct mySingletonFunction
{
    int first_time;
} mySingletonFunction;

void abc(mySingletonFunction *obj)
{
    if(!obj->first_time)
    {
        printf("Skipping..");
        return;
    }
    else
        obj->first_time = 0;

    printf("This is abc");
}

mySingletonFunction *initializeObject()
{
    mySingletonFunction *obj = (struct mySingletonFunction*)malloc(sizeof(struct mySingletonFunction));

    obj->first_time = 1;

    return obj; 
}

void callAbc(mySingletonFunction *obj)
{
    obj->first_time = 1;
}

void resetObject(mySingletonFunction *obj)
{
    obj->first_time = 1;
}

void deleteObject(mySingletonFunction *obj)
{
    free(obj);
}


int main()
{
    mySingletonFunction *myObject = initializeObject();

    abc(myObject);
    abc(myObject);
    abc(myObject);
    abc(myObject);
    abc(myObject);

    resetObject(myObject);

    abc(myObject);
    abc(myObject);
    abc(myObject);
    abc(myObject);
    abc(myObject);

    deleteObject(myObject);

    return 0;
}

http://ideone.com/tSzF7v

虽然还有很多其他方法可以做到。我不太明白你对“下次调试会话”的意思。

答案 2 :(得分:0)

使val变量全局并在abc()

中增加val变量