70

帖子

0

TA的资源

一粒金砂(初级)

21
 
楼上的专家能不能提醒一下还有那些操作是可能存在暗箱操作的?谢谢!
此帖出自stm32/stm8论坛
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

22
 
没找到C89的标准,stm8s103兄能否共享一下?

附件是C99标准。
目前的现状是C89当道,却找不到C89标准。郁闷。

StandardC99.pdf (1.04 MB)

此帖出自stm32/stm8论坛
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

23
 
                                 --
此帖出自stm32/stm8论坛
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

24
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

25
 


呵呵,这可真是好东西,竟然找到了国标中文本的C89

StandardC89-chinese.part5.rar (1011.09 KB)

StandardC89-chinese.part1.rar (1.91 MB)

StandardC89-chinese.part2.rar (1.91 MB)

StandardC89-chinese.part3.rar (1.91 MB)

StandardC89-chinese.part4.rar (1.91 MB)

此帖出自stm32/stm8论坛
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

26
 
个人感觉CodeVisionAVR的这种不标准还是很人性化的,用C本来就是图个方便,再说对于运算操作它都有提示可能存在的溢出问题(个人感觉比闷棍式的“隐式类型转换”还是好,查了很多资料看到的!),以方便程序员作出相应的操作选择,相信对C标准研究得很深的人还是少数吧?半路出家的应该更多吧(交个老底,本人05年中旬开始用C语言编,只是买入门本书花了两个小时看了一下就开始用到现在,没有系统学习过,说实在,现在碰到的问题也是理所当然了!今天上GOOGLE努力学习先!)?

以下为网络查询到的资料:

C语言隐式类型转换规则
1. 如果其中一个操作数为long double类型,则另一个操作数被转换为long double.
2. 否则,如果其中一个操作数为double, 则另一个操作数被转换为double.
3. 否则,如果其中一个操作数为float, 则另一个操作数也转换为float.
4. 否则,两个操作数进行 "整型升级":
    a. 如果其中一个操作数为unsigned long int, 则另一个操作数也被视为unsigned long int.
    b. 否则,如果其中一个操作数为long int,而另一个操作数类型是unsigned int, 并且long int能够表示unsigned int的所有值,则另一个操作数也被视为long int;如果long int不能表示unsigned int的所有值,则两个数都被视为unsigned long int.
    c. 否则, 如果其中一个操作数是long int,则另一个操作数也被视为long int.
    d. 否则, 如果其中一个操作数是unsigned int, 则另一个操作数也被视为unsigned int.
    e. 否则, 两个操作数都被视为int.

另据资料显示:
C99不支持隐式转换了!
以下为网络资料:
15、其它特性的改动

  放宽的转换限制
 
  限制             C89标准  C99标准
  数据块的嵌套层数       15     127
  条件语句的嵌套层数      8      63
  内部标识符中的有效字符个数  31     63
  外部标识符中的有效字符个数  6      31
  结构或联合中的成员个数    127    1023
  函数调用中的参数个数     31     127

  不再支持隐含式的int规则

  删除了隐含式函数声明


  对返回值的约束
    C99中,非空类型函数必须使用带返回值的return语句.

  扩展的整数类型
    扩展类型 含义
    int16_t 整数长度为精确16位
    int_least16_t 整数长度为至少16位
    int_fast32_t 最稳固的整数类型,其长度为至少32位
    intmax_t 最大整数类型
    uintmax_t 最大无符号整数类型

  对整数类型提升规则的改进
    C89中,表达式中类型为char,short int或int的值可以提升为int或unsigned int类型.
    C99中,每种整数类型都有一个级别.例如:long long int 的级别高于int, int的级别高于char等.在表达式中,其级别低于int或unsigned int的任何整数类型均可被替换成int或unsigned int类型.
此帖出自stm32/stm8论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

27
 
                                 嘿嘿,楼主最好去建议C的标准化委员会修改规范,
此帖出自stm32/stm8论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

28
 

好好学习,天天向上!
此帖出自stm32/stm8论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

29
 
                                 仔细再看发现IARSTM8提示的并不是隐式转换的问题,而是VOLATILE的问题!晕!
此帖出自stm32/stm8论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

30
 
                                 那个C89下载不到,能不能传到21IC?谢谢!
此帖出自stm32/stm8论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

31
 


溢出是溢出,类型转换是类型转换。

编译器如果检测到溢出,一般情况下都有警告。
(这里根本没有溢出,要溢出至少也得超过32767,
楼主才加到0x198,离溢出还远得很)


“通用算术转换”是C标准规定的一种规则,
如果这也有警告,估计一个程序下来,警告要差不多要上千了。
此帖出自stm32/stm8论坛
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

32
 
                                 嗯!现在明白了!谢谢!
此帖出自stm32/stm8论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

33
 


为什么没人注意为啥COSMIC把STM8S的int视为16bit的。既不是8bit,也不是32bit?
8bit我服气,32bit也还行,16bit俺不明白为啥,呵呵
得找个理由、、、
此帖出自stm32/stm8论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

34
 
标准C是16位,C#才是32位。

下表列出了Turbo C中各类整型量所分配的内存字节数及数的表示范围。
类型说明符    数的范围     分配字节数
int       -32768~32767     ■■
short int    -32768~32767     ■■
signed int    -32768~32767     ■■
unsigned int   0~65535        ■■
long int  -2147483648~2147483647  ■■■■
unsigned long  0~4294967295     ■■■■


int(C# 参考)

int 关键字表示一种整型,该类型根据下表显示的大小和范围存储值。

类型  范围  大小  .NET Framework 类型  
int
-2,147,483,648 到 2,147,483,647
有符号 32 位整数
System.Int32
此帖出自stm32/stm8论坛
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

35
 
Turbo C诞生于80286的年代,16位机。

一般32位机上,int指32位,short int指16位。
此帖出自stm32/stm8论坛
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

36
 
百度百科:
【大小】
  依据程序编译器的不同int定义的字节数不同。   常用的单片机编译器,如KEIL下,51类单片机的C语言中,int代表2个byte(16位);如果是32位ARM处理器的C语言中,则int代表4个byte(32位)   PIC单片机的PICC中8位系列单片机的C语言里int表示16位。   而不少PC端软件的编译器则会根据操作系统或处理器(如64位XP)把int定义为8 byte(64位)   所以在多平台上编程的人员需要在使用时注意。   如需定义16位数,可使用short定义。
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

37
 
为什么没人注意为啥COSMIC把STM8S的int视为16bit的。既不是8bit,也不是32bit?
8bit我服气,32bit也还行,16bit俺不明白为啥,呵呵
得找个理由、、、
8位MCU上,INT一般不都是16BIT的吗?
此帖出自stm32/stm8论坛
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

38
 
讨论了半天,为什么没有人看看COSMIC的手册? 瞎子摸象?
此帖出自stm32/stm8论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

39
 
                                 强制转换是一方面,数据类型有是一方面,要充分考虑溢出的可能性,不然结果就会出错
此帖出自stm32/stm8论坛
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(中级)

40
 


由于在各种mcu和编译器中不停切换使用,我很少仔细看过渡性使用的编译器手册。
一般会采用保险的写法,比如楼主代码中的比较,我通通会加(unsinged char)强制转换。
所以这个隐式转换的问题我倒还没碰到过,呵呵。
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表