c++ - extern "C"按着别人博客写的测试程序总是报错?
大家讲道理
大家讲道理 2017-04-17 15:03:40
0
2
635

三个文件:

/* c语言头文件:cExample.h */
#ifndef C_EXAMPLE_H
#define C_EXAMPLE_H
extern int add(int x,int y);     //注:写成extern "C" int add(int , int ); 也可以
#endif
/* c语言实现文件:cExample.c */
#include "cExample.h"
int add( int x, int y )
{
 return x + y;
}
// c++实现文件cppFile.cpp,调用add
extern "C"
{
#include "cExample.h"
}
//注:此处不妥,如果这样编译通不过,换成 extern "C" int add(int , int ); 可以通过
extern "C" int add(int, int);
int main(int argc, char* argv[])
{
    add(2, 3);
    return 0;
}

这都是别人博客的代码,他说不会错,然后我在VS2015运行了,报错,错误 LNK2019 无法解析的外部符号 _add,该符号在函数 _main 中被引用。我换了好几个人博客把代码复制进去都是报同样的错误,我不知道是什么问题,上面注释里的我也试了还是报错。

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全員に返信(2)
Peter_Zhu

エラーが見つかりました。

.c と .h をプロジェクトにドラッグせず、このディレクトリに配置しただけです。解決しました。

いいねを押す +0
Ty80

元の投稿者が自分で問題を解決したのを見ました。ただし、この例は gcc ではまだ間違っています:

リーリー

これは、C++ コンパイラーが cExample.c をコンパイルするときに、C コンパイラーを呼び出して add 関数のコードをコンパイルすることが意図されているにもかかわらず、C++ コンパイラーはこれを認識していないと考えられるためです。 function これは C++ 関数であるため、コンパイル後、add 関数の名前は add に変更されます。このように、cppFile.cpp ファイルで C バージョンの _Z3addii 関数を使用するように指定しても、この関数は実際には存在しないため、未解決の外部シンボルが表示されます。 add

この問題を解決するには、cExample.h ファイルに次のように記述するだけです:

リーリー

cExample.h で宣言された関数が他の C モジュールによって呼び出される場合、厳密な記述方法は次のとおりです:

リーリー

cExample.{h,c} を VS のプロジェクトにドラッグすると問題が解決する理由は不明です。私の推測では、VS はファイル拡張子

を持つファイルを見つけると、自動的に C コンパイラーを使用してそれをコンパイルすると思います。 .c

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!