Statische Deklaration einer Struktur
Ich versuche zu definieren, die eine statische Struktur und initialisiert deren Werte einmal, wenn es deklariert ist, aber ich bin mir nicht wirklich sicher, wie ich es tun würde.
Ich rufe eine Funktion in einer Schleife, und ich möchte zum initialisieren einer timespec
(speziell die tv_sec
- Wert) 0
(eine Art default-Wert) das erste mal die Funktion aufgerufen wird, aber nie wieder.
Ich weiß, ich kann dies tun mit ganzen zahlen und anderen einfachen Datentypen zu tun:
static int foo = 0
Aber ich wollen, das gleiche zu tun mit, mit einer Struktur, so dass es nicht so einfach.
Im wesentlichen, ich möchte, um dies zu tun: static struct timespec ts.tv_sec = 0;
Aber, dass es illegal, also muss ich wissen, die Rechtsform (falls vorhanden).
Helfen?
- Structs werden kann, initialisiert mit
{...}
ist, dass das, was du meinst? - das könnte funktionieren...
- ja, das Tat, danke, steckte es in eine Antwort und ich gebe Ihnen Kredit
- Der gute faul Nachricht ist: Wenn Sie wollen, um die null-initialisiert ein statisches Objekt, Sie brauchen nicht, etwas zu tun. Es ist null initialisiert standardmäßig.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zusammengesetzte Objekte, wie structs oder arrays sind initialisiert mit
= { ... }
Initialisierungen. Sie können entweder liefern Initialisierungen für aufeinander folgende Mitglieder der struct, beginnend mit der ersten, oder verwenden Sie C99 tagged AnsatzHinweis BTW, dass
= { ... }
Ansatz ist universeller als es vielleicht auf den ersten Blick. Skalare Objekte können auch initialisiert werden, mit solchen InitialisierungenBeachten Sie auch, dass
= { 0 }
wird null aus aller Datenfelder, die in das Aggregat-Objekt, nicht nur die erste.Schließlich beachten Sie, dass Objekte mit statischer Speicherdauer sind immer null initialisiert automatisch, was bedeutet, dass, wenn Sie nur deklarieren,
sind Sie bereits garantiert, um am Ende mit null initialisiert Objekt. Keine Notwendigkeit, um es explizit tun.
Statisches Objekt, egal ob es sich um ein struct, union, array-oder basic-Typ ist immer "null" initialisiert, in der Abwesenheit einer expliziten Initialisierung. Verwenden Sie einfach
Anstelle der Initialisierung mit einem "ungültig" - Wert, können Sie einfach eine weitere variable:
Vorteile:
1. Etwas mehr klar.
2. Keine Notwendigkeit zu finden, eine "Magie" - Wert, die nie verwendet werden.