Avatar billede hurra Novice
03. december 2007 - 11:14 Der er 4 kommentarer og
1 løsning

ellipsis input til en macro

Jeg sidder og retter i noget kode jeg har overtaget fra en anden. Der er ca 1000 check, hvor der bliver checket på om en funktions pointer er sat, og hvis den er bliver funktionen kaldt med et skiftende antal inputs.

e.g.
if(someClass->method == NULL)
  return 0;
if(someClass->method(var1, var2))
  return 0;
AddLog("someClass->method gik godt");

Dette exempel er meget simplificeret, men i principet er det det der sker, og så ca 1000 gange.

Jeg har lavet en antal macroer, så jeg kan håndtere fra 1 til 4 inputs.
#define macro2(fp, v1, v2)  \
if(fp == NULL)  \
  return 0;  \
if(*fp(v1, v2))  \
  return 0;  \
AddLog(%fp%" gik godt");  \

Kan jeg ikke spare alle mine macroer væk, og lave en macro med 'ellipsis' input?
Avatar billede bertelbrander Novice
03. december 2007 - 19:40 #2
Hvis ikke din compiler understøtter ... i macroer kan du bruge:
void f1(int)
{
}

void f2(int, int)
{
}

#define Macro(func, arg) if(x) func arg
int main()
{
  int x = 1;
  Macro(f1, (1));
  Macro(f2, (1, 2));
}
Avatar billede hurra Novice
04. december 2007 - 13:31 #3
Success !!!! Endnu en tak arne, kom med et svar.

Det andet du har lavet der bertelbrander er egentligt også ret smart, det havde jeg ikke lige tænkt på, men stadig ikke lige 100% det jeg søgte.
Avatar billede arne_v Ekspert
04. december 2007 - 15:05 #4
ok
Avatar billede arne_v Ekspert
27. januar 2008 - 05:19 #5
så mangler du bare at acceptere svaret
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester