2012-04-03 4 views
0

Ich habe eine C-Quelldatei, in der eines der Verfahren ist wie folgt definiert:Leere und Rückgabetyp

void QDECL prettyPrintf(int level) { 
    ////// some code. 
} 

Ich möchte, was wissen ist, QDECL.In diesem Fall ist es QDECL Art Rückkehr? Soweit mein kleines Wissen in C, eine 'Leere' nichts zurückgibt.So, ist es eine rechtliche Aussage?

+1

Go die Definition von QDECL findet Rückkehr - es einen erweitern werde [Aufruf Konvention] (http://en.wikipedia.org/wiki/Calling_convention). Nichts mit dem Rückgabetyp zu tun. –

+0

Ich habe noch nie davon gehört, aber es scheint ein Alias ​​für __cdecl zu sein. –

+0

meine Sorge hier ist, dass, wenn ich den oben genannten Code nach Java portiere, muss ich mich darum kümmern? – UVM

Antwort

1

Ich habe gerade überprüft die Definition von QDECL. Es ist

#define QDECL __cdecl 

Jetzt ist Ihre Erklärung wird,

void __cdecl prettyPrintf(int level) 

die noch eine Funktion, die void zurückgibt.

In der Tat QDECL noch nehmen (theoretisch) einige andere Formen ohne den Rückgabetyp Ihrer Funktion zu verändern. Es ist leicht

gewesen sein könnte
#define QDECL static 

nun Ihr Funktionsprototyp ist

void static prettyPrintf(int level) 

, die noch ein void Funktion

1

QDECL definiert die Aufrufkonvention. Dies ist ein Makro in einem der Header-Dateien definiert, die so etwas wie __cdecl oder __stdcall bewerten wird.

Dies hat keinen Einfluss auf dem Rückgabetyp der Funktion. Die Funktion ist immer noch eine void Funktion.

Sie Zustand in einem Kommentar:

Meine Sorge ist, dass der oben genannte Code, wenn ich Port Java, ich Sorge dafür nehmen müssen?

Kein tun Sie nicht. Dies ist ein reines Problem für die Schnittstellen zwischen verschiedenen nativen Code-Bibliotheken. Sobald der Code in Java ist, können Sie die Aufrufkonvention einfach ignorieren.

+0

Welchen Vorteil bringt es während der Laufzeit? Irgendwelche Leistungsverbesserungen? Oder ist das der Stil der Experten? – UVM

+0

@UNNI Es ist keine Frage der Leistung, der Vorteile oder des Codierungsstils. Es ist notwendig, einen binären Vertrag zwischen einer Bibliothek und einer anderen zu definieren. Dies ist eine Funktion, die in einer gemeinsam genutzten Bibliothek exportiert wird. Alle Parteien müssen beim Aufruf der Funktion dieselben Regeln verwenden.Die Aufrufkonvention kodifiziert diese Regeln. Lesen Sie hierzu: http://en.wikipedia.org/wiki/Calling_convention –

2

QDECL ist wahrscheinlich ein Präprozessor-Makro, das in einen calling convention Hinweis aufgelöst wird (z. B. __cdecl oder __stdcall); Dies definiert, wie Parameter in den Aufruf-Stack geschoben und bereinigt werden, aber es ändert nicht den Rückgabetyp der Funktion. Es wird hauptsächlich für die Interoperabilität verwendet, wenn Bibliotheken verwendet werden, die eine andere standardmäßige Aufrufkonvention als die des Clients verwenden.

Verwandte Themen