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...
}
Run Code Online (Sandbox Code Playgroud)
我的问题可能是错误编码的结果,或者我可能发现了编译器错误.在任何情况下,我都想咨询stackoverflow以确保我知道哪种技术上是"正确的"方式.
Mic*_*urr 36
extern "C"只要声明具有它并且已经在定义的汇编中看到,就不应该在函数定义上要求' '.该标准明确规定(7.5/5链接规范):
在看到明确的链接规范之后,可以在没有链接规范的情况下声明函数; 前面声明中明确指定的链接不受此类函数声明的影响.
但是,我通常也把' extern "C"'放在定义上,因为它实际上是一个带有外部"C"连接的函数.很多人讨厌不必要的,冗余的东西是声明(比如加上virtual方法覆盖),但我不是其中之一.
| 归档时间: |
|
| 查看次数: |
19273 次 |
| 最近记录: |