c中声明和定义问题!!!!

snakeloveist 2010-02-11 11:15:39
在data.h头文件中申明两个全局变量:
extern int a;
extern int b;
在data.c中定义该两个整形变量:
#include "data.h"
int a;
int b;
然后在另外一个.c文件中使用该ab变量包含了头文件data.h
然后编译出错:
expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
请教大家!
...全文
131 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
谭海燕 2010-02-12
  • 打赏
  • 举报
回复
引用 13 楼 snakeloveist 的回复:
在头文件里申明extern 不是更加方便吗?而且以后哪个文件要用的话 直接包含该头文件就行了?
我想知道我上诉的出错原因在哪里?
请高手赐教



头文件中申明extern,其实只是为了告诉编译器:恩,我告诉你,这个函数是定义在别的文件中,不要大惊小怪的。

你别忘了,头文件也是一个文件,跟.c文件是分开的。

那么,真正起作用的是在.c文件中的那个extern.

extern之后的所哟地方都可以使用该函数。
如果你把函数调用卸载头文件中,就不会出错。

虽然头文件include后被扩展,但是并不是简单的想宏一样直接放进来,放进来之后,好想就是一体的。
不是这样的
snakeloveist 2010-02-12
  • 打赏
  • 举报
回复
在头文件里申明extern 不是更加方便吗?而且以后哪个文件要用的话 直接包含该头文件就行了?
我想知道我上诉的出错原因在哪里?
请高手赐教
谭海燕 2010-02-11
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20100128/20/f88b3b1f-4da3-43e5-8a62-8c6bee13deb0.html
就是这个贴。楼主的那种.c文件中没有extern就跟没有include是一样的
谭海燕 2010-02-11
  • 打赏
  • 举报
回复
引用 5 楼 shengjiejun 的回复:
看编译器反馈没有说是a,b出问题了。。。问题在其他地方吧


可以看看最近CSDN C或者是linux最近的帖子,我在里面做出了回复。。。总结了出线上述错误的原因和解决办法
ZhijieLi86 2010-02-11
  • 打赏
  • 举报
回复
看编译器反馈没有说是a,b出问题了。。。问题在其他地方吧
谭海燕 2010-02-11
  • 打赏
  • 举报
回复
引用楼主 snakeloveist 的回复:
在data.h头文件中申明两个全局变量:
extern int a;
extern int b;
在data.c中定义该两个整形变量:
#include "data.h"
int a;
int b;
然后在另外一个.c文件中使用该ab变量包含了头文件data.h
然后编译出错:
expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
请教大家!



我晕。。。你这都可以。。
你必须在.c文件中再次extern 才可以。。。
snakeloveist 2010-02-11
  • 打赏
  • 举报
回复
以前 a和b是两个整形指针
小菜_默 2010-02-11
  • 打赏
  • 举报
回复
照你的描述我看不出来问题~~嘿嘿~~
nevil 2010-02-11
  • 打赏
  • 举报
回复
貌似不是变量的问题.查一下你的程序是否有什么地方写错了.
谭海燕 2010-02-11
  • 打赏
  • 举报
回复
引用 11 楼 snakeloveist 的回复:
定义变量不是最好放在.c文件吗?
声明变量我就放在h文件里(这里是全局我就申明为extern),然后要使用的时候不就直接包含头文件就ok了?
我不知道这种方式哪里不对?
请高人赐教啊



详情参阅谭浩强《C语言程序设计》。


关于extern的用法。已经说得很详细了,说明了如何引用其他文件定义的变量。

LZ自己翻翻就知道了。网上也有电子版的《C语言程序设计》


里面讲到的也就是在使用的.c文件中extern


吃C语言这碗饭的,谭浩强的《C语言程序设计》要烂熟于心。
snakeloveist 2010-02-11
  • 打赏
  • 举报
回复
定义变量不是最好放在.c文件吗?
声明变量我就放在h文件里(这里是全局我就申明为extern),然后要使用的时候不就直接包含头文件就ok了?
我不知道这种方式哪里不对?
请高人赐教啊
谭海燕 2010-02-11
  • 打赏
  • 举报
回复
引用 8 楼 snakeloveist 的回复:
但是我c文件里面包含了
#include "data.h"
这样不行吗?
我先看下帖子,那这样不是很麻烦,每次都要自己声明extern,我就想全部写在h文件里面 然后包含就ok了啊



LZ,,你试试看就知道了。。
哈哈。。
不参与激烈争论


呵呵。
ZhijieLi86 2010-02-11
  • 打赏
  • 举报
回复
引用 7 楼 feiyinzilgd 的回复:
http://topic.csdn.net/u/20100128/20/f88b3b1f-4da3-43e5-8a62-8c6bee13deb0.html
就是这个贴。楼主的那种.c文件中没有extern就跟没有include是一样的

include之后会在编译器会在预编译的时候把include的文件完全展开,所以会重复了
snakeloveist 2010-02-11
  • 打赏
  • 举报
回复
但是我c文件里面包含了
#include "data.h"
这样不行吗?
我先看下帖子,那这样不是很麻烦,每次都要自己声明extern,我就想全部写在h文件里面 然后包含就ok了啊

23,120

社区成员

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

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