函数指针指向__attribute __((const))函数?

时间:2012-02-25 04:31:24

标签: c gcc types function-pointers

如何(在GCC /“GNU C”中)声明一个指向__attribute__((const))函数的函数指针?我的想法是,我希望编译器在可以缓存前一次调用的返回值时,避免生成对通过函数指针调用的函数的多次调用。

2 个答案:

答案 0 :(得分:3)

typedef void (*t_const_function)(void) __attribute__((const));

static __attribute__((const)) void A(void) {
}

static void B(void) {
}

int main(int argc, const char* argv[]) {
    t_const_function a = A;

    // warning: initialization makes qualified
    // function pointer from unqualified:
    t_const_function b = B;

    return 0;
}

或者只是:

__attribute__((const)) void(*a)(void) = A;

答案 1 :(得分:0)

虽然这不是你问题的答案,但你可能想知道这个:

在一般情况下,您不能期望编译器执行您期望的优化。在一般情况下,编译器不能进行必要的别名分析,以便知道函数指针的多次使用对应于同一个函数。

在一般情况下,通过指针对函数进行两次调用之间的函数调用可以改变指针内容,从而导致调用函数在第二次调用中不同。

由于C的性质,进行适当的别名分析通常是难以处理的,因此不太可能发生这种优化。