5
-pedantic -Wall
とgcc
とclang
の両方を使用して、エラーまたは警告なしにコンパイルすることに気がつきました。関数のパラメータとしての関数
#include <stdio.h>
int x = 0;
void func(int f(const char *)) {
f("func()!");
}
int main(void) {
func(puts);
}
パラメータf
が、この場合にint (*)(const char *)
を関数へのポインタのように扱われていることが表示されます。
しかしこれは私が一度も見たことがない、または聞いたことのない行動です。この正当なCコードですか?もしそうなら、関数のパラメータとしての関数を持っているとどうなりますか?
ファンクションポインタは有効なパラメータです。たとえば、さまざまなコールバック関数を渡すことができます。それらを受け取る関数は、その関数を呼び出すことができます。問題はありません。 –
この場合、パラメータの型は "関数へのポインタ"ではなく、 "int(* f)(const char *)"として宣言されています。 – wefwefa3
これは構文的な砂糖であり、宣言を読みやすくすることができます。重複した質問の受け入れられた答えに対する最初のコメントを見てください。 –