我想要一个插件,在其他C++代码中可以解析更简单的名称.
class B {
};
extern "C" B foo(); // to avoid name mangling in order to be loaded by dlsym
Run Code Online (Sandbox Code Playgroud)
在程序的其他部分(也是在C++中,与插件共享B类的相同定义):
B (*func)();
func = dlsym("/path/to/so", "foo");
B m = func();
Run Code Online (Sandbox Code Playgroud)
这样的代码是否会导致任何问题,即是否允许(通过标准)在extern "C"函数中使用C++类作为参数或返回类型?它似乎适用于我的gcc,但其他的呢?
这是一些简单的代码.
#include <iostream>
using namespace std;
bool func(char* m)
{
*m = '4';
return true;
}
using namespace std;
int main()
{
char c1 = '3';
cout << "a" << c1 << func(&c1) << c1 << "b" << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当使用g ++ -O0(4.7.2)编译时,输出为a413b,对于-O2,输出为a414b.对于clang ++ 3.2,输出为a314b.
我在这部分代码中为c ++做了什么未定义的事情吗?