ちょっと私のCプログラムでコールバックを実装しました。Cコールバック - オプションの引数?
typedef void (*server_end_callback_t)(void *callbackArg);
その後、私は私がvoid *callbackArg
をスキップして、コードが正しく動作on_server_end
コールバック関数の実装(エラーなし)に渡すことができるということに気づいた何
server->server_end_callback = on_sever_end;
このコールバックを格納する構造体の内部変数を持っています。
void *
のようないくつかの引数をスキップして、プロトタイプがそのような引数をとるコールバック関数を実装するのは正しいですか?
私はあなたのコンパイラが文句を言っていないことに驚いています。いいえ、正しいものではありません。また、呼び出し先がスタックをクリーンアップするアーキテクチャによっては、間違いなくクラッシュします。 – spectras
あなたのコンパイラは、次のようなものを与えるべきです:_warning:互換性のないポインタからの初期化type_エラーは... – LPs
Cで「オプション」引数を安全かつ移植可能に指定する唯一の方法は省略記号 '...'を使用することです。 –