2015-06-14 54 views
1

我想创建一个函数常量指针数组。 事情是这样的:函数常量指针阵列

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

int f(int x); 
int g(int x); 
const int (*pf[ ])(int x) = { f, g }; 

int main(void) 
{ 
    int i, x = 4, nf = 2; 
    for(i = 0; i < nf; i++) 
     printf("pf[ %d ](%d) = %d \n", i, x, pf[ i ](x)); 
    return EXIT_SUCCESS; 
} 

int f(int x) 
{ 
    return x; 
} 
int g(int x) 
{ 
    return 2*x; 
} 

当它没有-Werror标志编译它的工作原理“精”,但除此之外,我得到:提前

Building file: ../src/probando.c 
Invoking: GCC C Compiler 
gcc -O0 -g3 -pedantic -pedantic-errors -Wall -Wextra -Werror -Wconversion -c -fmessage-length=0 -MMD -MP -MF"src/probando.d" -MT"src/probando.d" -o "src/probando.o" "../src/probando.c" 
../src/probando.c:17:14: error: type qualifiers ignored on function return type [-Werror=ignored-qualifiers] 
../src/probando.c:17:1: error: initialization from incompatible pointer type 
../src/probando.c:17:1: error: (near initialization for ‘pf[0]’) 
../src/probando.c:18:1: error: initialization from incompatible pointer type 
../src/probando.c:18:1: error: (near initialization for ‘pf[1]’) 

cc1: all warnings being treated as errors 
make: *** [src/probando.o] Error 1 

感谢。

回答

4

const错位。就目前而言,函数应该返回const int(这没有多大意义)。你想要的是:

int (*const x[])(int) 

这样记载:阵列的“常量指针功能”。

+0

非常感谢。呵呵我试着用:int(const * x [])(int) – jruiz