• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Was gibt es Schöneres als den Mai draußen in der Natur mit allen Sinnen zu genießen? Lasst uns teilhaben an Euren Erlebnissen und macht mit beim Thema des Monats Da blüht uns was! ---> Klick

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]
 

karolherbst

Danziger Kant
Registriert
11.05.07
Beiträge
3.878
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.
 

karolherbst

Danziger Kant
Registriert
11.05.07
Beiträge
3.878
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.
 

Loooki

Beauty of Kent
Registriert
15.09.09
Beiträge
2.169
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