Ακόμα κι αν η λύση σας λειτουργεί, προτιμώ την ακόλουθη προσέγγιση:
#include <stdio.h>
#define MACRO //or omitted
#ifdef MACRO
#define FUNCTION(a) Function(a);
#else
#define FUNCTION(a)
#endif
#ifdef MACRO
void Function(const char* str)
{
printf("%s\n", str);
}
#endif
int main(void)
{
FUNCTION("hello world")
getchar();
return 0;
}
Σημείωση : Η λειτουργία είναι το macro, Λειτουργία είναι το πραγματικό όνομα της συνάρτησης
Αυτό λειτουργεί καθορίζοντας τη λειτουργία macro (α) σε μια κλήση σε λειτουργία (const char *), όταν είναι ενεργοποιημένη η MACRO. Από την άλλη πλευρά, όταν MACRO είναι άτομα με ειδικές ανάγκες, οι κλήσεις προς ΛΕΙΤΟΥΡΓΙΑ (α) θα καθοριστούν σε τίποτα.
Έχω την τάση να προτιμούν αυτή τη μέθοδο, δεδομένου ότι θα ήταν ευκολότερο να αφηρημένη μακριά η μακροεντολή χρησιμοποιείται για να καθορίσει την κλήση σας από το μακροοικονομικό καθορισμό ορισμό της συνάρτησης σας. Μπορεί να έχετε περιπτώσεις όπου σε λειτουργία απελευθέρωση το μόνο που χρειάζεται να αφαιρέσετε κάποιες από τις κλήσεις για να λειτουργήσει. Σε αυτή την περίπτωση εξακολουθεί να απαιτείται ο ορισμός των λειτουργιών (). Για παράδειγμα:
#include <stdio.h>
#define DEBUG //or omitted
#ifdef DEBUG
#define FUNCTION(a) Function(a);
#else
#define FUNCTION(a)
#endif
void Function(const char* str)
{
printf("%s\n", str);
}
int main(void)
{
// Call function with Hello World only in debug
FUNCTION("hello world")
getchar();
// Call function with goodbye world in both debug and release
Function("goodbye world");
return 0;
}