標準(N4527)のドラフトを閲覧、私は、次の段落を発見した([alg.c.library]):単一の関数(bsearch/qsort)のextern C AND C++の目的は何ですか?
関数シグネチャ:
bsearch(const void *, const void *, size_t, size_t, int (*)(const void *, const void *));
することによって置換されます2つの宣言:
qsort
ため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はまた、[dcl.link]に見出される:2つの宣言が同じ名前空間のメンバーであるか、またはオブジェクトを宣言するために、同じ名前、パラメータ型リスト(8.3.5)を用いて関数を宣言した場合
同じ名前空間のメンバーであることと同じ名前で、宣言は異なる言語のリンケージに名前を付けます。プログラムは不正です。
これらの2つの目的は同じ機能を宣言したものですか?extern
なぜこのブロックは悪質なものではないのですか?
どのスタンダードをターゲットにしていますか?私は['[extern.names]/4'](http://eel.is/c++draft/extern.names#4)を正しく理解していれば、それらの関数が「extern」と記されている。 – Rakete1111
@ Rakete1111 N4527 – Holt