__declspec frage
-
un zwar:
irgendwie irgnorierd der dev-cpp wenn ich __declspec(naked) setzen will...
wenn ich jetzt ne funktion definiere dann sieht das so aus:long __fastcall funkt (long wert); asm("@_Z5funktl@4:"); asm("mov eax,ecx"); asm("inc eax"); asm("ret");
aber ich würd das lieber wie ne normale funktion dastehen haben... hat da jemand ne idee? Ich denk da an
__declspec(naked) long __fastcall funkt (long wert) { asm... ...... ...... }
nur leider ignorierd er das __declspec(naked)... hat da jemand ne elegantere Lösung oder muss ich mich an das oben gewöhnen???
cu Manuelh87
(bin neu mit dem dev-cpp den ich so
find aber der ist halt ein bisschen anders als vc++ ...)
-
__declspec(naked) ist kein Standard und afaik MSC. Da du GCC benutzt, musst du mal entsprechende Docs durchschauen, ob es da was Vergleichbares gibt. Könnte evtl. was mit __attribute__((???)) sein.
-
das ist __attribute__((naked)), funktioniert aber laut doku nicht für i386. als alternative zu __fastcall gibts noch __attribute__((regparm(n))), womit du bist zu 3 parameter per register übergeben kannst.
da du über ein-/ausgabe-/clobberlisten direkt mit dem compiler über registerbenutzung diskutieren kannst, ist ein kleines unscheinbares inline in vielen fällen dein freund, das ist immer noch die schnelleste 'aufrufkonvention'du solltest dir auch über geeignete wahl von sprungzielbezeichnern gedanken machen. insbes. für inline funktionen musst du auf zahlen ausweichen, die du wiederverwenden darfst (mit 1f springst du zur nächsten marke 1, mit 1b zur verherigen) - inline funktionen tauchen ja i.d.r. mehrfach auf und das würde sonst unzulässig sein (weil das label neu definiert wird).