您的位置:首页 > 其它

原来就是你——"extern"

2007-08-13 16:02 169 查看
上次写MyUI代码的时候本来想用几个全局函数和全局变量来着,可是分到几个cpp里死活编译不过,老说变量重复定义;这两天看ogre的代码老是看到extern "C",不知道是啥意思,恩,看来过几天还要把C++再系统地看一遍。

其实问题很简单,原来就是你——"extern"。都是从人家的网站上学回来的,没啥好炫耀的,放在这个给自己当记录啦。

1、声明外部变量


// A.cpp


extern int i;


void main()




...{


i=100;


}




// B.cpp


int i;



上面的是一个正确的例子,A.cpp中的"extern int i;"告诉编译器"i"是在别的文件里声明的全局整型变量。下面看一个稍微有点不同的例子。


// A.cpp


#include "test.h"


int main()




...{


return 0;


}




// test.h


#pragma once


extern char *a;




// test.cpp


char a[9];



请问,这样可以吗?编译器会告诉你不可以,error C2372: 'a' : redefinition; different types of indirection。所以在编程的时候一定要注意类型要一致。

2、在C++文件中调用以C语言方式编译的函数

由于C++面向对象的特性如重载等,它的编译方式不同于C的方式。为了能在C++文件中调用一个C语言方式编译的库中的函数,你必须通知编译器这个“大傻瓜”这是用C方式编译的函数,例子如下:


// A.cpp


extern "C"




...{


void func();


}


void main()




...{


func();


}




// B.c


void func()




...{


}



3、1+2==3

把1和2结合起来就是3的内容。


// A.cpp


extern "C"




...{


// extern int i;


int i;


}


void main()




...{


i=100;


}




// B.c


int i;



注意,extern "C"中的"C"必须是大写的

在用VC6.0编译这个cpp和c共存的文件时还遇到了关于"预编译的头文件"的问题,在工程选项里设置成不使用"预编译头文件"就好了,具体的信息还没学习,以后有空再看啦。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: