(代碼示例尚未進行測試 - 只要是例如)警告:通過函數表初始化從兼容的指針類型在C
我有幾個聲明像這樣:
void (* const a[])(void) = {func1, func2};
void func1() {};
void func2() {};
a[0]();
即編譯(如果它是真實的代碼...),應該運行func1。
但是,如果我想傳遞參數,如:
a[0](int 10);
然後我改變我的聲明:
void (* const a[])(int) = {func1, func2};
void func1(int foo) {};
void func2(int foo) {};
a[0](10);
這也編譯,但我得到以下警告:
warning: initialisation from incompatible pointer type.
生成的代碼也運行良好,但我懷疑聲明是錯誤的。 我可以找到幾個關於如何構建函數表的例子,這些函數表不會傳遞參數,但我正在努力尋找一個示例來展示如何使用它。
請使您的[代碼示例](http://sscce.org/)完整和代表(這並不意味着發佈您的所有代碼)。 – outis 2011-12-17 19:33:17
對不起,這個不好的例子;根據以下公認的答案,寫了一個正確的答案,然後立即找到答案。 – 2011-12-19 15:21:15