jak opakować fprintf w funkcję?

jak opakować fprintf w funkcję?
0

Witam
Zamiast wywoływac za każdym razem:

Kopiuj
#ifdef PHYSIC_DEBUG
	if(mFile)
		fprintf(mFile, "mV = %f %f %f\n", mV.x, mV.y, mV.z);
    #endif

chciałbym wywoływać po prostu jakąś jedną funkcję a wszystko byłoby opakowane w niej. Jak coś takiego zrobić?

edytowany 1x, ostatnio: Rev
spartanPAGE
  • Rejestracja:około 12 lat
  • Ostatnio:około 11 godzin
0
  • varargs
  • makro z flakami

Co konkretnie chcesz uzyskać?

edytowany 1x, ostatnio: spartanPAGE
DR
  • Rejestracja:prawie 16 lat
  • Ostatnio:około rok
0

Jeśli wywołanie wygląda za każdym razem identycznie:

Kopiuj
#ifdef PHYSIC_DEBUG
#define LOG_DEBUG do \
    { \
        if(mFile) \
            fprintf(mFile, "mV = %f %f %f\n", mV.x, mV.y, mV.z); \
    } while (0)
#else
#define LOG_DEBUG do {} while (0)
#endif

Przykład wywołania:

Kopiuj
LOG_DEBUG;

W przeciwnym przypadku:

Kopiuj
#ifdef PHYSIC_DEBUG
#define LOG_DEBUG(file, ...) do \
    { \
        if(file) \
            fprintf(file, __VA_ARGS__); \
    } while (0)
#else
#define LOG_DEBUG(...) do {} while (0)
#endif

Przykład wywołania:

Kopiuj
LOG_DEBUG(anyFile, "anyValue = %f %f %f\n", anyValue.x, anyValue.y, anyValue.z);
Azarien
co ci daje to do?
DR
@Azarien Jeśli chodzi o efekt działania, to oczywiście niczego nie zmienia, natomiast taka konstrukcja makra symuluje dowolną instrukcję, która musi być zakończona średnikiem. http://stackoverflow.com/questions/257418/do-while-0-what-is-it-good-for

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.