[英]calling qsort with a pointer to a c++ function
我找到了一本書,指出如果你想使用C標准庫中的函數,它將函數指針作為參數(例如qsort),你想要傳遞函數指針的函數需要是一個C函數因此聲明為extern“C”。
例如
extern "C" {
int foo(void const* a, void const* b) {...}
}
...
qsort(some_array, some_num, some_size, &foo);
如果這只是錯誤的信息,我不會感到驚訝,但是 - 我不確定,所以:這是正確的嗎?
這是不正確的信息。
當您需要將C ++庫鏈接到C二進制文件時,需要使用extern C
它允許C鏈接器查找函數名稱。 這不是函數指針的問題(因為函數未在C代碼中通過名稱引用)。
很大程度上取決於您是否對正在使用的編譯器的實際答案感興趣,或者您是否關心涵蓋所有可能符合C ++的實現的理論答案。 理論上這是必要的。 實際上,你通常可以在沒有它的情況下順利過關。
真正的問題是你的編譯器是否使用不同的調用約定來調用全局C ++函數,而不是調用C函數。 大多數編譯器使用相同的調用約定,因此調用將在沒有extern "C"
聲明的情況下工作。
雖然標准不保證,但理論上可能有一個編譯器使用不同的調用約定。 至少隨便,我不知道這樣的編譯器,但考慮到周圍的編譯器數量,如果有一個我不知道的東西,我不會感到驚訝。
OTOH,它確實提出了另一個問題:如果您使用的是C ++,為什么要使用qsort
呢? 在C ++中, std::sort
幾乎總是更好 - 更容易使用,通常也更快。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.