variable declaration in if statement

  • Thread starter Denis Petronenko
  • Start date
D

Denis Petronenko

i can write something like this

int foo()
{
return 100;
}

if( int x=foo() ) {
....
}else{
....
}

but, for example, how can i check that x>50 in the "if" statement? So,
the if will be true only if x>50.
 
D

David Harmon

On 5 Aug 2006 12:09:44 -0700 in comp.lang.c++, "Denis Petronenko"
if( int x=foo() ) {
...
}else{
...
}

but, for example, how can i check that x>50 in the "if" statement? So,
the if will be true only if x>50.

Write it like:

int x = foo();
if( x < 50 ) {
....

With no looping, there's nothing about "If" to keep you from
splitting it into two more understandable statements like that.
 
J

Jens Marder

David Harmon said:
On 5 Aug 2006 12:09:44 -0700 in comp.lang.c++, "Denis Petronenko"


Write it like:

int x = foo();
if( x < 50 ) {
...

With no looping, there's nothing about "If" to keep you from
splitting it into two more understandable statements like that.

Why not use parantheses?

if( (int x=foo()) > 50 ) {
....
}else{
....
}
 
D

Denis Petronenko

David said:
On 5 Aug 2006 12:09:44 -0700 in comp.lang.c++, "Denis Petronenko"


Write it like:

int x = foo();
if( x < 50 ) {
...

With no looping, there's nothing about "If" to keep you from
splitting it into two more understandable statements like that.

i don't want to use x variable after if statement and want to reduce
scope of x variable to if statement only.
 
D

Denis Petronenko

Jens said:
Why not use parantheses?

if( (int x=foo()) > 50 ) {
...
}else{
...
}

because it doesn't compile. at least using this
g++ (GCC) 4.0.4 20060507 (prerelease) (Debian 4.0.3-3)
 
M

Matt

Jens said:
Why not use parantheses?

if( (int x=foo()) > 50 ) {
...
}else{
...
}

That doesn't compile for me with g++. It seems that the 'int' has to
come before the second '('. However

#include <iostream>
using namespace std;

int foo() { return 100; }

int main(int argc, char *argv[]){
if (int x=foo() > 50) {
cout << "condition true" << endl;
cout << "x == " << x << endl;
} else {
cout << "condition false" << endl;
cout << "x == " << x << endl;
}
}

does compile and seems to work as desired.

(int x= foo() > 50) and (int x= (foo() > 50)) seem to be equivalent in
this context.

(int x=foo() && (x>50)) seems to be legal but doesn't have the desired
meaning. '&&' has higher precedence than '=', so that the assignment
expression computes x in terms of its uninitialized self so that the
result is indeterminate.
 
A

Alf P. Steinbach

* Jens Marder:
Why not use parantheses?

if( (int x=foo()) > 50 ) {
...
}else{
...
}

Because it doesn't conform to the 'if' statement syntax; it's the same
as you cannot put parentheses around a declaration elsewhere.
 
M

Matt

Matt said:
Jens said:
Why not use parantheses?

if( (int x=foo()) > 50 ) {
...
}else{
...
}


That doesn't compile for me with g++. It seems that the 'int' has to
come before the second '('. However

#include <iostream>
using namespace std;

int foo() { return 100; }

int main(int argc, char *argv[]){
if (int x=foo() > 50) {
cout << "condition true" << endl;
cout << "x == " << x << endl;
} else {
cout << "condition false" << endl;
cout << "x == " << x << endl;
}
}

does compile and seems to work as desired.

whoops. x is left with the value of the '>' expression, namely 0 or 1,
so that this doesn't do what the OP wanted.
 
I

Ian Collins

Denis said:
i don't want to use x variable after if statement and want to reduce
scope of x variable to if statement only.

{
int x = foo();
if( x < 50 ) {
...
}
}
 
M

Mark P

Denis said:
i don't want to use x variable after if statement and want to reduce
scope of x variable to if statement only.

Then put braces around both the variable declaration and the if statement.

{
int x = foo();
if ( x < 50 ) { ... }
}
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,011
Latest member
AjaUqq1950

Latest Threads

Top