C语音类型转换问题.
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语音类型转换问题.相关的知识,希望对你有一定的参考价值。
读ucos源码发现里面有大量的类型转换,比如:
p_tmr->NamePtr = (CPU_CHAR *)((void *)"?TMR");
在IAR里面软件仿真做如下测试
typedef char CPU_CHAR;
//CPU_CHAR *pchar0 = (CPU_CHAR*)((void *)"?TMR");//1
//CPU_CHAR *pchar1 = (CPU_CHAR*)("?TMR");//2
CPU_CHAR *pchar2 = "?TMR";//3
void main(void)
asm("nop");
//printf("%s\n",pchar0);//1
//printf("%s\n",pchar1);//2
printf("%s\n",pchar2);//3
asm("nop");
1,2,3;依次便宜仿真看汇编代码,发现没有任何不一样,如下:
printf("is:%s\n",pchar);
000DBE 9100 0184 LDS R16,pchar//
000DC2 9110 0185 LDS R17,0x185//
000DC6 931A ST -Y,R17//
000DC8 930A ST -Y,R16//
000DCA E60D LDI R16,0x6D//
000DCC E011 LDI R17,0x01//
000DCE 940E 082B CALL printf//
000DD2 9622 ADIW R28,2//
哪为什么要加(void *);(CPU_CHAR *);这些强制类型转换?
还有很多,,比如,,,,
if (p_err == (OS_ERR *)0)
if (p_tmr == (OS_TMR *)0)
if (period == (OS_TICK)0)
防止编译器报错?但是也没有报错;如果是的话,IAR的编译器开关是哪个?
打开所有的MISRA C 2004 规则后编译出错,从而找到的,结论应该是编码规范和严格的问题,
Error[Pm139]: conversions shall not be performed between a pointer to object and any type other than an integral type, another pointer to object type or a pointer to void. This converts from type "char __near [5]" to "char *" (MISRA C 2004 rule 11.2)
go语音基础之类型转换
1、类型转换
示例:
package main //必须有一个main包 import "fmt" func main() { //这种不能转换的类型,叫不兼容类型 var flag bool flag = true fmt.Printf("flag = %t ", flag) //bool类型不能转换为int //fmt.Printf("flag = %d ", int(flag)) //0就是假,非0就是真 //整型也不能转换为bool //flag = bool(1) var ch byte ch = ‘a‘ //字符类型本质上就是整型 var t int t = int(ch) //类型转换,把ch的值取出来后,转成int再给t赋值 fmt.Println("t = ", t) }
#执行结果:
flag = true t = 97
以上是关于C语音类型转换问题.的主要内容,如果未能解决你的问题,请参考以下文章