| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 463 人关注过本帖
标题:一个枚举类型的疑惑
只看楼主 加入收藏
xzy199999
Rank: 4
等 级:业余侠客
帖 子:326
专家分:286
注 册:2010-11-19
结帖率:92.45%
收藏
已结贴  问题点数:20 回复次数:6 
一个枚举类型的疑惑
今天程序编译过程中,发现一个狠奇怪的事情,老是报语法错误。我跟踪后发现,是因为又一个变量重复定义,具体如下:
#include <stdio.h>
#define A 10
enum
{
    A,
    B
}x;
int main()
{
    printf("A=%d",A);
    return 0;
}
后来我发现不对,因为答案上就是这么写的,没问题啊。
后来我把改成:
#include <stdio.h>
enum
{
    A,
    B
}x;
#define A 10
int main()
{
    printf("A=%d",A);
    return 0;
}
就没问题了,
本来是变量重复定义了,改了顺序以后不一样重复定义么?为什么就不一样了呢?

[ 本帖最后由 xzy199999 于 2011-8-10 10:19 编辑 ]
搜索更多相关主题的帖子: include return 
2011-08-10 09:37
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你使用一下这些数据看有什么现象

授人以渔,不授人以鱼。
2011-08-10 09:41
xzy199999
Rank: 4
等 级:业余侠客
帖 子:326
专家分:286
注 册:2010-11-19
收藏
得分:0 
回复 2楼 TonyDeng
用了,输出A=10

我是初学者
2011-08-10 10:17
xzy199999
Rank: 4
等 级:业余侠客
帖 子:326
专家分:286
注 册:2010-11-19
收藏
得分:0 
怎么没人

我是初学者
2011-08-10 10:39
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:20 
明白原理就知道为什么了。

#define A 10
这个是宏,编译器在编译你的代码文件时,会把这句之后所有的A替换为10,因此在后面enum {A,B}中,被替换成了enum {10,B},这显然是非法的,因为枚举不接受10这样的常数。

在你把顺序颠倒之后,先发现enum {A,B},此时编译器确定A=0,但随后它遇到#define A 10,此后,枚举中的A被废除,仍会像上面那样,把后面的所有A替换成10。

你测试的时候,在enum {A,B}之后马上打印A,看它是多少(应该是0),然后在#define A 10之后再打一次,就会发现成了10。注意:此时A已不是变量,而是常数!

授人以渔,不授人以鱼。
2011-08-10 10:49
xzy199999
Rank: 4
等 级:业余侠客
帖 子:326
专家分:286
注 册:2010-11-19
收藏
得分:0 
回复 5楼 TonyDeng
谢谢你

我是初学者
2011-08-10 13:18
风生钧起
Rank: 4
来 自:江西
等 级:业余侠客
帖 子:383
专家分:246
注 册:2011-7-26
收藏
得分:0 
学习;了~!

墨一世红颜倾醉己    霁天谁与话风流

修仙``````````````````````````````````````````````
2011-08-10 16:11
快速回复:一个枚举类型的疑惑
数据加载中...
 
   



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

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