Nabend Peter,
dank Dir nochmal für die Rückmeldung
die Bibliotheken sind gut dokumentiert und findet man überall im Netz, mit der Benutzung habe ich auch keine Probleme.
Wenn ich aber mal schauen will wie etwas implementiert wurde und dann auf folgende Konstukte in einer Datei stoße, bin ich echt überfordert
und das möchte ich nicht in meinem Code drin haben, weil ich es nicht verstehe, gebe ich gern zu.
Das muss ich ja auch nicht benutzen, ist mir klar, aber der Code steht ja dort nicht umsonst, also möchte ich ihn auch verstehen,
so wie ich auch mein Programm verstehe. (Meistens jedenfalls)
Das muss mir jetzt auch keiner auseinanderpflücken, das ist nur ein Beispiel
aus einer Header Datei, die ich eben mal geöffnet habe.
Ich meine solche Strickmuster:
Code:
#if defined _GNU_SOURCE && defined __GNUC__
#define strdupa(__s) \
(__extension__ ({const char *__in = (__s); \
size_t __len = strlen (__in) + 1; \
char * __out = (char *) __builtin_alloca (__len); \
(char *) memcpy (__out, __in, __len);}))
#define strndupa(__s, __n) \
(__extension__ ({const char *__in = (__s); \
size_t __len = strnlen (__in, (__n)) + 1; \
char *__out = (char *) __builtin_alloca (__len); \
__out[__len-1] = '\0'; \
(char *) memcpy (__out, __in, __len-1);}))
#endif /* _GNU_SOURCE && __GNUC__ */
wenn ein Header z.B. wie folgt aussieht, gibt er für mich auch wieder Sinn, da braucht man garnicht drüber diskutieren. Ist ein Auzug vom Keil Compiler C51
Code:
extern char *strcat (char *s1, char *s2);
extern char *strncat (char *s1, char *s2, int n);
extern char strcmp (char *s1, char *s2);
extern char strncmp (char *s1, char *s2, int n);
extern char *strcpy (char *s1, char *s2);
extern char *strncpy (char *s1, char *s2, int n);
extern int strlen (char *);
extern char *strchr (const char *s, char c);
extern int strpos (const char *s, char c);
extern char *strrchr (const char *s, char c);
extern int strrpos (const char *s, char c);
extern int strspn (char *s, char *set);
extern int strcspn (char *s, char *set);
extern char *strpbrk (char *s, char *set);
extern char *strrpbrk (char *s, char *set);
extern char memcmp (void *s1, void *s2, int n);
extern void *memcpy (void *s1, void *s2, int n);
extern void *memchr (void *s, char val, int n);
extern void *memccpy (void *s1, void *s2, char val, int n);
extern void *memmove (void *s1, void *s2, int n);
extern void *memset (void *s, char val, int n);
Das Problem ist, wie Ihr schon sagt, die Vielfältigkeit und das macht es einem Bitschieber nicht grade einfach noch durchzublicken.
und 4 Unterstriche gibt es dann auch schon mal: Auszug stdarg.h vom GCC
Code:
#if !defined (_VA_LIST_) || defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__) || defined (__sequent__) || defined (__FreeBSD__) || defined(WINNT)
/* The macro _VA_LIST_DEFINED is used in Windows NT 3.5 */
Lesezeichen