First, define a named type: typedef union { unsigned int uint; signed int ssint; unsigned char[2] unchar } mytype_t; Second, declare and implement the function correctly. It is not allowed to declare a parameter without type: void myDumbFunction( mytype_t somevar ) { if( somevar.unchar[1] ) do_something(); } Third, declare a variable with the correct type, initialize it and call the function: mytype_t dumbvar; // (in your example you used an "unsigned int" variable as argument, so we will initialize the field of the same type) dumbvar.uint =3D somedumbvalue; myDumbFunction( dumbvar ); Best regards, Isaac Em 16/1/2013 22:01, Bob Blick escreveu: > Is this a correct way to declare and call a function that uses a union > as the argument, and pass it a value that is not declared as union? > > //declaring the function > void myDumbFunction(union {unsigned int uint; signed int ssint; unsigned > char[2] unchar}); > > // calling it from somewhere in my program > unsigned int dumbvar; > dumbvar =3D somedumbvalue; > myDumbFunction(dumbvar); > > // the function > void myDumbFunction(somevar){ > if (somevar.unchar[1]) > do_something(); > } > > Is that going to work, the compiler should know that somevar is an > unsigned int(not that it should matter since it's just memory space that > is the size of the union), so within my function I can access > somevar.uint somevar.ssint as well as somevar.unchar[0] and > somevar.unchar[1] > > That all seem OK? I know that in most cases using a union serves no real > purpose other than to be dangerous, there are other ways to do things. > But my question is whether this is accurate or how it would be made > correct if it isn't. > > Thanks, > > Bob > --=20 http://www.piclist.com PIC/SX FAQ & list archive View/change your membership options at http://mailman.mit.edu/mailman/listinfo/piclist .