簡體   English   中英

了解高階函數如何在 C 中工作

[英]Understanding how higher order functions work in C

所以通常我會像這樣聲明任何函數指針:

typedef size_t (*hash_function)(const int *);

然后在另一個函數中使用它

HashTable *hash_table_create(const hash_function hash)

所以對於任何滿足 hash_function 定義的函數,如

size_t hash_modulo(const int *parameters)
size_t hash_universal(const int *parameters)
...

我可以將它們用作參數

hash_table_create(hash_modulo)

問題是:我的 IDE (Clion) 抱怨這種情況下的參數不匹配(代碼有效)。 具體來說,它似乎不接受將hash_function作為參數類型傳遞,但如果我使用size_t (*hash_function)(const int *)代替,它會接受。 我在這里缺少什么?

我的代碼是對的而我的 IDE 是錯的,反之亦然?

提前致謝!

編輯 1:確切的錯誤消息是: Types 'hash_function' and size_t(const int *)' are not compatible

編輯 2:這似乎是一個 Clion錯誤

CLion 似乎有一個錯誤(可能)。 函數名稱的類型為size_t(const int *) 現在,由於函數可以隱式轉換為函數指針,因此您的代碼是完全有效的 C。

CLion 語法檢查器可能不會考慮隱式轉換。 如果您從函數名稱中顯式獲取函數指針,則錯誤應該消失:

hash_table_create(&hash_modulo); // Note the ampersand

我認為問題在於您將函數typedefconst

HashTable *hash_table_create(const hash_function hash)

並且您想作為parameters放入的其他函數未聲明為const

size_t hash_modulo(const int *parameters)
size_t hash_universal(const int *parameters)

編輯:

這在 CodeBlocks 中工作正常

改變這個:

size_t hash_modulo(const int *parameters)
size_t hash_universal(const int *parameters)

進入這個:

hash_function hash_modulo;
hash_function hash_universal;

然后這個工作正常:

hash_table_create(hash_modulo);
hash_table_create(hash_universal);

在下面的評論中解釋。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM