在VDSP 5.0++ UPDATA10下,测试了一下如下程序。在对宏定义的位域作赋值操作时老是出现"cc0137: error: expression must be a modifiable lvalue"。请问这是为什么。不对位域操作就可以,难道不能通过这种方式进行赋值?
typedef union _UNITS_FLAG_STRU
{
struct _UNITS
{
char flag : 1;
char reserve : 7;
}bits;
char byte;
}UNITS_FLAG;
typedef struct _CHANNEL_STRU
{
char data1;
char data2;
UNITS_FLAG units;
}CHANNEL;
typedef struct _PARA_STRU
{
CHANNEL a;
CHANNEL b;
}PARA;
char ch1 = 1;
PARA g_para;
#define GET_FLAG ( (0 == ch1) ? g_para.a.units.bits.flag : g_para.b.units.bits.flag )
#define GET_BYTE ( (0 == ch1) ? g_para.a.units.byte : g_para.b.units.byte )
int main( void )
{
g_para.a.units.bits.flag = 0; //这样可以
GET_FLAG = 0; //为什么这个不可以?位域不可以这么操作么?因为程序在很多地方要
//做判断以确定对a或b的flag进行操作,不想在程序每个地方都用if。。。else做判断。
GET_BYTE = 0; //这个就可以
return 0;
}
错误提示:
测试工程:
「该帖子被 pigy 在 2012-12-27 21:10:14 编辑过」