在C中运行时铸造,可以吗?
假设我有一个指向内存“pCurrentaddress”的指针,每个对指针的访问都有不同的类型:uint8、uint16、uint32在C中运行时铸造,可以吗?,c,pointers,casting,switch-statement,C,Pointers,Casting,Switch Statement,假设我有一个指向内存“pCurrentaddress”的指针,每个对指针的访问都有不同的类型:uint8、uint16、uint32 typedef unsigned char uint8; typedef unsigned short int uint16; typedef unsigned long int uint32; 我有一个值为8,16,32的vTYPE变量,我想根据vTYPE进行转换,我不想使用switch case,因为它会占用我的代码大小 switch
typedef unsigned char uint8;
typedef unsigned short int uint16;
typedef unsigned long int uint32;
我有一个值为8,16,32的vTYPE变量,我想根据vTYPE进行转换,我不想使用switch case,因为它会占用我的代码大小
switch ( vTYPE )
{
case 32:
(*((uint32*)pCurrentaddress))++;
break;
case 16:
(*((uint16*)pCurrentaddress))++;
break;
case 8:
(*((uint8*)pCurrentaddress))++;
break;
}
有更好的解决办法吗?
Tnx.您是否实际检查了一个
开关将向生成的代码中添加多少字节?我敢打赌它不多,这意味着除非你为一个最小的嵌入式平台编码,其中ROM以一位数千字节计算。我知道你是对的,但我需要做这个开关的情况下增加1,减少1设置值等等。。。它没有得到优化。最好是这样的:((vTYPE)pCurrentaddress))++;或者,即使我可以把这个开关盒放在一个通用函数中,每次都使用它?当然,您可以将代码放入函数中。如果你需要在多个地方使用它,你应该把它放在一个函数中。最后,回答你的问题,类型转换只是编译时的事情,没有办法在运行时做任何类似的事情。我试着用它来做一个函数,但它是无法实现的,因为函数是通过它预定义的类型返回的,如果我错了,请纠正我。我想这样做,比如说一个函数用于1中的增加和减少。您是否实际检查过像这样的开关将向生成的代码中添加多少字节?我敢打赌它不多,这意味着除非你为一个最小的嵌入式平台编码,其中ROM以一位数千字节计算。我知道你是对的,但我需要做这个开关的情况下增加1,减少1设置值等等。。。它没有得到优化。最好是这样的:((vTYPE)pCurrentaddress))++;或者,即使我可以把这个开关盒放在一个通用函数中,每次都使用它?当然,您可以将代码放入函数中。如果你需要在多个地方使用它,你应该把它放在一个函数中。最后,回答你的问题,类型转换只是编译时的事情,没有办法在运行时做任何类似的事情。我试着用它来做一个函数,但它是无法实现的,因为函数是通过它预定义的类型返回的,如果我错了,请纠正我。我想这样做,比如说一个函数,在1中增加和减少。