标题:关于《C专家编程》中数组和指针的一个问题
只看楼主
youth7
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2017-7-21
结帖率:0
已结贴  问题点数:20 回复次数:9 
关于《C专家编程》中数组和指针的一个问题
《C专家编程》的 第四章中,为了展现指针和数组的不同,作者举了一个例子:在一个文件中声明一个数组,然后在另一个文件中通过指针引用它,然后运行的时候会出现异常的结果。我是这样编写这个例子的程序:
在test.c文件中
char a[3] = {1,2,3};

在main.c文件中
程序代码:
#include<stdio.h> 

int main(void){

 extern char * a;

 printf("%d %d", a, a[0]);

 return 0;
}

在fedora26上用gcc7编译,显示报错说类型冲突:
main.c:4:16: error: conflicting types for ‘a’

我以为是现代的编译器进化了,能够在编译阶段就能识别出类型不匹配的问题。于是又去找了turbo c++ 3来编译,结果还是提示类型不匹配,请问是不是我哪里弄错了呢,要怎么才能重现《C专家编程》中所说的那种异常的情况呢?



此问题已经解决,参照https://www.,同时编译多个文件即可重现书中所说的问题。


[此贴子已经被作者于2017-7-29 19:41编辑过]

搜索更多相关主题的帖子: 专家 编程 指针 文件 编译 
2017-07-29 15:06
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
得分:20 
wenjian1.c
int a[10];

wenjian2.c

int main(void)
{
extern int *a;
return 0;
}

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-07-29 15:20
youth7
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2017-7-21
得分:0 
补充一下,我搜索过这个问题,有其他人是可以重现可以问题,但是是在vc6上面重现的,因为我是win10不想装vc6所以没有尝试这种情况。我手头上的编译器有gcc7、clang8、digital mars,全部试过了但是都是提示类型不匹配因此无法重现书中说的那个例子
2017-07-29 15:23
youth7
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2017-7-21
得分:0 
回复 2楼 renkejun1942
按照你这样确实是可以通过编译,但是我发现你的主文件中没有通过include来引入第1个文件,如果我在主文件中增加include来引入第1个文件的话,还是会继续报错,请问可以详细说明一下吗?



[此贴子已经被作者于2017-7-29 15:40编辑过]

2017-07-29 15:36
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
得分:0 
回复 4楼 youth7
多文件编译。干嘛要include。

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-07-29 15:37
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
得分:0 
你真的知道include是一个什么操作吗?

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-07-29 15:38
youth7
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2017-7-21
得分:0 
回复 5楼 renkejun1942
如果我不include第1个文件,那么在主文件中再使用a的话(例如printf("%d",a)),就会报undefined reference to `a'。如果不需要include的话,我要怎样才能访问第1个文件中的数组a呢?
2017-07-29 15:46
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
得分:0 
两个文件同时编译。

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-07-29 15:50
youth7
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2017-7-21
得分:0 
回复 8楼 renkejun1942
非常感谢,已经通过编译重现了问题,参考了这里https://www.
2017-07-29 16:11
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
得分:0 
回复 9楼 youth7
嗯哼,会自己搜答案,不错哦。

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-07-29 20:32



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-479693-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.255150 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved