重複の可能性:
関数ポインターを別の型にキャストする
実際には関数ポインター定義よりも少ないパラメーターを取る関数で関数ポインターを初期化すると仮定します。関数ポインターを介して呼び出された場合、関数は引き続き正しく実行されますか?
これをgccで試してみたところ、期待どおりに機能しましたが、その動作がコンパイラ/プラットフォーム間で一貫しているのかどうか疑問に思います(環境によっては、スタックに大混乱をもたらす可能性があると思われます):
#include <stdio.h>
typedef void (*myfun)(int, int, int);
void test_a(int x, int y, int z) {
printf("test_a %d %d %d\n", x, y, z);
}
void test_b(int x, int y) {
printf("test_b %d %d\n", x, y);
}
int main() {
myfun fp;
fp = test_a;
fp(1, 2, 3);
fp = (myfun) test_b;
fp(4, 5, 6);
}