Unterschied zwischen Funktion und Makro ?
-
nix da schrieb:
Aber inline-Funktionen genau so schnell wie Makros? LOL nee komm, probier besser erstmal aus... So einen Schwachsinn gibts echt selten.
Zeig doch einfach nur einmal einen Beweis her.
Hier ist meiner:_main PROC NEAR .B1.1: ; Preds .B1.0 ;;; { push ebx ;9.1 mov ebx, esp ;9.1 and esp, -16 ;9.1 ;;; std::cout<<"start\n"; push OFFSET FLAT: ??_C@_06A@start?6?$AA@ ;10.3 push OFFSET FLAT: ?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A ;10.3 call ??6std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z ;10.3 ; LOE ebp esi edi .B1.2: ; Preds .B1.1 ;;; ;;; { ;;; std::cout<<"direkt im code\n"; push OFFSET FLAT: ??_C@_0BA@A@direkt?5im?5code?6?$AA@ ;13.5 push OFFSET FLAT: ?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A ;13.5 call ??6std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z ;13.5 ; LOE ebp esi edi .B1.3: ; Preds .B1.2 ;;; } ;;; ;;; std::cout<<"halbzeit\n"; push OFFSET FLAT: ??_C@_09A@halbzeit?6?$AA@ ;16.3 push OFFSET FLAT: ?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A ;16.3 call ??6std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z ;16.3 ; LOE ebp esi edi .B1.4: ; Preds .B1.3 ;;; ;;; { ;;; test(); push OFFSET FLAT: ??_C@_0BA@A@ich?5bin?5inline?6?$AA@ ;19.5 push OFFSET FLAT: ?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A ;19.5 call ??6std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z ;19.5 ; LOE ebp esi edi .B1.5: ; Preds .B1.4 ;;; } ;;; ;;; std::cout<<"ende\n"; push OFFSET FLAT: ??_C@_05A@ende?6?$AA@ ;22.3 push OFFSET FLAT: ?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A ;22.3 call ??6std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z ;22.3 ; LOE ebp esi edi .B1.9: ; Preds .B1.5 add esp, 40 ;22.3 ; LOE ebp esi edi .B1.6: ; Preds .B1.9 ;;; } xor eax, eax ;23.1 mov esp, ebx ;23.1 pop ebx ;23.1 ret ;23.1 ALIGN 4 ; LOE ; mark_end; _main ENDP
Der C++ Code dazu:
#include <iostream> inline int test() { std::cout<<"ich bin inline\n"; } int main() { std::cout<<"start\n"; { std::cout<<"direkt im code\n"; } std::cout<<"halbzeit\n"; { test(); } std::cout<<"ende\n"; }
Ansonsten falls der Herr es ja nich glauben will: Zieh Dir den Assemblercode zu rate.
Dies habe ich hiermit getan
Ja, ich weiss, du willst nur trollen - aber damit habe ich dir wohl den Wind aus den Segeln genommen - obwohl die Idee garnicht mal schlecht ist, darauf zu bauen, dass alle zu faul sind dir einen Gegenbeweis zu bringen (und du selbst kannst ja keinen beweis bringen) - dann hast du eine Pattstellung und Newbies glauben dir dann vielleicht sogar.
Nicht dumm, nicht dumm.
-
@Shade Of Mine
Wahrscheinlich ist er einfach nur so verblendet, dass er nicht weiß, wie er seinen Compiler einstellen muss, damit dieser hübsch effizienten Code generiert. Kennt man ja: volles Mett Debug-Informationen anschalten (und Optimierung aus) und sich dann wundern, dass das Programm 20 MB groß ist und keine einzige Funktion inline generiert wird.
-
Shade: Man muss aber fairerweise sagen, dass das kein besonders gutes Beispiel ist. Mach dasselbe nochmal mit max().
-
Bashar schrieb:
Shade: Man muss aber fairerweise sagen, dass das kein besonders gutes Beispiel ist. Mach dasselbe nochmal mit max().
http://www.c-plusplus.net/forum/viewtopic.php?t=73480&start=15
-
Diese Diskussion sieht ja böse aus...
-
Oder ihn hat die Freude daran mich fertigzumachen angetrieben, kommt nicht selten vor.