Syntax- oder Semantikfehler?
-
Typsystem wuerde ich Syntax zuordnen. Dabei gibt der Typ nur das Was? an, nicht aber Wie? etwas ist. Somit ist es ein Syntaxfehler.
Wikipedia sagt dazu:
In computer science, a type system may be defined as "a tractable syntactic framework for classifying phrases according to the kinds of values they compute".
-
Es ist irgendwie beides und gleichzeitig auch wieder nicht und gleichzeitig eine Macke der Sprachkonstruktion.
Was irgendwie fehlt, ist ein Hinweiszeichen auf die Umwandlung. Und wenn man z.B. Video- und Sounddatentypen mischen würde, dann wäre das auch ziemlicher Unfug.
Z.B. Video = a
Soundwave(sync) = bund jetzt a = b? ziemlicher Quatsch.
also a(vi) >>>>>>>>>>>> b(Ss) oder ähnliches in der Richtung wäre vorstellbar.
Aber genau aus diesem Grund und anderen dieser Art hast du Assembler dreiviermal schneller gelernt als eine Hochsprache außer vielleicht Basic oder Haskell und so - denke ich mal...;)
-
Assembler dreiviermal schneller gelernt als ...
Hat nichts mit dem Problem zu tun. Trolle doch woanders!
-
knivil schrieb:
Assembler dreiviermal schneller gelernt als ...
Hat nichts mit dem Problem zu tun. Trolle doch woanders!
fass dich mal lieber an die eigene Nase und denk nochmal drüber nach.
-
Einfache Lösung: guck doch einfach in die Grammtik der Sprache, dann bekommst du eine definitive Antwort dazu. Und ich würde vermuten dass das in C++ ebensowenig ein Syntaxfehler sein soll wie in irgendeiner anderen Sprache, es sei denn mir zeigt jemand die entsprechende Stelle wo das in der Grammatik verboten wird.
-
Für mich ist der Code fehlerhaft bzw. falsch angeordnet, da wir die Variable a von der Variable b abhängig machen.
Damit der Codeabschnitt reibungslos funktioniert, müsste der Datentyp oder Klasse b kompatibel zum Datentyp oder Klasse von a sein.
-
in einigen frühen basic-Dialekten wurden die Bezeichner von String-Variablen mit einem angehängtem '' markiert, sodaß a="foo" falsch war, a="foo" korrekt.
Ebenso in frühem Fortran (implizite Typisierung): Variablen-Bezeichner, die mit i, j, k, l, m, oder n begannen, wurden implizit als Integer angenommen, wenn nichts Anderes angegeben war.
Solche Typfehler hätte ein Syntax-Checker finden können.
-
Dieser Thread wurde von Moderator/in nman aus dem Forum Themen rund um den PC in das Forum Rund um die Programmierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
satanfreze schrieb:
Für mich ist der Code fehlerhaft bzw. falsch angeordnet, da wir die Variable a von der Variable b abhängig machen.
Der Code ist ja auch falsch. Ich will aber nicht wissen ob er es ist, sondern wann der Fehler vom Compiler entdeckt wird.
gastantwort schrieb:
Einfache Lösung: guck doch einfach in die Grammtik der Sprache, dann bekommst du eine definitive Antwort dazu.
Ich hab mal in der JLS nachgeguckt und nichts gefunden was genau festlegt, dass eine Integer Deklaration die Form int <name> = <integer_literal> haben muss.
Also kann man wohl sagen, dass es eben von der Grammatik und vor allem von deren Komplexität abhängt ob es sich hier um ein Syntax- oder Semantikfehler handelt?
-
Antoras schrieb:
Also kann man wohl sagen, dass es eben von der Grammatik und vor allem von deren Komplexität abhängt ob es sich hier um ein Syntax- oder Semantikfehler handelt?
Imho sind Typ-Fehler fast immer Semantik-Fehler. Die Abstract Syntax Trees werden oft in der Syntaxphase aufgebaut, danach werden die in der Semantikphase auf Korrektheit überprüft.
-
Antoras schrieb:
satanfreze schrieb:
Für mich ist der Code fehlerhaft bzw. falsch angeordnet, da wir die Variable a von der Variable b abhängig machen.
Der Code ist ja auch falsch. Ich will aber nicht wissen ob er es ist, sondern wann der Fehler vom Compiler entdeckt wird.
Der Compiler selbst dürfte eigentlich keinen Fehler, sondern nur eine Warnung ausgeben, da eine implizite Typkonvertierung durchgeführt wird.