如何在C中复制函数本身?

vatpfxk5  于 2023-05-28  发布在  其他
关注(0)|答案(1)|浏览(102)

我想复制一个函数,这样静态变量是独立的
我试着跟随,但问题是我只是在保存函数的“地址”

#include <stdio.h>

void Function() {
    static int counter = 0;
    counter++;
    printf("Counter = %d\n", counter);
}

int main() {
    void (*f1)() = Function;
    void (*f2)() = Function;

    f1();  // Should output 1
    f2();  // Should output 1 (but the output is 2...)

    return 0;
}

这在C语言中可能吗?

gdrx4gfi

gdrx4gfi1#

简短回答:不。冗长的回答:函数只是内存中的一些代码,有一个特定的地址指向它。你似乎已经知道了,因为你的:

void (*f1)() = Function;

在这里将Function的地址分配给f1
所以基本上当你打电话

void (*f1)() = Function;
void (*f2)() = Function;

你给f1f2分配了相同的函数指针,也就是相同的内存地址。此地址是为void Function() {...}自动创建的,并且在同一次执行中始终相同。
如果你想有相同的函数两次,你要么需要写两次,要么把它写成一个宏,然后像这样创建两次:

#include <stdio.h>

#define function_creator(number) void Function_##number() { \
        static int counter = 0; \
        counter++; \
        printf("Counter = %d\n", counter); \
    }

function_creator(1)
function_creator(2)

int main() {
    void (* f1)() = Function_1;
    void (* f2)() = Function_2;

    f1();  // Should output 1
    f2();  // Should output 1 (and does)

    return 0;
}

但是我一般不推荐这样的宏,因为它们真的很难调试。玩得开心:)

相关问题