bpo*_*ter 34 c c++ extern extern-c
我写了一个C++函数,我需要从C程序调用.为了使它可以从C调用,我extern "C"在函数声明中指定.然后我编译了C++代码,但编译器(Dignus Systems/C++)为该函数生成了一个错位的名称.所以,它显然没有尊重extern "C".  
为了解决这个问题,我添加extern "C"了函数定义.在此之后,编译器生成了一个可从C调用的函数名.
从技术上讲,extern "C"唯一需要在函数声明中指定.这是正确的吗?(C++ FAQ Lite就是一个很好的例子.)你还应该在函数定义中指定吗?  
这是一个证明这一点的例子:
/* ---------- */
/* "foo.h"    */
/* ---------- */
#ifdef __cplusplus
extern "C" {
#endif
/* Function declaration */
void foo(int);
#ifdef __cplusplus
}
#endif
/* ---------- */
/* "foo.cpp"  */
/* ---------- */
#include "foo.h"
/* Function definition */
extern "C"               // <---- Is this needed?
void foo(int i) {
  // do something...
}
我的问题可能是错误编码的结果,或者我可能发现了编译器错误.在任何情况下,我都想咨询stackoverflow以确保我知道哪种技术上是"正确的"方式.
Mic*_*urr 36
extern "C"只要声明具有它并且已经在定义的汇编中看到,就不应该在函数定义上要求' '.该标准明确规定(7.5/5链接规范):
在看到明确的链接规范之后,可以在没有链接规范的情况下声明函数; 前面声明中明确指定的链接不受此类函数声明的影响.
但是,我通常也把' extern "C"'放在定义上,因为它实际上是一个带有外部"C"连接的函数.很多人讨厌不必要的,冗余的东西是声明(比如加上virtual方法覆盖),但我不是其中之一.