Language/C&C++ 2010.11.12 17:16
Usually, pointer of not-opened-structure is used to hide module's information.
C dummies may use 'void*' to do this. But, it's not good way.
Let's see following example.
(Following codes are test in GCC4.4 with '-Wall' option.
typedef void module_t; /* <-- *1 */ typedef struct _sModule module_t; /* <-- *2 */ module_t* create_module(int arg); int do_something(module_t* m, int arg); ... do_something((int*)m, 1); /* <-- *a */
Pointer of any type can be casted to 'void*', and 'void*' can be casted to pointer of any type without warning.
So, in case of (*1), (*a) doesn't generate any warning. That is, it is NOT TYPE SAFE (in compile time).
But, in case of (*2), GCC give warning like "... incompatible pointer type ...". It's TYPE SAFE.
And, interestingly, compiler doesn't complain anything about (*2) because, compiler doesn't need to know size of 'struct _sModule'.
Only pointer is used. So, knowing size of pointer type is enough and compiler already know it.
So, in terms of syntax, it's ok too!
|[C/C++][linux] redirect standard io with pipe in code. (0)||2010.12.10|
|[Linux][C/C++] 'select' function - glibc bug?? (0)||2010.11.19|
|[C/C++] Encapsulation tip in C. (0)||2010.11.12|
|[C/C++] Tips and Memos (0)||2010.11.12|
|[C/C++] Getting return address… (0)||2010.11.03|
|[Linux][C/C++] Understanding Signals – User Signal Handler (0)||2010.10.29|