_ und __



  • johny_legend schrieb:

    _ steht für Betriebssystemabhängigkeit,
    __ für Compiler- und Betriebssystemabhängigkeit

    Was mir schon bei mehreren embedded- Compilern untergekommen ist, daß aus (Inline-) ASM- Sicht die Funktionsnamen auf Label mit führendem Unterstrich abgebildet werden, also so

    void MyFunction(void)
    {
    	// do something
    }
    // ...
    asm("	jsr.w	_MyFunction	; MyFunction ausführen");
    

    Das tiefere Schema dahinter ist mir zwar nicht 100%ig klar, 😕 nehme aber an, daß so die Sichtbarkeit der Namensräume auf Assemblerebenen gehandelt wird. Beim Disassemblieren sind mir auch schon Library- Funktionen aufgefallen, die mit "__" bzw. drei Underscores daherkommen.
    Würde für johny_legends Erklärung sprechen ...



  • ^^mit dem _ (und anderen 'decorations') werden zusätzliche informationen für den linker angehängt. z.b. macht der msvc aus einer funktion 'hello()' mit der calling convention 'cdecl' ein '_hello'. hat sie die calling convention 'stdcall', dann macht er daraus '_hello@0'. das hat nix mit underscores zu tun, die im c-quelltext auftauchen. eine 'cdecl _hello()' würde z.b. zu '__hello' (also mit 2 _, den davorgebastelten vom compiler und den vom funktionsnamen).
    🙂


Anmelden zum Antworten