簡體   English   中英

使用指向c ++函數的指針調用qsort

[英]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.

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