469,275 Members | 1,552 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

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

declaring variables inside for loops

I'm looking for a way to declare variables inside for statements (or
perhaps some other statement) and have the following statement execute
exactly once. For example,

for(Type var=blah; 1; )

would be what I wanted, if it ran only once, instead of forever.
Similarly,

if(Type var=blah)

would be what I wanted if the statement following it ran even when
blah evaluated as false.

What I'm attempting to do is write my own for-loop style interface
using defines. For example, I want to write something like

#define CUSTOM_FOR_BEGIN(x,y,var) \
for(int x=0; x<256; x++) \
for(int y=0; y<256; y++) { \
Type var = blah;

#define CUSTOM_FOR_END() }

But I want to omit the CUSTOM_FOR_END part. I want something like

#define CUSTOM_FOR(x,y,var) \
for(int x=0; x<256; x++) \
for(int y=0; y<256; y++) \
for(Type var = blah; runOnce; )

so that I can have code like

CUSTOM_FOR(i,j,whee)
foo(whee,j);

and

CUSTOM_FOO(i,j,whee) {
foo(whee,j);
bar(j,i);
}

I'm using GNU C++, and am totally cool with using GNU extensions.
Jul 22 '05 #1
3 1954
"Grey Plastic" <gr*********@hotmail.com>
I'm looking for a way to declare variables inside for statements (or
perhaps some other statement) and have the following statement execute
exactly once. For example,

for(Type var=blah; 1; )

would be what I wanted, if it ran only once, instead of forever.
[snip]
I want something like

#define CUSTOM_FOR(x,y,var) \
for(int x=0; x<256; x++) \
for(int y=0; y<256; y++) \
for(Type var = blah; runOnce; )

so that I can have code like

CUSTOM_FOR(i,j,whee)
foo(whee,j);


What you really need is a functor - have a look at
http://www.codeproject.com/cpp/TTLFunction.asp ...

But if you really want to call a macro with some arbitrary code as an
argument, just put it in brackets (braces ?). All the preprocessor cares
about is that there is a closing bracket, not what is inside ... Someone
here wrote some code like this (please excuse C-style output in a C++ news
group) -

#define DEBUG_PRINTF(x) printf x
DEBUG_PRINTF(("%d %d\n", x, y));

which expands to printf("%d %d\n", x, y);

David Fisher
Sydney, Australia
Jul 22 '05 #2
"Grey Plastic" <gr*********@hotmail.com> wrote...
I'm looking for a way to declare variables inside for statements (or
perhaps some other statement) and have the following statement execute
exactly once. For example,

for(Type var=blah; 1; )

would be what I wanted, if it ran only once, instead of forever.
So, couldn't you just say

{
Type var=blah;
Similarly,

if(Type var=blah)

would be what I wanted if the statement following it ran even when
blah evaluated as false.
But that doesn't work, does it?

What I'm attempting to do is write my own for-loop style interface
using defines. For example, I want to write something like

#define CUSTOM_FOR_BEGIN(x,y,var) \
for(int x=0; x<256; x++) \
for(int y=0; y<256; y++) { \
Type var = blah;

#define CUSTOM_FOR_END() }
The parentheses are really unnecessary here.

But I want to omit the CUSTOM_FOR_END part. I want something like

#define CUSTOM_FOR(x,y,var) \
for(int x=0; x<256; x++) \
for(int y=0; y<256; y++) \
for(Type var = blah; runOnce; )

so that I can have code like

CUSTOM_FOR(i,j,whee)
foo(whee,j);

and

CUSTOM_FOO(i,j,whee) {
foo(whee,j);
bar(j,i);
}
You could extend your own CUSTOM_FOR to be

#define CUSTOM_FOR(x,y,var) \
for (int x=0;x<256;++x) \
for (int y=0, runOnce = 1 ;y<256;++y) \
for (Type var=blah; runOnce; --runOnce)

I'm using GNU C++, and am totally cool with using GNU extensions.


If you need extensions, you should ask in a gnu newsgroup.
Jul 22 '05 #3
Grey Plastic wrote:
I'm looking for a way to declare variables inside for statements (or
perhaps some other statement) and have the following statement execute
exactly once.

#define LET(DECL) if (int __once=1) for (DECL;__once;__once--)
LET(int i=0) { ... }

Marco

Jul 22 '05 #4

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

2 posts views Thread by Oliver Corona | last post: by
2 posts views Thread by ross.oneill | last post: by
9 posts views Thread by Javaman59 | last post: by
2 posts views Thread by Rob Meade | last post: by
8 posts views Thread by rendle | last post: by
6 posts views Thread by =?Utf-8?B?QUw=?= | last post: by
4 posts views Thread by Sister Ray | last post: by
reply views Thread by zhoujie | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.