host.cpp には次のものがあります。
int main (void)
{
void * th = dlopen("./p1.so", RTLD_LAZY);
void * fu = dlsym(th, "fu");
((void(*)(int, const char*)) fu)(2, "rofl");
return 0;
}
そして p1.cpp は次のとおりです。
#include <iostream>
extern "C" bool fu (float * lol)
{
std::cout << "fuuuuuuuu!!!\n";
return true;
}
(私は意図的にエラーチェックアウトを残しました)
ホスト実行時「ふううううう!!!」完全に異なる関数シグネチャを使用してシンボルへの void ポインターを型キャストしたにもかかわらず、正しく出力されます。
なぜこれが起こったのですか?この動作は異なるコンパイラ間で一貫していますか?