mikrocontroller.net

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


Autor: TomTom (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: let (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Du kannst z. B. in einer for-Schleife die Variablendeklaration zusammen 
mit der Initialisierung durchführen:
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

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Daniel wrote:
> Hi,
>
> Du kannst z. B. in einer for-Schleife die Variablendeklaration zusammen
> mit der Initialisierung durchführen:
>
>
> 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.
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.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wo liegt der denn preislich?

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gast wrote:
> wo liegt der denn preislich?

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

Autor: gast (Gast)
Datum:

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

Autor: TomTom (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.