访问外部" C"来自另一个文件的c ++变量

时间:2016-04-13 20:39:24

标签: c++ scope global extern mingw-w64

我在Windows 7 Pro 64位上使用mingw-w64。在尝试访问外部变量时,经过多次头发撕裂后,我终于到达了这个:

// MultiTest2.h
// Version 1.0.0
// MDJ 2016/04/13

#ifndef MULTITEST2_H
#define MULTITEST2_H

extern "C" {
    int iXfer;
    int setInt();
}

#endif // MULTITEST2_H

不起作用(我使用' extern" C"'而不只是' extern'因为我正在努力建立链接最终汇编代码),但是:

// MultiTest2.h
// Version 1.0.1
// MDJ 2016/04/13

#ifndef MULTITEST2_H
#define MULTITEST2_H

extern "C" int iXfer;
extern "C" int setInt();

#endif // MULTITEST2_H

开始工作了!

仅供参考,系统中的其他两个文件是:

// MultiTest2.cpp
// Version 1.0.0
// MDJ 2016/04/13

#include "MultiTest2.h"

int iXfer = 0;

int setInt() {
    iXfer = 6253;
    return 0;
}

// MultiTest1.cpp
// Version 1.0.0
// MDJ 2016/04/13

#include <iostream>
#include "MultiTest2.h"

using namespace std;

int main() {
    setInt();
    cout << iXfer << endl;
}

使用版本1.0.0的MultiTest2.h(&#39; extern&#34; C&#34;&#39;块中的声明),立即进入:

g++ -S MultiTest2.cpp

结果是:

MultiTest2.cpp:7:5: error: redefinition of 'int iXfer'
 int iXfer = 0;
     ^
In file included from MultiTest2.cpp:5:0:
MultiTest2.h:12:6: note: 'int iXfer' previously declared here
  int iXfer;
      ^

但是,对于MultiTest2.h的1.0.1版本(个别&#39; extern&#34; C&#34;&#39;声明),以下序列完美无缺:

c:\work\gccWork\MultiTest>g++ -S MultiTest2.cpp
c:\work\gccWork\MultiTest>g++ -S MultiTest1.cpp
c:\work\gccWork\MultiTest>g++ -c MultiTest2.s
c:\work\gccWork\MultiTest>g++ -c MultiTest1.s
c:\work\gccWork\MultiTest>g++ -o MultiTest.exe MultiTest2.o MultiTest1.o
c:\work\gccWork\MultiTest>MultiTest
6253

这是某种mingw-w64的特质,还是我在这里缺少什么?

0 个答案:

没有答案