Forum: Compiler & IDEs Binärzahlen unter linux nicht möglich?, Makefile-Portierun


von Michael Z. (incunabulum)


Lesenswert?

Moin!

1) kennt jemand eine Erklärung, warum Zahlen im Binärformat wie 
"0b00111100" unter WinAVR akzeptiert werden, diese aber unter Linux eine 
Fehlermeldung "invalid suffix "b00001100" on integer constant" liefern?

2) Desweiteren funktioniert unten aufgeführter Build-Step unter Windows 
(WinAVR Current) problemlos, wird unter Linux aber nicht erkannt. 
Fehler: "make: *** No rule to make target `pcModular-TestBench.elf', 
needed by `elf'.  Stop."
1
# Link: create ELF output file from object files.
2
.SECONDARY : $(TARGET).elf
3
.PRECIOUS : $(OBJ)
4
%.elf: $(OBJ)
5
  @echo
6
  @echo $(MSG_LINKING) $@
7
  $(CC) $(ALL_CFLAGS) $^ --output $(BUILDDIR)/$@ $(LDFLAGS)

avr-gcc 4.1, make 3.81 in beiden Fällen. Kann dies mit unterschiedlichen 
Build-Optionen von WinAVR und "Ubuntu" avr-gcc zusammenhängen?

cu, mz

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Diese Schreibweise von Binärzahlen ist nicht Bestandteil des 
C-Standards. WinAVR ist dahingehend erweitert worden, "richtige" 
C-Compiler aber kennen sowas nicht.

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


Lesenswert?

Rufus t. Firefly wrote:

> ..., "richtige"
> C-Compiler aber kennen sowas nicht.

Bei GCC ist es mittlerweile offiziell drin.  Damit hat sich zumindest
der Teil der Argumentation aus dem C99-Rationale erledigt, der besagt,
dass der Vorschlag für Binärkonstanten ``due to lack of precedence''
nicht aufgenommen wurde. ;-)

von Michael Z. (incunabulum)


Lesenswert?

Jörg Wunsch wrote:
> Bei GCC ist es mittlerweile offiziell drin.  Damit hat sich zumindest
> der Teil der Argumentation aus dem C99-Rationale erledigt, der besagt,
> dass der Vorschlag für Binärkonstanten ``due to lack of precedence''
> nicht aufgenommen wurde. ;-)

Bleibt die Frage, warum mein gcc 4.1 dies nicht kann. Oder kam das 
danach? 4.2.x? Trotzdem gut zu wissen :)

cu, mz

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


Lesenswert?

Michael Z. wrote:

> Bleibt die Frage, warum mein gcc 4.1 dies nicht kann.

Weil der dafür zu alt ist.  Ich habe das Feature mal implementiert, weil
es hier im Forum jemand haben wollte. :-)  Von da ist es dann in die
FreeBSD- und WinAVR-Distribution geraten, und irgendwann habe ich mich
hingesetzt, und es mal ordentlich bei GCC als Patch eingereicht.  Hat
anfangs auch ein wenig Argumentation gekostet, GCC möchte nicht
unbedingt creaping featurism bekommen, aber man konnte meiner Argument-
ation folgen.

> Oder kam das
> danach? 4.2.x?

4.2.x habe ich mir noch nicht angeguckt, kann sein, dass es sogar erst
nach dem 4.2er Branch in den SVN-Trunk gekommen ist.

von Michael Z. (incunabulum)


Lesenswert?

Jörg, danke dir. Denn heisst es bei Gelegenheit selber compilieren...

von yalu (Gast)


Lesenswert?

> 4.2.x habe ich mir noch nicht angeguckt, kann sein, dass es sogar
> erst nach dem 4.2er Branch in den SVN-Trunk gekommen ist.

In 4.2.1 ist's noch nicht drin.

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.