Здравствуйте!
при компиляции библиотеки Net2(
здесь) в Visual Studio 7.0 возникает ошибки такого рода:
net2sets.c(61): error C2054: expected '(' to follow 'IP'
код, в котором ошибка:
SETCODE(, IP, IPaddress, 10, ipEqual(a, b));
SETCODE определена в файле set.h следующим образом(простите, что весь файл засунула, но никак не могу выделить то, что нужно, потому что странный макрос там):
#define SETTYPE(NAME, TYPE) \
typedef struct \
{ \
int itr; \
int last; \
int size; \
TYPE *set; \
} NAME##Set;
#define SETFORWARD(MODIFIER, NAME, TYPE) \
\
MODIFIER int init##NAME##Set(NAME##Set *s, int size); \
MODIFIER void finit##NAME##Set(NAME##Set *s); \
MODIFIER int member##NAME##Set(NAME##Set *s, TYPE *v); \
MODIFIER TYPE *item##NAME##Set(NAME##Set *s, TYPE *v); \
MODIFIER int add##NAME##Set(NAME##Set *s, TYPE *v); \
MODIFIER int del##NAME##Set(NAME##Set *s, TYPE *v); \
MODIFIER int first##NAME##Set(NAME##Set *s, TYPE *v); \
MODIFIER int next##NAME##Set(NAME##Set *s, TYPE *v); \
#define SETCODE(MODIFIER, NAME, TYPE, INCREMENT, TESTEQ) \
\
MODIFIER int init##NAME##Set(NAME##Set *s, int size) \
{ \
s->itr = 0; \
s->last = 0; \
s->size = size; \
s->set = malloc(size * sizeof(TYPE)); \
if (NULL == s->set) \
{ \
return -1; \
} \
\
return 0; \
} \
\
MODIFIER void finit##NAME##Set(NAME##Set *s) \
{ \
s->itr = 0; \
s->last = 0; \
s->size = 0; \
if (NULL != s->set) \
{ \
free(s->set); \
} \
s->set = NULL; \
} \
\
MODIFIER int member##NAME##Set(NAME##Set *s, TYPE *v) \
{ \
int i; \
for (i = 0; i < s->last; i++) \
{ \
TYPE *a = v; \
TYPE *b = &(s->set[i]); \
if (TESTEQ) \
{ \
return i; \
} \
} \
return -1; \
} \
\
\
MODIFIER TYPE *item##NAME##Set(NAME##Set *s, TYPE *v) \
{ \
int index = member##NAME##Set(s, v); \
if (-1 != index) \
{ \
return &(s->set[index]); \
} \
\
return NULL; \
} \
\
MODIFIER int add##NAME##Set(NAME##Set *s, TYPE *v) \
{ \
TYPE *nset = NULL; \
int nsize = 0; \
int i; \
\
if (-1 != member##NAME##Set(s, v)) \
{ \
return 0; \
} \
\
if (s->last < s->size) \
{ \
s->set[s->last] = *v; \
s->last++; \
\
return 0; \
} \
\
nsize = s->size + INCREMENT; \
nset = malloc(nsize * sizeof(TYPE)); \
if (NULL == nset) \
{ \
return -1; \
} \
\
for (i = 0; i < s->last; i++) \
{ \
nset[i] = s->set[i]; \
} \
\
free(s->set); \
s->set = nset; \
s->size = nsize; \
\
return add##NAME##Set(s, v); \
} \
\
MODIFIER int del##NAME##Set(NAME##Set *s, TYPE *v) \
{ \
int index = member##NAME##Set(s, v); \
if (-1 != index) \
{ \
(s->last)--; \
s->set[index] = s->set[s->last]; \
return 0; \
} \
\
return -1; \
} \
\
MODIFIER int first##NAME##Set(NAME##Set *s, TYPE *v) \
{ \
s->itr = 0; \
if (s->itr < s->last) \
{ \
*v = s->set[s->itr]; \
return 0; \
} \
\
return -1; \
} \
\
MODIFIER int next##NAME##Set(NAME##Set *s, TYPE *v) \
{ \
(s->itr)++; \
if (s->itr < s->last) \
{ \
*v = s->set[s->itr]; \
return 0; \
} \
\
return -1; \
}
#endif
написала разработчику по этому поводу. он говорит, что либо я код изменила(и это вызвало ошибки), либо проблемы с компилятором Visual C++ 7.0.
код я и правда изменила.

но чуть-чуть.
просто компилятор ругался(set.cpp(40): error C4716: 'SDL_main' : must return a value)
), что следующая функция ничего не возвращает:
int main(int argc, char **argv)
{
int i;
int j;
SocketSet s;
initSocketSet(&s, 100);
for (i = 0; i < 1000; i++)
{
addSocketSet(&s, &i);
}
for (i = 0; i < 1000; i += 2)
{
delSocketSet(&s, &i);
}
for (j = firstSocketSet(&s, &i);
j != -1;
j = nextSocketSet(&s, &i))
{
printf("item = %d\n", i);
}
finitSocketSet(&s);
}
и я приписала в конце "return 0;" но не думаю, что это столь серьезное изменение...
Другими компиляторами код компилируется нормально. код удовлетворяет стандартам. Неужели проблема с VC++ 7.0? или все-таки я чего-то натворила?
Буду благодарна за любую помощь.