小编css*_*yer的帖子

extern C返回类对象

我想要一个插件,在其他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,但其他的呢?

c c++ extern-c

6
推荐指数
1
解决办法
1499
查看次数

g ++和operator <<在评估期间更改值时会产生无意的结果

这是一些简单的代码.

#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 ++做了什么未定义的事情吗?

c++ g++ clang++

3
推荐指数
2
解决办法
95
查看次数

标签 统计

c++ ×2

c ×1

clang++ ×1

extern-c ×1

g++ ×1