C++ 中 extern "C"的问题

umbrook 2008-09-09 12:13:33
各位好:
我这样用
extern "C"
{
const IID IID_IC;
const CLSID CLSID_Component3;
};

这样用:

extern "C" const IID IID_IC;
extern "C" const CLSID CLSID_Component3;

如果是一般的使用,2者都能编译通过并且能够运行。
但是当我使用了智能指针之后。
VC9.0 报一个错误Compiler Error C2970:
摘自MSDN:
You cannot use the name or address of a static variable as a template argument. The template class expects a const value that can be evaluated at compile time.
意思大概就是说模板需要的是一个常量,而不接收static的变量。
我跟踪代码之后,发现如果是第一种情况的话,
IID_IC的类型就变成了static const IID。

问题:
为什么加了作用域之后IID_IC变成了static类型的。
谁能帮我解疑么?分不多,尽量给。
...全文
144 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
weiyijiji 2008-09-09
  • 打赏
  • 举报
回复
up
太乙 2008-09-09
  • 打赏
  • 举报
回复
帮up~
xkyx_cn 2008-09-09
  • 打赏
  • 举报
回复
另一个帖子我回了,lz来讨论一下吧

[Quote=引用 9 楼 umbrook 的回复:]
引用 6 楼 xkyx_cn 的回复:
extern "C" 是用来修饰函数的,不应用来修饰变量

但为什么加了extern "C" {....}后里面的变量变成了static,智能指针无法编译。
但每一个变量 单独使用 extern "c" const IID IID_IX;extern "C" const IID IID_IY;智能指针却能使用呢?
我想搞明白的是这个。
[/Quote]
antimatterworld 2008-09-09
  • 打赏
  • 举报
回复
期待高手出来
umbrook 2008-09-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 xkyx_cn 的回复:]
extern "C" 是用来修饰函数的,不应用来修饰变量
[/Quote]
但为什么加了extern "C" {....}后里面的变量变成了static,智能指针无法编译。
但每一个变量 单独使用 extern "c" const IID IID_IX;extern "C" const IID IID_IY;智能指针却能使用呢?
我想搞明白的是这个。
umbrook 2008-09-09
  • 打赏
  • 举报
回复
extern "C" 保证了以c的方式调用,这样能保证一定的2进制的兼容。
之所以用exertn "C" 里面的一些IID 是被其他头文件,比如接口客户端等共享的。
umbrook 2008-09-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 richbirdandy 的回复:]
。。。信息不全 真以为能管中窥豹么
[/Quote]
你需要什么样子信息?我的问题描述为为什么加了extern "C"{...} 里面的变量为什么在VC9.0中自己写的智能指针里变成了Static的。
xkyx_cn 2008-09-09
  • 打赏
  • 举报
回复
extern "C" 是用来修饰函数的,不应用来修饰变量
帅得不敢出门 2008-09-09
  • 打赏
  • 举报
回复
const IID IID_IC;
const CLSID CLSID_Component3;
定义在哪里? IID CLSID是啥
richbirdandy 2008-09-09
  • 打赏
  • 举报
回复
。。。信息不全 真以为能管中窥豹么
SenerityChzr 2008-09-09
  • 打赏
  • 举报
回复
帮顶……

64,676

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧