468,512 Members | 1,346 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 468,512 developers. It's quick & easy.

variable declaration in if statement

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.

Aug 5 '06 #1
9 6371
On 5 Aug 2006 12:09:44 -0700 in comp.lang.c++, "Denis Petronenko"
<pe********@gmail.comwrote,
>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.

Aug 5 '06 #2

"David Harmon" <so****@netcom.comschrieb im Newsbeitrag
news:45****************@news.west.earthlink.net...
On 5 Aug 2006 12:09:44 -0700 in comp.lang.c++, "Denis Petronenko"
<pe********@gmail.comwrote,
>>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.
Why not use parantheses?

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

Aug 5 '06 #3

David Harmon wrote:
On 5 Aug 2006 12:09:44 -0700 in comp.lang.c++, "Denis Petronenko"
<pe********@gmail.comwrote,
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.
i don't want to use x variable after if statement and want to reduce
scope of x variable to if statement only.

Aug 5 '06 #4

Jens Marder wrote:
"David Harmon" <so****@netcom.comschrieb im Newsbeitrag
news:45****************@news.west.earthlink.net...
On 5 Aug 2006 12:09:44 -0700 in comp.lang.c++, "Denis Petronenko"
<pe********@gmail.comwrote,
>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.

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)

Aug 5 '06 #5
Jens Marder wrote:
"David Harmon" <so****@netcom.comschrieb im Newsbeitrag
news:45****************@news.west.earthlink.net...
>>On 5 Aug 2006 12:09:44 -0700 in comp.lang.c++, "Denis Petronenko"
<pe********@gmail.comwrote,
>>>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.


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.
Aug 5 '06 #6
* 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.

--
A: Because it messes up the order in which people normally read text.
Q: Why is it such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?
Aug 5 '06 #7
Matt wrote:
Jens Marder wrote:
>"David Harmon" <so****@netcom.comschrieb im Newsbeitrag
news:45****************@news.west.earthlink.net.. .
>>On 5 Aug 2006 12:09:44 -0700 in comp.lang.c++, "Denis Petronenko"
<pe********@gmail.comwrote,

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.


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.
Aug 5 '06 #8
Denis Petronenko wrote:
David Harmon wrote:
>>On 5 Aug 2006 12:09:44 -0700 in comp.lang.c++, "Denis Petronenko"
<pe********@gmail.comwrote,
>>>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.


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 ) {
...
}
}
--
Ian Collins.
Aug 5 '06 #9
Denis Petronenko wrote:
David Harmon wrote:
>On 5 Aug 2006 12:09:44 -0700 in comp.lang.c++, "Denis Petronenko"
<pe********@gmail.comwrote,
>>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.

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 ) { ... }
}
Aug 5 '06 #10

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

83 posts views Thread by Alexander Zatvornitskiy | last post: by
5 posts views Thread by Neil Zanella | last post: by
23 posts views Thread by Russ Chinoy | last post: by
2 posts views Thread by Florian Loitsch | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.