我跳进winnt.h
,我发现代码如下:
extern "C++" // templates cannot be declared to have 'C' linkage
template <typename T, size_t N>
char (*RtlpNumberOf( UNALIGNED T (&)[N] ))[N];
我想提问如下:
extern "C++"
如何运作?对于问题3,我的意思是我可以将模板的declearation和定义分开,然后为模板生成动态链接,而不使用这个技巧实际给出实现吗?
答案 0 :(得分:23)
嗯,extern "C++"
当然不会在C中工作(虽然有些编译器可能支持它作为扩展)。因此,只有在C ++中使用它才有意义。
那是因为在多个嵌套的extern链接说明符的情况下,最里面的一个生效。因此,如果您有一个用extern "C"
包围的头文件,您可以使用extern "C++"
暂时中断它并使用C ++链接声明某些内容。
当您想为C ++库提供通常的C接口时,它最有意义,但您也想为在C ++中实际使用它的人提供C ++帮助程序位。因此,您将#ifdef __cplusplus \ extern "C" { \ #endif
作为整体放在标题周围,然后ifdef-in使用extern "C++"
来恢复到C ++链接。
答案 1 :(得分:5)