how to avoid compilation error: expression must be a modifiable lvalue
3 ビュー (過去 30 日間)
古いコメントを表示
Hi.
I met a compilation error with following code. a physical buffer (communication buffer of MCU) tossed to void* dest. if I change all argument to local variable and pointer compilation successful.
First I thought, polyspace doesn't understand typecasting of void to other, but I guess now when physical address is tossed as argument then it occur compilation error "expression must be a modifiable lvalue", since polyspace doesn't understand physical address.
Am i thinking correct? and does anybody can help me to avoid compilation error?
typedef unsigned char u08;
void* AL_MemCpy (void* dest, const void* source, u08 count)
{
while (count--)
{
*((u08*)dest)++ = *((u08*)source)++;
}
}
// used in other function like below
(void)AL_MEMCPY(RxBuffer,&(data[1]),(u08)RxMessage.Length);
0 件のコメント
採用された回答
Jan
2013 年 1 月 17 日
編集済み: Jan
2013 年 1 月 17 日
(u8 *) dest is a temporary variable, which cannot be increased. Perhaps you want this:
*((u08*)dest++) = *((u08*)source++);
But this copies the first byte only. Perhaps memcpy would be smarter?
Or:
u08 *d = (u08 *) dest, *s = (u08 *) source;
while (count--) {
*d++ = *s++;
}
2 件のコメント
James Tursa
2013 年 1 月 17 日
編集済み: James Tursa
2013 年 1 月 17 日
+1 is for the last option shown, which I prefer since it is clear what is being done and avoids trying to apply the ++ operator to a (void *) type (which inherently doesn't make sense and isn't allowed since void is of unknown size) using fancy-mangled syntax (e.g., the first option shown above will not compile).
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で C Shared Library Integration についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!