SCL Anfängerfragen

Gerri

Level-1
Beiträge
822
Reaktionspunkte
37
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
es gibt zwei Dinge, die mich im AUgenblick in SCL quälen:

1. GOTO - Anweisung.
Was gibt es dabei zu beacjten? Irgendwie kommt es mir vor als wäre
das Verhalten anderst als in AWL.

2. Return - Anweisung
Wirkt diese wie BEA oder BEB? In einer if-Then Anweisung z.b.

IF X = True THEN
Return;
END_IF;

...
...
RETURN;

3. In CPU laden. Richt es im SCL editor zu laden oder muss man im Simatic
Manager ebenfalls laden?
 
Hallo,
es gibt zwei Dinge, die mich im AUgenblick in SCL quälen:

1. GOTO - Anweisung.
Was gibt es dabei zu beacjten? Irgendwie kommt es mir vor als wäre
das Verhalten anderst als in AWL.
Einfach nicht benutzen! GOTO ist Schrott!!!
Nutze lieber Strukturierende Elemente wie IF-THEN-ELSE-ELSIF/CASE/FOR/WHILE/usw.

2. Return - Anweisung
Wirkt diese wie BEA oder BEB?
Ja (ich benutze diese Anweisung allerdings eher selten)

3. In CPU laden. Richt es im SCL editor zu laden oder muss man im Simatic
Manager ebenfalls laden?
[/QUOTE]
Es reicht im SCL-Editor.
 
Edsger W. Dijkstra

meinst du goto funktioniert nicht immer oder es ist einfach unschön damit zu arbeiten?

Edsger W. Dijkstra hat bereits 1968 die GOTO Anweisung ins visier genommen und sein Statement unter dem Namen "GOTO Considered Harmful" (in etwa GOTO als schädlich betrachten) veröffentlicht.

GOTO führt nicht automatisch zu Spaghetticode, der Einsatz davon aber aber eben die Tendenz dazu. Es gibt kaum Anwendungen wo so ein GOTO zur besseren Struktur eines Programms beiträgt.

Nicht zuletzt sieht die IEC61131-3 für ST (woran sich SCL ja anlehnt) gar keine GOTO Anweisung vor und das aus gutem Grund, wilde Sprünge führen zu undurchsichtigem Quellcode ala AWL.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
volle zustimmung für die verdammung von GOTO ... aber manchmal, wenn man ein/zweitausend zeilen code (sei es SCL oder C# oder ähnliches) debuggen muß, wünscht man es sich schon manchmal her :rolleyes:
 
ich kann mich noch grau an meinen VB-Kurs erinnern, wo eine der ersten Anweisungen vom Trainer war: "Hände weg von GOTO!!!"
 
Also ich würde sagen goto dort wo notwendig ist.

Im Kernel von linux gibt es nach allgemeinen Schätzungen(keiner hat je gezählt ;) )
Interessant ist, was Linus Torvalds hier:
http://kerneltrap.org/node/553/2131
dazu schriebt

Code:
I think goto's are fine, and they are often more readable than large
amounts of indentation. That's _especially_ true if the code flow isn't
actually naturally indented (in this case it is, so I don't think using
goto is in any way _clearer_ than not, but in general goto's can be quite
good for readability).

Of course, in stupid languages like Pascal, where labels cannot be 
descriptive, goto's can be bad. But that's not the fault of the goto, 
that's the braindamage of the language designer.

        Linus
bike
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also ich würde sagen goto dort wo notwendig ist.

Im Kernel von linux gibt es nach allgemeinen Schätzungen(keiner hat je gezählt ;) )

Ich gerade mal die gotos in den Kernel-Sourcen auf meinem Rechner mit
Code:
 grep -i 'goto ' /usr/src/linux-source-2.6.18/* -r | wc -l
gezählt. Ergebnis:
39149

Dort werden zwar alle Stellen gezählt (auch in Kommentaren etc.), aber Verwendung von goto ist schon enorm.

Eigentlich hat jede ernstzunehmende Sprache ein goto, und bestimmt nicht ohne Grund (wenns nach Pascals Wirth ginge, hätten Strings ja auch nur 255 Zeichen Länge).
 
Dann zitiere ich mich halt mal wieder selbst:
...
Es gibt kaum Anwendungen wo so ein GOTO zur besseren Struktur eines Programms beiträgt.
...

im Bezug auf:

...
Code:
grep -i 'goto ' /usr/src/linux-source-2.6.18/* -r | wc -l
gezählt. Ergebnis:
39149

Dort werden zwar alle Stellen gezählt (auch in Kommentaren etc.), aber Verwendung von goto ist schon enorm.
...


Was sind schon knappe 40k Verwendungsstellen bei fast 9Millionen Zeilen Quellcode des Linux-Kernel? ~0,4%

[edit]
OK bei der 2.6.18 Version sind es keine 9Millionen (wie beider aktuellen Version) sondern ~7Millionen... ergibt also irgend was um die 0,6%
[/edit]
 
Zuletzt bearbeitet:
...
Eigentlich hat jede ernstzunehmende Sprache ein goto, und bestimmt nicht ohne Grund...

Für die Programmiersprache C kann man sogar die Entwickler zitieren:

"C provides the infinitely-abusable goto statement, and labels to
branch to. Formally, the goto is never necessary , and in practice
it is almost always easy to write code without it. [...] Nevertheless,
there are a few situations where goto may find a place. The most
common is to abandon processing in some deeply nested structure, such as
breaking out of two or more loops at once. [...]"
(Kernighan & Ritchie, The C Programming Language)
 
Zurück
Oben