能否在 extern "C" 块中运行 C++ 代码?

4

例如

class demo {
public:
    static void printDemo(void)
    {
        std::cout << "Hi there" << std::endl;
    }
};

extern "C"{

void myInterrupt(void)
{
    demo::printDemo();
} 

}

通常情况下,extern "C"用于维护C风格的链接方式,因此myInterrupt的声明与在另一个文件(如startup.S)中声明的中断向量中的声明相匹配,该函数的地址有效地被安装在该向量中。但是,在此块中调用其他的C++函数会对其产生影响吗?

4
"extern C" 只是针对声明起作用,函数内部的代码不受影响。 - Some programmer dude
1
这个语法存在的基本原因是可以的。 - Hans Passant
@HansPassant 或许只是其中一半的原因。该语法允许声明在C中定义的内容,以及定义可以在C中声明的内容。 - aschepler
当然,中断回调函数的操作受到限制 - 但无论编程语言如何,这都是真实存在的。 - Peter
“external “C”” 是关于名称的。它并不意味着“将此代码编译为 C”。 - Pete Becker
1个回答

4

能否在 extern "C" 块内运行 C++ 代码?

能。

该函数具有 C 接口,因此它可以从 C 程序中调用。但其实现可以包含 C++ 代码。

但在此块内调用其他 C++ 函数,是否会影响它?

不会。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接