expertenaustausch > comp.lang.* > comp.lang.c

Rainer Weikusat (13.05.2019, 19:46)
while (c = *s, isspace(c)) {
if (c == '\n') spaces = NULL;
else if (!spaces) spaces = s;

++s;
}
--------

Diese extrem formschoene Idee zum Vermeiden der "Jemand hat nicht auf
Nikolaus Wirth gehoert!"-Klammern verdanke ich Helmut Schellong. Darum
an dieser Stelle ein Dank dafuer.
Claus Reibenstein (14.05.2019, 13:48)
Rainer Weikusat schrieb am 13.05.2019 um 19:46:

> while (c = *s, isspace(c)) {
> if (c == '\n') spaces = NULL;
> else if (!spaces) spaces = s;
> ++s;
> }
> --------
> Diese extrem formschoene Idee zum Vermeiden der "Jemand hat nicht auf
> Nikolaus Wirth gehoert!"-Klammern verdanke ich Helmut Schellong. Darum
> an dieser Stelle ein Dank dafuer.


Mal abgesehen davon, dass ich das nicht gerade als "formschoen" (und
erst recht nicht als "extrem formschoen") empfinde: Was genau meinst du
mit »"Jemand hat nicht auf Nikolaus Wirth gehoert!"-Klammern«?

Gruß
Claus
Helmut Schellong (14.05.2019, 16:02)
On 05/14/2019 13:48, Claus Reibenstein wrote:
> Rainer Weikusat schrieb am 13.05.2019 um 19:46:
> Mal abgesehen davon, dass ich das nicht gerade als "formschoen" (und
> erst recht nicht als "extrem formschoen") empfinde: Was genau meinst du
> mit »"Jemand hat nicht auf Nikolaus Wirth gehoert!"-Klammern«?


Jemand, der's formschön findet, weiß das.
Rainer Weikusat (14.05.2019, 18:41)
Claus Reibenstein <4spamersonly> writes:
> Rainer Weikusat schrieb am 13.05.2019 um 19:46:
> Mal abgesehen davon, dass ich das nicht gerade als "formschoen" (und
> erst recht nicht als "extrem formschoen") empfinde: Was genau meinst du
> mit »"Jemand hat nicht auf Nikolaus Wirth gehoert!"-Klammern«?


Die bekannte (c = *s)-Umarmung. Waere hier allerdings wenigstens fuer
gcc 4.7.2 ohnehin nicht notwendig. Ich wuerde jetzt aber auch

c = *s, c

schreiben, wenn die Abbruchbedingung "Erreichen des String-Endes" waere.
Thomas Koenig (14.05.2019, 19:55)
Rainer Weikusat <rweikusat> schrieb:

> while (c = *s, isspace(c)) {
> if (c == '\n') spaces = NULL;
> else if (!spaces) spaces = s;
> ++s;
> }


Was soll der Code machen, wenn s auf "" zeigt?
Rainer Weikusat (14.05.2019, 20:06)
Thomas Koenig <tkoenig> writes:
> Rainer Weikusat <rweikusat> schrieb:
> Was soll der Code machen, wenn s auf "" zeigt?


Wird dann nicht aufgerufen.
Rainer Weikusat (14.05.2019, 20:22)
Rainer Weikusat <rweikusat> writes:
> Thomas Koenig <tkoenig> writes:
> Wird dann nicht aufgerufen.


Waere aber auch egal, weil isspace(0) jedenfalls falsch sein sollte. Das
Subject beschreibt auch den Zweck falsch: Das soll leere Zeilen am
Anfang eines Textes entfernen (mit oder ohne Whitespace vor dem \n).
Helmut Schellong (14.05.2019, 21:00)
On 05/14/2019 20:22, Rainer Weikusat wrote:
> Rainer Weikusat <rweikusat> writes:
> Das
> Subject beschreibt auch den Zweck falsch: Das soll leere Zeilen am
> Anfang eines Textes entfernen (mit oder ohne Whitespace vor dem \n).


Das erklärt, warum ich das Ganze nicht so recht mir zuordnen konnte.
Für Wegnahme führender Leerzeichen kam mir der Code nicht ganz
geheuer vor, da ich Lösungen hierzu anders im Kopf habe.

Deshalb schrieb ich auch gestern kein Posting; und heute
eines, das nicht auf den Code eingeht.
Helmut Waitzmann (14.05.2019, 21:56)
Rainer Weikusat <rweikusat>:

Fehlt vor der folgenden Schleife noch ein »s=spaces;« oder ein
»spaces=s;«, damit sowohl »s« als auch »spaces« zum Schleifenstart
auf das erste Zeichen der ersten Zeile des zu untersuchenden
Textes zeigen?

> while (c = *s, isspace(c)) {
> if (c == '\n') spaces = NULL;
> else if (!spaces) spaces = s;
> ++s;
> }


Ich würde die Weiterschaltung (»++s«) vorziehen. Dann genügt eine
Bedingungsabfrage im Schleifenrumpf:

// Vorbedingung:
// *text ist entweder 0:
// Dann ist der Text leer.
// Oder *text ist nicht 0:
// text zeigt auf das erste Zeichen eines Textes, der zu Anfang
// moeglicherweise Zeilen enthaelt, die entweder leer sind oder
// nur white-space enthalten.

s=text;
while (c = *s, isspace(c))
{
++s;
if (c == '\n')
// Eine Zeile, bestehend nur aus white space, ist gefunden.
// Wirf sie weg: Merke dir den Anfang der naechsten Zeile:
text=s;
}

// *text ist entweder 0:
// Dann hat der Text nur White-Space-Zeilen oder ueberhaupt
// nichts enthalten.
// Oder *text ist nicht 0:
// text zeigt auf den Anfang der ersten Textzeile, die
// wenigstens ein Non-White-Space-Zeichen enthaelt.
Rainer Weikusat (14.05.2019, 23:42)
Helmut Waitzmann <nn.throttle> writes:
> Rainer Weikusat <rweikusat>:
> Fehlt vor der folgenden Schleife noch ein »s=spaces;« oder ein
> »spaces=s;«, damit sowohl »s« als auch »spaces« zum Schleifenstart auf
> das erste Zeichen der ersten Zeile des zu untersuchenden Textes
> zeigen?


Nein. spaces ist anfangs NULL und wenn es nach Ende der Schleife gesetzt
ist, wird s entsprechend geaendert, damit es auf den Beginn einer Zeile,
die mit Leerzeichen anfing, zeigt.

[..]
> // Wirf sie weg: Merke dir den Anfang der naechsten Zeile:
> text=s;
> }


Das ist zweifelsohne einfacher und erfuellt denselben Zweck (zusammen
mit einem unbedingten s = text hinter der Schleife).
Bonita Montero (16.05.2019, 19:35)
Am 13.05.2019 um 19:46 schrieb Rainer Weikusat:
> while (c = *s, isspace(c)) {
> if (c == '\n') spaces = NULL;
> else if (!spaces) spaces = s;
> ++s;
> }
> --------
> Diese extrem formschoene Idee zum Vermeiden der "Jemand hat nicht auf
> Nikolaus Wirth gehoert!"-Klammern verdanke ich Helmut Schellong. Darum
> an dieser Stelle ein Dank dafuer.


Irgendwie hat C nicht die Komplexität, dass ich dafür Begeisterung
empfindeen kann. Da gibt es in C++ eher Dinge die ein bisschen tricky
und elegant gleichzeitig sind.
Juergen Ilse (17.05.2019, 04:58)
Hallo,

Bonita Montero <Bonita.Montero> wrote:
> Irgendwie hat C nicht die Komplexität, dass ich dafür Begeisterung
> empfindeen kann. Da gibt es in C++ eher Dinge die ein bisschen tricky
> und elegant gleichzeitig sind.


Seit wann ist denn "grosse Komplexitaet" ein Qualitaetskriterium fuer eine
Programmiersprache?

Tschuess,
Juergen Ilse (juergen)
Bonita Montero (17.05.2019, 07:13)
>> Irgendwie hat C nicht die Komplexität, dass ich dafür Begeisterung
>> empfindeen kann. Da gibt es in C++ eher Dinge die ein bisschen tricky
>> und elegant gleichzeitig sind.


> Seit wann ist denn "grosse Komplexitaet" ein Qualitaetskriterium fuer
> eine Programmiersprache?


Du fasst das was ich oben schrob falsch auf. Ich hab nicht gesagt,
dass Komplexität ein praxisrelevantes Qualitäts kriterium ist.
Rainer Weikusat (17.05.2019, 16:02)
Juergen Ilse <news> writes:
> Bonita Montero <Bonita.Montero> wrote:
>> Irgendwie hat C nicht die Komplexität, dass ich dafür Begeisterung
>> empfindeen kann. Da gibt es in C++ eher Dinge die ein bisschen tricky
>> und elegant gleichzeitig sind.

> Seit wann ist denn "grosse Komplexitaet" ein Qualitaetskriterium fuer eine
> Programmiersprache?


Seit Algol 68. Oder PL/I.
Helmut Schellong (17.05.2019, 16:31)
On 05/17/2019 16:02, Rainer Weikusat wrote:
> Juergen Ilse <news> writes:
> Seit Algol 68. Oder PL/I.


Witzig ist im Zusammenhang Misra-C.
Man hält es für notwendig, die 'kleine' und wenig komplexe
Sprache C auf etwa ein Viertel (!) ihrer selbst zu reduzieren,
um massenweise fehlerhafte C-Programmierungen
weniger oft vorkommen zu lassen.

Ich bin ein Hasser von Misra-C -- Haß ohne Ende!
Grund: Ich hasse schwachsinnige, dumme Handlungen, die
negative Wirkungen haben.
Ähnliche Themen