在C中运行时铸造,可以吗?

在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

假设我有一个指向内存“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 ( 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中增加和减少。