I have defined a type for objects we use. The details of the type should not be relevant for the users of the type, so I am "hiding" it behind a typedef. As it happens, this type is currently implemented as an array. This is problematic when we want to pass around pointers to variables of this type.
Example:
#define OBJECT_SIZE 5 typedef char object_t[OBJECT_SIZE]; // A type that happens to be an array int main( void ) { object_t my_object; object_t * p_object; p_object = my_object; // Compiler warning - pointer to different objects // (Correct warning - array decays to pointer to char. ) p_object = &my_object; // Compiler warning - pointer to different objects // Why this warning? // According to knowledgeable people, this should be // OK with respect to the C spec return 0; }
So, the question is: how can I obtain the address of the variable in a way that will give me a pointer to the given type? That is, I need a pointer to array[OBJECT_SIZE] of char, not a plain pointer to char.
With kind regards Asbj.S.
"I need a pointer to array[OBJECT_SIZE] of char, not a plain pointer to char."
The 'C' programming language has no such thing; nothing specifically to do with C51 - that just the way the language works.
Are you sure that the 8051 is a good choice for this kind of programming?
Well, at least Lint seems to think there is such a thing, as given the line (in my example)
p_object = my_object
it gives the warning
Error 64: Type mismatch (assignment) (char (*)[5] = char *)
which is perfectly reasonable. The pointer has been declared as a pointer to a type which is an array[5] of chars, while "my_object" decays into a pointer to the base type of the element, i.e. to a pointer to char.
According to presumably knowledgeable people, the variant
p_object = &my_object;
should be correct C and do what I want. But C51 does not seem to agree.
Regarding the 8051: That is the processor in the chip I am using. But we still try to maintain modularity in the code and clean interfaces between the modules.
Thanks for your input, though!
Asbj.S.
View all questions in Keil forum