compiler akzeptiert keine binärzahlen 0b001010

OP #1538704
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
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
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
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
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
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
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
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
> 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
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
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
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

Eine eigene Frage? Dieser Thread ist über 16 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.