为什么标准库函数带有" C"在C ++程序中调用链接?

时间:2014-09-23 18:18:55

标签: c++ linkage

以下程序将默默调用memcpy

struct Test
{
    int d[100000]; // This needs to be here.
};

int main()
{
    Test test[3] {Test(), Test(), Test()};
    // Memcpy called for each element in initializer
    static const Test test2[3] {test[0], test[1], test[2]};
}

使用extern "C"可以更改链接器找到的函数来调用您自己的memcpy

#include <stdint.h>
#include <stddef.h>
extern "C"
void* memcpy(void* dest, const void* src, size_t len)
{
    std::cout << "Custom memcpy called.";
    return dest;
}

这很糟糕。该程序现在在应该使用stnadard库memcpy的位置静默使用此版本的memcpy。难道C ++编译器不应该使用具有C ++链接的函数来避免这种问题吗?

0 个答案:

没有答案