Frage zim "__cdecl"



  • Nun ich habe ein paar fragen zu __cdecl. Ich habe das ding in dei funktion von Bill Gates Compiler gesehen.

    1. Wiso funktionier das nicht. z.b.
    bool __cdecl And(bool InA, bool InB)
    {
    	return ( InA & InB);
    }
    

    Ich sehe in mein worksapce immer noch __cdecl. oder ist der zweck von cdeclaration nicht die funktion zu verstecken?.

    1. Ist es gut cdecl zu benutzen?.

    2. Ist __cdecl ANSI C?.

    Ich weiss wirklich icht was das __cdecl macht aber bin sehr neugirich 😃 😃



    1. wo funktioniert das nicht? Oder was geht da nicht
    2. k.A. siehe http://msdn.microsoft.com/library/en-us/vccore98/html/_core___cdecl.asp
    3. nein, soweit ich weiß ist das eine reine M$ Erweiterung. (bin nicht sicher)


  • Master User schrieb:

    Wiso funktionier das nicht.

    ...ist keine aussagekräftige Fehlerbeschreibung. Nenn uns die Meldung des Compilers und wir reden weiter.

    Master User schrieb:

    Ich sehe in mein worksapce immer noch __cdecl. oder ist der zweck von cdeclaration nicht die funktion zu verstecken?.

    Nein, ist es nicht.

    Master User schrieb:

    Ist es gut cdecl zu benutzen?.

    Weder noch. Normalerweise wird eine Funktion ohne Aufrufkonvention deklariert / definiert. Dann kümmert sich der Compiler selbst darum, wie Aufrufe gehandelt werden. Die global benutzte Aufrufkonvention kann man aber idR auch mit Compilerflags anpassen.
    '__cdecl' zu benutzen ist aber auch nicht falsch oder böse, da man zB so sicherstellen kann, dass Schnittstellenfunktionen immer richtig gehandelt werden, egal welche Aufrufkonvention vom Compiler global verwendet wird.

    Master User schrieb:

    Ist __cdecl ANSI C?.

    Nein, ist es nicht, auch wenn die meisten Compiler das unterstützen (bzw 'cdecl'). Dir sollte bei deren Benutzung deshalb bewusst sein, dass du dich ausserhalb des definierten Standards bewegst.



  • Ok dann lass ichs lieber vilen dank jedenfahls.



  • > 3) Ist __cdecl ANSI C?.

    wenn du ein strikt konfromes Programm haben willst, dann darfst du die Funktion nicht benutzen, da sie nicht im Ansi C Standard definiert ist

    ANSI C schrieb:

    All identifiers that begin with an underscore and either an uppercase letter or another underscore are always reserved for any use.

    Das heißt z. B. für einen Compilerhersteller das er erweiterungen Einführen kann mit einenm unterstrich und dabei nicht reskiert einen Identifer zu erzeugen, der schon anders verwendet wird.


Anmelden zum Antworten