Re: Beitrag "Re: Mikrokontroller Crash Kurs mit ANSI-C, mit ATMega Register Nutzung" Nun, der Kampf gegen Windmühlen war erfolgreich: der Vorschlag ist soeben einstimmig angenommen worden. ;-) C23 wird also binäre Konstanten enthalten.
Gast
#6443256
Herzlichen Glückwunsch und vielen Danke!
Gast
#6443329
Die kann der XC8 ja schon ewig.
Beitrag #6443332 wurde von einem Moderator gelöscht.
Larry schrieb: > Die kann der XC8 ja schon ewig. Das ändert nichts daran, dass der C-Standard das bislang nicht spezifiziert hatte. Im GCC ist es seit 2007 drin. Captain Teemo schrieb im Beitrag #6443332: > C++ kann das schon lange.... Sooo lange nun auch wieder nicht. Es ist seit C++14 drin. Allerdings produziert die WG14 nicht so inflationär viele :) Standards wie WG21, der letzte C-Standard ist von 2011 (C17 ist nur ein "bugfix release", also keine inhaltlichen Änderungen). Aber ja, inzwischen können so ziemlich alle anderen relevanten Programmiersprachen das, nur C hinkte hier hinterher - weshalb ich mich ja auch gemüßigt gefühlt habe, das mal dort einzutüten. Wenn's halt sonst keiner macht …
Gast
#6443417
Wird man einfach nur 0b00001111 direkt in den Variablen ablegen könnnen oder kommt noch mehr dazu? (z.B. %b für Format-String bei printf-Funktion - wie %x für die Hex-Zahlen oder %o für die Octal-Zahlen usw.) Sonst macht es ja wenig Sinn PS: Seit wann können die C-Programmierer keine 16 Hex-Zahlen merken? ;-)
naja ;-) schrieb: > Wird man einfach nur 0b00001111 direkt in den Variablen ablegen könnnen > oder kommt noch mehr dazu? Das ist das, was jetzt erstmal angenommen worden ist. Parallel wurde vorgeschlagen, eine Gruppierung von Ziffern vornehmen zu können. Da C++ das schon hat (oder auch gerade im Begriff ist einzuführen), hat sich der Aufgabe jemand angenommen, der das mit WG21 koordiniert. Es wird wohl ein Apostroph werden als Trennzeichen, kein Unterstrich (wie in Rust oder VHDL). Das wurde damit begründet, dass ein Unterstrich ein gültiger Bezeichner im Präprozessor ist, was zu Schwierigkeiten führt, wenn diesen jemand per #define belegt hat. > (z.B. %b für Format-String bei > printf-Funktion - wie %x für die Hex-Zahlen oder %o für die Octal-Zahlen > usw.) Witzigerweise wurde genau diese Frage im Meeting dann gestellt. ;-) Ich habe mich bereit erklärt, dafür einen Vorschlag einzureichen. Was er genau beinhaltet, steht dabei aber noch zur Diskussion. Insbesondere wäre es natürlich interessant zu wissen, ob es bereits irgendwelche existierenden Implementierungen für sowas gibt, denn es ist gängige Praxis, möglichst das zu standardisieren, was es schon gibt. > PS: Seit wann können die C-Programmierer keine 16 Hex-Zahlen merken? ;-) Können sie schon, aber es ist natürlich viel beschreibender, wenn du den Smiley für dein LCD so darstellen kannst:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
statt:
1 | |
2 | |
3 | |
Gast
#6443469
Jörg W. schrieb: > Da C++ das schon hat (oder auch gerade im Begriff ist > einzuführen), hat sich der Aufgabe jemand angenommen, der das mit WG21 > koordiniert. Es wird wohl ein Apostroph werden als Trennzeichen, kein > Unterstrich (wie in Rust oder VHDL). Existiert seit c++14 und ist ein Apostroph
1 | |
Das wird es dann in C wohl auch werden. Hat ja auch Sinn, dass die beiden da gleichermaßen agieren.
Gast
#6455769
Jörg W. schrieb: > Nun, der Kampf gegen Windmühlen war erfolgreich: der Vorschlag ist > soeben einstimmig angenommen worden. ;-) Dann schlag doch auch mal vor, dass Bit-Arrays unterstützt werden, um Speicherplatz zu sparen.
Dirk F schrieb: > Dann schlag doch auch mal vor, dass Bit-Arrays unterstützt werden, um > Speicherplatz zu sparen. Naja, vorschlagen kann man viel. Akzeptanz findet vor allem das, was allgemein (oder zumindest von einer größeren Nutzergruppe) als nützlich empfunden wird. Insbesondere sollte es entweder extrem wesentlich erscheinen, sowas in der Sprache zu haben, oder aber es sollte vorherige (und erfolgreich etablierte) Implementierung(en) dafür geben. Letzteres habe ich mit binären Konstanten vor 13 Jahren im GCC unterbringen können, und sie sind ganz offenbar seither auch tatsächlich benutzt worden. OK, man hätte vielleicht nicht unbedingt 13 Jahre warten müssen, aber für deinen Vorschlag wäre es wohl der erste Schritt, in einer Beispielimplementierung zu demonstrieren, dass das Ganze mehr als nur Arbeit für den Compilerbauer bringt … Da N-bit Integers bereits als Bestandteil von C23 auf dem Plan stehen, könnte es natürlich sein, dass man in deinem Falle mit einem Array von _ExtInt(1) arbeiten kann … allerdings fürchte ich, dass das nur deshalb, weil der Standard es prinzipiell vorsieht, noch lange nicht von jedem Compiler für jedes Zielsystem unterstützt sein muss. :} Ziel der _ExtInt()-Geschichte ist es nach meinem Verständnis vor allem, dass man für Umgebungen wie FPGAs, die Zahlen in beliebiger Bitlänge darstellen können, dem Compiler überhaupt die passenden Möglichkeiten in die Hand gibt, dafür eine Unterstützung in der Sprache zu implementieren.
Gast
#6455800
Dirk F schrieb: > Jörg W. schrieb: >> Nun, der Kampf gegen Windmühlen war erfolgreich: der Vorschlag ist >> soeben einstimmig angenommen worden. ;-) > > Dann schlag doch auch mal vor, dass Bit-Arrays unterstützt werden, um > Speicherplatz zu sparen. 1.) Warum machst du das nicht selber? 2.) Hast du ne Idee, wie das aussehen soll, ohne die ganze Sprache neu zu definieren?
Gast
#6455814
mh schrieb: > 1.) Warum machst du das nicht selber? > 2.) Hast du ne Idee, wie das aussehen soll, ohne die ganze Sprache neu > zu definieren? Also beim XC8 gibt es ja schon so etwas:
1 | |
1 | |
Dann wäre es schön, wenn es so etwas geben würde:
1 | |
Ja, wie geschrieben, vermutlich müsste das mit _ExtInt() sogar sprachkonform dann definierbar sein.
1 | |
oder von mir aus
1 | |
2 | |
3 | |
Nur, inwiefern das ein Compiler dann so umsetzt, wie du dir das gerade auch vorstellst, steht auf einem anderen Blatt … (auf einem AVR „natürlich“ dann am besten über GPIOR<n> Register …)
Gast
#6455855
Jörg W. schrieb: > Ja, wie geschrieben, vermutlich müsste das mit _ExtInt() sogar > sprachkonform dann definierbar sein. > _ExtInt(1) checkbits[23]; > > oder von mir aus > typedef _ExtInt(1) bit; > // ... > bit checkbits[23]; > > Nur, inwiefern das ein Compiler dann so umsetzt, wie du dir das gerade > auch vorstellst, steht auf einem anderen Blatt … (auf einem AVR > „natürlich“ dann am besten über GPIOR<n> Register …) Gibt es dazu ein Paper? Ich konnte nur n2472 finden und das ist nicht wirklich hilfreich. Die Änderungen im Standard dafür müssen gigantisch sein. In einem LLVM Blogpost habe ich auch etwas von C++ gelesen. Wie sich das vertragen soll ist mir nicht ganz klar.
mh schrieb: > Ich konnte nur n2472 finden und das ist nicht wirklich hilfreich. n2534
Gast
#6455870
Jörg W. schrieb: > C23 wird also binäre Konstanten enthalten. Danke, auch für den 1. Kampf gegen die gcc-Mühlen: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=23479
Gast
#6455876
Jörg W. schrieb: > mh schrieb: >> Ich konnte nur n2472 finden und das ist nicht wirklich hilfreich. > > n2534 Danke!
Gast
#6455882
Ein fprintf(..,"%b", haette ich gerade gebrauchen koennen. Alles muss man selber machen.
Gast
#6455883
Wie kann man dort einen Vorschlag machen. Ich hätte da auch ein paar Dinge, die ich in C vermisse. Was ich z.B. gerne gehabt hätte: * Mehrere init funktionen. Bei gcc ist das mit dem constructor attribut machbar. * Über mehrere Objekte verteilte listen aus globalen Elementen. Irgend sowas:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
Momentan behelfe ich mich auch da mit dem constructor attribut von gcc.
Dirk F schrieb: > Dann wäre es schön, wenn es so etwas geben würde: > bit Tout[40],Tin[40]; // 40 Soft timer Das hört sich so einfach an, ist es aber nicht. Mach dir mal Gedanken darüber, welche Ergebnisse die folgenden, für klassische C-Arrays wohldefinierten Ausdrücke liefern sollten:
1 | |
2 | |
Gast
#6455904
🐧 DPA 🐧 schrieb: > Wie kann man dort einen Vorschlag machen. http://www.open-std.org/jtc1/sc22/wg14/www/contributing
2#00101010# schrieb: > Danke, auch für den 1. Kampf gegen die gcc-Mühlen: Joseph Myers, der damals (sehr konstruktiv) kommentiert hatte, gehört übrigens der WG14 an. Kann mich gerade nicht dran erinnern, ob er mit dabei war vor 2 Wochen. 🐧 DPA 🐧 schrieb: > Wie kann man dort einen Vorschlag machen. http://www.open-std.org/jtc1/sc22/wg14/www/contributing [Edit: "mh" war schneller.] Aber Vorschläge sollten schon praktikabel und gut durchdacht sein. Attribute gibt es mittlerweile im Entwurf, die Syntax ist allerdings anders als bei GCC. Ggf. kann man auf der Basis natürlich Vorschläge für weitere Attribute einbringen.
Yalu X. schrieb: > Dirk F schrieb: >> Dann wäre es schön, wenn es so etwas geben würde: >> bit Tout[40],Tin[40]; // 40 Soft timer > > Das hört sich so einfach an, ist es aber nicht. Mach dir mal Gedanken > darüber, welche Ergebnisse die folgenden, für klassische C-Arrays > wohldefinierten Ausdrücke liefern sollten: > sizeof Tout[0] > Tout + 1 Wobei die gleichen Probleme bei Bitfeldern ja schon gelöst oder umgangen worden sind.
Gast
#6456183
Rolf M. schrieb: > Yalu X. schrieb: >> Dirk F schrieb: >>> Dann wäre es schön, wenn es so etwas geben würde: >>> bit Tout[40],Tin[40]; // 40 Soft timer >> >> Das hört sich so einfach an, ist es aber nicht. Mach dir mal Gedanken >> darüber, welche Ergebnisse die folgenden, für klassische C-Arrays >> wohldefinierten Ausdrücke liefern sollten: >> sizeof Tout[0] >> Tout + 1 > > Wobei die gleichen Probleme bei Bitfeldern ja schon gelöst oder umgangen > worden sind. sizeof ist für Bitfelder verboten und Arrays aus Bitfeldern sind nicht möglich.
mh schrieb: >> Wobei die gleichen Probleme bei Bitfeldern ja schon gelöst oder umgangen >> worden sind. > > sizeof ist für Bitfelder verboten und Arrays aus Bitfeldern sind nicht > möglich. Ich wollte damit sagen, dass, wenn man es bei Bitfeldern schon hinbekommen hat, das im C-Standard unterzubringen, sollte es mit Bitarrays auch machbar sein. Man wird aber eben auf bestimmte Funktionalitäten verzichten müssen, wie eben sizeof oder z.B. Zeiger auf die Elemente.
Gast
#6456290
Rolf M. schrieb: > mh schrieb: >>> Wobei die gleichen Probleme bei Bitfeldern ja schon gelöst oder umgangen >>> worden sind. >> >> sizeof ist für Bitfelder verboten und Arrays aus Bitfeldern sind nicht >> möglich. > > Ich wollte damit sagen, dass, wenn man es bei Bitfeldern schon > hinbekommen hat, das im C-Standard unterzubringen, sollte es mit > Bitarrays auch machbar sein. Man wird aber eben auf bestimmte > Funktionalitäten verzichten müssen, wie eben sizeof oder z.B. Zeiger auf > die Elemente. Klar bekommt man das in den Standard wenn man will. Das macht den Standard aber sicher nicht lesbarer. Und ich bezweifle, dass c-Programme lesbarer werden, wenn plötzlich Integer vorkommen, für die keine Integer-Promotion durchgeführt wird (_ExtInt).
Bei den binären Zahlen fehlen mir noch Gleitpunktzahlen, denn hexadezimale Gleitpunktzahlen gibt es seit spätestens C99. Zwei der Anwendungsfelder dafür sind die Verarbeitung von AD-Wandler-Werten und die Verarbeitung von DA-Wandler-Werten. Und sinnvoll wären dabei auch komplexe Gleitpunkt-Binärzahlen (und Gleitpunkt-Hexadezimalzahlen), denn seit spätestens C99 hat C auch komplexe Zahlen und mathematische Funktionen dazu. Hilfreich wären die komplexen hex- und binär-Zahlen beispielsweise bei Wechselstromgrößen. Und auch bei Supraströmen, denn die haben eine zusätzliche Phase, die Phase der makroskopischen Wellenfunktion, durch die man beispielsweise über die Strom-Phasen-Relation den Strom aus der Phasenverschiebung berechnen kann oder umgekehrt die Phasenverschiebung aus dem Strom.
Du könntest dem Beitrag wenigstens noch einen Smiley spendieren. Die Ironie versteht sonst wohl nicht jeder sofort.
Beitrag #6460843 wurde von einem Moderator gelöscht.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.