C与C++混合编程的问题

我需要在C++中引用C中定义的全局变量,建立Win32 Console Application工程,工程中包含的三个文件的源代码如下:
/*c语言头文件:cExample.h*/
#ifndef C_EXAMPLE_H
#define C_EXAMPLE_H
extern int a;
extern int b;
extern int x;
extern void add();
#endif

/*c语言实现文件:cExample.c*/
#include "cExample.h"
int a=1;
int b=2;
int x=0;
void add()
{
x=a+b;
}

/*c++实现文件:cppFile.cpp*/
#include <stdio.h>
extern "C"
{
#include "cExample.h"
}
void main()
{
void add();//调用cExample.c中的add函数
printf("x=%d\n",x);//引用c语言中定义的全局变量x
}
程序的运行结果是x=0,请问这是为什么?
在C++中调用add函数后,全局变量x应该被赋值为3呀!
求教在C与C++混合编程时,应该如何引用全局变量在两种语言间传递数值?

问题出在主函数你对add函数的调用上。
void main()
{
void add();//调用cExample.c中的add函数,是你的本意,可编译器在这里认为你是声明了一个函数void add()正确使用方法是add();不要前面的void.
printf("x=%d\n",x);//引用c语言中定义的全局变量x
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-10-18
先存疑吧。 别搞这种没实际意义,只把脑子搞乱的例子!
你换个编译器没准就可以了,呵呵。

把cExample.c的定义改一下:
static int a=1;
static int b=2;
static int x=0;
第2个回答  2008-10-18
只是全局变量的初始化顺序不对.
相似回答