compiler akzeptiert keine binärzahlen 0b001010

OP #1538704
Lesenswert?

Hi,

bei nem Kumpel (MAC) funktioniert das kompilieren meines Quelltextes 
nicht, welcher bei mir ordentlich durchläuft.

Ich verwende die Binärschreibweise 0b10101010 Ich hab mal was von makros 
gehöhrt, die man dazu braucht aber warum geht das  bei mir und bei ihm 
nicht, ich benutze doch auch keine makros jedenfalls nicht absichtlich. 
Wie kann man das bei ihm zum laufen bringen?
Gast #1538712
Lesenswert?

Die 0b... Schreibweise ist nicht Standardkonform und daher nicht 
portabel. Dazu kommt noch das diese Schreibweise (bis auf seltene 
Ausnahmen) absolut tötlich für die Lesbarkeit eines Quellcodes ist.
#1538730
Lesenswert?

na absolut tödlich ist sie nicht. wenn ich ein bitmuster an einem port 
brauche verwende ich diese schreibweise auch, weil man da direkt den 
zustand der einzelnen pins erkennen kann. ich verwende das manchmal 
sogar beim schreiben auf die control-ports weil ich zu faul bin 
irgendwelche abkürzungen für die "bitnamen" zu suchen die ich mal wieder 
vergessen habe.
Gast #1538760
Lesenswert?

Ben _ schrieb:
> wenn ich ein bitmuster an einem port
> brauche verwende ich diese schreibweise auch, weil man da direkt den
> zustand der einzelnen pins erkennen kann.

Bei sowas gehts vllt noch, wobei man das bei Hex nach sehr kurzer Zeit 
auch direkt sehen kann.

Das einzige mal wo ich diese Schreibweise verwendet hab war das 
ausnullen der oberen 6 Bits eines 16-Bit Wertes.


Ben _ schrieb:
> ich verwende das manchmal
> sogar beim schreiben auf die control-ports weil ich zu faul bin
> irgendwelche abkürzungen für die "bitnamen" zu suchen die ich mal wieder
> vergessen habe.

Für sowas muss man eh ins Datenblatt gucken und dann hat man dort doch 
auch die Bitnamen oO
Oder kennst du die entsprechenden Ports/Register alle auswendig?

Naja jedenfalls hat es mich bis jetzt immer angekotzt wenn ich eine 
Software von einem anderen benutzen musste und dort die 0b... 
Schreibweise verwendet wurde. War immer mehr Arbeit als sprechende Namen 
für bestimmte Bits.
#1538840
Lesenswert?

liegt wohl auch daran, daß ich zu 99,9% der einzige bin der in meinem 
quellcode rumwerkelt. wenn ich quellcode weitergebe (etwa PHP) dann 
versuch ich schon das verständlich zu schreiben. ist aber nur seeeehhhr 
selten der fall, bei der µC programmierung denke ich bislang nicht, daß 
irgendwer mal meinen quellcode braucht oder verstehen will. ansonsten 
wäre es halt auch eine frage ob sich's für mich lohnt. wenn sich 
irgendwer sein projekt ein wenig was kosten läßt (was ich heute auch als 
seeeehhr unwahrscheinlich ansehe) dann bekommt er auch vernünftigen 
quellcode, logisch.

bei den control-registern hab ich oft situationen, daß ich direkt sehe 
ich brauche nur die bits x und y auf 1, den rest 0. dann tippt sich 
0b... schneller als sich vielleicht noch einen fehler bei den "bitnamen" 
einzufangen. die HEX schreibweise nutz ich auch, etwa wenn nur ein bit 
zu setzen ist.
Gast #1538874
Lesenswert?

Sonke A. schrieb:
> und beim Thema, hat da noch jemand vorschläge zu?

Antworte erstmal hier drauf

Sven P. schrieb:
> Hier gcc (GCC) 4.3.2 auf Kubuntu, Binärdarstellung funktioniert
> einwandfrei. Übersetzt du zufällig mit -ansi oder --std=c89 oder sowas?


Ansonsten musst du bei dem Compiler halt mal gucken ob der überhaupt 
diese arstellung unterstützt. Sollte ja irgendwo auf der Homepage zu 
finden sein.
Gast #1538915
Lesenswert?

der "original" Gnu AVR-GCC kann die 0bXXXX-Schreibweise nicht, das ist 
Teil der WINAVR-Patches.
Manche Packager wenden diese auch für Linux-Distros an, was ja auch Sinn 
macht, dort sind auch etliche (wichtige) Bugfixes mit dabei.

Also, Lösung: Dem Kerl, der den AVR-GCC für den Mac verteilt, eine nette 
Mail schicken: er möge doch bitte die WINAVR-Patches mit anwenden.
Gast #1539324
Lesenswert?

Ungast schrieb:
> der "original" Gnu AVR-GCC kann die 0bXXXX-Schreibweise nicht, das ist
> Teil der WINAVR-Patches.
> Manche Packager wenden diese auch für Linux-Distros an, was ja auch Sinn
> macht, dort sind auch etliche (wichtige) Bugfixes mit dabei.
Bei meinem GCC handelt es sich nicht um den AVR-GCC, sondern um den 
normalen GCC. Aber mein AVR-GCC (Kubuntu) kommt auch mit den Bitmasken 
klar.
Gast #1539338
Lesenswert?

> Bei meinem GCC handelt es sich nicht um den AVR-GCC, sondern um den
> normalen GCC. Aber mein AVR-GCC (Kubuntu) kommt auch mit den Bitmasken
> klar.

Wie schon gesagt wurde, ist das nicht ISO-C-konform und noch nicht mal 
Teil des GCC. Wenn man also portablen Code schreiben will, darf man es 
nicht benutzen.
Gast #1539342
Lesenswert?

Rolf Magnus schrieb:
>> Bei meinem GCC handelt es sich nicht um den AVR-GCC, sondern um den
>> normalen GCC. Aber mein AVR-GCC (Kubuntu) kommt auch mit den Bitmasken
>> klar.
>
> Wie schon gesagt wurde, ist das nicht ISO-C-konform und noch nicht mal
> Teil des GCC. Wenn man also portablen Code schreiben will, darf man es
> nicht benutzen.
ISO-C ist es nicht, aber es ist Teil des GCC.
http://gcc.gnu.org/onlinedocs/gcc/Binary-constants.html
Gast #1539343
Lesenswert?

Sonke A. schrieb:
> er verwendet avr gcc 4.20 auf einem mac (OS 10.5.8)

Dann lebt er wohl in der Zukunft ;-)

Du meinst wahrscheinlich 4.2.0. Damals gab es die 0b-Syntax nur als
Patch, mittlerweile (4.3.x und 4.4.x) ist sie Bestandteil des
offiziellen GCC-Releases. Dein Kumpel braucht also nur zu patchen oder
upzudaten.
Gast #1539369
Lesenswert?

Sonke A. schrieb:
> Ich hab mal was von makros
> gehöhrt

Ach ja, falls dein Kumpel nicht updaten möchte/kann/darf: Hier ist das
Makro, von dem du gehört hast:
1
#define B(x) \
2
   0##x      & 0x01 | \
3
  (0##x>> 2) & 0x02 | \
4
  (0##x>> 4) & 0x04 | \
5
  (0##x>> 6) & 0x08 | \
6
  (0##x>> 8) & 0x10 | \
7
  (0##x>>10) & 0x20 | \
8
  (0##x>>12) & 0x40 | \
9
  (0##x>>14) & 0x80

Danach kannst du schreiben:
1
unsigned char a = B(10101010);

Mit dem richtigen Editor sind die 0b-Konstanten auch ganz fix in die
B-Makroaufrufe konvertiert. Beim Vim geht das bspw. mit dem Befehl
1
:%s/\<0b\([01]\+\>\)/B(\1)/g

Wenn die Konvertierung öfters benötigt wird, geht es auf ähnliche Weise
auch nichtinteraktiv mit dem Streameditor sed. Man könnte den Aufruf
sogar ins Makefile mit einbauen, so dass die C-Dateien beim Kompilieren
automatisch durch den Sed geschleust werden.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren