Forums
New posts
Search forums
Members
Current visitors
Log in
Register
What's new
Search
Search
Search titles only
By:
New posts
Search forums
Menu
Log in
Register
Install the app
Install
Forums
Archive
Archive
C Programming
Union, ternary operator, Macro, printf don't cooperate for me. Help?
JavaScript is disabled. For a better experience, please enable JavaScript in your browser before proceeding.
You are using an out of date browser. It may not display this or other websites correctly.
You should upgrade or use an
alternative browser
.
Reply to thread
Message
[QUOTE="Paul E Johnson, post: 1682606"] Dear friends in C: I'm completely baffled by this problem I have with printf statements and conditional operators in C. I'm using gcc-3.3. I have a project where the rarely used Union type is called for! Incredible, but true. union mixed { long unsigned int i; double f; } newMem; It is no trouble to retrieve the values with newMem.i or newMem.f. However, I want to make the choice between the two automatic by writing a macro like this, which keys on the value of a variable "Stochastic": #define UMACRO(var) ((Stochastic) ? var.i : var.f ) So if Stochastic ==1 then I want to get back newMem.i, otherwise I want newMem.f. I get this psychotic behavior. WHen the macro UMACRO is in a printf statement, things go completely berserk! Here's a code snip: printf("newMem = %lu \n", newMem.i); printf("Stochastic=%d, UMACRO = %lu Stochastic = %d \n",Stochastic, UMACRO(newMem), Stochastic); { long unsigned int testval = UMACRO(newMem); printf("testval %lu\n", testval); } And here's the output it produces when Stochastic==1 and newMem.i = 97: newMem = 97 Stochastic=1, UMACRO = 0 Stochastic = 1079525376 testval 97 When you look at the ouptut in line 2, you figure UMACRO does not work at all, and it does something horrible affect the printout of the second Stochastic in that line. However, note the 3rd line, which is produced by first retrieving the value from the union and then printing it out. That is correct. I was thinking that the problem is the pre-processor, but here is the output from gcc -E, which appears as expected. printf("newMem = %lu \n", newMem.i); printf("Stochastic=%d, UMACRO = %lu Stochastic = %d \n",Stochastic, ((Stochastic)?newMem.i:newMem.f ), Stochastic); {long unsigned int testval = ((Stochastic)?newMem.i:newMem.f ); printf("testval %lu\n", testval);} So maybe the ternary conditional is not working in the right hand side of the printf? Is that a known thing? And why does it make the output of the second Stochastic in line 2 turn into crapola 1079525376. ??? [/QUOTE]
Verification
Post reply
Forums
Archive
Archive
C Programming
Union, ternary operator, Macro, printf don't cooperate for me. Help?
Top