Re: is this correct C? (char*)spm += spm->partitionMapLength;



On Nov 30, 1:00 pm, O_TEXT <O_T...@xxxxxxxxx> wrote:
is line 11 valid?
if yes, is it equivalent to line 10?

1 typedef unsigned char uint8_t;
2 struct sparablePartitionMap
3 {
4 uint8_t partitionMapLength;
5 } __attribute__ ((packed));
6 void initialise(char *devicename)
7 {
8 struct sparablePartitionMap *spm;
9 spm += spm->partitionMapLength;
10 spm = ( struct sparablePartitionMap *) ((char*)spm +

spm->partitionMapLength);
11 (char*)spm += spm->partitionMapLength;
12 }

No , line 11 is not valid C because the expression
(char *)spm is not an lvalue. Nevertheless I think
some compilers allow the construct as an extension
although I don't know its meaning.

I note also that on line 9 you dereference the pointer
spm although it hasn't been initialised. That's undefined
behaviour.

Furthermore if you post code with non standard constructs
like __attribute__ you should explain what they mean.

Personally I would like to know whether lines 9 and 10 do
the same thing assuming that spm has been properly
initialised.
.



Relevant Pages