• Das kreative Thema des Monats Oktober wird vor allem diejenigen unter Euch besonders ansprechen, denen Do-it-yourself quasi im Blut liegt. Zeigt uns Eure Improvisationskünste oder fotografiert, was andere Leute sich so im Alltag zusammengestrickt haben. --> Zum Mitmachen bitte hier klicken

Ausgabe: C++ Code unter OS X anders als unter Win und Linux

drunkenkilla

Boskoop
Registriert
17.07.08
Beiträge
41
Hi Leute,

wieso wird unter OS X bei int* q eine 0 Ausgegeben und unter Win und Linux die Speicheradresse? Wird in OS X nicht der Gnu C++ Compiler verwendet? oder ist das hier wieder so ein modifizierter/angepasster von Apple?

Code:
[COLOR=#DF0001][COLOR=#7d4625]#include [/COLOR]<iostream>[/COLOR]

[COLOR=#ca00a6]usingnamespace[COLOR=#7c1aaf]std[/COLOR][COLOR=#000000];[/COLOR][/COLOR]


[COLOR=#ca00a6]int[/COLOR] main ([COLOR=#ca00a6]int[/COLOR] argc, [COLOR=#ca00a6]const[/COLOR] [COLOR=#ca00a6]char[/COLOR] * argv[])
{
    [COLOR=#ca00a6]int[/COLOR]* p = [COLOR=#4400e0]0[/COLOR];
    [COLOR=#ca00a6]int[/COLOR]* q;
    [COLOR=#7c1aaf]cout[/COLOR] << p << [COLOR=#df0001]" "[/COLOR] << q << [COLOR=#480086]endl[/COLOR];
    [COLOR=#ca00a6]if[/COLOR] (q != [COLOR=#4400e0]0[/COLOR]) {
        q = [COLOR=#ca00a6]new[/COLOR] [COLOR=#ca00a6]int[/COLOR];
        *q = [COLOR=#4400e0]10[/COLOR];
    }[COLOR=#ca00a6]else[/COLOR]{
        q = [COLOR=#ca00a6]new[/COLOR] [COLOR=#ca00a6]int[/COLOR];
        *q = [COLOR=#4400e0]20[/COLOR];
    }
    [COLOR=#7c1aaf]cout[/COLOR] << p << [COLOR=#df0001]" "[/COLOR] << q << [COLOR=#df0001]" "[/COLOR] << *q << [COLOR=#480086]endl[/COLOR];
    [COLOR=#ca00a6]return[/COLOR] [COLOR=#4400e0]0[/COLOR];
}

Ausgabe:
Code:
[B]0 0
[/B][B]0 0x100100a30 20[/B]
 
Mac OS X initliasiert grundsätzlich die meisten Pointer mit NULL. Und 0x0 wird als 0 ausgegeben

Und ja, Apple verwendet einen eigenen GCC (4.2.1-apple). Sonst einen llvm-gcc oder clang. Da du aber wahrscheinlich das über commandline machst, und gcc eingibst, wird es der llvm-gcc sein.

PS: Warum sollte man auf die Idee kommen primitive Datentypen per dynamische Speicherallokation anzulegen? Arbeite lieber mit Stackvariablen in C++ und nur verwende dynamische Allokationen eher für globale Daten. Das hält auch deinen Code sauber (sehr wenige * bzw. & Ausdrücke) und ist weniger Fehleranfällig. Wenn ich bedenke, dass mit einem int* i Operationen mittels &i, *i wie auch i möglich sind, wird mir schon fast schlecht.
 
ahh okay, ich habe zu oft gesehen, dass C++ als C + Objekte gesehen wird und fast vollkommen auf templates verzichtet wird und der gewohnte C Stil beibehalten wird. Das PS war sozusagen rein zur Vorbeugung.
 
ahh okay, ich habe zu oft gesehen, dass C++ als C + Objekte gesehen wird und fast vollkommen auf templates verzichtet wird und der gewohnte C Stil beibehalten wird. Das PS war sozusagen rein zur Vorbeugung.

OT: Boah ein Schlag ins Gesicht für alle C++ Programmierer :D