Initialisierungszwang

31/05/2010 - 13:14 von Curtis Newton | Report spam
Hallo,

ich habe ein struct, etwa sowas hier:
typedef struct
{
int len;
short *buf;
} BSPSTR;

sowie ein paar Funktionen, die als Parameter solch ein struct haben. Da
teste ich immer, ob das valide ist (Element buf!=NULL). Nun habe ich
eine Funktion init(BSPSTR*), die buf und len auf 0/NULL setzt.

Nun muss also jede Verwendung von BSPSTR so beginnen:

BSPSTR s;
init(&s);
...

Nun will ich den Anwender "zwingen", auch ja immer init(BSPSTR*)
aufzurufen. Okay, machste ein define, dachte ich mir:

#define DO_DECLARE_BSTR(name) BSPSTR name; init(&name);

Nun sieht natürlich jeder (außer mir), dass das nicht geht, weil u.a.
sowas dann nicht mehr geht:

DO_DECLARE_BSTR(str1);
DO_DECLARE_BSTR(str2);

Wie gehts dann aber? Wie löst man sowas?

Bye
 

Lesen sie die antworten

#1 Marcel Müller
31/05/2010 - 13:25 | Warnen spam
Hallo,

Curtis Newton wrote:
Nun muss also jede Verwendung von BSPSTR so beginnen:

BSPSTR s;
init(&s);
...

Nun will ich den Anwender "zwingen", auch ja immer init(BSPSTR*)
aufzurufen.



Das schreit ja förmlich nach C++.
Aber sei es drum, die Option hat man manchmal nicht.

Okay, machste ein define, dachte ich mir:

#define DO_DECLARE_BSTR(name) BSPSTR name; init(&name);

Nun sieht natürlich jeder (außer mir), dass das nicht geht, weil u.a.
sowas dann nicht mehr geht:

DO_DECLARE_BSTR(str1);
DO_DECLARE_BSTR(str2);

Wie gehts dann aber? Wie löst man sowas?



#define DO_DECLARE_BSTR(name) { BSPSTR name; init(&name); }


Marcel

Ähnliche fragen