智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 955|回复: 2
打印 上一主题 下一主题

[软件类] 软件LINK

[复制链接]

3

主题

17

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
262
威望
141
贡献
51
兑换币
77
注册时间
2014-3-3
在线时间
35 小时
毕业学校
中国民航大学
跳转到指定楼层
1#
发表于 2014-4-26 09:31:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
10贡献
工程只有一个文件LINK正确,可以使用。但多个文件LINK就是失败。

附件: 您需要 登录 才可以下载或查看,没有帐号?注册
回复

使用道具 举报

3

主题

17

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
262
威望
141
贡献
51
兑换币
77
注册时间
2014-3-3
在线时间
35 小时
毕业学校
中国民航大学
2#
 楼主| 发表于 2014-4-26 09:38:39 | 只看该作者
首先,extern和static完全不同,extern不能定义一个变量,extern表示的是“已经存在一个变量,但是不在当前的编译单元内,需要在其他编译单元中寻找。”static会定义一个变量,但是分成多种情况。
---------------------------------------------------------------------
先说extern 和 变量的关系。

先说只有一个文件(编译单元)的:
int i=10; //这个是定义一个全局变量,值为10
extern int i=10;  //这个是错误的,变量已经存在,怎么赋初值呢?
extern int i; //这个和第一句 int i=10; 可以同时存在在一个文件中。

再说跨文件(多个编译单元)的:
文件一:(假设这个文件没有错误!!)
int a=10;
文件二:
extern int a; // 这个正确
extern float a; // 这个编译不会错,赋值会怎样呢?
extern int b; //这个找不到
int a=9; //这个出错,全局变量多次定义
int a; //同上
static int a=9; //这个正确,这个产生一个仅在文件二中有效的全局变量a,初值为9,注意在文件二中将看不到那个值为10的全局变量!!!!

static就是刚才说的最后一种,此外就是函数内的使用了,不再多说了。
特别的,这样是错误的:
a.c:
static int x=10;
b.c:
extern int x; //因为x只在a.c中,b.c中根本看不到x,所以这个extern还是找不到x,因此会在链接时报错。
其他:extern尽量写到.h文件中,写到.c里就是错误的种子,以后它只能得到苦果!
回复

使用道具 举报

3

主题

17

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
262
威望
141
贡献
51
兑换币
77
注册时间
2014-3-3
在线时间
35 小时
毕业学校
中国民航大学
3#
 楼主| 发表于 2014-4-26 09:41:18 | 只看该作者
首先,extern和static完全不同,extern不能定义一个变量,extern表示的是“已经存在一个变量,但是不在当前的编译单元内,需要在其他编译单元中寻找。”static会定义一个变量,但是分成多种情况。
---------------------------------------------------------------------
先说extern 和 变量的关系。

先说只有一个文件(编译单元)的:
int i=10; //这个是定义一个全局变量,值为10extern int i=10;  //这个是错误的,变量已经存在,怎么赋初值呢?
extern int i; //这个和第一句 int i=10; 可以同时存在在一个文件中。

再说跨文件(多个编译单元)的:
文件一:(假设这个文件没有错误!!)
int a=10;
文件二:
extern int a; // 这个正确
extern float a; // 这个编译不会错,赋值会怎样呢?
extern int b; //这个找不到
int a=9; //这个出错,全局变量多次定义int a; //同上
static int a=9; //这个正确,这个产生一个仅在文件二中有效的全局变量a,初值为9,注意在文件二中将看不到那个值为10的全局变量!!!!

static就是刚才说的最后一种,此外就是函数内的使用了,不再多说了。
特别的,这样是错误的:
a.c:
static int x=10;
b.c:
extern int x; //因为x只在a.c中,b.c中根本看不到x,所以这个extern还是找不到x,因此会在链接时报错。
其他:extern尽量写到.h文件中,写到.c里就是错误的种子,以后它只能得到苦果!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-6-17 23:52 , Processed in 0.040247 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表