那谁的技术博客

感兴趣领域:高性能服务器编程,存储,算法,Linux内核
随笔 - 210, 文章 - 0, 评论 - 1183, 引用 - 0
数据加载中……

测试了一下VC和gcc对关键字export的支持

<<c++ primer>>里面说,编译模板函数的时候C++支持两种模式,一种是包含模式,就是把模板函数的声明和实现都放在同一个文件里面,我注意到STL就是这样的,而且sgi和vc的实现都是如此,也许是因为早期对模板的支持不太好的缘故吧;另一种是分离编译模式,可以把模板函数的声明和实现分开在头文件和.cpp文件中,此时需要编译器支持关键字export.

测试的代码如下,非常的简单:
头文件里面的声明:
template <class T>
void test(T n);

.cpp文件里面的实现,注意书写的格式:
export // 前面加上关键字export
template <class T>
void test(T n)
{
    std::cout 
<< "n = " << n << std::endl;
}


我用vc和gcc分别的编译了一下,VC(我用的是7.1)中根本就不能识别export关键字,但是gcc下面可以编译过去.但是如果把export关键字去掉那么两个编译器都是可以编译过去的,而且也没有对函数的结果产生影响,这是否说明现在已经不再需要这个export关键字了?

posted on 2006-07-11 19:04 那谁 阅读(3643) 评论(13)  编辑 收藏 引用 所属分类: C\C++

评论

# re: 测试了一下VC和gcc对关键字export的支持  回复  更多评论   

嗯.也许可以说是分离编译的功能已经被支持,但是那个语法标准没有被MS采纳而已.
2006-07-11 19:21 | LOGOS

# re: 测试了一下VC和gcc对关键字export的支持  回复  更多评论   

看看<Exceptional C++ Style>你就会知道目前的编译器基本上都不支持export关键字。
2006-07-11 19:26 | fanofvc

# re: 测试了一下VC和gcc对关键字export的支持  回复  更多评论   

GCC版本是号多少?
2006-07-12 11:33 | 周星星

# re: 测试了一下VC和gcc对关键字export的支持  回复  更多评论   

to 星星,我在win下用的mingw,版本号是3.4.2
2006-07-12 11:50 | 创系

# re: 测试了一下VC和gcc对关键字export的支持  回复  更多评论   

@创系
哦,谢谢,但我这里不行
2006-07-12 17:37 | 周星星

# re: 测试了一下VC和gcc对关键字export的支持  回复  更多评论   

仅仅是可以编译过而已,应该不能用,如果要使用仍需要include .c,失去了隐藏实现的意义。

2006-08-06 19:24 | tango

# re: 测试了一下VC和gcc对关键字export的支持  回复  更多评论   

顺便问一下楼主用什么工具贴的代码?带语法加亮和解析。
有现成的工具或教本嘛?
谢了
2006-08-06 21:12 | tango

# re: 测试了一下VC和gcc对关键字export的支持  回复  更多评论   

@tango
这个blog自带的code功能,也是把我吸引到这里的原因之一:)
2006-08-06 21:59 | 创系

# re: 测试了一下VC和gcc对关键字export的支持  回复  更多评论   

你仅仅声明和实现了模板,没有"具现点",也就是说,没有使用这个模板,那么就不会有连接问题出现,如果你使用这个模板,那么ms的连接器将无法找到这个模板的实现,也就无法具现(instantiate)这个模板,而支持export的编译器将告诉连接器:"这个编译单元里有你要的实现,具现时来找吧",于是问题解决了.
2007-03-20 16:44 | 空见

# re: 测试了一下VC和gcc对关键字export的支持  回复  更多评论   

老大,template只在调用时才会生成。
分离模板是指你在另一个文件 xxx.cpp 中只include 你上边的.h时,也能正常连接通过...

你这个代码都没有生成,怎么能证明不用export ....
2007-03-22 19:24 | 糖菓

# re: 测试了一下VC和gcc对关键字export的支持  回复  更多评论   

谢谢楼上几位朋友的指正~~
2007-03-22 23:17 | 创系

# re: 测试了一下VC和gcc对关键字export的支持  回复  更多评论   

有本书这样写:
//*.h

#if defined USE_EXPORT
#define EXPORT export
#else
#define EXPORT
#endif

EXPORT
/*********some code***********/

#ifnde UES_EXPORT
#include"*.cpp"
#endif
2009-03-23 22:25 | AAA

# re: 测试了一下VC和gcc对关键字export的支持  回复  更多评论   

你的main函数在哪里?一般是连接时出错,undefined reference to xxx
2009-11-10 19:08 | lc

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理