Well, saying they have no scope isn't quite correct. They can't be used anywhere in the file above where they're defined. For example:
Code:
int foo = FOO;
#define FOO 1
...won't work.
Scope could be defined as between the #define and #undef directives or the end of the file. I've used that sort of thing before too:
Code:
ATTR atr_list[] =
{
#define DOATR(a, b, c, d) { a, d, NULL, c, NULL, NULL },
#include "attrlist.h"
#undef DOATR
{ NULL, 0, NULL, 0, NULL, NULL }
};
#define DOATR(a, b, c, d) ATTR *b;
#include "attrlist.h"
#undef DOATR
where attrlist.h is a lot of lines like:
Code:
DOATR("Password", A_PASSWORD, SDARK|NOMOD, 5)
DOATR("Desc", A_DESC, INH|OSEE, 6)
So anyway, just thought I'd point that out