using assignment statement as conditional in a where

rikki cattermole via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sat Dec 3 01:03:25 PST 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.
>
> 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) {
			
	}
}



More information about the Digitalmars-d-learn mailing list