Avatar billede thomas_fogh Nybegynder
08. maj 2007 - 10:23 Der er 8 kommentarer og
1 løsning

C89: Definition af debug?

Hej,
Er der nogen der har en idé til hvordan jeg kan definere DEBUG når debug skal være slået fra?
Lige nu har jeg:

#define DEBUG  debug_printf

void debug_printf(char* format, ...)
{
#ifdef DEBUG_ENABLED
  va_list ap;
  va_start(ap,format);
  (void)vprintf(format,ap);
  va_end(ap);
#endif
}

Men DEBUG("TEST DEBUG\n"); bruger stadig programplads selvom debug er slået fra.
Er der er måde hvorpå jeg kan få compileren (C89 version) til at fjerne det helt?
Avatar billede bitmatic Nybegynder
08. maj 2007 - 14:11 #1
Prøv med:

#ifdef DEBUG_ENABLED
#define DEBUG  debug_printf
void debug_printf(char* format, ...)
{
  va_list ap;
  va_start(ap,format);
  (void)vprintf(format,ap);
  va_end(ap);
}
#else
#define DEBUG (void)
#endif


Det burde virke.....

/Jakob
Avatar billede thomas_fogh Nybegynder
08. maj 2007 - 14:32 #2
Ja, men jeg får følgende warning:
"warning: left-hand operand of comma expression has no effect"
Og jeg har warning => error, så medmindre du ved om jeg kan slå denne warning fra (og kun den), så kan jeg desværre ikke bruge den.

Tak for budet!
Avatar billede bitmatic Nybegynder
08. maj 2007 - 14:42 #3
Ok. Man kan definere det helt væk med den her i stedet.

#ifdef DEBUG_ENABLED
#define DEBUG  debug_printf
void debug_printf(char* format, ...)
{
  va_list ap;
  va_start(ap,format);
  (void)vprintf(format,ap);
  va_end(ap);
}
#else
#define DEBUG(...)
#endif
Avatar billede thomas_fogh Nybegynder
08. maj 2007 - 14:49 #4
Virker desværre ikke med version C89.
(anonymous variadic macros were introduced in C99)
Avatar billede segmose Nybegynder
08. maj 2007 - 15:31 #5
Dur det her?

#ifdef DEBUG_ENABLED
#define DEBUG(X) X
#else
#define DEBUG(X)
#endif

DEBUG(debug_printf("%d %d %d", 1,2,3));
Avatar billede bertelbrander Novice
08. maj 2007 - 19:43 #6
#ifdef DEBUG_ENABLED
#define DEBUG(x) debug_printf x
void debug_printf(char* format, ...)
{
  va_list ap;
  va_start(ap,format);
  (void)vprintf(format,ap);
  va_end(ap);
}
#else
#define DEBUG(x)
#endif

int main()
{
  char Str[1024];
  printf("Skriv noget: ");
  fgets(Str, sizeof(Str), stdin);
  DEBUG(("Du skrev: %s\n", Str));
}
Avatar billede thomas_fogh Nybegynder
08. maj 2007 - 21:39 #7
Jeg var også kommet frem til det samme, men jeg havde håbet på en lidt pænere løsning :)
Skrev lige et svar, så jeg kan gi' nogle points...
Avatar billede segmose Nybegynder
14. maj 2007 - 11:25 #8
Her er et svar hvis det var mig du mente :)
Avatar billede thomas_fogh Nybegynder
14. maj 2007 - 11:55 #9
Jeg mente segmose & bertelbrander. bertelbrander får lige lidt længere tid til at svare...
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