2013-08-24 8 views
8

何よりも好奇心の問題。関数ポインタ付き複数の関数ポインタを型定義なしで1行に宣言するにはどうすればよいですか?

int a = 1, b = 2; 

:基本的に私はそれがラインに複数の関数ポインタを宣言することができます場合は、のようなものを知りたいですか? typedefに頼ることなく

私はvoid (*foo = NULL, *bar = NULL)(int)を試しました。これはうまくいきませんでした。

+0

私が正しく推測している間、私は(正当な理由で)見たことがない、または前にこれを試したことがあります。 – chris

+0

難読化されたコードの世界では強力です... #defaultを6つのアンダースコアとして表現する必要があります。 –

答えて

10

は試してみてください。

void (*a)(int), (*b)(int); 

void test(int n) 
{ 
    printf("%d\n", n); 
} 
int main() 
{ 
    a = NULL; 
    a = test; 
    a(1); 
    b = test; 
    b(2); 
    return 0; 
} 

EDIT:

は別の形態は、関数ポインタの配列です:

void (*fun[2])(int) = {NULL, NULL}; 

void test(int n) 
{ 
    printf("%d\n",n); 
} 
int main() 
{ 
    fun[0] = NULL; 
    fun[0] = test; 
    fun[0](1); 
    fun[1] = test; 
    fun[1](2); 
} 
+1

はい 'test(){}'の後にあなたの宣言を '' void(* a)(int)= test、(* b)(int)= test; '](http:// codepad.org/XkYPuwer) –

+0

@GrijeshChauhan私はちょうど編集した2番目のフォームは、RDが何を望んでいるのだろうと思う。 – vvy

+0

が良いかもしれませんが、優秀な回答です。 –

4
void (*foo)(int) = NULL, (*bar)(int) = NULL; 

またはGrijeshが言うように、次のように

int main(void) { 
    int a[5], b[55]; 
    int (*aa)[5] = &a, (*bb)[55] = &b; 
    return 0; 
} 
+1

同様に、配列の宣言にポインタを追加したいかもしれません: 'int(* a)[5]、(* b)[7];'ここには[コードパスリンクです](http://codepad.org/ –

+0

いいえ、コードパッドのリンクを開いている配列については言及していません。 –

+0

ありがとうGrijesh;) –

関連する問題