Hallo, kennt jemand von euch eine Möglichkeit wie man einen String, der z.B. "23-01-2003 12:24:10" enthält, in das UNIX-Time-Format (time_t) umwandelt. Viele Grüße Bastian
On Thu, 23 Jan 2003, Bastian Schern wrote:
Hallo,
kennt jemand von euch eine Möglichkeit wie man einen String, der z.B. "23-01-2003 12:24:10" enthält, in das UNIX-Time-Format (time_t) umwandelt.
Wenn das Format fest ist in etwa so: struct tm tmp; if (sscanf (str, "%4d-%2d-%2d %2d:%2d:%2d", &tmp.tm_year, &tmp.tm_mon, &tmp.tm_mday, &tmp.tm_hour, &tmp.tm_min, &tmp.tm_sec) != 6) return (time_t)(-1); tmp.tm_year -= 1900; tmp.tm_mon -= 1; return timelocal (&tmp); // oder timegm Das Datum aber bitte in ISO 8601 angeben, also 2003-01-23. ciao Arvin -- Dipl.-Phys. Arvin Schnell Research & Development email: arvin@suse.de
Arvin Schnell schrieb:
On Thu, 23 Jan 2003, Bastian Schern wrote:
Hallo,
kennt jemand von euch eine Möglichkeit wie man einen String, der z.B. "23-01-2003 12:24:10" enthält, in das UNIX-Time-Format (time_t) umwandelt.
Wenn das Format fest ist in etwa so:
struct tm tmp;
if (sscanf (str, "%4d-%2d-%2d %2d:%2d:%2d", &tmp.tm_year, &tmp.tm_mon, &tmp.tm_mday, &tmp.tm_hour, &tmp.tm_min, &tmp.tm_sec) != 6) return (time_t)(-1);
tmp.tm_year -= 1900; tmp.tm_mon -= 1;
return timelocal (&tmp); // oder timegm
Das Datum aber bitte in ISO 8601 angeben, also 2003-01-23.
ciao Arvin
Vielen Dank, genau das war's. Coole Lösung! Viele Grüße Bastian
Hallo, On Thu, 23 Jan 2003, Bastian Schern wrote:
kennt jemand von euch eine Möglichkeit wie man einen String, der z.B. "23-01-2003 12:24:10" enthält, in das UNIX-Time-Format (time_t) umwandelt.
man strptime (inwieweit das portabel ist weiss ich aber nicht) -dnh -- "Man kann sich auch die Brille an die Nase nageln. Alleskleber erpsart das lästige kämmen am Morgen." [Woko° in dag°]
On Thu, 2003-01-23 at 23:28, David Haller wrote:
Hallo,
On Thu, 23 Jan 2003, Bastian Schern wrote:
kennt jemand von euch eine Möglichkeit wie man einen String, der z.B. "23-01-2003 12:24:10" enthält, in das UNIX-Time-Format (time_t) umwandelt.
man strptime
(inwieweit das portabel ist weiss ich aber nicht)
Aus obiger man-Page: CONFORMING TO XPG4, SUSv2, POSIX 1003.1-2001. => Sehr portabel zwischen neuen Systemen, problematisch auf älteren. Ralf
Hallo, On Fri, 24 Jan 2003, Ralf Corsepius wrote:
On Thu, 2003-01-23 at 23:28, David Haller wrote: [..]
man strptime (inwieweit das portabel ist weiss ich aber nicht)
Aus obiger man-Page: CONFORMING TO XPG4, SUSv2, POSIX 1003.1-2001.
=> Sehr portabel zwischen neuen Systemen, problematisch auf älteren.
Ah gut, danke. Bei mir (glibc-2.1.3) steht das leider weder in der man- noch in der info-page. -dnh -- 25: Multithreaded Wir mußten ein Flußdiagramm malen, um es zu debuggen. (Kristian Köhntopp)
Ralf Corsepius schrieb:
On Thu, 2003-01-23 at 23:28, David Haller wrote:
Hallo,
On Thu, 23 Jan 2003, Bastian Schern wrote:
kennt jemand von euch eine Möglichkeit wie man einen String, der z.B. "23-01-2003 12:24:10" enthält, in das UNIX-Time-Format (time_t) umwandelt.
man strptime
(inwieweit das portabel ist weiss ich aber nicht)
Aus obiger man-Page:
CONFORMING TO XPG4, SUSv2, POSIX 1003.1-2001.
=> Sehr portabel zwischen neuen Systemen, problematisch auf älteren.
Bei mir geht es unter SuSE 7.3 nicht. Habe alle includes eingebunden, bekomme aber folgendes: implicit declaration of int strptime(...) ??? CU Bastian
Bastian Schern wrote:
Habe alle includes eingebunden, bekomme aber folgendes: implicit declaration of int strptime(...) ???
man strptime: NOTES (...) This function is available since libc 4.6.8. Linux libc4 and libc5 includes define the prototype unconditionally; glibc2 includes provide a prototype only when _XOPEN_SOURCE or _GNU_SOURCE are defined. Hast du "#DEFINE _XOPEN_SOURCE" vor das #include geschrieben? Peter
Peter Wiersig schrieb:
Bastian Schern wrote:
Habe alle includes eingebunden, bekomme aber folgendes: implicit declaration of int strptime(...) ???
man strptime: NOTES (...) This function is available since libc 4.6.8. Linux libc4 and libc5 includes define the prototype unconditionally; glibc2 includes provide a prototype only when _XOPEN_SOURCE or _GNU_SOURCE are defined.
Hast du "#DEFINE _XOPEN_SOURCE" vor das #include geschrieben?
Ja, das habe ich!
On Fri, 2003-01-24 at 12:00, Bastian Schern wrote:
Peter Wiersig schrieb:
Bastian Schern wrote:
Habe alle includes eingebunden, bekomme aber folgendes: implicit declaration of int strptime(...) ???
man strptime: NOTES (...) This function is available since libc 4.6.8. Linux libc4 and libc5 includes define the prototype unconditionally; glibc2 includes provide a prototype only when _XOPEN_SOURCE or _GNU_SOURCE are defined.
Hast du "#DEFINE _XOPEN_SOURCE" vor das #include geschrieben? So etwas schreibt man üblicherweise in CPPFLAGS und nicht in den Quellcode, also
gcc -D_XOPEN_SOURCE -o foo.o -c foo.c
Ja, das habe ich! Und tut's?
Ralf
Ralf Corsepius wrote:
So etwas schreibt man üblicherweise in CPPFLAGS und nicht in den Quellcode, also
gcc -D_XOPEN_SOURCE -o foo.o -c foo.c
Ja, das habe ich! Und tut's?
Bei mir (8.0) und auf einem 7.2er System klappt das Beispiel aus der Manpage auf beide Arten. Bastian, zeig mal den Code. Peter
Peter Wiersig schrieb: [...]
Bastian, zeig mal den Code.
Okay, ich habe mich bei dem #define verschrieben, jetzt übersetzt der code sauber. Allerdings stimmt die Kontrollausgabe nicht. #define _XOPEN_SOURCE #include <ctime> #include <cstring> #include <iostream> int main() { struct tm tm; char date[] = "2003-22-01 12:25:33"; strptime( date, "%Y-%m-%d %H:%M:%S", &tm ); cout << asctime( &tm ) << endl; return 0; } Ausgabe: ??? Feb134514209 -1073744552:1073831992:1074072648 2003 Total verhext. Ich seh' bestimmt den Wald vor lauter Bäume nicht mehr.
Hallo, * On Sat, Jan 25, 2003 at 01:30 AM (+0100), Bastian Schern wrote:
char date[] = "2003-22-01 12:25:33";
strptime( date, "%Y-%m-%d %H:%M:%S", &tm );
Gib mal ein Datum ein, das es nach Deiner Definition auch gibt, also z.B. "2003-01-22 12:25:33", oder ändere Deinen String entsprechend ab... ;-) Gruß Steffen
On Sat, 25 Jan 2003 at 09:26 (+0100), Steffen Moser wrote:
Hallo,
* On Sat, Jan 25, 2003 at 01:30 AM (+0100), Bastian Schern wrote:
char date[] = "2003-22-01 12:25:33";
strptime( date, "%Y-%m-%d %H:%M:%S", &tm );
Gib mal ein Datum ein, das es nach Deiner Definition auch gibt, also z.B. "2003-01-22 12:25:33", oder ändere Deinen String entsprechend ab... ;-)
Und beachte auch folgenden Abschnitt in der Manpage: In principle, this function does not initialize tm but only stores the values specified. This means that tm should be initialized before the call. Details differ a bit between different Unix systems. The GNU libc imple mentation does not touch those fields which are not explicitly specified, except that it recomputes the tm_wday and tm_yday field if any of the year, month, or day elements changed. Gruß, Bernhard -- "Wenn ein Politiker stirbt, kommen viele zur Beerdigung nur deshalb, um sicher zu sein, dass man ihn wirklich begräbt." -- Georges Clemenceau
Steffen Moser schrieb:
Hallo,
* On Sat, Jan 25, 2003 at 01:30 AM (+0100), Bastian Schern wrote:
char date[] = "2003-22-01 12:25:33";
strptime( date, "%Y-%m-%d %H:%M:%S", &tm );
Gib mal ein Datum ein, das es nach Deiner Definition auch gibt, also z.B. "2003-01-22 12:25:33", oder ändere Deinen String entsprechend ab... ;-)
Ups ;-), da ist ja der Wald! Mit diesem Datumsformat klappt es natürlich. Vielen Dank Bastian
Bernhard Walle schrieb: [...]
Und beachte auch folgenden Abschnitt in der Manpage:
In principle, this function does not initialize tm but only stores the values specified. This means that tm should be initialized before the call. Details differ a bit between different Unix systems. The GNU libc imple mentation does not touch those fields which are not explicitly specified, except that it recomputes the tm_wday and tm_yday field if any of the year, month, or day elements changed.
Genügt das als Initialisierung? struct tm tm = { 0 }; Viele Grüße Bastian
Hallo, On Sat, 25 Jan 2003 at 15:45 (+0100), Bastian Schern wrote:
Bernhard Walle schrieb: [...]
Und beachte auch folgenden Abschnitt in der Manpage:
In principle, this function does not initialize tm but only stores the values specified. This means that tm should be initialized before the call. Details differ a bit between different Unix systems. The GNU libc imple mentation does not touch those fields which are not explicitly specified, except that it recomputes the tm_wday and tm_yday field if any of the year, month, or day elements changed.
Genügt das als Initialisierung? struct tm tm = { 0 };
Mein Compiler akzeptiert das gar nicht. Habe ich auch noch nie gesehen.
Normalerweise funktioniert diese Art der Initialisierung nur bei Arrays
und hier wurde es auch nur Sinn machen, wenn zwischen den geschweiften
Klammern mehrere Elemente stehen wuerden.
Ich wuerde stattdessen folgendes machen:
#include
Hallo, On Sat, 25 Jan 2003, Bernhard Walle wrote:
On Sat, 25 Jan 2003 at 15:45 (+0100), Bastian Schern wrote: [struct tm initialisieren]
Genügt das als Initialisierung? struct tm tm = { 0 };
Mein Compiler akzeptiert das gar nicht.
Man koennte alle Elemente von struct tm explizit initialisieren: ==== struct tm t = { 0, 0, 0, /* seconds, minutes, hours */ 0, 0, 0, /* day, month, year */ 0, 0, 0, /* dow, diy, DST */ 0L, NULL /* gmtoff, tm_zone */ }; ==== [..]
Ich wuerde stattdessen folgendes machen: [..] memset(&tm, 0, sizeof(tm)); ^^^^^^^^^^ sizeof(struct tm) !
Oder gleich dynamisch allokieren:
====
#ifndef _XOPEN_SOURCE
#define _XOPEN_SOURCE 1
#endif
#include
Ok ich block den Penner. Kann ein bischen dauern hab urlaub ;) *schmatz* -- suse-linux-owner und flo in suse-linux
Hallo, On Sun, 26 Jan 2003 at 01:08 (+0100), David Haller wrote:
On Sat, 25 Jan 2003, Bernhard Walle wrote:
On Sat, 25 Jan 2003 at 15:45 (+0100), Bastian Schern wrote: [struct tm initialisieren]
Genügt das als Initialisierung? struct tm tm = { 0 };
Mein Compiler akzeptiert das gar nicht.
Man koennte alle Elemente von struct tm explizit initialisieren:
==== struct tm t = { 0, 0, 0, /* seconds, minutes, hours */ 0, 0, 0, /* day, month, year */ 0, 0, 0, /* dow, diy, DST */ 0L, NULL /* gmtoff, tm_zone */ }; ====
[..]
Ich wuerde stattdessen folgendes machen: [..] memset(&tm, 0, sizeof(tm)); ^^^^^^^^^^ sizeof(struct tm) !
Nicht unbedingt. Er hat ja eine Variable vom Typ struct tm mit dem Namen tm (keinen Pointer!) deklariert. Dann funktioniert auch sizeof(tm). Ich finde es aber ziemlich verwirrend die Variable genaus zu benennen wie den Produkttyp.
Oder gleich dynamisch allokieren:
Ich finde das ein wenig uebertrieben. Schliesslich muss man dann immer daran denken, den Speicher wieder freizugeben. Wozu den Aufwand? Gruß, Bern'der lieber einen Garbage Collector haette :-)'hard -- Es gibt keinen Grund, warum irgendjemand einen Computer in seinem Haus wollen würde. -- Ken Olson, Präsident der Digital Equipment Corp., (1977)
Hallo, On Sun, 26 Jan 2003, Bernhard Walle wrote:
On Sun, 26 Jan 2003 at 01:08 (+0100), David Haller wrote:
On Sat, 25 Jan 2003, Bernhard Walle wrote: [struct tm initialisieren] [..]
Ich wuerde stattdessen folgendes machen: [..] memset(&tm, 0, sizeof(tm)); ^^^^^^^^^^ sizeof(struct tm) !
Nicht unbedingt. Er hat ja eine Variable vom Typ struct tm mit dem Namen tm (keinen Pointer!) deklariert. Dann funktioniert auch sizeof(tm).
Sicher? ==== [snip includes] int main(void) { struct tm tm; printf("%u <=> %u\n", sizeof(tm), sizeof(struct tm)); return 0; } ==== $ make strptime_test $ ./strptime_test 44 <=> 44 *Glueck gehabt* Aber ob das portabel ist?
Ich finde es aber ziemlich verwirrend die Variable genaus zu benennen wie den Produkttyp.
Ack. "Better safe than sorry" ;)
Oder gleich dynamisch allokieren:
Ich finde das ein wenig uebertrieben. Schliesslich muss man dann immer daran denken, den Speicher wieder freizugeben. Wozu den Aufwand?
Och, ja, mach ich auch eher ungern, aber ab und an doch praktisch.
Gruß, Bern'der lieber einen Garbage Collector haette :-)'hard
Igitt. *g* -dnh -- 4: Garbage Collection Windows 95 (Kristian Köhntopp)
Hallo, On Sun, 26 Jan 2003 at 12:49 (+0100), David Haller wrote:
On Sun, 26 Jan 2003, Bernhard Walle wrote:
On Sun, 26 Jan 2003 at 01:08 (+0100), David Haller wrote:
On Sat, 25 Jan 2003, Bernhard Walle wrote: [struct tm initialisieren] [..]
Ich wuerde stattdessen folgendes machen: [..] memset(&tm, 0, sizeof(tm)); ^^^^^^^^^^ sizeof(struct tm) !
Nicht unbedingt. Er hat ja eine Variable vom Typ struct tm mit dem Namen tm (keinen Pointer!) deklariert. Dann funktioniert auch sizeof(tm).
Sicher?
Nein. Ich kenn's halt so. Mit irgendwelchen Standards kann ich nicht dienen.
Gruß, Bern'der lieber einen Garbage Collector haette :-)'hard
Igitt. *g*
-dnh
-- 4: Garbage Collection Windows 95 (Kristian Köhntopp)
Das war aber kein Zufall, oder? Gruß, Bernhard -- Das Leben ist nur ein Moment, der Tod ist auch nur einer. -- Schiller
Hallo, On Sun, 26 Jan 2003, Bernhard Walle wrote:
On Sun, 26 Jan 2003 at 12:49 (+0100), David Haller wrote:
On Sun, 26 Jan 2003, Bernhard Walle wrote:
On Sun, 26 Jan 2003 at 01:08 (+0100), David Haller wrote:
On Sat, 25 Jan 2003, Bernhard Walle wrote: [struct tm initialisieren] [..]
Ich wuerde stattdessen folgendes machen: [..] memset(&tm, 0, sizeof(tm)); ^^^^^^^^^^ sizeof(struct tm) !
Nicht unbedingt. Er hat ja eine Variable vom Typ struct tm mit dem Namen tm (keinen Pointer!) deklariert. Dann funktioniert auch sizeof(tm).
Sicher?
Nein. Ich kenn's halt so. Mit irgendwelchen Standards kann ich nicht dienen.
Ich auch nicht. Aber wie gesagt, ich hab den Fehler einmal gemacht, das 'struct' wegzulassen und hab's mir eine Lehre sein lassen. Und dass man Typnamen als Variablennamen missbraucht ist generell schlecht, sofern es der Compiler ueberhaupt schluckt.
Gruß, Bern'der lieber einen Garbage Collector haette :-)'hard Igitt. *g* [..] -- 4: Garbage Collection Windows 95 (Kristian Köhntopp)
Das war aber kein Zufall, oder?
Stimmt, diesmal nicht :) -dnh -- 34: Hacker Er weiß was über Computer, und wir sind sicher, daß er die Grünen wählt. (sonst: 'Multimediaentwickler') (Peter Berlich)
On Sun, 2003-01-26 at 13:20, Bernhard Walle wrote:
Hallo,
On Sun, 26 Jan 2003 at 12:49 (+0100), David Haller wrote:
On Sun, 26 Jan 2003, Bernhard Walle wrote:
On Sun, 26 Jan 2003 at 01:08 (+0100), David Haller wrote:
On Sat, 25 Jan 2003, Bernhard Walle wrote: [struct tm initialisieren] [..]
Ich wuerde stattdessen folgendes machen: [..] memset(&tm, 0, sizeof(tm)); ^^^^^^^^^^ sizeof(struct tm) !
Nicht unbedingt. Er hat ja eine Variable vom Typ struct tm mit dem Namen tm (keinen Pointer!) deklariert. Dann funktioniert auch sizeof(tm).
Sicher? Ja, oben wird mit sizeof(tm) die Grösse der Variable tm ermittelt.
Nein. Ich kenn's halt so.
Möglicherweise bist Du dann auf eine der typischen C vs. C++ Fallen
aufgelaufen und/oder verwendest nur C++:
Eine Variante des obigen Beispiels:
#include
On Sun, 26 Jan 2003 at 15:27 (+0100), Ralf Corsepius wrote:
On Sun, 2003-01-26 at 13:20, Bernhard Walle wrote:
On Sun, 26 Jan 2003 at 12:49 (+0100), David Haller wrote:
On Sun, 26 Jan 2003, Bernhard Walle wrote:
On Sun, 26 Jan 2003 at 01:08 (+0100), David Haller wrote:
On Sat, 25 Jan 2003, Bernhard Walle wrote: [struct tm initialisieren] [..]
Ich wuerde stattdessen folgendes machen: [..] memset(&tm, 0, sizeof(tm)); ^^^^^^^^^^ sizeof(struct tm) !
Nicht unbedingt. Er hat ja eine Variable vom Typ struct tm mit dem Namen tm (keinen Pointer!) deklariert. Dann funktioniert auch sizeof(tm).
Sicher? Ja, oben wird mit sizeof(tm) die Grösse der Variable tm ermittelt.
Nein. Ich kenn's halt so.
Möglicherweise bist Du dann auf eine der typischen C vs. C++ Fallen aufgelaufen und/oder verwendest nur C++:
Nein, mir war schon klar dass tm hier die Variable ist und der Typ nur zufaellig auch tm heisst. Bei selbstdefinierten Strukturen verwende ich eh meist sowas struct mystruct_ { int i; int d; }; typedef struct mystruct_ mystruct; Sonst vergesse ich das 'struct' nur andauernd. Ob das jetzt schonener Stil ist sei dahingestellt. Gruß, Bernhard -- The feature you'd like to have is probably already installed on your Linux system.
Bernhard Walle
Bei selbstdefinierten Strukturen verwende ich eh meist sowas
struct mystruct_ { int i; int d; }; typedef struct mystruct_ mystruct;
Sonst vergesse ich das 'struct' nur andauernd. Ob das jetzt schonener Stil ist sei dahingestellt.
Ich mache das davon abhängig, wie oft der struct verwendet wird. Ansonsten kombiniere ich das obige (soweit möglich): typedef struct mystruct_ { int i; int d; } mystruct; ;-)) Philipp -- Philipp Thomas Arbeit: pthomas@suse.de Entwicklung, SuSE Linux AG Privat: pth@t-link.de
On Monday 27 January 2003 01:30, Philipp Thomas wrote:
Bernhard Walle
[26 Jan 2003 17:48:34 +0100]: Bei selbstdefinierten Strukturen verwende ich eh meist sowas
struct mystruct_ { int i; int d; }; typedef struct mystruct_ mystruct;
Sonst vergesse ich das 'struct' nur andauernd. Ob das jetzt schonener Stil ist sei dahingestellt.
Ich mache das davon abhängig, wie oft der struct verwendet wird. Ansonsten kombiniere ich das obige (soweit möglich):
typedef struct mystruct_ { int i; int d; } mystruct;
Hi, also davon kann ich nur abraten, das bringt nur das gute Doxygen dazu Doku fuer 'mystruct_' und 'mystruct' zu erzeugen. Wie waere es denn mit: typedef struct { int i; int d; } mystruct; Ciao
On Mon, 2003-01-27 at 07:53, Sebastian Huber wrote:
On Monday 27 January 2003 01:30, Philipp Thomas wrote:
Bernhard Walle
[26 Jan 2003 17:48:34 +0100]: Bei selbstdefinierten Strukturen verwende ich eh meist sowas
struct mystruct_ { int i; int d; }; typedef struct mystruct_ mystruct;
Sonst vergesse ich das 'struct' nur andauernd. Ob das jetzt schonener Stil ist sei dahingestellt.
Ich mache das davon abhängig, wie oft der struct verwendet wird. Ansonsten kombiniere ich das obige (soweit möglich):
typedef struct mystruct_ { int i; int d; } mystruct;
Hi, also davon kann ich nur abraten, das bringt nur das gute Doxygen dazu Doku fuer 'mystruct_' und 'mystruct' zu erzeugen. Warum auch nicht?
"struct mystruct_" und "typedef mystruct" sind zwei verschiedene Dinge. Ralf
On Monday 27 January 2003 08:23 am, you wrote:
On Mon, 2003-01-27 at 07:53, Sebastian Huber wrote:
On Monday 27 January 2003 01:30, Philipp Thomas wrote:
Bernhard Walle
[26 Jan 2003 17:48:34 +0100]: Bei selbstdefinierten Strukturen verwende ich eh meist sowas
struct mystruct_ { int i; int d; }; typedef struct mystruct_ mystruct;
Sonst vergesse ich das 'struct' nur andauernd. Ob das jetzt schonener Stil ist sei dahingestellt.
Ich mache das davon abhängig, wie oft der struct verwendet wird. Ansonsten kombiniere ich das obige (soweit möglich):
typedef struct mystruct_ { int i; int d; } mystruct;
Hi, also davon kann ich nur abraten, das bringt nur das gute Doxygen dazu Doku fuer 'mystruct_' und 'mystruct' zu erzeugen.
Warum auch nicht?
"struct mystruct_" und "typedef mystruct" sind zwei verschiedene Dinge.
Ja, klar. Aber wozu braucht man 'struct mystruct_', wenn man den typedef hat?
On Mon, 2003-01-27 at 13:12, Sebastian Huber wrote:
On Monday 27 January 2003 08:23 am, you wrote:
On Mon, 2003-01-27 at 07:53, Sebastian Huber wrote:
On Monday 27 January 2003 01:30, Philipp Thomas wrote:
typedef struct mystruct_ { int i; int d; } mystruct;
Hi, also davon kann ich nur abraten, das bringt nur das gute Doxygen dazu Doku fuer 'mystruct_' und 'mystruct' zu erzeugen.
Warum auch nicht?
"struct mystruct_" und "typedef mystruct" sind zwei verschiedene Dinge.
Ja, klar. Aber wozu braucht man 'struct mystruct_', wenn man den typedef hat?
z.B. zum Bauen von rekursiven Datenstrukturen (Listen u.ä.):
typedef struct _mystruct {
struct _mystruct *next;
[..]
} mystruct ;
[Schau Dir mal die Header der Xt/Xaw/Xm usw. Widgets
(/usr/include/X11/[Xt|Xaw|Xm]/*P.h] an, sie arbeiten extensiv mit dieser
Konstruktion]
z.B. aus Portabilitätsgründen: Manche (Sehr alte) C-Compiler akzeptieren
typedef struct { } mystruct
nicht.
z.B. zur Datenkapselung/Opaquisierung
Public Header:
typedef struct _mystruct mystruct;
extern mystruct *mystruct_var;
Private Header:
include
participants (9)
-
Arvin Schnell
-
Bastian Schern
-
Bernhard Walle
-
David Haller
-
Peter Wiersig
-
Philipp Thomas
-
Ralf Corsepius
-
Sebastian Huber
-
Steffen Moser