只見按下面的步驟一些BSD代碼:typedef int function(void *)是什麼意思?
typedef int driver_filter_t(void*);
這是什麼意思,到底是什麼?我不認爲這是一個函數指針,否則它會像typedef int (*driver_filter_t)(void*)
,對吧?
只見按下面的步驟一些BSD代碼:typedef int function(void *)是什麼意思?
typedef int driver_filter_t(void*);
這是什麼意思,到底是什麼?我不認爲這是一個函數指針,否則它會像typedef int (*driver_filter_t)(void*)
,對吧?
typedef int driver_filter_t(void*);
這是一個函數類型的定義。它使driver_filter_t
成爲可被描述爲「函數返回int
,類型指針參數爲void
」的類型的別名。
至於所有typedef
s,它爲現有類型創建別名,而不是新類型。
driver_filter_t
是不是指針類型。你不能聲明類型爲driver_filter_t
的東西(該語法不允許使用typedef名稱聲明函數)。你可以聲明一個對象,這是一個函數指針,例如:
driver_filter_t *func_ptr;
因爲你不能沒有添加*
表示指針類型直接使用的函數類型的名稱,它可能更常見的定義typedef
小號對於函數指針類型,例如:
typedef int (*driver_filter_pointer)(void*);
但是對於函數類型的typedefs是完全合法的,我個人覺得它們更清晰。
typedef int driver_filter_t(void*);
是一個函數類型的typedef。在C中,您可以將它用於函數指針,如driver_filter_t* fn_ptr
。
在C++中也可以使用該類型定義來聲明成員函數(但不執行這些):
struct Some {
driver_filter_t foo; // int foo(void*);
driver_filter_t bar; // int bar(void*);
};
嗨Maxim。只是我的意見,但是OP專門爲C標記了這個問題。有趣的是,您可以在展示時爲C++聲明成員函數。但是,我認爲這可能會導致熟悉C語言的人感到困惑 - 尤其是因爲您不能在C語言中使用該語法。 –
@embedded_guy困惑的人會在這裏澄清他們。 –
您也可以使用typedef來代替C中的函數聲明,例如'driver_filter_t filterA,filterB,filterC;'代替'int filterA(void *); int filterB(void *); ...' – tab
很好的答案。我希望K&R在他們的書中更多地關注這類事情,而不是通過語言衝刺。 實際上,使用函數類型的typedef和函數指針的typedef會有什麼區別,因爲無論如何你都會處理指針?對於前者你有什麼可以做的,你不能對後者做什麼? 非常感謝! – Martin