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
這是句法糖,可以使聲明更容易閱讀。查看重複問題的接受答案的第一條評論。 –