C互換関数(この場合は(int, int) -> int
)を持つC++関数をCシンボルとしてエクスポートすることはできますか?あなたが気をつけなければならない隠された落書きがありますか?C++関数をextern "C"として再エクスポートするために関数を割り当てます。
次のコードは警告なしでコンパイルされ、結果ファイルには2つのシンボルが公開されています。
私はそれがまったくコンパイルされていることに驚きました。なぜなら、私は関数をコピーすることが何を意味するのか分からないからです。
namespace simplemath {
int add(int x, int y) {
return x + y;
}
}
extern "C" auto add = simplemath::add;
$ clang++ -Wall -Werror -pedantic --std=c++11 -c example.cc
$ nm example.o
0000000000000000 T __ZN10simplemath3addEii
0000000000000018 D _add
下記(simplemath::add
か否かがインライン化さまで)に相当する上記のコードはありますか?あなたは
$ clang++ -Wall -Werror -pedantic -c example.cc
$ nm example.o
0000000000000020 T __ZN10simplemath3addEii
0000000000000000 T _add
最初の例は、関数がオーバーロードされていない場合にのみ機能します – NathanOliver