IAR C++ Compiler / C++ Standart

Gast #1025701
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
Gast #1026998
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.
Gast #1027033
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
Gast #1027058
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.
Moderator Persönliche Seite #1027066
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.
Gast #1030021
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.