Forum: Compiler & IDEs IAR C++ Compiler / C++ Standart


von TomTom (Gast)


Lesenswert?

Hallo,
ich habe die Aufgabe den IAR C++ Compiler mit dem C++ Standard zu 
vergleichen. Neben den Punkten im IAR Datenblatt interessieren mich auch 
speziellere Probleme/Unterschiede die sich vielleicht bei der intensiven 
Anwendung ergeben. Vielleicht sind jemandem ja Unterschiede aufgefallen! 
Bin über jeden Hinweis sehr dankbar!!
Viele Grüße, TomTom

von let (Gast)


Lesenswert?

Versuche dein Glück doch mal im LPC2000 Forum von Yahoo.
Der IAR Compiler scheint mir unter den Mitgliedern dort recht
verbreitet zu sein.

Ich könnte mir auch vorstellen das IAR selbst ein Forum
betreibt.

von Daniel (Gast)


Lesenswert?

Hi,

Du kannst z. B. in einer for-Schleife die Variablendeklaration zusammen 
mit der Initialisierung durchführen:
1
for (int i; i < 10; i++)

Ist das konform nach C++? Die hier sagen ja (2. Absatz nach dem Code): 
http://mathbits.com/mathbits/compsci/looping/for.htm
In ANSI-C ist es soweit ich weiß nicht erlaubt.

Was ich aber zumindest beim IAR als Bug betrachte ist der Umstand, dass 
er mir Variablen größer als 8 Bit auch auf ungerade Adressen ablegt. 
Kopierst du diese Variablen um, gehen dir Bytes verloren (siehe 
Alignment). Das wird nicht angemeckert! Keine Warnung, kein Fehler, gar 
nix.

Das IAR sein eigenes Süppchen kocht siehst du schon an den Librarys: Die 
heißen da .r43 (genau wie die Object-Files). Irgendwelche anderen Libs 
einbinden: Fehlanzeige. Dann musst du den Sourcecode erst mit XAR zu ner 
.r43 packen und dann einbinden.

Was willst du denn machen? Will sich deine Firma den anschaffen? Wenn 
ja, bedenke, dass der nur mit nem USB-Dongle compilieren kann. Das ist 
manchmal ziemlich nervig, wenn mehrere Leute programmieren wollen. Dann 
geht das Gesuche los, wer denn gerade den Dongle in welchem Rechner 
stecken hat.

Den gcc gibts ja auch für viele Platformen und das für Win, Linux und 
Mac. Der lässt dich optimal in viele Entwicklungsumgebungen einbinden.

Der Debugger bzw. Simulator beim IAR ist aber ganz ok.

Grüße
Daniel

von Sven P. (Gast)


Lesenswert?

Daniel wrote:
> Hi,
>
> Du kannst z. B. in einer for-Schleife die Variablendeklaration zusammen
> mit der Initialisierung durchführen:
>
>
1
> for (int i; i < 10; i++)
2
>
>
> Ist das konform nach C++? Die hier sagen ja (2. Absatz nach dem Code):
> http://mathbits.com/mathbits/compsci/looping/for.htm
> In ANSI-C ist es soweit ich weiß nicht erlaubt.
Mal etwas weiter ausgeholt: Das ANSI hat C im Jahre 1989 standardisiert. 
Das ist das sogenannte "ANSI-C". Das ANSI ist weiterhin Mitglied der 
ISO. Und ebendiese ISO hat u.A. 1999 die veraltete ANSI-C-Norm überholt, 
und seit dem sind unter Anderem Variablendeklarationen in der 
for-Schleife erlaubt. Genauso übrigens wie inline, bool, uint8_t, 
Komplexe Zahlen, Variablendeklarationen mitten in Funktionen, 
'//'-Kommentare, volatile, const und "and" und "or" etc.

> Was ich aber zumindest beim IAR als Bug betrachte ist der Umstand, dass
> er mir Variablen größer als 8 Bit auch auf ungerade Adressen ablegt.
> Kopierst du diese Variablen um, gehen dir Bytes verloren (siehe
> Alignment). Das wird nicht angemeckert! Keine Warnung, kein Fehler, gar
> nix.
Langsam -- wo der Compiler seine Variablen ablegt, ist ihm überlassen, 
dabei ist alles erlaubt. Und wenn du dann korrekt kopierst, geht da auch 
nix verloren.

> Das IAR sein eigenes Süppchen kocht siehst du schon an den Librarys: Die
> heißen da .r43 (genau wie die Object-Files). Irgendwelche anderen Libs
> einbinden: Fehlanzeige. Dann musst du den Sourcecode erst mit XAR zu ner
> .r43 packen und dann einbinden.
Meinst du Bibliotheken oder Quelltexte? Bibliotheken können heißen, wie 
sie wollen, bei mir z.B. .so oder .o, je nachdem wo und wie und warum. 
Quelltexte selbst dürfen auch heißen, wie sie wollen. Dass die meisten 
Compiler da Präferenzen haben, ist Kosmetik. Bei mir heißen die z.B. .C, 
.cc, .c++ oder .cpp.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Daniel wrote:

> Ist das konform nach C++?

Aber natürlich.  Allerdings hat sich der Scope der Variablen i über
die Jahre geändert: initial begann er ab der for-Anweisung und
endete am Ende des Blocks, in dem sich die for-Anweisung befindet.
Später hat man ihn eingeschränkt auf die for-Anweisung selbst.

> In ANSI-C ist es soweit ich weiß nicht erlaubt.

ANSI-C ist tot.  Seit 1990 heißt das ISO-C, und ist 1999 als
ISO/IEC 9899:1999 neu aufgelegt worden.  In diesem Standard ist
auch die Variablendeklaration innerhalb der for-Anweisung
enthalten.

Um zum Topic dieses Forums zurück zu kommen: auch GCC beherrscht
das natürlich im C99-Modus (-std=c99 oder -std=gnu99).

Nein, mit solchem Popelkram brauchst du dem IAR nicht kommen, in
der Beziehung ist er sehr ordentlich.  Er besitzt die sauberste
C99-Implementierung, die ich bislang bei einem Compiler gesehen
habe, einschließlich aller Winkelzüge in der Bibliothek.  Ist auch
kein Wunder, die Bibliothek haben sie von P. J. Plauger dazu
gekauft, und der Mann sitzt in der WG14 des ISO-Kommittees...

Da sie auch behaupten, eine Implementierung des EC++-Standards zu
besitzen, würde ich ihnen das einfach mal abkaufen.

> Das IAR sein eigenes Süppchen kocht siehst du schon an den Librarys: Die
> heißen da .r43 (genau wie die Object-Files).

Idiotischerweise je nach Zielplattform unterschiedlich.  Für manche
Controller können sie auch ELF/DWARF-2, aber auch für den AVR kochen
sie ihr eigenes, undokumentiertes Objektformat.

> Was willst du denn machen? Will sich deine Firma den anschaffen? Wenn
> ja, bedenke, dass der nur mit nem USB-Dongle compilieren kann.

Quatsch.  Er kann nur mit einer gültigen Lizenz compilieren, und das
Lizenzgeraffel bei denen ist in der Tat nervig (oder sogar noch
schlimmer als nervig).  Aber der USB-Dongle ist nur eine Variante,
du kannst auch nodelocked-Lizenzen erhalten und auch ein Lizenzserver
im Netz ist machbar.  Der kann dann auch in der Arbeitsgruppe die
Lizenz dynamisch zuteilen.

von gast (Gast)


Lesenswert?

wo liegt der denn preislich?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

gast wrote:
> wo liegt der denn preislich?

Jenseits von Gut und Böse, irgendwo im vierstelligen Bereich.

von gast (Gast)


Lesenswert?

au wei, da lebe ich bei C++ doch lieber mit den (kleinen) 
Einschränkungen des g++

von TomTom (Gast)


Lesenswert?

Hallo,
erstmal vielen Dank für die Antworten. Also es geht bei mir um eine 
Studienarbeit über den IAR Compiler. Deshalb ist es schwer auf 
alternativen...auszuweichen. Da ich die "großen" Unterschiede aus dem 
Datenblatt fast durch habe würden mich eben noch Dinge Interessieren die 
dort nicht genannt werden. Aber das hat eben so ein bisschen was von 
Nadel im Heuhaufen suchen...
Viele Grüße,
TomTom

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.