digitalmars.D.learn - using assignment statement as conditional in a where
- dan (33/33) Dec 03 2016 In c, you can have code like this:
- rikki cattermole (15/48) Dec 03 2016 If you can use another compiler do so, gdc is on an old frontend/Phobos
- dan (8/24) Dec 03 2016 Thanks Rikki, that works great and is nearly ideal (doesn't seem
- rikki cattermole (3/29) Dec 03 2016 The only thing in gdc that is GPL is the backend and glue layer.
In c, you can have code like this: static void wtest( void ) { int f; while ( ( f = some_val( ) ) ) { printf(" our value is now: %d\n", f ); } } gcc compiles this without warning or error (at least if you use the double parentheses to assure the compiler that you realize you are testing an assignment, not a comparison). I would like to do the same thing in d, something like this: private void wtest( ) { int f; while ( ( f = some_val( ) ) ) { writeln(" our value is now: ", f ); } } or even better: private void wtest( ) { while ( ( auto f = some_val( ) ) ) { writeln(" our value is now: ", f ); } } This however does not work, and the gdc compiler says "assignment cannot be used as a condition, perhaps == was meant?" I don't absolutely have to do it this way, as i guess i could do 'while (true) {...' and then break if the assignment returns zero. But i really, really would like to use the idiom of assigning a value from inside a while condition. Is it possible to do this? Perhaps with extra braces or something, like while ( {something here} ) { .... } ? TIA for any pointers or advice. dan
Dec 03 2016
On 03/12/2016 9:55 PM, dan wrote:In c, you can have code like this: static void wtest( void ) { int f; while ( ( f = some_val( ) ) ) { printf(" our value is now: %d\n", f ); } } gcc compiles this without warning or error (at least if you use the double parentheses to assure the compiler that you realize you are testing an assignment, not a comparison). I would like to do the same thing in d, something like this: private void wtest( ) { int f; while ( ( f = some_val( ) ) ) { writeln(" our value is now: ", f ); } } or even better: private void wtest( ) { while ( ( auto f = some_val( ) ) ) { writeln(" our value is now: ", f ); } } This however does not work, and the gdc compiler says "assignment cannot be used as a condition, perhaps == was meant?" I don't absolutely have to do it this way, as i guess i could do 'while (true) {...' and then break if the assignment returns zero. But i really, really would like to use the idiom of assigning a value from inside a while condition. Is it possible to do this? Perhaps with extra braces or something, like while ( {something here} ) { .... } ? TIA for any pointers or advice. danIf you can use another compiler do so, gdc is on an old frontend/Phobos now. I recommend ldc or you know the reference compiler dmd if performance/platform isn't an issue (not that dmd can't produce decent codegen). This does compile: int func() { return 0; } void main() { int x; while((x = func()) != 0) { } }
Dec 03 2016
On Saturday, 3 December 2016 at 09:03:25 UTC, rikki cattermole wrote:On 03/12/2016 9:55 PM, dan wrote:Thanks Rikki, that works great and is nearly ideal (doesn't seem to allow 'auto' but probably that's some scoping issue). I do prefer gdc because it is gpl'ed, but appreciate any suggestions. Thanks again for your help! dan[...]If you can use another compiler do so, gdc is on an old frontend/Phobos now. I recommend ldc or you know the reference compiler dmd if performance/platform isn't an issue (not that dmd can't produce decent codegen). This does compile: int func() { return 0; } void main() { int x; while((x = func()) != 0) { } }
Dec 03 2016
On 04/12/2016 7:26 AM, dan wrote:On Saturday, 3 December 2016 at 09:03:25 UTC, rikki cattermole wrote:The only thing in gdc that is GPL is the backend and glue layer. The frontend is the same one in ldc and dmd.On 03/12/2016 9:55 PM, dan wrote:Thanks Rikki, that works great and is nearly ideal (doesn't seem to allow 'auto' but probably that's some scoping issue). I do prefer gdc because it is gpl'ed, but appreciate any suggestions. Thanks again for your help! dan[...]If you can use another compiler do so, gdc is on an old frontend/Phobos now. I recommend ldc or you know the reference compiler dmd if performance/platform isn't an issue (not that dmd can't produce decent codegen). This does compile: int func() { return 0; } void main() { int x; while((x = func()) != 0) { } }
Dec 03 2016