#ifdef och #endif på samma rad. Funkar inte det?

Permalänk

#ifdef och #endif på samma rad. Funkar inte det?

I kod så finns det behov ibland av att kunna koppla bort delar av koden med #defines och #ifdef/#endif. Det som är lite osnyggt att en kodrad kräver totalt 3 rader. Det verkar som om preprocessorn bara accepteras att #ifdef och #endif finns på olika rader. Finns inget knep?

#define PRINT_DEBUG #ifdef PRINT_DEBUG printf("registerstatus:%x, %x\n", SREG, flaggor); #endif //Trevligare i många lägen #ifdef PRINT_DEBUG;printf("registerstatus:%x, %x\n", SREG, flaggor);#endif

Permalänk
Datavetare

Finns lite olika sätt att fixa detta, två exempel

#include <stdio.h> #ifdef _DEBUG #define DPRINTF(format, ...) printf(format, __VA_ARGS__) #else #define DPRINTF(format, ...) #endif #ifdef _DEBUG #define DBG(statement) statement #else #define DBG(statement) #endif int main(int argc, char *argv[]) { DPRINTF("Only printed if _DEBUG is defined. main() called with %d arguments\n", argc); DBG(printf("Use this if the compiler is really old, i.e. pre C99\n")); }

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Skrivet av Yoshman:

Finns lite olika sätt att fixa detta, två exempel

#include <stdio.h> #ifdef _DEBUG #define DPRINTF(format, ...) printf(format, __VA_ARGS__) #else #define DPRINTF(format, ...) #endif #ifdef _DEBUG #define DBG(statement) statement #else #define DBG(statement) #endif int main(int argc, char *argv[]) { DPRINTF("Only printed if _DEBUG is defined. main() called with %d arguments\n", argc); DBG(printf("Use this if the compiler is really old, i.e. pre C99\n")); }

Den nedre varianten har jag använt mig av tidigare i andra sammanhang. Den är behändig. Den första du visar är ny för mig. Ska fundera lite på den där. Oftast handlar det om printf men inte alltid.