请高手帮忙消除Warning: initialized and declared `extern'

ghlanmao 2004-12-06 01:12:26
请各位高手指教在保留-Wall的情况下,如何消除警告:
xxx initialized and declared `extern'

code:extern "C" struct xxx myStruct[] = {...};
...全文
2410 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
pacman2000 2004-12-08
  • 打赏
  • 举报
回复
extern "C" 用在函数上啊,变量名称本来就不会被编译器扩展。
datuhao 2004-12-08
  • 打赏
  • 举报
回复
这个应该和gcc或g++关系不大吧。

不过extern "C"一般主要用在不同语言之间函数的共享,变量的话似乎没有必要这样使用吧?
xtzyz 2004-12-08
  • 打赏
  • 举报
回复
你用gcc还是g++编译
datuhao 2004-12-08
  • 打赏
  • 举报
回复 1
extern是声明的语法,而非定义,即通知编译器,此处只是该变量(或函数,但是函数一般不使用extern)的声明,不会分配内存,而真正的定义在别处。

extern "Language Name" 则表示是某种语言的变量声明。

所以,这并不是编译器的bug,编译器给出的警告是正确的,因为你在该处对变量进行了初始化,这会强制编译器分配内存并初始化,而这可能会导致错误(因为你可能在别处定义了这个变量)。而加上大括号以后,只是对编译器的一种欺骗,但是真正错的仍然是你,而非编译器:)
ghlanmao 2004-12-07
  • 打赏
  • 举报
回复
呵呵,我不是要申明或定义一个外部变量,而是定义一个不使用c++特性的变量,并给它赋初值。。。。问题昨天已经解决了。实际上这算是gcc的一个小bug吧。
extern "C"
{
struct xxx myStruct[] = {...};
}
这样就不会报告警告了。。。。。
datuhao 2004-12-06
  • 打赏
  • 举报
回复
是说你声明一个全局变量时对他进行了初始化。

如果你是想在此定义一个外部变量的话,没有必要加extern;
如果只是个声明,那么不要对他进行初始化。

23,114

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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