2010-12-10 7 views
1

Wie kann ich Zeiger auf Strukturen übergeben, die private Definitionen haben, ohne die Zeigertypen mit struct voranzutreiben?Übergabe von Zeigern an private Strukturen in C?

Zum Beispiel das funktioniert:

typedef struct Handle { 
    Ino ino; 
} Handle; 

bool handle_open(Handle **); 

Aber wenn ich die Struktur Definition in eine Quelldatei, andere Quelldateien sind gezwungen, bewegt struct Handle * zu verwenden, statt Handle *.

Antwort

5

Sie können typedef struct Handle Handle;. In diesem Fall ist Handle ein unvollständiger Typ (genau wie struct Handle).

+0

Dies scheint gut zu funktionieren. Allerdings bekomme ich Fehler, wenn der Typedef mehrmals auf den gleichen Typ ausgeführt wird. Irgendwie nervig, immer noch probier es aus. –

+0

Was bedeutet "zum selben Typ gemacht"? – lijie

+0

oh. Ich verstehe es. wie in, wenn Sie 'typedef struct Handle Handle; typedef struct Handle Handle; '? Es gibt einen Fehler, weil Sie das Typedef 'Handle' zweimal definieren. Wenn es in einer Headerdatei auftritt, verwenden Sie bitte include guards. – lijie

2

Dies sollte in einem Header gehen fein:

struct _Handle; 
typedef struct _Handle Handle; 

Dann Sie die aktuelle Definition von _Handle im Körper der Datei setzen können, die die Struktur tatsächlich manipuliert.

+2

wäre Ihre zweite Zeile ausreichend. es erklärt auch die 'struct'. –

0

wenn ich die Struktur Definition in einer Quelldatei, andere Quelldateien bewegen gezwungen struct Handle * zu verwenden, statt Griff *

Dann typedef der Zeiger anstelle von (oder zusätzlich zu) die Struktur.

+0

'typedef'-ing Zeiger Typen ist in der Regel keine gute Idee, und es ist nicht notwendig, hier. – jamesdlin

+0

Es ist eine gute Idee, wenn der aufrufende Code nur Zeiger auf was auch immer bekommen soll und sie nicht wissen müssen, dass es ein Zeiger ist (beide werden durch den Namen 'Handle' angedeutet). Zuletzt habe ich überprüft, es war eine gute Idee für Win32 (z. B. HWND) –

+1

Viele Dinge sind "gut genug" für Windows. Tatsächlich hat Windows "gut genug" geschrieben. –