打印
[STM8]

请教个关于enum的问题

[复制链接]
755|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
x11223y|  楼主 | 2017-4-18 10:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题,具体问题如下:

定义了一种 TEST:
typedef enum _TEST0_
{
         PRA0,
         PRA1,
         PRA2,
         PRA3,
         PRA4,
         PRA5,
         PRA6,
         PRA7,
}TEST;

然后在在函数中调用了 TEST类型

void fun(TEST temp);

问题是:我用 fun(5);   这样是毫无问题了
可是 如果这样呢 fun(100);        100已经超出了TEST所定义的类型,这样做实际会出问题吗?

在 fun函数内部temp变量是继续使用100这个值,不管TEST类型?    还是会受TEST这个类型的上限取7?
沙发
feelhyq| | 2017-4-18 10:45 | 只看该作者
我的理解是,对于不确定的东西最好就不要去触碰,不同的编译器也许做法不一样。

使用特权

评论回复
板凳
mmuuss586| | 2017-4-18 12:41 | 只看该作者
你测试下就知道了;
没看到过用这么多的

使用特权

评论回复
地板
皈依| | 2017-4-18 16:09 | 只看该作者
可能会出各种各样的奇怪问题
毕竟100这个所在的地址的信息你并没有进行操作

使用特权

评论回复
5
x11223y|  楼主 | 2017-4-18 18:24 | 只看该作者
皈依 发表于 2017-4-18 16:09
可能会出各种各样的奇怪问题
毕竟100这个所在的地址的信息你并没有进行操作 ...

有点不理解

使用特权

评论回复
6
x11223y|  楼主 | 2017-4-19 10:41 | 只看该作者
dalarang 发表于 2017-4-18 18:57
void fun(TEST temp);
既然将temp定义为TEST类型,那么fun(5)和fun(100)都不是正确的语句,编译器会提示 ...

fun(5)应该不会警告的吧,enum来说 PRA5的值就是5

现在搞不懂的是对于temp取100时怎么理解

使用特权

评论回复
7
q119227313| | 2017-4-19 10:55 | 只看该作者
x11223y 发表于 2017-4-19 10:41
fun(5)应该不会警告的吧,enum来说 PRA5的值就是5

现在搞不懂的是对于temp取100时怎么理解 ...

fun(5)大部分编译器都会警告,
fun(100)大部分编译器都会报错。

使用特权

评论回复
8
x11223y|  楼主 | 2017-4-19 11:02 | 只看该作者
q119227313 发表于 2017-4-19 10:55
fun(5)大部分编译器都会警告,
fun(100)大部分编译器都会报错。

谢谢,这样的话那我到时候只有取消TEST类型定义了

改成unsigned char

使用特权

评论回复
9
戈卫东| | 2017-4-19 12:20 | 只看该作者
编译器会帮你转换。。。

使用特权

评论回复
10
x11223y|  楼主 | 2017-4-19 14:22 | 只看该作者
戈卫东 发表于 2017-4-19 12:20
编译器会帮你转换。。。

请问怎么转换???

使用特权

评论回复
11
1021256354| | 2017-4-19 16:18 | 只看该作者
枚举不就是常数么?0-7的常数

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

48

帖子

1

粉丝