Problem mit restrict & const Zeiger [gelöst]

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: Problem mit restrict Zeiger

Beitrag von eggy » 12.03.2021 22:37:21

Meillo hat geschrieben: ↑ zum Beitrag ↑
12.03.2021 22:09:38
Fuer meinen Geschmack haben wir deutlich zu wenige C-Programmierproblemchen hier
Das lässt sich ändern: Meillo schreibt ab jetzt zu jedem scriptingcontest auch ne C-Variante :mrgreen:

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Problem mit restrict & const Zeiger [gelöst]

Beitrag von Meillo » 12.03.2021 22:49:30

dakuan hat geschrieben: ↑ zum Beitrag ↑
12.03.2021 22:31:48
Fuer meinen Geschmack haben wir deutlich zu wenige C-Programmierproblemchen hier, insofern darfst du gerne hin und wieder mit einem ankommen.
Das macht Mut. Ich bin nämlich zweigleisig unterwegs. Für einfache CLI Anwendungen bevorzuge ich C-Programme (wie dieses hier). Für GUI Anwendungen bin ich allerdings mit C++ (hier FLTK) unterwegs, womit ich auch immer wieder anecke.
Zu C++ oder FLTK kann ich nichts sagen, aber CLI C macht mir Spass.
Ich finde Casts nicht schlimm, wenn sie Sinn machen ...
Es gibt "Hardliner", die verteufeln das grundsätzlich. Aber es gibt auch Toolkits, da ist das Programm. Da werden viele Zeiger als void* übergeben. Da muss dann der Empfänger wissen, was da kommen soll.
Oder man uebergibt etwas, das selber ausweisen kann, was es enthaelt, wie diese Box:

Code: Alles auswählen

struct box {
        enum {
                CHARPRT,
                INTPTR,
                FLOATPTR,
        } type;
        union {
                char *c;
                int *i;
                float *f;
        } contents;
};
Es gibt da Puristen und Pragmatiker.
Die Leute legen halt auf unterschiedliche Dinge unterschiedlich viel Wert. ;-)

Ich habe gerade das const-Zeug nochmal genauer nachvollzogen. Nun, ich muss zugeben, dass es mir da doch ganz schoen das Hirn verdreht. :roll: Alleine die Unterschiede zwischen diesen vier Formen sind anstrengend genug:

Code: Alles auswählen

const char * cp
char const * cp
char * const cp
char const * const cp
(Die ersten zwei sind semantisch identisch: Ein veraendertlicher Zeiger auf einen konstanten Char. Dann ein konstanter Zeiger auf einen veraenderlichen Char. Und zuletzt ein konstanter Zeiger auf einen konstanten Char.)

Funktionszeigertypen zu entwirren macht mir dagegen deutlich mehr Spass. ;-)

Nunja, jedem das Seine ... und mir jetzt mein Bett. :-D
Use ed once in a while!

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Problem mit restrict Zeiger

Beitrag von Meillo » 12.03.2021 22:50:32

eggy hat geschrieben: ↑ zum Beitrag ↑
12.03.2021 22:37:21
Meillo hat geschrieben: ↑ zum Beitrag ↑
12.03.2021 22:09:38
Fuer meinen Geschmack haben wir deutlich zu wenige C-Programmierproblemchen hier
Das lässt sich ändern: Meillo schreibt ab jetzt zu jedem scriptingcontest auch ne C-Variante :mrgreen:
(Mist! ;-) )


... ach, eggy! Ich schlafe schon ... Hab das gar nicht mehr gelesen. :-P
Use ed once in a while!

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Problem mit restrict & const Zeiger [gelöst]

Beitrag von Meillo » 13.03.2021 14:02:14

Ich habe mich noch ein bisschen weiter mit const beschaeftigt und dabei das in der Wikipedia gefunden:
Dennis Ritchie hat geschrieben: "Let me begin by saying that I'm not convinced that even the
pre-December qualifiers ('const' and 'volatile') carry their
weight; I suspect that what they add to the cost of learning and
using the language is not repaid in greater expressiveness.
'Volatile', in particular, is a frill for esoteric applications,
and much better expressed by other means. Its chief virtue is
that nearly everyone can forget about it. 'Const' is
simultaneously more useful and more obtrusive; you can't avoid
learning about it, because of its presence in the library
interface. Nevertheless, I don't argue for the extirpation of
qualifiers, if only because it is too late.
(`const' ist im Standardisierungsprozess fuer C89 aufgenommen worden. Wie mir scheint hat es seinen Ursprung in den Vorlaeufern von C++.)


Irgendwie verdreht mir die Sache immer noch den Kopf.

Wenn als Parameter ein `const char *dstr' kommt und man nicht casten will, habe ich keinen Weg gefunden bei strtol() bei Parameter eins und zwei den gleichen Pointer zu verwenden.

Dies ist die einzige Form, die unter diesen Vorgaben zu funktionieren scheint:

Code: Alles auswählen

#include <stdio.h>
#include <stdlib.h>

void date2uxtime(const char *dstr) {
        char *p;

        printf("year: %ld\n", strtol(dstr, &p, 10));
        p++;
        printf("month: %ld\n", strtol(p, &p, 10));
        p++;
        printf("day: %ld\n", strtol(p, &p, 10));
}

int main() {
        date2uxtime("2021-03-12");
        return 0;
}
Dabei wird der Wert, auf den der char-Pointer zeigt gar nicht veraendert. Folglich sollte es eigentlich moeglich sein, als zweiten Parameter einen `const char **' zu uebergeben -- geht aber nicht. Ich meine, man kann die technischen Gruende dafuer sicher irgendwann nachvollziehen, wenn man sich nur lange genug damit auseinander gesetzt hat, aber die Stimmigkeit und Konsistenz, die C sonst zu bieten hat, fehlt mir hier. Wahrscheinlich ist das normal fuer nachtraeglich aufgesetzte Konzepte.

Ich denke, dass ich darum `const' nicht verwende: Die Schoenheit und Eleganz von C geht verloren wenn man sich mit const einlaesst. Und da DMR auch nicht der Meinung war, dass const seine Kosten wert sei, kann ich es ganz beruhigt auch weiterhin meiden. ;-)
Use ed once in a while!

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: Problem mit restrict & const Zeiger [gelöst]

Beitrag von eggy » 13.03.2021 15:08:18

Meillo hat geschrieben: ↑ zum Beitrag ↑
13.03.2021 14:02:14
Irgendwie verdreht mir die Sache immer noch den Kopf.
Zu const in C++ gibts nen paar interessante Videos von der cppcon.
https://www.youtube.com/watch?v=Y1KOuFYtTF4 bei Minute 5:50
oder als PDF (Seite 21)
https://raw.githubusercontent.com/CppCo ... 202015.pdf
wie üblich find ich grade das Video was ich eigentlich suche grade nicht: von (wenn ich da nichts durcheinanderwerf) Kate Gregory hatte ich diesbezueglich mal nen sehr gut verständlichen Vortrag gehört, kann aber sein, dass sie eigentlich über was anderes gesprochen hat und das nur kleiner Nebenschauplatz war - vielleicht kennt oder findet den ja jemand per Zufall, wird so um 2017 rum gewesen sein, vielleicht.
Und vermutlich findest Du auch mehr als ne Handvoll Videos von Jason Turner zu dem Thema, falls man das mal aus Höhe des Compilers betrachten will, wären seine Videos die erste Anlaufstelle (ist nicht jedermans Fall).

Edit: https://www.youtube.com/watch?v=z6s6bacI424 "East const vs West const" - dazu gabs auch noch nen längeres Video, evtl ne Stunde oder so, vermutlich auch auf der cppcon

dakuan
Beiträge: 97
Registriert: 28.04.2011 22:09:39

Re: Problem mit restrict & const Zeiger [gelöst]

Beitrag von dakuan » 13.03.2021 15:25:23

Also const an sich finde ich gar nicht so schlimm, jedenfalls meistens. Bei C++ sehe ich das ständig. Es macht ja auch nicht immer Sinn, einen fremden Puffer (hier Kommandozeile), dessen Größe man nicht mal kennt, verändern zu wollen (oder zu können).

Aber dieses restrict finde ich überflüssig.

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: Problem mit restrict & const Zeiger [gelöst]

Beitrag von eggy » 13.03.2021 17:40:25

Mal etwas Hintergrund zu restrict:
https://openbook.rheinwerk-verlag.de/c_ ... er_013.htm
https://www.oracle.com/solaris/technolo ... trict.html
https://cellperformance.beyond3d.com/ar ... yword.html
Bei Stackoverflow gibts nen paar Threads dazu und ob die zusätzlichen Optimierungen des Compilers bei Verwedung von restricted spürbar sind: die einen sagen so, die anderen so.
Das Beispiel aus https://en.cppreference.com/w/c/language/restrict compiliert mit "gcc test.c -S -O3" spart hier jedenfalls auch nen add, ist auf den ersten Blick nicht viel, aber da kann schon einiges zusammenkommen.

dakuan
Beiträge: 97
Registriert: 28.04.2011 22:09:39

Re: Problem mit restrict & const Zeiger [gelöst]

Beitrag von dakuan » 13.03.2021 20:40:41

Den "Rheinwerk" Link kannte ich schon, der hat mich aber auch nicht weiter gebracht.
... compiliert mit "gcc test.c -S -O3" spart hier jedenfalls auch nen add, ist auf den ersten Blick nicht viel, aber da kann schon einiges zusammenkommen.
Ist wirklich nicht viel, hängt aber auch vom Multiplikator ab. In meinem Fall liegt der aktuell bei etwa 25000. Aber das Analysieren von Thumbnail Dateien ist sehr I/O lastig. Da ist die Festplatte der Bremser. Aber bei Bildverarbeitung sieht das schon anders aus.

Antworten