Dennis schrieb:
> Guten Morgen,
>
> gibt es eine Möglichkeit, über eine Präprozessoranweisung (wie z.B.
> #ifdef)
> abzufragen, ob für eine Funktion der Funktionsprototyp existiert?
>
> Folgendes Problem:
>
> Ich habe eine h-Datei in der es einen Funktionsaufruf gibt. Diesen
> Aufruf möchte ich aber nur machen, wenn in der c-Datei, in der die
> Header-Datei definiert wurde, auch der Funktionsprototyp existiert.
> Ansonsten soll der Funktinsaufruf nicht compiliert werden.
>
> Geht sowas?!
Mal geraten: Du meinst sowas wie
debug.h:
1 | #ifndef DEBUG_H
|
2 | #define DEBUG_H
|
3 |
|
4 | extern void debug_printf (char * format, ...);
|
5 |
|
6 | #endif /* DEGUG_H */
|
In der C-Datei geht dann sowas wie
1 | #include "debug.h"
|
2 |
|
3 | ...
|
4 | {
|
5 | ....
|
6 | #ifdef DEBUG_H
|
7 | debug_printf ("Hallo %d\n", 123);
|
8 | #endif /* DEBUG_H */
|
9 | ....
|
10 | }
|
Es geht auch so, dann muss man nicht zig #ifdefs in die Quelle machen:
1 | #include "debug.h"
|
2 |
|
3 | #ifdef DEBUG_H
|
4 | #define DEBUG_PRINTF(y,z...) debug_printf (y , ##z)
|
5 | #else
|
6 | #define DEBUG_PRINTF(...) (void) 0
|
7 | #endif /* debug.h */
|
8 |
|
9 | ...
|
10 | {
|
11 | ...
|
12 | DEBUG_PRINTF ("Hallo %d\n", 123);
|
13 | ...
|
14 | }
|
oder, wobei DEBUG zB aus dem Makefile, also im Endeffekt aus der
gcc-Kommandozeile per -DDEBUG=1, kommt:
1 | #if DEBUG /* oder #ifdef */
|
2 | #include "debug.h"
|
3 | #else
|
4 | #define debug_printf(...) (void) 0
|
5 | #endif /* DEBUG */
|
6 |
|
7 | ...
|
8 | {
|
9 | ...
|
10 | debug_printf ("Hallo %d\n", 123);
|
11 | ...
|
12 | }
|