Kiedy przeglądając projekt standardu (N4527), znalazłem następujący akapit ([alg.c.library]):Jaki jest cel extern C i C++ dla pojedynczej funkcji (bsearch/qsort)?
Funkcja Podpis:
bsearch(const void *, const void *, size_t, size_t, int (*)(const void *, const void *));
otrzymuje dwie deklaracje:
extern "C" void* bsearch(const void* key, const void* base, size_t nmemb, size_t size, int (*compar)(const void*, const void*)); extern "C++" void* bsearch(const void* key, const void* base, size_t nmemb, size_t size, int (*compar)(const void*, const void*));
I ten sam materiał dla qsort
.
ja również znaleźć w [dcl.link]:
Jeśli dwie deklaracje zadeklarować funkcje o tej samej nazwie i-parametru typu listy (8.3.5) być członkami tej samej przestrzeni nazw lub zadeklarować przedmioty z tą samą nazwą, aby być członkami tej samej przestrzeni nazw, a deklaracje nadawały nazwom różne powiązania językowe, program jest źle sformułowany;
Jaki jest cel tych dwóch deklaracji extern
o tej samej funkcji? Dlaczego ten blok nie jest źle sformułowany?
Który standard wybierasz? Wydaje się, że się zmieniło, ponieważ jeśli dobrze rozumiem ['[extern.names]/4'] (http://eel.is/c++draft/extern.names#4), jest to definicja zdefiniowana, jeśli te funkcje są oznaczone "extern". – Rakete1111
@ Rakete1111 N4527 – Holt