重複の可能性:
K&R の例をコンパイルする際の問題
最近、私は K&R の C プログラミング言語に取り組んでいます。
セクション 5.11 では、関数へのポインターについて説明し、その例 (使用したい比較関数へのポインターを提供するクイックソートの実装) を入力した後、コンパイラーから警告が表示されます: 条件式のポインター型の不一致. (私のコンパイラは OS X 10.5.6 の gcc 4.0.1 です)
警告をトリガーする例の行は次のとおりです。
qsort((void **) lineptr, 0, nlines-1,
(int (*)(void*, void*))(numeric ? numcmp : strcmp));
プログラムはセグメンテーション フォールトなしで実行されますが、できる限りすべての警告を滑らかにするか、少なくともその原因を理解したいと思っています。
numcmp の関数宣言は次のようになります。
int numcmp(char *, char *);
しかし、マンページによると、stcmp には次の署名があります。
int strcmp(const char *s1, const char *s2);
メソッドのシグネチャがわずかに異なるため、警告は単純ですか? 警告を無視すると、どのような結果になりますか?