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
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.
Hi,
Du kannst z. B. in einer for-Schleife die Variablendeklaration zusammen
mit der Initialisierung durchführen:
1
for(inti;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
Daniel wrote:
> Hi,>> Du kannst z. B. in einer for-Schleife die Variablendeklaration zusammen> mit der Initialisierung durchführen:>>
1
>for(inti;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.
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.
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
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.