declaring variables inside for loops

G

Grey Plastic

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.
 
D

David Fisher

Grey Plastic said:
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
 
V

Victor Bazarov

Grey Plastic said:
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.
 
M

Marco Manfredini

Grey said:
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
 

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

Staff online

Members online

Forum statistics

Threads
473,769
Messages
2,569,577
Members
45,052
Latest member
LucyCarper

Latest Threads

Top