2016-10-21 142 views
5

我剛剛注意到這個編譯沒有任何錯誤或警告使用-pedantic -Wallgccclang函數作爲參數

#include <stdio.h> 

int x = 0; 

void func(int f(const char *)) { 
    f("func()!"); 
} 

int main(void) { 
    func(puts); 
} 

看來,參數f就像指針處理在這種情況下發揮作用int (*)(const char *)

但這是一種我從未見過或聽說過的行爲。這是合法的C代碼嗎?如果是的話,當你有一個函數作爲函數的參數時會發生什麼?

+1

函數指針是有效的參數,你可以傳遞不同的回調函數。接收它們的函數然後可以調用該函數,在那裏沒有問題。 –

+1

在這種情況下,參數的類型被寫爲「函數」,而不是「指向函數的指針」,在這種情況下,它將被聲明爲「int(* f)(const char *)」。 – wefwefa3

+0

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

回答