Forum: Compiler & IDEs Problem mit Schleifenabbruch


von Christian M. (Gast)


Lesenswert?

Hallo Foraner,

im folgenden Codeschnippsel:
1
char kommando[9];
2
char buchstabe;
3
4
.
5
.
6
.
7
8
    do
9
      {
10
        char buchstabe = client.read();
11
        kommando[stelle] = buchstabe;
12
        Serial.print(stelle);          //nur zum Debuggen
13
        Serial.println(buchstabe, HEX);  //nur zum Debuggen
14
        stelle++;
15
      } while (buchstabe != 13); //schon probiert: 0x0D '\r' 13
16
      Serial.println(kommando);

wird die Schleife unter keinen Umständen abgebrochen. Es kommt aber 
sicher das CR, das zeigt mir die Ausgabe:
1
Schleife Einlesen:<\r><\n>
2
031<\r><\n>
3
132<\r><\n>
4
233<\r><\n>
5
334<\r><\n>
6
4D<\r><\n>          <---hier das CR, man denke sich ein 0x0D als Zeichen #4
7
5FFFFFFFF<\r><\n>
8
6FFFFFFFF<\r><\n>

Es muss was falsch sein an der Abbruchbedingung!

Danke für Eure Hilfe!

Gruss Chregu

von Frank (Gast)


Lesenswert?

Als rein optische Verbesserung würde ich schreiben
1
 do
2
      {
3
      //...
4
      } while (buchstabe != '\r');

Sollte aber an deinem Fehler nichts ändern.

von hp-freund (Gast)


Lesenswert?

Christian M. schrieb:
> char buchstabe

Warum ist das in der Schleife? Wird buchstabe noch einmal definiert?
Meckert er nicht irgendwo?

von Patrick C. (pcrom)


Lesenswert?

Die variable 'char buchstabe' ist 2x declariert

von Frank (Gast)


Lesenswert?

Was ist das denn für ein Schrott Compiler?

von Daniel A. (daniel-a)


Lesenswert?

Dein Problem ist der Scope von buchstabe in der while schleife. Dort 
ist buchstabe nämlich nicht der aus dem Scope des Schleifenkörpers, 
denn der gillt dort nichtmehr, sondern der aus dem Darüberliegenden 
Scope.

Dashier geht:
1
#include <iostream>
2
3
struct Client {
4
  char read(void){
5
    static unsigned i = 0;
6
    static const char text[] = "1234\r";
7
    if(i>=sizeof(text)-1)
8
      i=0;
9
    return text[i++];
10
  }
11
};
12
13
Client client;
14
15
int main(){
16
  char kommando[9]={0};
17
  unsigned stelle = 0;
18
  {
19
    char buchstabe;
20
    do {
21
      buchstabe = client.read();
22
      kommando[stelle] = buchstabe;
23
      std::cout << stelle << ' ';
24
      std::cout << std::hex << (int)buchstabe << std::endl;
25
      stelle++;
26
    } while( buchstabe != 13 && stelle < sizeof(kommando)-1 );
27
  }
28
  std::cout << kommando << std::endl;
29
  return 0;
30
}

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Frank schrieb:
> Was ist das denn für ein Schrott Compiler?

Das hat nichts mit einem Schrott-Compiler zu tun.

Im do-Block wird buchstabe als auto-Variable definiert, aber außerhalb 
des Blocks abgefragt. Dies kann nur eine andere Variable namens 
buchstabe sein, die außerhalbe dieses Blocks definiert wurde.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das ist kein "Schrott Compiler", sondern legitimes C. Da darf eine 
Variable gleichen Namens innerhalb eines Anweisungsblocks erneut 
definiert werden und überblendet die Variable des äußeren Blocks. Diese 
wird erst nach Verlassen des Blocks (und also Verlassen des "scopes", in 
dem die innere Variable gültig ist und existiert) wieder sichtbar.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Das Programm oben sieht nach Arduino aus.

Die gcc-Option -Wshadow hätte für so eine 'Shadow Variable' auch eine 
entsprechende Warnung ausgegeben. Leider kann ich nicht sagen, wie man 
in der Arduino-IDE spezielle Compiler-Flags einschalten kann. Es soll 
aber auf Umwegen gehen, wie ich irgendwo mal zufällig gelesen habe.

von Mark B. (markbrandis)


Lesenswert?

Rufus Τ. F. schrieb:
> Das ist kein "Schrott Compiler", sondern legitimes C. Da darf eine
> Variable gleichen Namens innerhalb eines Anweisungsblocks erneut
> definiert werden und überblendet die Variable des äußeren Blocks. Diese
> wird erst nach Verlassen des Blocks (und also Verlassen des "scopes", in
> dem die innere Variable gültig ist und existiert) wieder sichtbar.

Hm, was wäre denn wohl ein sinnvoller Anwendungsfall für dieses Feature? 
So auf Anhieb fällt mir keiner ein.

von Christian M. (Gast)


Lesenswert?

Patrick C. schrieb:
> Die variable 'char buchstabe' ist 2x declariert

hp-freund schrieb:
>> char buchstabe
>
> Warum ist das in der Schleife? Wird buchstabe noch einmal definiert?
> Meckert er nicht irgendwo?

Nein, er meckert nicht, aber DAS war das Problem! Vielen Dank an alle!

Gruss Chregu

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Mark B. schrieb:
> Hm, was wäre denn wohl ein sinnvoller Anwendungsfall für dieses Feature?
> So auf Anhieb fällt mir keiner ein.

Modulares Programmieren. So eine temporäre Auto-Variable innerhalb einer 
Funktion darf ruhig eine gleichnamige globale Variable, die in dem 
konkreten Kontext aber irrelevant ist, "in den Schatten stellen".

Sonst müsste man als Programmierer ja alle Module, die dazugelinkt 
werden, auf zufällig gleichnamige Variablen überprüfen.

Das gleiche gilt auch innerhalb von Funktionen, was bei Aufruf von 
Makros, die temporäre Variablen verwenden, genauso sinnvoll ist.

: Bearbeitet durch Moderator
von Christian M. (Gast)


Lesenswert?

Dann verstehe ich aber nicht, warum es mit Deklaration IN der Schleife 
nicht funktioniert hat... (Do ... While ist (keine) Funktion?)

- Darf eine Variable nur einmal deklariert werden?
- Weil das "Do" vor der Deklaration steht?

Gruss Chregu

von Patrick C. (pcrom)


Lesenswert?

>> Dann verstehe ich aber nicht, warum es mit Deklaration IN der Schleife
>> nicht funktioniert hat... (Do ... While ist (keine) Funktion?)

Weil das in der C standard so definiert ist

Einen link mit beispiel und bemerkungen (in English) :
http://www.geeksforgeeks.org/scope-rules-in-c/

von Mark B. (markbrandis)


Lesenswert?

Frank M. schrieb:
> Modulares Programmieren. So eine temporäre Auto-Variable innerhalb einer
> Funktion darf ruhig eine gleichnamige globale Variable, die in dem
> konkreten Kontext aber irrelevant ist, "in den Schatten stellen".

Globale Variablen und modulare Programmierung ist freilich ein 
Widerspruch in sich. Wenn ich von Letzterem möglichst viel haben will, 
muss ich von Ersterem möglichst wenig haben.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Christian M. schrieb:
> Dann verstehe ich aber nicht, warum es mit Deklaration IN der Schleife
> nicht funktioniert hat... (Do ... While ist (keine) Funktion?)

Wie ich oben schon schrieb:

Im do-Block wird buchstabe als auto-Variable definiert, aber 
außerhalb(!) des Blocks abgefragt.

Du arbeitest also im Block mit einer anderen Variable als bei der 
Abfrage der Bedingung. Die Abfrage ist nämlich außerhalb des Blocks.

: Bearbeitet durch Moderator
von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Mark B. schrieb:
> Globale Variablen und modulare Programmierung ist freilich ein
> Widerspruch in sich. Wenn ich von Letzterem möglichst viel haben will,
> muss ich von Ersterem möglichst wenig haben.

"Möglichst wenig" schließt den Fall

        Anzahl globaler Variablen > 0

nicht aus.

Es geht auch nicht nur um globale Variablen, sondern eher um den Scope 
der Variablen. Wie gesagt, das Variable-Shadowing geht sogar innerhalb 
einer Funktion. Bei Makros kann das sehr sinnvoll sein.

: Bearbeitet durch Moderator
von Daniel A. (daniel-a)


Lesenswert?

Christian M. schrieb:
> Dann verstehe ich aber nicht, warum es mit Deklaration IN der Schleife
> nicht funktioniert hat... (Do ... While ist (keine) Funktion?)

Nö, Do ... While ist keine Funktion, aber mit Funktionen hat es auch 
nichts zutun.

> - Darf eine Variable nur einmal deklariert werden?

Innerhalb des selben Scopes darf eine Variable nur einmal definiert 
werden, in verschiedenen Scopes kann man sie selbe Variable nicht 
mehrfach definieren, weil es dann nichtmehr die selbe ist. Eine variable 
mehrfach Deklarieren (mit extern) im globalen Scope sollte möglich sein.

> - Weil das "Do" vor der Deklaration steht?

Nö. Der scope ist immer durch die Darüberliegenden geschweifte Klammern 
begrenzt, ausser die Variable wird im Schleifenkopf definiert. Bei for 
und while ist Sie dann im Schleifenkopf & körper verfügbar, bei do while 
nur im Schleifenkopf.

: Bearbeitet durch User
von hp-freund (Gast)


Angehängte Dateien:

Lesenswert?

Die Klammern sind das Entscheidende.
gcc hat nichts auszusetzten an dem Beispiel.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

hp-freund schrieb:
> Die Klammern sind das Entscheidende.
> gcc hat nichts auszusetzten an dem Beispiel.
1
cc -Wshadow main.c
2
main.c: In function 'main':
3
main.c:13:14: warning: declaration of 'buchstabe' shadows a global declaration [-Wshadow]
4
main.c:6:6: warning: shadowed declaration is here [-Wshadow]
5
main.c:19:14: warning: declaration of 'buchstabe' shadows a global declaration [-Wshadow]
6
main.c:6:6: warning: shadowed declaration is here [-Wshadow]

von hp-freund (Gast)


Lesenswert?

Na gut. Normalerweise, ungezwungen ... ;-)

von Daniel A. (daniel-a)


Lesenswert?

@Frank M. (ukw)

Gerade getestet mit /g++ -x c++ -std=c++98 -Wall -Wextra -pedantic/, 
keine Warnungen, währe ja auch wahnsinn -Wshadow zu nutzen.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Daniel A. schrieb:
> währe ja auch wahnsinn -Wshadow zu nutzen.

Im Normalfall schon, aber wenn man mal wie ein Blöder einen bestimmten 
Fehler sucht, den man einfach nicht "packen" kann, darf man auch mal zu 
ungewöhnlichen gcc-Optionen greifen. ;-)

Ich erinnere mich aber auch an einen C-Compiler unter UNIX SYSTEM V, der 
das Shadowing grundsätzlich anmeckerte, ohne dass man überhaupt einen 
bestimmten Warning-Level einschalten musste.

: Bearbeitet durch Moderator
von W.S. (Gast)


Lesenswert?

Rufus Τ. F. schrieb:
> Das ist kein "Schrott Compiler", sondern legitimes C.

Du wirst aber zugeben, daß das gezeigte Stück Quelle ausgesprochener 
Schrott ist.

Manchmal frag ich mich, warum die C-Programmierer so intensiv danach 
trachten, möglichst grottenschlechten Code zu schreiben. Man hätte es ja 
auch lesbarer und deutlich besser schreiben können, etwa so:
1
  /* Kommandozeile hereinholen */
2
void Talk (word wo)
3
{ char c;
4
5
  if (RxAvail(wo))
6
  { c =  GetChar(wo);
7
    if (c==10) return;
8
    if (c==13)
9
    { CRLF_Out(wo);
10
      DoCommand (Kommandozeile, wo);
11
      InitCmd(wo);
12
    }
13
    else
14
    { if (kzi>=(sizeof(Kommandozeile)-1)) return;
15
      if (c==8)
16
      { Char_Out(8, wo);
17
        Char_Out(' ', wo);
18
        Char_Out(8, wo);
19
        Kommandozeile[--kzi]=0;
20
      }
21
      else
22
      { if (c<' ')
23
        { Char_Out('^', wo);
24
          Char_Out(c+0x40, wo);
25
          Kommandozeile[kzi++] = c;
26
          Kommandozeile[kzi] = 0;
27
          return;
28
        }
29
        Char_Out(c, wo);
30
        Kommandozeile[kzi++] = c;
31
        Kommandozeile[kzi] = 0;
32
      }
33
    }
34
  }
35
}

Gelle?

W.S.

von Mark B. (markbrandis)


Lesenswert?

W.S. schrieb:
> Manchmal frag ich mich, warum die C-Programmierer so intensiv danach
> trachten, möglichst grottenschlechten Code zu schreiben.

C-Code wird halt oft von Elektrotechnikern geschrieben, und die wissen 
es nicht besser ;-)

von Carl D. (jcw2)


Lesenswert?

Mark B. schrieb:
> W.S. schrieb:
>> Manchmal frag ich mich, warum die C-Programmierer so intensiv danach
>> trachten, möglichst grottenschlechten Code zu schreiben.
>
> C-Code wird halt oft von Elektrotechnikern geschrieben, und die wissen
> es nicht besser ;-)

Informatiker verwenden nämlich lieber C++ ;-)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

W.S. schrieb:
> Du wirst aber zugeben, daß das gezeigte Stück Quelle ausgesprochener
> Schrott ist.

Natürlich.

> Manchmal frag ich mich, warum die C-Programmierer so intensiv danach
> trachten, möglichst grottenschlechten Code zu schreiben.

Tun sie nicht. Was Du hier an C-Code siehst, ist überwiegend 
Anfängercode, oder Code, der von Anfängern aus Tutorials abgetippt 
wurde.

> Man hätte es ja auch lesbarer und deutlich besser
> schreiben können, etwa so:

Das ist auch nur Anfängercode, wenngleich dieser Anfänger etwas mehr 
Erfahrung hat. Grauenerregende Formatierung, Benutzung von "magic 
numbers", äußerst inkonsistente Verwendung von Whitespace, unnötiges und 
die Leserlichkeit verschlechterndes Weglassen von Whitespace, 
inkonsistente Bezeichnerschreibweise ...

von Utz (Gast)


Lesenswert?

Carl D. schrieb:
> Informatiker verwenden nämlich lieber C++ ;-)

...selbst wenn es der kleinste Tiny ist ;-)

von Dirk B. (dirkb2)


Lesenswert?

Carl D. schrieb:
> Informatiker verwenden nämlich lieber C++ ;-)

Und echte Programmierer ...

von Mark B. (markbrandis)


Lesenswert?

Dirk B. schrieb:
> Carl D. schrieb:
>> Informatiker verwenden nämlich lieber C++ ;-)
>
> Und echte Programmierer ...

...können in jeder Sprache FORTRAN schreiben.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

W.S. schrieb:
> Man hätte es ja
> auch lesbarer und deutlich besser schreiben können, etwa so:

>     if (c==10) return;
Lesbarer:
      if (c == '\n') return;

>     if (c==13)
Lesbarer:
      if (c == '\r')

>       if (c==8)
Lesbarer:
        if (c == '\b')

>       { Char_Out(8, wo);
Lesbarer:
        { Char_Out('\b', wo);

>           Char_Out(c+0x40, wo);
Lesbarer:
            Char_Out(c + 'A' - 1, wo);

>           Kommandozeile[kzi] = 0;
Lesbarer:
            Kommandozeile[kzi] = '\0';

Man muss nicht das ganze ASCII-Alphabet hexadezimal im Kopf haben, um in 
C zu programmieren. Okay, es sieht natürlich kryptischer und damit 
cooler aus... ;-)

Aber wegen dem Buzzword "lesbarer", welches Du oben schreibst, konnte 
ich es mir nicht verkneifen, sorry.

: Bearbeitet durch Moderator
von Sheeva P. (sheevaplug)


Lesenswert?

Utz schrieb:
> Carl D. schrieb:
>> Informatiker verwenden nämlich lieber C++ ;-)
>
> ...selbst wenn es der kleinste Tiny ist ;-)

Vor allem dann. ;-)

von Umraeumer (Gast)


Lesenswert?

1
void Show_Char(word wo, char c) // TODO: besserer Name
2
{
3
    if (c < ' ')   // sonderzeichen
4
    {
5
        Char_Out('^', wo);
6
        Char_Out(c+0x40, wo);
7
    }
8
    else
9
    {
10
        Char_Out(c, wo);
11
    }
12
}
13
14
15
void Backspace_Out(wo)
16
{
17
    Char_Out('\b', wo);
18
    Char_Out(' ', wo);
19
    Char_Out('\b', wo);
20
}
21
22
23
// achtung: viele returns, um else-Klammer-Orgien  zu vermeiden. F#$K MISRA
24
void Talk (word wo)  
25
{
26
    static char Kommandozeile[64];
27
    static int kzi;
28
29
    if (!RxAvail(wo))
30
        return;
31
32
    const char c =  GetChar(wo);
33
34
    if (c== '\n' )          // ignore newline
35
        return;
36
37
    if (c=='\r')            // execute command and clear buffer
38
    {
39
        CRLF_Out(wo);
40
        DoCommand (Kommandozeile, wo);
41
        foo_clear(Kommandozeile, sizeof(Kommandozeile));
42
        kzi = 0;
43
        return;
44
    }
45
46
    if (kzi >= (sizeof(Kommandozeile)-1) )      // buffer full => ignore input
47
        return;
48
49
    if (c == '\b')      // delete last char in buffer
50
    {
51
        Backspace_Out(wo);
52
        Kommandozeile[--kzi]=0;
53
        return;
54
    }
55
56
    // append input to buffer
57
    Show_Char(wo, c);
58
    Kommandozeile[kzi++] = c;
59
    Kommandozeile[kzi] = 0;
60
}

Kaum entwirrt man die Struktur, springen die beiden dicken Bugs ins 
Auge.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Umraeumer schrieb:
> Kaum entwirrt man die Struktur, springen die beiden dicken Bugs ins
> Auge.

Ich weiß nicht, welche dicken Bugs Du meinst, aber diese Sachen fielen 
mir schon vorher auf:
1
        Kommandozeile[--kzi]=0;
Kein Check, ob kzi > 0. Mit der Backspace-Taste kann man daher schön im 
RAM irgendwelche Zellen löschen.

Jedoch umgekehrt passt es:
1
    if (kzi >= (sizeof(Kommandozeile)-1) )     // buffer full => ignore input
2
        return;

Der darunterstehende Code wird also nur noch ausgeführt, wenn kzi 
maximal 62 ist. Damit passt dann
1
    Kommandozeile[kzi++] = c;
2
    Kommandozeile[kzi] = 0;

noch in den Buffer.

Warum er hier aber vorsichtshalber nochmal den String terminiert, obwohl 
das

    foo_clear(Kommandozeile, sizeof(Kommandozeile));

offenbar immer für den kompletten Buffer erledigt, weiß ich nicht. 
Meines Erachtens ist die wiederholte Terminierung nach jedem Zeichen 
überflüssig. Es würde eigentlich eine einmalige Terminierung bei Prüfung 
auf '\r' reichen. Vorher wird der Buffer nämlich nirgendwo als String 
interpretiert. Der foo_clear()-Aufruf kann dabei auch noch entfallen.

Dieses Verhalten kann man entweder als defensive Programmierung deuten 
oder man liest einfach das Misstrauen des Autors in seine eigenen Zeilen 
raus. Das ist jedem selbst überlassen.

Noch etwas ist mir aufgefallen:

        Char_Out('^', wo);
        Char_Out(c+0x40, wo);

Es werden zwei Zeichen für CTRL-Chars verwendet. Bei Backspace wird aber 
nur ein Zeichen gelöscht. Das WYSIWYG-Prinzip wird daher verletzt: Die 
aktuelle Ausgabe stimmt nicht mehr mit dem tatsächlichen Bufferinhalt 
überein.

Aber wie gesagt: Das alles fiel mir schon vorher auf. Ich wollte jedoch 
nicht den Code kaputtreden, sondern eher auf die Bezeichnung "lesbar" 
eingehen.

Aber an diesem Beispiel sieht man, wieviel man innerhalb weniger 
Code-Zeilen falsch machen kann.

Die Formulierung von W.S.

> Manchmal frag ich mich, warum die C-Programmierer so intensiv danach
> trachten, möglichst grottenschlechten Code zu schreiben. Man hätte es ja
> auch lesbarer und deutlich besser schreiben können, etwa so:

war daher eher ein Schuß nach hinten.

: Bearbeitet durch Moderator
von Eric B. (beric)


Lesenswert?

Umraeumer schrieb:
> // achtung: viele returns, um else-Klammer-Orgien  zu vermeiden. F#$K
> MISRA

Es geht auch MISRA-conform, ohne returns oder großartige Klammer-Orgien:
1
void Talk (word wo)  
2
{
3
    static char Kommandozeile[64];
4
    static int kzi;
5
6
    if (RxAvail(wo))
7
    {
8
        const char c =  GetChar(wo);
9
10
        if (c=='\r')            // execute command and clear buffer
11
        {
12
            CRLF_Out(wo);
13
            DoCommand (Kommandozeile, wo);
14
            foo_clear(Kommandozeile, sizeof(Kommandozeile));
15
            kzi = 0;
16
        } 
17
        else if ((c == '\b') 
18
             &&  (kzi > 0))           // delete last char in buffer
19
        {
20
            Backspace_Out(wo);
21
            Kommandozeile[--kzi]=0;
22
        }
23
        else if ((c != '\n')                        // newline
24
             &&  (kzi < (sizeof(Kommandozeile)-1))) // buffer full
25
        {
26
            // append input to buffer
27
            Show_Char(wo, c);
28
            Kommandozeile[kzi++] = c;
29
            Kommandozeile[kzi] = 0;
30
        }
31
        else
32
        {
33
            // do nix 
34
        }
35
    }
36
}
37
38
[EDIT: Ein Bug beseitigt ;-)]

: Bearbeitet durch User
von Daniel A. (daniel-a)


Lesenswert?

@Eric B. (beric)

Ich sehe noch einen neuen Bug, wenn kzi==0 und c=='\b', wird '\b' nach 
Kommandozeile[0] geschrieben.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Eric B. schrieb:
> else if ((c == '\b')
>              &&  (kzi > 0))           // delete last char in buffer
>         {
>             Backspace_Out(wo);
>             Kommandozeile[--kzi]=0;
>         }
>         else if ((c != '\n')

Das ist von der Logik her falsch "übersetzt".

Wenn c == '\b' und gleichzeitig kzi == 0, dann läuft das Programm in den 
else-Block unterhalb

>         else if ((c != '\n')

und speichert dann das Backspace am Anfang des Buffers.

Richtig wäre:
1
        else if (c == '\b')
2
        {
3
            if (kzi > 0))           // delete last char in buffer
4
            {
5
               ...
6
            }
7
        }

Nach demselben Muster ist das hier auch nicht schön, auch wenn es die 
Logik hier ausnahmsweise nicht durcheinanderbringt:
1
        else if ((c != '\n')                        // newline
2
             &&  (kzi < (sizeof(Kommandozeile)-1))) // buffer full

Hier sollte die 2. Bedingung auch in den else-if-Block. Du hast Glück, 
dass dies nicht danebengeht, denn das liegt an dem leeren else-Block 
darunter:
1
        else
2
        {
3
            // do nix 
4
        }

Wäre da was drin, würde das irrtümlicherweise auch ausgeführt werden, 
wenn c == '\n' und zufällig der Buffer voll ist.

Aber nix bleibt nix :-)

von Umraeumer (Gast)


Lesenswert?

Eric B. schrieb:
> Es geht auch MISRA-conform, ohne returns oder großartige Klammer-Orgien:

Natürlich. Ich persönlich finde es bei solchen langen Parsing-Ketten 
lesbarer, wenn man gleich sieht, dass die Verarbeitung hier zuende ist, 
ohne irgendwo weiter unten das Ende der Klammerebene zu suchen. Das ist 
quasi-goto; in diesem Fall, wenn die Codestruktur sehr einem 
Flussdiagramm entspricht, finde ich das völlig OK. Wenn Generationen von 
Programmierern eine Funktion auf 1000 Zeilen aufgeblasen haben, sind 
mehrere returns tödlich, aber dann hat man auch ganz andere Probleme.


Frank M. schrieb:
> dann läuft das Programm in den
> else-Block
Genau so etwas meinte ich. Geschachtelte else if sowie if()s, die 
mehrere nicht direkt verwandte Dinge verknüpfen, sind in meiner Welt 
viel böser als return mitten aus einer nicht übermäßig langen und 
komplexen Funktion.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Umraeumer schrieb:
> Geschachtelte else if sowie if()s, die
> mehrere nicht direkt verwandte Dinge verknüpfen, sind in meiner Welt
> viel böser als return mitten aus einer nicht übermäßig langen und
> komplexen Funktion.

Das würde ich so pauschal nicht sagen. Eric B. hat einfach zu viele 
Bedingungen in die else-if-Kette geschmissen.

Hätte er geschrieben:
1
       if (c=='\r')            // execute command and clear buffer
2
       {
3
       } 
4
       else if (c == '\b') 
5
       {
6
           // 2. Bedingung hier
7
       }
8
       else if (c != '\n')    // newline
9
       {
10
           // 2. Bedingung hier
11
       }

wäre das durchaus lesbar und verständlich geblieben. Vor allen Dingen 
wäre die Logik erhalten geblieben!

Nur ein Return am Ende der Funktion hat durchaus Vorteile: Wenn man am 
Schluss nämlich nachträglich noch eine Aufräumaktion machen muss, dann 
muss das nur einmal geschehen.

Ich hätte übrigens in einem zweiten Step dann obige else-if-Kette in 
einen Switch gewandelt:
1
    switch (c)
2
    {
3
        case '\r':
4
            ...
5
            break;
6
        case '\b':
7
            ...
8
            break;
9
        case '\n':
10
            ...
11
            break;
12
        default:
13
            ...
14
            break;
15
    }

Man kann also durchaus einfachen Code schreiben und trotzdem nur ein 
Return am Ende der Funktion verwenden.

Moral von der Geschichte: Packe nicht zu viele Bedingungen in 
if-else-if-Ketten. ;-)

: Bearbeitet durch Moderator
von W.S. (Gast)


Lesenswert?

Frank M. schrieb:
> Es werden zwei Zeichen für CTRL-Chars verwendet. Bei Backspace wird aber
> nur ein Zeichen gelöscht. Das WYSIWYG-Prinzip wird daher verletzt: Die
> aktuelle Ausgabe stimmt nicht mehr mit dem tatsächlichen Bufferinhalt
> überein.
>
> Aber wie gesagt: Das alles fiel mir schon vorher auf. Ich wollte jedoch
> nicht den Code kaputtreden, sondern eher auf die Bezeichnung "lesbar"
> eingehen.
>
> Aber an diesem Beispiel sieht man, wieviel man innerhalb weniger
> Code-Zeilen falsch machen kann.
>
> Die Formulierung von W.S.
> ...
> war daher eher ein Schuß nach hinten.

Ach nö, du übertreibst mit Fleiß.

Guck dir nochmal den Eröffnungspost zum Vergleich an. Du wolltest ja 
nicht auf Wasserdichtheit, sondern auf Lesbarkeit eingehen. Was mir 
immer übel aufstößt, sind Formulierungen wie:
1
 char buchstabe = client.read();
2
 const char c =  GetChar(wo);
3
[/c}
4
(beides aus diesem Thread) Ich kann solche Zusammenziehungen nicht leiden. Ein simples
5
[c]
6
void bla(void)
7
{ char c;
8
9
  c = machwas..
10
...
11
}

ist deutlich sauberer, da Deklaration und Verwendung getrennt sind - und 
es verhindert auch, daß Leute wie der TO sich mit versehentlicher 
Doppeldeklaration selbst ein Bein stellen. Rührt das daher, daß immer 
einer vom anderen abkopiert ohne drüber nachzudenken?

Und was das const soll, möge Eric mal begründen.


Aber es ist für mich schon erstaunlich, was für einen Schwung an 
Verbesserungsvorschlägen mein Post bewirkt hat..


Aber nochwas:
Deiner Behauptung, daß die Verwendung von \r und Konsorten lesbarer sei 
als der ASCII-Wert, kann ich (zumindest für mich) nicht zustimmen. Ich 
finde deine ganzen Backslash-Ausdrücke deutlich unleserlicher. Sowas 
wird wohl nur von reinen C-Programmierern als angenehm empfunden.

W.S.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

W.S. schrieb:
> Deiner Behauptung, daß die Verwendung von \r und Konsorten lesbarer sei
> als der ASCII-Wert, kann ich (zumindest für mich) nicht zustimmen.

Damit stehst Du aber ziemlich allein auf weiter Flur.

von Da D. (dieter)


Lesenswert?

Rufus Τ. F. schrieb:
> Damit stehst Du aber ziemlich allein auf weiter Flur.

Wie mit so vielen seiner Behauptungen, wenn es um C geht. Meine Favorit 
bisher: In .h Dateien #include zu verwenden, sei generell schlechter 
Stil. ;-)

: Bearbeitet durch User
von W.S. (Gast)


Lesenswert?

Rufus Τ. F. schrieb:
> Damit stehst Du aber ziemlich allein auf weiter Flur.

Ähem.. Tja, ist halt so - das kommt aber auf das Forum an.

Es gibt hier unter den C-Programmierern ne Menge Zeugs, was mir 
ausgesprochen wider die Natur ist. Lassen wir das hier mal, sonst ufert 
dieser Thread aus.

Aber mal zu sowas wie \xyz:
C kennt keinen Unterschied zwischen numerischen Elementen und 
Textzeichen. Ein char ist zugleich Textzeichen und kleinstes numerisches 
Element. Es ist deshalb was völlig Normales, mit char's mit numerischen 
Werten zu benützen - egal ob dezimal, oktal oder hexa oder sonstwie. Von 
Pascal her kennt man so ein Zusammenwurschteln nicht, da sind beide 
Sphären (Text versus Zahlen) sauber voneinander getrennt - jedenfalls 
logisch. Nun denn, bei C hat man das nicht, geht ja auch.

Aber mal ne Frage: Wie kommt ihr auf sowas wie  '\r' eigentlich? Nun, 
das ist eine Konvention, die man auch mal wieder auswendig lernen muß. 
Eben NOCH EINE zum Auswendiglernen. Aber logisch ist sie nicht, denn 
dann müßte man für ASCII-Zeichen < Leerzeichen eher '\Großbuchstabe 
schreiben, also für CR eben '\M' was ('M' & 0x1F) entsprechen würde. Das 
wäre logisch, '\r' ist es nicht.

Oder anders gefragt, wie würdet ihr STX, VT, RS, BEL oder ACK auf 
logische Weise mit '\???' schreiben? jaja: nachgucken, ob's überhaupt 
geht.

Mir für meinen Teil ist es viel einfacher, auf solche Konventionen zu 
pfeifen und den tatsächlichen numerischen ASCII-Wert hinzuschreiben. Wer 
das nicht versteht, muß eben in seine ASCII-Tafel gucken - aber bei '\c' 
und seinen eher seltener verwendeten Konsorten müßte er ebenso 
nachschauen, was zum Teufel das nun wieder bedeuten soll. Die \r und \n 
sind ja nur die allerhäufigsten, ebenso wie 13 und 10.

Soviel zum Thema Lesbarkeit.

W.S.

von Daniel A. (daniel-a)


Lesenswert?

W.S. schrieb:
> Aber mal ne Frage: Wie kommt ihr auf sowas wie  '\r' eigentlich? Nun,
> das ist eine Konvention, die man auch mal wieder auswendig lernen muß.

Und wenn man es einmal angesehen hat, weiss man es. Aber 13 wird man 
nächstes mal wieder vergessen haben.

Und wie kommt man drauf:
 \n - n ewline
 \r - r etuen
 \b - b ackspace
 \t - t ab(ulator)
 \v - v ertical tabulator
 \e - e scape
 \a - a lert

Intuitiv und Verwechslungssicher, oder?

Ausserdem: Sobald du einen Wert grösser als 127 eingeben müsstest, 
könnte ein char signed oder unsigned sein, dan hat dein Code eine 50% 
Chance eine Overflow Warnung zu generieren.

W.S. schrieb:
> C kennt keinen Unterschied zwischen numerischen Elementen und
> Textzeichen. Ein char ist zugleich Textzeichen und kleinstes numerisches
> Element.

Bis hier ist noch alles richtig.

> Es ist deshalb was völlig Normales, mit char's mit numerischen
> Werten zu benützen

Das ist aber falsch. Es ist nicht anormal signed char oder /unsigned 
char/ für Zahlen zu verwenden, aber "char" ist dafür ungeeignet. 
Umgekehrt verwendet man für Zeichen char, und nicht signed char oder 
unsigned char.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

W.S. schrieb:
> Eben NOCH EINE zum Auswendiglernen.

Wo Du doch gegen Auswendiglernen bist: Dafür weisst Du aber verdammt 
gut, dass 'A' == 0x41 ist. Deshalb addierst Du zur Darstellung von 
Steuerzeichen ja lieber 0x40 statt 'A' - 1.

Warum schreibst Du dann nicht 'A' - 1? Schließlich geht es ja um die 
Darstellung von ^A bis ^Z. Wohlgemerkt: Bis ^Z. Die Zeichen von 26 bis 
31 fehlen auch noch ;-)

Das (und die anderen verwendeten Hex-Zahlen) zeigen mir eher, dass Du 
das ganze ASCII-Alphabet auswendiggelernt hast. Deine ganze 
Argumentation hast Du doch durch Deinen eigenen (zudem fehlerhaften) 
Codeschnipsel selbst widerlegt.

P.S.
Im Laufe der Jahre habe ich das ASCII-Alphabet auch auswendiggelernt. 
Aber deshalb käme ich nie auf die Idee, für z.B. 'D' besser 0x44 zu 
schreiben. Genauso halte ich es mit \n, \r, \t usw. Wie Daniel schon 
schrieb: Jeder Buchstabe hat eine Bedeutung, die man sich sehr einfach 
merken kann. Das ist wesentlich intuitiver - und deshalb auch lesbarer.

: Bearbeitet durch Moderator
von Christian M. (Gast)


Lesenswert?

Rufus Τ. F. schrieb:
>> Deiner Behauptung, daß die Verwendung von \r und Konsorten lesbarer sei
>> als der ASCII-Wert, kann ich (zumindest für mich) nicht zustimmen.
>
> Damit stehst Du aber ziemlich allein auf weiter Flur.

Hängt warscheinlich auch noch mit dem Alter zusammen. Diese 
Backslash-Ausdrücke tauchten Gefühlsmässig eher in jüngerer Zeit auf. 
Mir persönlich ist CR/LF und 0dh/0ah deutlich geläufiger.

Gruss Chregu

von Christian M. (Gast)


Lesenswert?

W.S. schrieb:
> ...da Deklaration und Verwendung getrennt sind - und
> es verhindert auch, daß Leute wie der TO sich mit versehentlicher
> Doppeldeklaration selbst ein Bein stellen.

Das Problem ist veilleicht deswegen, weil es überhaupt möglich ist, mit 
der Deklaration gleich einen Wert zuzuweisen. Gefahr besteht: Ich brauch 
schnell ne Variable, will nicht raufscrollen, also deklarier ich sie 
schnell vor Ort. In anderen Programmiersprachen halte ich konsequent 
Ordung, in C sind dies meine ersten Schritte...

Gruss Chregu

von Klaus (Gast)


Lesenswert?

Daniel A. schrieb:
> Und wie kommt man drauf:
>  \n - n ewline
>  \r - r etuen
>  \b - b ackspace
>  \t - t ab(ulator)
>  \v - v ertical tabulator
>  \e - e scape
>  \a - a lert
>
> Intuitiv und Verwechslungssicher, oder?

und passt auch für EBCDIC, genau wie 'A' - 1

MfG Klaus

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Christian M. schrieb:
> Hängt warscheinlich auch noch mit dem Alter zusammen.

Ich verdiene mein Geld seit bald 30 Jahren mit C und artverwandtem, da 
bin ich vermutlich noch zu jung ...

von Klaus (Gast)


Lesenswert?

Christian M. schrieb:
> Hängt warscheinlich auch noch mit dem Alter zusammen. Diese
> Backslash-Ausdrücke tauchten Gefühlsmässig eher in jüngerer Zeit auf.

Abschrift aus K&R, 1978, Seite 6 ziemlich oben

> main()
> {
>     printf("hello, world\n");
> }

MfG Klaus

von Paul B. (paul_baumann)


Lesenswert?

Rufus Τ. F. schrieb:
> Ich verdiene mein Geld seit bald 30 Jahren mit C und artverwandtem, da
> bin ich vermutlich noch zu jung ...

Respekt. Wie kann ein einzelner Mann ein so hartes Schicksal über so 
eine lange Zeit ertragen, ohne sich dem Suff zu ergeben?
;-)
MfG Paul

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Klaus schrieb:
> Abschrift aus K&R, 1978, Seite 6 ziemlich oben

Mit dem Mistbuch habe ich meine ersten (damals nicht sehr erfolgreichen) 
C-Versuche unternommen. Glücklicherweise kam dann recht schnell die 
zweite Ausgabe heraus, und mit Borlands "Turbo-C 2.0" (in .de von 
Heimsoeth vertrieben, mit von Arne Schäpers komplett neu geschriebenen 
Handbüchern), und da wurde es schlagartig viel, viel besser. Das war 
'89/'90.

von W.S. (Gast)


Lesenswert?

Christian M. schrieb:
> Das Problem ist veilleicht deswegen, weil es überhaupt möglich ist..

ja, sehe ich auch so.
Aber ich meine, es steckt mehr dahinter, nämlich falsches Anlernen.
C ist keine logische Sprache, sondern eher eine diktatorische, wo es 
heißt "das ist hier so, also lerne das auswendig!" und deshalb wird auch 
relativ sklavisch auf Beispiele als Vorbilder geschaut und nachgemacht. 
So pflanzt sich das fort und nach einiger Zeit ist allen C-Schülern 
klar: "Das MUSS so gemacht werden, es hinterfragen zu wollen bringt 
nix."

Daniel A. schrieb:
> Intuitiv und Verwechslungssicher, oder?

Nö. Beides nicht, sondern genauso gewöhnungsbedürftig wie alles andere 
einschließlich ASCII.

Daniel A. schrieb:
> Das ist aber falsch. Es ist nicht anormal signed char oder /unsigned
> char/ für Zahlen zu verwenden, aber "char" ist dafür ungeeignet.
> Umgekehrt verwendet man für Zeichen char, und nicht signed char oder
> unsigned char.

Dir fehlt der Überblick. signed oder unsigned sind lediglich Attribute 
zum char - genauso wie short und long für's int. Der char ist das 8 
bittige Grundelement. Oder anders formuliert: es fehlt das byte im 
numerischen und die strikte Trennung zu Textzeichen. In Pascal könntest 
du so nicht argumentieren, auch nicht bei den meisten Assemblern.

Also Leute, es ist mittlerweile wohl klar genug geworden, daß sowas wie 
\c und Konsorten nur von solchen Leuten als intuitiver angesehen wird, 
die erstens ziemlich reine Programmierer sind und zweitens außer C und 
C-artigen Programiersprachen nichts verwenden resp. mehr kennen. Ist 
halt mittlerweile ne Monokultur geworden und das ist aus prinzipiellen 
Gründen ganz sauschlecht, wenngleich sowas auch für's Tagesgeschäft als 
zweitrangig angesehen wird.

Rufus Τ. F. schrieb:
> Ich verdiene mein Geld seit bald 30 Jahren mit C und artverwandtem,

Soll man "artverwandt" jetzt als C++, C#, Java auffassen? Mir geht es 
so, daß ich jedesmal wieder ne Krise kriege, wenn ich von Pascal (also 
Delphi) in die C-Gefilde runter muß. Aber ich verdiene meine Brötchen 
auch nicht mit Software, sondern mit allem zusammen, also HW+SW.

W.S.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ich habe, als ich den ersten brauchbaren C-Compiler in die Hände bekam, 
mich mit Freude von Pascal & Co. verabschiedet. Das sind Sprachen, die 
dafür erfunden wurde, anderen Leuten das Programmieren beizubringen, 
aber nicht, um tatsächlich darin zu programmieren.

von Falk B. (falk)


Lesenswert?

@Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite

>Ich habe, als ich den ersten brauchbaren C-Compiler in die Hände bekam,
>mich mit Freude von Pascal & Co. verabschiedet. Das sind Sprachen, die
>dafür erfunden wurde, anderen Leuten das Programmieren beizubringen,
>aber nicht, um tatsächlich darin zu programmieren.

Na wenn DAS mal kein Fehdehandschuh ist!!!

Wofür ist denn dann C gedacht? Für Leute, die sich gern beim 
Programmieren in den Fuß schießen? Oder die sich lieber mit dem 
Rasiermesser rasieren anstatt (Sicherheits)rasierklingen zu nutzen? So 
wie echte Männer. Naja fast, die echten programmieren immer noch in ASM 
;-)

C hat sich nicht wegen seiner überragenden Vorteile durchgesetzt, eher 
wegen seines Pragmatismus und einer gehörigen Portion Rüpelhaftigkeit 
;-)

von Yalu X. (yalu) (Moderator)


Lesenswert?

Falk B. schrieb:
> Wofür ist denn dann C gedacht? Für Leute, die sich gern beim
> Programmieren in den Fuß schießen? Oder die sich lieber mit dem
> Rasiermesser rasieren anstatt (Sicherheits)rasierklingen zu nutzen? So
> wie echte Männer.

Wenn das der Grund für die große Verbreitung von C wäre, würde sich ein
Großteil der Männer mit dem Messer rasieren, was aber definitiv nicht
der Fall ist.

Ein passenderer Vergleich wäre IMHO:

  C       =  normales Fahrrad

  Pascal  =  Fahrrad mit Stützrädern

Ein Fahrrad mit Stützrädern hat zugegebenermaßen zwei entscheidende
Vorteile:

  - Es erleichtert Anfängern den Einstieg ins Radfahren.

  - Es verringert die Gefahr von Stürzen.

Genau diese beiden Kriterien (übertragen auf die Softwaretechnik)
standen bei der Entwicklung von Pascal im Vordergrund. Dass eber die
meisten Leute beim Radfahren trotzdem auf Stützräder verzichten, hängt
sicher nicht nur mit dem Herdentrieb zusammen.

> Naja fast, die echten programmieren immer noch in ASM
> ;-)

Eben. Zu den Asm-Programmierern passt der Vergleich mit den
Messerrasierern auch viel besser :)

von Paul B. (paul_baumann)


Lesenswert?

Yalu X. schrieb:
> Ein passenderer Vergleich wäre IMHO:
>
>   C       =  normales Fahrrad
>
>   Pascal  =  Fahrrad mit Stützrädern

Ich habe einen anderen Eindruck:
Pascal-> komfortables Fahrrad mit bequemem Sattel, Nabenschaltung
C-> blanker Rahmen ohne Sattel mit Stummellenker ohne Rücktritt und 
Felgenbremse

Dieser Mist hat sich nicht durchgesetzt -er ist durchgesetzt worden.

MfG Paul

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Paul B. schrieb:
> Ich habe einen anderen Eindruck:

haha, die meisten können eine Programmiersprache nicht besser skizzieren 
als ein Fahhrad :-)

http://www.bento.de/art/fahrrad-zeichnungen-aus-dem-kopf-werden-zu-illustrationen-aus-dem-computer-velocipedia-von-gianluca-gimini-502153/

von Falk B. (falk)


Lesenswert?

@ Paul Baumann (paul_baumann)

>Pascal-> komfortables Fahrrad mit bequemem Sattel, Nabenschaltung
>C-> blanker Rahmen ohne Sattel mit Stummellenker ohne Rücktritt und
>Felgenbremse

;-)

>Dieser Mist hat sich nicht durchgesetzt -er ist durchgesetzt worden.

Nein, denn dort hatte der Ostblock mit seinen Strukturen nichts zu 
melden, die haben nur kopiert und nachgebaut. Vielmehr sind viele 
Programmierer damals wie heute eher schlampige Pragmatiker mit einem 
GUTEN Schuß Chaos! Da war das sichere Pascal halt zu langweilig.

von (prx) A. K. (prx)


Lesenswert?

Das Pascal der 70er war als Lehrsprache entwickelt und in dieser Form 
sonst nur schlecht zu gebrauchen. Der Wirth'sche Ansatz eben. So hatte 
er es später auch gehalten und hat je nachdem womit er sich grad 
rumschlug auch eine Sprache dazu erschaffen.

Das damalige C hingegen liess sich trotz aller Mängel auch darüber 
hinaus verwenden. Und es sparte Ressourcen, sowohl im Rechner als auch 
im Budget, denn es war bei Unix stets dabei und die PDP-11er dazu fanden 
sich an Universitäten öfter. Es gab einen Standard dazu, und einen 
relativ leicht auf verschiedene Architekturen portierbaren Compiler (den 
Portable C Compiler).

C hat sich nicht aufgrund irgendwelcher sprachlicher Qualitäten 
durchgesetzt, sondern weil es in leidlich brauchbarer Form zur richtigen 
Zeit im richtigen Marktsegment maschinenübergreifend vorhanden und 
einsetzbar war.

Pascal hatte eine Blüte in Form des ziemlich genialen Turbo-Pascal, erst 
CP/M dann DOS. Aber das blieb eine Insel. Andere Rechner, klein wie 
gross, hatten entweder ein ziemlich anderes Pascal (ggf. per 
Bytecode-Interpreter), oder überhaupt keines.

: Bearbeitet durch User
von Paul B. (paul_baumann)


Lesenswert?

A. K. schrieb:
> Das Pascal der 70er war als Lehrsprache entwickelt und in dieser Form
> sonst nur schlecht zu gebrauchen.

Die EDV eines ganzen Kombinates wurde NUR mit Pascal-Programmen 
bewerkstelligt. Warum? Weil dise Programme vorher in Algol geschrieben 
waren und sich ohne großen Sackgang in Pascal-Quelltext umsetzen ließen.
Darüber hinaus waren sehr wenige Kommentare im Quelltext nötig, weil er 
an sich schon selbst erklärend war. So waren kleine Änderungen und/oder 
Zusätze schnell zu machen, wenn Irgendeiner z.B. die Arbeitskräfte nach 
Alter sortiert haben wollte.

MfG Paul

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Die erste brauchbare C-Version (C89, "ANSI-C") gab es auch erst 
zeitgleich mit dem Ende der DDR; wäre C nicht über den Stand des älteren 
K&R-C hinausgekommen, sähe die Softwarewelt vermutlich deutlich anders 
aus.

von Mark B. (markbrandis)


Lesenswert?

Paul B. schrieb:
> Ich habe einen anderen Eindruck:
> Pascal-> komfortables Fahrrad mit bequemem Sattel, Nabenschaltung
> C-> blanker Rahmen ohne Sattel mit Stummellenker ohne Rücktritt und
> Felgenbremse
>
> Dieser Mist hat sich nicht durchgesetzt -er ist durchgesetzt worden.

Wilde Verschwörungstheorien? ;-)

Paul B. schrieb:
> Darüber hinaus waren sehr wenige Kommentare im Quelltext nötig, weil er
> an sich schon selbst erklärend war.

Quellcode ist niemals von alleine selbsterklärend. Denn wohl jede 
Programmiersprache kennt mehr oder weniger beliebig wählbare Bezeichner 
für Variablen und Funktionen. Wer seine Variablen a, b, c nennt und 
seine Funktionen d, e, f dem ist in keiner Sprache der Welt zu helfen.

von Paul B. (paul_baumann)


Lesenswert?

Mark B. schrieb:
> Quellcode ist niemals von alleine selbsterklärend.

Ach?! Das legt Mark Brandis per Definition fest, oder wie?

> Denn wohl jede
> Programmiersprache kennt mehr oder weniger beliebig wählbare Bezeichner
> für Variablen und Funktionen. Wer seine Variablen a, b, c nennt und
> seine Funktionen d, e, f dem ist in keiner Sprache der Welt zu helfen.

Ist heute DDR-Meisterschaft im Binsen-Weisheit-Heraushauen?

Verschone mich mit so einem Sülz. Bleib bei "Ausbildung und Beruf" mit 
Deinen Weisheiten.

MfG Paul

von Mark B. (markbrandis)


Lesenswert?

Paul B. schrieb:
> Mark B. schrieb:
>> Quellcode ist niemals von alleine selbsterklärend.
>
> Ach?! Das legt Mark Brandis per Definition fest, oder wie?

Jeder, der ein paar Jahre Berufserfahrung hat, weiß was ich meine.

Es gibt Programmierer, die einigermaßen selbsterklärenden Code schreiben 
können. Das ist aber nun mal eine Eigenschaft des Bearbeiters, und nicht 
etwa der Programmiersprache.

Es gilt nach wie vor:
"Man kann in jeder Programmiersprache schlechten Code schreiben."

Diese Aussagen habe ich nicht erfunden. Aber es ist einfach so.

von Da D. (dieter)


Lesenswert?

Paul B. schrieb:
> Ist heute DDR-Meisterschaft im Binsen-Weisheit-Heraushauen?
>
> Verschone mich mit so einem Sülz. Bleib bei "Ausbildung und Beruf" mit
> Deinen Weisheiten.

Ja so ist der Paul. Immer große Sprüche raushauen, aber wenn ihm mal 
einer widerspricht, wird er sofort pampig. Ziemlich kindisch...

von Paul B. (paul_baumann)


Lesenswert?

Da D. schrieb:
> Ja so ist der Paul.
Richtig erkannt: So ist Paul. Widerpart geben, wenn ihm Einer vom Pferd 
erzählt werden soll.
> Immer große Sprüche raushauen, aber wenn ihm mal
> einer widerspricht, wird er sofort pampig.

Nicht sofort. Nur dann, wenn ein notorischer Rechthaber seine 
Plattitüden und Binsenweisheiten bringt.

> Ziemlich kindisch...

Da zitiere ich mal Dittsche: Deine Ansicht bleibt Dir unbenommen.

-Paul-

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Es ist wirklich selten, daß ich Mark zustimmen kann, aber hier hat er 
tatsächlich recht.

Miesen unwartbaren Quelltext kann man in jeder Programmiersprache 
schreiben.

von Paul B. (paul_baumann)


Lesenswert?

Rufus Τ. F. schrieb:
> Es ist wirklich selten, daß ich Mark zustimmen kann, aber hier hat er
> tatsächlich recht.
>
> Miesen unwartbaren Quelltext kann man in jeder Programmiersprache
> schreiben.

Das ist doch überhaupt nicht der Punkt, um den es geht. Mark 
unterstellt, daß die Quelltexte von denen ich sprach, nicht 
selbsterklärend wären.
Die Leute, die diese Programme schrieben, waren aber durchaus in der 
Lage, Variablennamen zu vergeben, die den Inhalt erklärten -eben nicht 
a,b oder c.

Gut, das war die Zeit, in der man noch miteinander arbeitete -nicht 
wie heute gegeneinander. Da war man so klug, die Programme so zu 
schreiben, daß ein anderer Programmierer sofort am Quelltext 
weiterarbeiten konnte.

Heute versucht sich jeder Drecksack mit unleserlichem Code unentbehrlich 
zu machen und ist darauf auch noch stolz wie Bolle. Das ist eine 
Einstellung, die ich in meinem Leben nicht mehr gutheißen werde.

-Paul-

von Mark B. (markbrandis)


Lesenswert?

Paul B. schrieb:
> Das ist doch überhaupt nicht der Punkt, um den es geht. Mark
> unterstellt, daß die Quelltexte von denen ich sprach, nicht
> selbsterklärend wären.

Du musst schon auch richtig lesen wollen. Ich habe wörtlich geschrieben:

Mark B. schrieb:
> Quellcode ist niemals von alleine selbsterklärend.

Diese Aussage ist korrekt. Sie impliziert: "Quellcode ist dann 
selbsterklärend, wenn er von einem fähigen Bearbeiter so geschrieben 
wurde. Also nicht von allein".

Die Möglichkeit, dass die von Dir erwähnten Quelltexte von guter 
Qualität waren, wird durch meine Aussage in keinster Weise verneint.

Vielleicht mit dem falschen Fuß aufgestanden heute?

von Mark B. (markbrandis)


Lesenswert?

Paul B. schrieb:
> Heute versucht sich jeder Drecksack mit unleserlichem Code unentbehrlich
> zu machen und ist darauf auch noch stolz wie Bolle. Das ist eine
> Einstellung, die ich in meinem Leben nicht mehr gutheißen werde.

Hier stimme ich Dir weitgehend zu.

Freilich ist es auch ein Versagen der Firmen, die solchen Code von ihren 
Mitarbeitern akzeptieren. Wer keine Maßstäbe für Qualität aufstellt und 
diese anwendet, der hat eben auch keine Qualität.

Somit gibt es im Fall von schlechtem Code (und der kommt leider wirklich 
oft vor) mehr als einen Schuldigen.

: Bearbeitet durch User
von Yalu X. (yalu) (Moderator)


Lesenswert?

Paul, die Probleme in der Softwareentwicklung haben sich in den letzten
30 Jahren etwas geändert:

- Damals war ein 5000-Zeilen-Programm schon überdurchschnittlich groß.
  Heute fangen komplexe Programme bei 100000 Zeilen an, und auch mehrere
  Millionen Zeilen sind keine Seltenheit. Das hängt damit zusammen, dass
  die heutigen Computer wesentlich leistungsfähiger sind, und der
  Benutzer erwartet, dass diese Leistungsfähigkeit zur Steigerung der
  Funktionalität und Benutzerfreundlichkeit auch tatsächlich genutzt
  wird.

- Ein Programm, das einen gestandenen Entwickler damals ordentlich
  herausgefordert hat, schreibt heute ein engagierter Schüler in
  kürzerer Zeit und in besserer Qulität. Das liegt aber nicht daran,
  dass die Leute heute gescheiter sind, sondern daran, dass sie heute
  die Möglichkeit haben, sich bereits in jungen Jahren in die Materie
  einzuarbeiten und dabei im Gegensatz zu damals auf einen riesigen Pool
  mit Informationen und vorgefertigten Teillösungen zugreifen können.
  Damit werden die großen Probleme von damals zu kleinen Problemen
  heute. Die wahren Probleme von heute hingegen waren damals noch
  weitgehend unbekannt (s. folgende Punkte).

- Damals war das größte Problem bei der Analyse eines fremden Programms,
  die darin verwendeten Algorithmen zu verstehen. Das ist heute zwar oft
  immer noch ein Problem, viel schwieriger ist es aber in vielen Fällen,
  die Gesamtstruktur eines großen Programms zu erfassen. Beides ist
  i.Allg. nur mit einer entsprechenden Programmdokumentation zu
  erschlagen. Für die Erläuterungen einfacher Algorithmen genügen meist
  Quelltextkommentare, komplexe Algorithmen und Softwarestrukturen
  erfordern oft aber auch eine externe Dokumentation mit viel Text und
  Grafiken, die man nicht mehr im Quelltext unterbringen kann.

- Gerade die Wartbarkeit und Erweiterbarkeit von komplexen Programmen
  erfordern heute geeignete Softwarestrukturen, die ein Programm für
  einen Unerfahrenen noch komplexer erscheinen lassen, als es ohnehin
  schon ist. Wer diese Strukturen aber verstanden hat, wird sich bei
  seinen Vorentwicklern dafür bedanken.

- Bis zu einer gewissen Größe konnten und können Quellcodepassagen
  durchaus auch selbsterklärend geschrieben werden. Der Unterschied
  zwischen damals und heute: Damals konnte man in diesem Größenlimit
  fast ein gesamtes typisches Programm unterbringen, bei den heutigen
  komplexen Programmen nur noch kleine Bruchteile davon.

- Damals war es bzgl. der Lesbarkeit vielleicht noch ein Unterschied, ob
  eine Variable x wie in Pascal mit inc(x) oder wie in C mit ++x
  inkrementiert wird, heute treten solche Miniproblemchen, die sich
  innerhalb einer Codezeile abspielen, völlig in den Hintergrund. Es
  wird einfach erwartet, dass ein Programmierer die von ihm verwendete
  Sprache beherrscht. Wer über solche Kleinigkeiten stolpert und meint,
  alleine durch Intuition programmieren zu können und deswegen eine
  Programmiersprache nicht richtig lernen zu müssen, hat heute in der
  ernsthaften Softwareentwicklung nichts mehr zu suchen.

Paul B. schrieb:
> Gut, das war die Zeit, in der man noch miteinander arbeitete -nicht
> wie heute gegeneinander. Da war man so klug, die Programme so zu
> schreiben, daß ein anderer Programmierer sofort am Quelltext
> weiterarbeiten konnte.

Ich mache selber viel Software und arbeite auch mit vielen anderen
Softwarentwicklern (teilweise von mehreren verschiedenen Firmen)
zusammen. Deine Aussage kann ich aber überhaupt nicht bestätigen.
Geschätzt 95% der Softwareentwickler, die ich kenne, sind sehr
kooperativ. Von den restlichen 5%, die den Entwicklungsprozess mitunter
etwas behindern, tun dies praktisch alle nicht bewusst und absichtlich,
sondern auf Grund mangelder Erfahrung.

Paul B. schrieb:
> Heute versucht sich jeder Drecksack mit unleserlichem Code unentbehrlich
> zu machen und ist darauf auch noch stolz wie Bolle.

Die "Drecksäcke", wie du sie nennst, haben das früher genauso getan,
sonst würde man sie ja nicht mit diesem bösen Ausdruck beschimpfen :)

Paul B. schrieb:
> Dieser Mist hat sich nicht durchgesetzt -er ist durchgesetzt worden.

Rufus Τ. F. schrieb:
> Ich habe, als ich den ersten brauchbaren C-Compiler in die Hände bekam,
> mich mit Freude von Pascal & Co. verabschiedet.

Genauso wie Rufus erging es auch mir.

Ich lernte zuerst Basic. Nachdem ich meine ersten Pascal-Erfahrungen
gemacht hatte war ich so begeistert, dass ich Basic links liegen ließ.
Irgendwann fing ich (wohlbemerkt freiwillig) mit C an und war noch mehr
begeistert. Seither verwende ich Pascal nur noch ganz selten, und dann
ausschließlich aus nostalgischen Gründen ;-)

Das heißt jetzt aber überhaupt nicht, dass C für mich die Königin aller
Programmiersprachen ist, dafür hat C viel zu viele Macken. Aber in
vielen Anwendungsfällen ist C für mich trotz seines hohen Alters nach
wie vor das bestgeignete Werkzeug.

von Paul B. (paul_baumann)


Lesenswert?

@Yalu
Ich bedanke mich zunächst mal für die Mühe, die Du Dir mit Deinem recht 
langen Text gemacht hast -insbesondere dafür, daß Du nicht nur einzelne 
Bröckchen aus meinem Beitrag extrahiert hast.

Ich begann das Programmieren mit der Sprache Algol60 und danach 
wechselte ich auf Pascal, was ich beibehalten konnte, da es sowohl auf 
den Rechnern der Arbeitsstelle als auch auf meinem (Eigenbau)-Rechner 
unter CP/M bzw.
SCP lauffähig war und ich alle meine Sachen damit erledigen konnte.

Heute gehe ich mit Purebasic auf dem Rechner an's Werk, weil das schöne 
kleine Programme ohne irgendwelchen Anhang zum Mitschleppen erzeugen 
kann.
Zum Programmieren von AVR-Kontrollern (Andere nehme ich für meine Zwecke 
nicht) gehe ich mit Bascom an's Werk, wobei man dort auch Assembler mit 
einfügen kann.

C habe ich versucht, mir beizubringen -wenigstens soweit, daß ich den 
Algorithmus in Quelltexten Anderer erkennen kann. Trotzdem gehe ich mit 
Zittern und Zagen dran, aber -ich muss ja auch nicht. In diesem Sinne:
Gut Holz und Waidmannsheil den C-Anhängern.

MfG Paul

von Falk B. (falk)


Lesenswert?

@Yalu X. (yalu) (Moderator)

>Paul, die Probleme in der Softwareentwicklung haben sich in den letzten
>30 Jahren etwas geändert:

Schöner Text, Danke!

>Das heißt jetzt aber überhaupt nicht, dass C für mich die Königin aller
>Programmiersprachen ist, dafür hat C viel zu viele Macken. Aber in
>vielen Anwendungsfällen ist C für mich trotz seines hohen Alters nach
>wie vor das bestgeignete Werkzeug.

Es ist der Engländer im Softwarewerkzeugkasten ;-)

https://de.wikipedia.org/wiki/Engl%C3%A4nder_%28Werkzeug%29

von Zeno (Gast)


Lesenswert?

Daniel A. schrieb:
> 13 wird man
> nächstes mal wieder vergessen haben.

Nö !!

Die wichtigsten ASCII-Codes sollte ein Programmierer schon kennen. Aber 
das geht ja hier nicht, dann müßte man ja Magic-Numbers schreiben - Pfui 
Teufel. Diese bekloppten Escapesequenzen kann sich keine Sau merken und 
man muß diese immer wieder nachschauen. Das ist auch so eine Unart von C 
und C ähnlichen Sprachen.

von Zeno (Gast)


Lesenswert?

Christian M. schrieb:
> Das Problem ist veilleicht deswegen, weil es überhaupt möglich ist, mit
> der Deklaration gleich einen Wert zuzuweisen. Gefahr besteht: Ich brauch
> schnell ne Variable, will nicht raufscrollen, also deklarier ich sie
> schnell vor Ort. In anderen Programmiersprachen halte ich konsequent
> Ordung, in C sind dies meine ersten Schritte...

Ja genau das sind die Stolpersteine in C und Konsorten.
Genau solche Features von C verleiten dazu unstrukturierten und 
fehlerträchtigen (im Sinne von nicht wie gewünscht funktionierend) Code 
zu schreiben.
Allerdings kann man auch in C durchaus gut strukturierten und 
leserlichen Code schreiben, wenn man will - es gibt viele C-Programierer 
die die beweisen aber eben auch sehr viele denen dies zu mühselig ist.

von Zeno (Gast)


Lesenswert?

Rufus Τ. F. schrieb:
> Das sind Sprachen, die
> dafür erfunden wurde, anderen Leuten das Programmieren beizubringen,
> aber nicht, um tatsächlich darin zu programmieren.

Oh!!
Die Arroganz kennt keine Grenzen.

von Zeno (Gast)


Lesenswert?

Falk B. schrieb:
> C hat sich nicht wegen seiner überragenden Vorteile durchgesetzt, eher
> wegen seines Pragmatismus und einer gehörigen Portion Rüpelhaftigkeit
> ;-)

Richtig!

Yalu X. schrieb:
> Ein passenderer Vergleich wäre IMHO:
>
>   C       =  normales Fahrrad
>
>   Pascal  =  Fahrrad mit Stützrädern
Noch so ein arroganter Rüpel.

von Zeno (Gast)


Lesenswert?

Paul B. schrieb:
> Heute versucht sich jeder Drecksack mit unleserlichem Code unentbehrlich
> zu machen und ist darauf auch noch stolz wie Bolle. Das ist eine
> Einstellung, die ich in meinem Leben nicht mehr gutheißen werde.

Du wirst mir immer sympathischer.

von Zeno (Gast)


Lesenswert?

Paul B. schrieb:
> Heute versucht sich jeder Drecksack mit unleserlichem Code unentbehrlich
> zu machen und ist darauf auch noch stolz wie Bolle. Das ist eine
> Einstellung, die ich in meinem Leben nicht mehr gutheißen werde.

Du wirst mir immer sympathischer.

Yalu X. schrieb:
> Ein Programm, das einen gestandenen Entwickler damals ordentlich
>   herausgefordert hat, schreibt heute ein engagierter Schüler in
>   kürzerer Zeit und in besserer Qulität.

Das sieht man den heutigen Programmen auch an.

Yalu X. schrieb:
> Ich mache selber viel Software und arbeite auch mit vielen anderen
> Softwarentwicklern (teilweise von mehreren verschiedenen Firmen)
> zusammen. Deine Aussage kann ich aber überhaupt nicht bestätigen.
> Geschätzt 95% der Softwareentwickler, die ich kenne, sind sehr
> kooperativ. Von den restlichen 5%, die den Entwicklungsprozess mitunter
> etwas behindern, tun dies praktisch alle nicht bewusst und absichtlich,
> sondern auf Grund mangelder Erfahrung.

Arbeitest Du im Software-Schlaraffenland? Ich kann Pauls Aussage nur 
bestätigen.

Yalu X. schrieb:
> Aber in
> vielen Anwendungsfällen ist C für mich trotz seines hohen Alters nach
> wie vor das bestgeignete Werkzeug.

Ich meine wir sind hier in µC-Forum und leider gibt es für µC nichts 
Anderes. Wenn es einen vernünftigen Pascalcompiler für µC geben würde, 
dann würde ich keine Sekunde mehr mit C verschwenden.
Im übrigen hat sich Pascal auch weiter entwickelt und es kann nicht mehr 
mit dem Pascal der 80'ziger und 90'ziger verglichen werden.

von Mark B. (markbrandis)


Lesenswert?

Zeno schrieb:
> Noch so ein arroganter Rüpel.

Der Yalu? Nicht Dein Ernst.

Wenn Du hier regelmäßig liest, dann wirst Du feststellen dass seine und 
Karl-Heinz Bucheggers Beiträge mit zum Besten gehören, was Du hier auf 
mikrocontroller.net vorfinden kannst.

von (prx) A. K. (prx)


Lesenswert?

Rufus Τ. F. schrieb:
> Die erste brauchbare C-Version (C89, "ANSI-C") gab es auch erst
> zeitgleich mit dem Ende der DDR;

Die K&R Version der Sprache hatte klare Mängel und auch offene Punkte, 
war aber offensichtlich brauchbar. Zumindest aus damaliger Sicht (bitte 
keine Kommentare über etwaige Parallelen zur DDR ;-). Komplette 
Unix-Systeme sind damit entstanden. Mitsamt X11 und Anwendungen.

: Bearbeitet durch User
von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Zeno schrieb:
> Allerdings kann man auch in C durchaus gut strukturierten und
> leserlichen Code schreiben, wenn man will

Eben - es geht. Setzt aber eine gewisse Portion von Motivation und 
Intelligenz voraus.

> - es gibt viele C-Programierer
> die die beweisen aber eben auch sehr viele denen dies zu mühselig ist.

Nicht jeder ist für C geschaffen. Ohne Brain 1.0 wird das einfach nix. C 
ist keine Programmiersprache für Leute, die ab und zu mal ein 
Progrämmchen schreiben. Auch nach vielen Jahren lernt man als 
C-Programmierer noch dazu. Wenn man sich intensiv mit C beschäftigt, 
dann wird man irgendwann auch belohnt. Ist halt harte Arbeit und nix für 
Prinzessinnen auf der Erbse. Für diese gibt es andere 
Programmiersprachen (Pascal, Basic etc.), mit denen sie aber auch dort 
nicht so weit kommen werden, wie sie eigentlich wollten, sondern ab 
einer bestimmten Entwicklungsstufe einfach steckenbleiben.

Ohne Fleiß keinen Preis!

Von daher betrachte ich solche Schimpftiraden auf C lediglich als 
Ausdruck eines gewissen Frustes, der auftritt, wenn man sich nur 
oberflächlich mit C beschäftigt. Oberflächlich deshalb, weil derjenige 
meinst, mit möglichst wenig Einsatz möglichst viel zu erreichen. Das ist 
mit C aber nicht möglich, denn es erfordert eine sehr intensive 
Beschäftigung mit der Programmiersprache.

Wenn jemand dermaßen auf C schimpft, soll er:

   - einfach eine eigene Programmiersprache erfinden
   - sich eine andere Programmiersprache suchen
   - sich damit abfinden, dass er mit anderen Sprachen nicht
     soviel erreichen kann, wir er sich erhofft hat
   - einfach mal die Klappe halten

Keiner wird gezwungen, C zu benutzen. Ich kann daher nicht verstehen, 
wie man derart darauf schimpfen kann. Ich schimpfe auch nicht auf 
bestimmte Flugzeugtypen, nur weil ich sie nicht fliegen kann.

Übrigens:

Wenn hier einige Beiträge bei Dir arrogant ankommen, ist das Dein 
Problem und nicht derjenigen, die sie geschrieben haben. Ich kann zum 
Beispiel da überhaupt nichts arrogantes erkennen.

Das oben zitierte Statement von Dir war - nebenbei bemerkt - das einzig 
sachliche von den vielen Beiträgen, die Du hintereinander abgefeuert 
hast. Und witzigerweise spricht genau das für C - auch wenn das nicht 
Deine Intention war. ;-)

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

A. K. schrieb:
> Die K&R Version der Sprache hatte klare Mängel und auch offene Punkte,
> war aber offensichtlich brauchbar.

Ja, sie war absolut brauchbar und für die damalige Zeit auf 
UNIX-Systemen das Non-Plus-Ultra. Ich bin seit 1984 dabei - damals auf 
Unix SVR4 und BSD Unix. Es gab damals einfach nichts vergleichbares, 
welches soviel Entwicklungspotential hatte.

> Komplette
> Unix-Systeme sind damit entstanden. Mitsamt X11 und Anwendungen.

Netzwerkfähige graphische Oberflächen - davon haben andere Konzerne wie 
Microsoft damals noch ganz lange nur geträumt. Das X11-System ist - 
trotz einiger Schwächen - auch heute noch einzigartig, was verteilte 
Anwendungen betrifft. Der Window-Manager lief auf Unix-Maschine A, die 
verschiedenen Anwendungen auf Maschine B und C - und das alles auf einem 
Desktop.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Zeno schrieb:
> Wenn es einen vernünftigen Pascalcompiler für µC geben würde,
> dann würde ich keine Sekunde mehr mit C verschwenden.

Schreib einfach selber einen Pascalcompiler.

> Im übrigen hat sich Pascal auch weiter entwickelt und es kann nicht mehr
> mit dem Pascal der 80'ziger und 90'ziger verglichen werden.

Merkwürdigerweise gibt es aber heute noch immer kein Betriebssystem, das 
in Pascal geschrieben wurde. Warum wohl? Wenn Du mit Deinem 
Pascalcompiler fertig bist, kannst Du damit ja anfangen.

P.S.
Ich würde mich an Deiner Stelle mal mit den Nachfolgesprachen von Pascal 
beschäftigen. Ab Modula-2 sind die ganz brauchbar. Oberon zum Beispiel 
hat durchaus das Zeug, damit auch ganze Betriebssysteme zu schreiben. 
Gibt es sogar: Das ETH Oberon System ist ein eigenständiges 
Betriebssystem der ETH Zürich, das in der Sprache Oberon implementiert 
ist. Dagegen wirkt Pascal als ferner Vorfahre wie ein 
Neandertaler-Dialekt.

von (prx) A. K. (prx)


Lesenswert?

Frank M. schrieb:
> Merkwürdigerweise gibt es aber heute noch immer kein Betriebssystem, das
> in Pascal geschrieben wurde. Warum wohl?

Sprachen sind meist nicht universell geeignet. Pascal eignet sich 
weniger für Betriebssysteme, weil man darin so manche Schweinerei 
braucht. Andererseits müssen Sprachen für Anwendungssysteme eine 
Verwendung solcher Schweinereien nicht unbedingt nahe legen.

> Wenn Du mit Deinem
> Pascalcompiler fertig bist, kannst Du damit ja anfangen.

Es gab ein Pascal Frontend im Rahmen von GCC. Ist aber eingeschlafen.

> Ich würde mich an Deiner Stelle mal mit den Nachfolgesprachen von Pascal
> beschäftigen.

Yep. Wenn schon, dann da.
http://www.designtools.co.nz/mod51.htm

: Bearbeitet durch User
von Zeno (Gast)


Lesenswert?

Mark B. schrieb:
> Zeno schrieb:
>> Noch so ein arroganter Rüpel.
>
> Der Yalu? Nicht Dein Ernst.
>
> Wenn Du hier regelmäßig liest, dann wirst Du feststellen dass seine und
> Karl-Heinz Bucheggers Beiträge mit zum Besten gehören, was Du hier auf
> mikrocontroller.net vorfinden kannst.

Wenn dem so ist, wie Du schreibst, dann hätte er sich den Vergleich mit 
den Stützrädern mal sparen sollen.
Dieser Satz zeugt nach meinem Verständnis schon von einer gewissen 
Arroganz. Nur weil er mit C programmiert erhebt es ihn nicht über Andere 
die eine von C verschiedene Programmiersprache zur Lösung Ihrer Probleme 
benützen.
Ich kenne schon einige Programmierer die sehr gute Software, u.a. auch 
für den medizinischen Bereich, mit Delphi also Objektpascal schreiben, 
und diese sind ganz bestimmt nicht mit Stützrädern unterwegs. Ich könnte 
noch einige Beispiele nennen.

Jeder Programmierer soll die Programmiersprache benutzen, von der er 
meint das er damit die gestellte Aufgabe am besten lösen kann. Ob diese 
Sprache dann C, Pascal, Basic, Small Talk etc. etc. heißt, ist völlig 
wurscht. Wichtig ist, das man auch mal über den Tellerrand hinaus schaut 
und Arbeit / Leistung eines Anderen achtet.

von Zeno (Gast)


Lesenswert?

Frank M. schrieb:
> Nicht jeder ist für C geschaffen. Ohne Brain 1.0 wird das einfach nix. C
> ist keine Programmiersprache für Leute, die ab und zu mal ein
> Progrämmchen schreiben. Auch nach vielen Jahren lernt man als
> C-Programmierer noch dazu. Wenn man sich intensiv mit C beschäftigt,
> dann wird man irgendwann auch belohnt. Ist halt harte Arbeit und nix für
> Prinzessinnen auf der Erbse. Für diese gibt es andere
> Programmiersprachen (Pascal, Basic etc.), mit denen sie aber auch dort
> nicht so weit kommen werden, wie sie eigentlich wollten, sondern ab
> einer bestimmten Entwicklungsstufe einfach steckenbleiben.

Du bist einfach nur überheblich. Wahrscheinlich kennst Du noch nicht 
einmal Pascal - zumindest keine aktuelle Version.
Wie gut es mit C bzw. dessen moderneren Abkömmlingen vorangeht, beweist 
mir gerade ein junger Kollege, der mein für Firma in Delphi 
geschriebenes Programm (welches im übrigen weltweit eingesetzt wird und 
PTB-Zertifizierung erfolgreicht überstanden hat) versucht neu zu 
implementieren. Er schreibt seit anderthalb Jahren daran und gerade mal 
ca. ein sechstel der Funktionalität implementiert, die das Programm ganz 
am Anfang nach ca. 10 Wochen Programmierzeit hatte. Vom aktuellen 
Funktionsumfang reden wir mal gar nicht. Ach ja und nicht zu vergessen 
bei dieser minimalen Funktionalität stürzt das Programm laufend ab. Ach 
ja der Kollege hat Programmieren sogar richtig gelernt.

Also spare Dir Deine unsachlichen Kommentare.

Frank M. schrieb:
> Von daher betrachte ich solche Schimpftiraden auf C lediglich  ...
Und auch dies zeigt wieder mal, das es einige C-Programmierer gibt, die 
sich sofort angepisst fühlen, sobald man Kritik an ihrem Lieblingskind 
übt.
C hat nun mal Schwächen und die kann man nicht schön reden.
Aber Programmierer die etwas anderes als C benützen zu unterstellen sie 
seien mit Stützrädern unterwegs oder im Sinn ähnliche Titulierungen 
zeugen von Arroganz bzw. Überheblichkeit. Du bist halt auch so ein 
Bursche - Du hast es in Deinem Post ja umfänglich bewiesen - und deshalb 
kannst Du auch keine Arroganz erkennen.


A. K. schrieb:
> weil man darin so manche Schweinerei  ...
Du hast es erkannt.


Frank M. schrieb:
> Dagegen wirkt Pascal als ferner Vorfahre wie ein
> Neandertaler-Dialekt.
Jetzt bin ich aber froh das Du über das Neandertalerstadium hinaus 
gekommen bist.

von bko (Gast)


Lesenswert?

Frank M. schrieb:
(...)
>
> Merkwürdigerweise gibt es aber heute noch immer kein Betriebssystem, das
> in Pascal geschrieben wurde. Warum wohl? Wenn Du mit Deinem
> Pascalcompiler fertig bist, kannst Du damit ja anfangen.
>
gabsdoch:

https://de.wikipedia.org/wiki/Apollo/Domain

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.