it-swarm.com.de

Merkwürdigste Sprachfunktion

Was ist Ihrer Meinung nach das überraschendste, seltsamste, seltsamste oder wirklich "WTF" -Sprachenmerkmal, auf das Sie gestoßen sind?

Bitte nur ein Merkmal pro Antwort.

975
Thomas Bonini

Ruby Flip-Flops. "..." und ".." in bedingten Anweisungen sind nicht immer Bereichsoperatoren:

(0..20).each do |x|
  if ((x%10) == 5)..((x%10) == 5)
    print "#{x} "
  end
end

(0..20).each do |x|
  if ((x%10) == 5)...((x%10) == 5)
    print "#{x} "
  end
end

Dies wird Folgendes ausgeben:

5 15
5 6 7 8 9 10 11 12 13 14 15

.. prüft beide Anweisungen bei jedem Durchgang, ... prüft nur die "on" - oder "off" -Anweisung bei jedem Durchgang (abhängig vom Flip-Flop-Zustand). Sie werden von awk und sed gestohlen.

Matz schreibt in "The Ruby Programming Language": "Flip-Flops sind ein ziemlich undurchsichtiges Merkmal von Ruby und werden wahrscheinlich am besten vermieden ..."

3
Skade

In PHP

var_export('false' == 0);       // true

var_export('false' == true);    // true

var_export('false' == false);   // false

EDIT

Wie @Kobi bereits erwähnt hat, kann es passieren, dass die Sprache jeden Wert als "TRUE" interpretiert, mit Ausnahme von "FALSE", aber nicht im Falle von PHP, wo die Dinge noch seltsamer sind, als Sie dachten!

Dieser Fall ist im Kapitel "String-Konvertierung in Zahlen" eines PHP Handbuchs vollständig dokumentiert. Dort heißt es:

Wenn die Zeichenfolge mit gültigen numerischen Daten beginnt, wird dieser Wert verwendet. Andernfalls ist der Wert 0 (Null).

Hier ist ein Beispiel:

print (int) 'zero';    // 0
print (int) 'false';   // 0
// but
print (int) '1 - one'; // 1

P.S. Ich sehe mehr Schaden als Nutzen solcher impliziten Typkonvertierungen.

3

Da ich noch niemanden gesehen habe, der es erwähnt hat ... RPG 2 oder 3 (Report Program Generator ... alias Rocket Propelled Garbage) ist mit Abstand die nervigste Sprache, die ich je benutzt habe. Es kombiniert nahezu keine Kontrolle über den Programmfluss (Eingabe oben in der Datei, Beenden unten) und Programmieranweisungen werden basierend auf Zeichen definiert, die in bestimmten Spalten mit einer festen Schriftart definiert sind (denken Sie an PUNCH CARDS !!).

Um wirklich FUBAR zu sein, müssen Sie versuchen, DYL-280 zu programmieren. Es kombinierte RPG-Ablauf und Logik mit COBOL-Syntax.

Suchen Sie hier nach einem RPG: wikipedia.org/wiki/IBM_RPG

Ein Beispiel für DYL-280: http://99-bottles-of-beer.net/language-dyl-280-224.html

3
Bill

Für diejenigen, die es nicht wussten, ist PostScript tatsächlich eine Programmiersprache. Ich bin ein bisschen wahnsinnig geworden - ich habe ein PostScript-Programm geschrieben, das ein Mandelbrot-Fraktal mit einem sehr hohen Detaillierungsgrad berechnet. Es ist wirklich druckbares PostScript, obwohl es viele Druckertreiber zum Absturz bringen wird ...

Wie auch immer, wo fange ich mit PostScript an? Hier ist eines: Sie können tatsächlich eine Variable erstellen, deren Bezeichner ... nichts ist.

() cvn 5 def% Ordnen Sie die Nummer 5 ... nichts zu

PostScript ist eine stapelbasierte Sprache. () legt einen leeren String auf den Stapel. cvn konvertiert es in einen Namen ("/", wenn Sie es drucken, da vor allen Namen in PS ein Schrägstrich steht). Dann weist 5 def ihm den Wert 5 zu. (% ist das Kommentarzeichen)

Sie können es nicht direkt zurückbekommen, z. Wenn ich "/ print" sage, wird die Nummer 5 nicht gedruckt. Sie können sie jedoch indirekt zurückerhalten:

() CVN Load Print% Dies wird die Nummer 5 drucken

Was noch ... PostScript hat Wörterbücher als nativen Typ, und Sie können eine Arrayreferenz als Schlüssel für das Wörterbuch verwenden ... aber es ist die REFERENZ, die der Schlüssel ist, nicht das Array. Damit:

/ myDict 100 dict def

[0] dup myDict exchange 42 put myDict exchange get ==% prints 42

myDict [1] 42 put myDict [1] get% löst einen undefinierten Fehler aus

Bearbeiten: Oh ja, noch eine lustige Sache ... Versuchen Sie Folgendes bei einer Ghostscript-Eingabeaufforderung:

1 array dup dup 0 exch put ==

D'oh!

3
James Sweet

In Ruby können Sie mit Heredocs einige seltsame Dinge tun. Erwägen:

a = <<ONE
This is one. #{<<TWO}
This is two. #{<<THREE}
This is three.
THREE
TWO
ONE

p a # => "This is one. This is two. This is three.\n\n\n"
3
mattonrails

Einer meiner C++ Favoriten:

#include <iostream>
using namespace std;
int main()
{
    cout <<  3 << 5  << endl;
    cout << (3 << 5) << endl;
    return 0;
}

Das ist natürlich leicht zu erklären, aber es hat begonnen, Studenten zu programmieren, die sich am Kopf kratzen!

3
pr1268

Die Programmiersprache RSL wird in einem fremden Bankensystem verwendet. Es gibt eine eingebaute Klasse TArray für Arrays. Aber wenn Sie davon erben, wird jede Instanzvariable zu einem Element des Arrays.

class (TArray) DerivedArray
  var someField = 56;
end

var a = DerivedArray();
PrintLn(a.Size);     // => 1
PrintLn(a[0]);       // => 56 
3
Ilya Golota

PHP backticks

Von http://www.php.net/manual/en/language.operators.execution.php

PHP unterstützt einen Ausführungsoperator: Backticks (``). Beachten Sie, dass dies keine einfachen Anführungszeichen sind! PHP versucht, den Inhalt der Backticks als Shell-Befehl auszuführen. Die Ausgabe wird zurückgegeben (d. h. sie wird nicht einfach zur Ausgabe ausgegeben; sie kann einer Variablen zugewiesen werden).

$output = `ls -al`;
echo "<pre>$output</pre>";

Nun, es ist "ziemlich einfach", "statt" im Code zu erkennen.

Das ist auch lustig:

Nach langem Hin und Her bin ich zu dem Schluss gekommen, dass der Backtick-Operator (und Shell_exec) einen begrenzten Puffer für die Rückgabe haben. Mein Problem war, dass ich eine Datei mit über 500.000 Zeilen durchsuchte und eine Antwort mit weit über 100.000 Zeilen erhielt. Nach einer kurzen Pause wurde ich mit Fehlern von grep überflutet, dass die Pipe geschlossen wurde.

3
Vili

Hier ist ein bisschen rumgespielt im Perl-Debugger:

  DB<1> sub foo { +(1..20) } 
  DB<2> @bar = foo(); # list of 1, 2, 3, 4...20
  DB<3> x scalar @bar # size of list
0  20
  DB<4> x scalar foo();
0  ''

Stimmt. Wenn Sie die Methode so aufrufen, wird der skalare Kontext von scalar in den Unterprogrammaufruf übernommen, und der harmlos aussehende .. wird zu einem völlig anderen Operator. (Das ist der "Flip-Flop" -Operator anstelle des Bereichsoperators).

3
fennec

Feature: In Bash, der Korn-Shell (ksh93) und der Z-Shell können Arrays mit Variablen mit oder ohne Dollarzeichen subskribiert werden:

array[index]=$value
array[$index]=$value

Dies ergibt mit dem Dollarzeichen den erwarteten Wert von 10000:

unset array
for i in {1..10000}
do
    ((array[$RANDOM%6+1]++))
done
unset total
for count in ${array[@]}
do
    ((total += count))
done
echo $total

Seltsamkeit: Wenn Sie das Dollarzeichen von RANDOM entfernen, ändert sich die Gesamtsumme zufällig und liegt sogar über 10000.

In ähnlicher Weise ergibt dies 3 anstelle von 2:

a=1; ((r[a++]++)); echo $a

Und Sie können dort kein Dollarzeichen verwenden, da es sich um eine Zuweisung handelt (a steht auf der linken Seite), obwohl Sie dies tun könnten, wenn Sie die Indirektion verwenden, aber die doppelte Auswertung weiterhin auftritt.

The Reason: Mit dem Dollarzeichen wird die Variablenerweiterung vor der arithmetischen Auswertung durchgeführt, sodass sie nur einmal ausgeführt wird. Ohne das Dollarzeichen wird es zweimal ausgeführt, einmal, um den Index für die Suche zu berechnen, und noch einmal, um den Index für die Zuweisung zu berechnen (eine Zuweisung in einem Schritt in der Schleife könnte also tatsächlich so aussehen wie array[4] = $array[6] + 1, was total verschlüsselt das Array).

3

Wie wäre es mit den netten systemabhängigen Überläufen, die in (MRI/C) Ruby und MacRuby (aber nicht in JRuby) zu Jahresüberschlägen führen, gefolgt von Lokalzeitfehlern für eine größere Anzahl. Kein häufiges Problem, aber es ist seltsam:

$ Ruby -version
Ruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]
$ irb
>> Time.at(67767976233550799)
=> Tue Dec 31 23:59:59 -0500 2147483647
>> Time.at(67767976233550800)
=> Wed Jan 01 00:00:00 -0500 -2147483648
>> Time.at(67768036191694799)
=> Wed Dec 31 23:59:59 -0500 -2147481749
>> Time.at(67768036191694800)
ArgumentError: localtime error
...
Maybe IRB bug!!

Dies kann jedoch für 64-Bit-Umgebungen spezifisch sein.

3
Gary S. Weaver

Etwas Bizarres - VBScript mit einem Null-Schlüsselwort und einem Nothing-Schlüsselwort (Null fehlen Daten und Nothing fehlt). Warum nicht einfach ein Stichwort haben ...? Die meisten anderen Sprachen scheinen mit einer gut zurechtzukommen!

Visual Basic 6.0 und natürlich "klassischer ASP" -Code (da VBScript verwendet wird) weisen dieselbe Bizarrität auf. Und in Visual Basic alt und neu haben wir auch DBNull.

Die Situation verbessert sich jedoch, da in Visual Basic.NET Null endlich weg ist, sodass Null nicht verwendet wird und nur Nothing und DBNull verwendet werden.

2
martinr

sa = "a =" "a =" "a" "", @ a = "" "2N" "", a = "" "c =" "" _ ("" "" " 22 "" "? @ A), @ a" ", @ a, a =" "a" ", a (c) =" S + "_ c, e = $ T (@@ a @ (c) )",@ein

dies ist ein netter Einzeiler in COS (Cache Objectscript). Das Lustige dabei sind 5 verschiedene Arten der Code-Indirektion * G

2
kazamatzuri

Die restlichen haben nichts mit dem erstaunlichen Ruby Flip-Flop-Operator zu tun:

p = proc {|a,b| a..b ? "yes" : "no" }

p[false,false]    => "no"
p[true,false]     => "yes"
p[false,false]    => "yes"   # ???
p[false,true]     => "yes"
p[false,false]    => "no"

Ja, der Programmstatus ist im Analysebaum des Interpreters gespeichert. Aus diesem Grund dauert es ewig, eine konforme Ruby -Implementierung vorzunehmen. Aber ich vergebe dir, Ruby <3

2
jedediah

In PHP ist das folgende:

<?php $foo = 'abc'; echo "{$foo";

ist ein Syntaxfehler.

Wenn Sie tatsächlich {, gefolgt vom Inhalt von $foo, möchten, müssen Sie . verwenden:

<?php $foo = 'abc'; echo '{' . $foo;
2
Ollie Saunders

Processing (processing.org) ist eine Sprache, die auf Java basiert. In einfachen Worten ist der Verarbeitungscompiler der Präprozessor Java, der die verarbeitungsspezifische Syntax in Java übersetzt.

Aufgrund des Designs der Sprache gibt es einige Überraschungen:

Die Klasse von Processing wird in die innere Klasse von Java kompiliert. Dies verursacht Ärger, wie private Variablen, die nicht wirklich privat sind

class Foo {
  private int var = 0; // compiles fine
}

void setup() {
  Foo f = new Foo();
  print(f.var); // but does not causes compile error
}

das Fehlen der Funktion draw () führt auch dazu, dass Ereignishandler nicht aufgerufen werden:

// void draw() {} // if you forgot to include this
void mousePressed() {
  print("this is never called");
}
2
Lie Ryan

Umgekehrte polnische Notation (RPN). Das heißt, die Argumente stehen vor der Funktion. Oder mit anderen Worten, Sie addieren zwei und zwei, indem Sie 2 2 + schreiben.

Zu den Sprachen, die diese WTF kennzeichnen, gehören Forth, Postscript (ja, Laserdrucker) und Factor.

2

Ein Fortran-Compiler, den ich vor Jahren verwendet habe, hatte die interessante Eigenschaft, dass: (a) Zahlen zuerst im High-Byte-Format gespeichert wurden; (b) Nummern wurden an Subroutinen nach Adresse übergeben; (c) Es wurde keine Überprüfung der Länge zur Kompilierungszeit durchgeführt.

Sie könnten also ein Programm wie das folgende schreiben: (Entschuldigen Sie, wenn ich die Syntax durcheinander bringe. Es ist lange her, seit ich Fortran geschrieben habe.)

INTEGER*2 FUNCTION TIMESTWO (INTEGER*2 N)
RETURN N*2

... THEN CALL THIS SOMEWHERE WITH A LONG INTEGER ...

INTEGER*4 I, J

I=42
J=TIMESTWO(I)

Der Endwert von J ist ... Null!

Warum? Weil der übergebene Wert 4 Bytes beträgt, die aufgerufene Funktion jedoch nur die ersten beiden Bytes betrachtet. Da die ersten beiden Null sind, verdoppelt es die Null und gibt sie zurück. Dieser Rückgabewert wird dann in vier Bytes zurückgewandelt.

Dies war sehr mysteriös, als ich es zum ersten Mal traf. Fast jede Zahl, die ich an bestimmte Funktionen weitergegeben habe, wurde als Null interpretiert!

2
Jay

Eine sehr kleine Sache, die mich in COBOL ärgerte, war, dass es keine spezielle Modulo-Operation gab. Stattdessen können Sie eine Division durchführen, in der angegeben wird, dass Sie nur ganzzahlige Ergebnisse wünschen, und den Rest in einer anderen Variablen speichern. Da COBOL in Bezug auf Variablen sehr empfindlich ist, bedeutet dies, dass Sie eine Variable gefunden haben, die Sie nicht wirklich brauchten, d. H. Das tatsächliche Ergebnis der Division. Dies ist die Geschichte, wie ich eine Variable einmal "USELESS" nannte - das war der passendste Name, den ich mir vorstellen konnte.

2
Anne Schuessler

Perls CORE :: open- und Standardbibliothek mit Elementen der Objektorientierung, die mit einer prozeduralen Schnittstelle maskiert sind: open ( my $fh, '>', 'foobar' ); open ist ein Konstruktor, der die von my() zurückgegebene Referenz verarbeitet und die Argumente '>' und '' verwendet 'foobar'. Darüber hinaus ist dies ein Objekt, das ein gesegneter Typeglob ist (was bedeutet, dass es keinen Zustand innerhalb des Objekts halten kann).

Weitere Informationen zu meinem Perlmonks-Post IO :: File vs CORE :: open hier: http://www.perlmonks.org/? node_id = 763565

2
Evan Carroll

In Bash können Variablen sowohl Skalare als auch Arrays sein:

$ a=3
$ echo $a
3
$ echo ${a[@]}    # treat it like an array
3
$ declare -p a    # but it's not
declare -- a="3"
$ a[1]=4          # treat it like an array
$ echo $a         # acts like it's scalar
3
$ echo ${a[@]}    # but it's not
3 4
$ declare -p a
declare -a a='([0]="3" [1]="4")'
$ a=5             # treat it like a scalar
$ echo $a         # acts like it's scalar
5
$ echo ${a[@]}    # but it's not
5 4
$ declare -p a
declare -a a='([0]="5" [1]="4")'

ksh macht das Gleiche, verwendet jedoch typeset anstelle von declare.

Wenn Sie dies in zsh tun, erhalten Sie die Zuweisung von Teilzeichenfolgen anstelle von Arrays:

$ a=3
$ a[2]=4          # zsh is one-indexed by default
$ echo $a
34
$ a[3]=567
$ echo $a
34567
$ a[3]=9
$ echo $a
34967
$ a[3]=123         # here it overwrites the first character, but inserts the others
$ echo $a
3412367
$ a=(1 2 3)
$ echo $a
1 2 3              # it's an array without needing to use ${a[@]} (but it will work)
$ a[2]=99          # what about assignments?
$ echo $a
1 99 3
2

In SQL Server (mindestens MS):

Dies wird immer mit false ausgewertet:

IF @someint <> NULL

Gegeben:

DECLARE @int INT

SET @int = 6

IF @int <> NULL
BEGIN
    Print '@int is not null'
END
ELSE
BEGIN
    Print '@int is evaluating to null'
END

Die Ausgabe wird sein:

@int is evaluating to null

Es muss geschrieben werden:

IF @someint IS NOT NULL
BEGIN
END

Wer hat englische Majors in das SQL-Team aufgenommen? :)

2
Fred

An der Ohio State University unterrichten sie Programmierung in einer Bastard-C++ - Sprache namens Resolve/C++. Resolve/C++ verwendet für alles eine Design-by-Contract-Methode. Sie müssen Komponenten und Methoden in Kommentaren, die kompiliert werden, mathematisch modellieren, damit Sie eine Beziehung zwischen Methoden und Objekten aufrechterhalten müssen.

2
It Grunt

In C++ die Möglichkeit, eine geschützte abstrakte virtuelle Basis für einen reinen virtuellen privaten Destruktor zu erstellen.

Dies ist ein reiner virtueller privater Destruktor, der von einer geschützten abstrakten virtuellen Basis geerbt wird.

IOW, ein Destruktor, der nur von Mitgliedern oder Freunden der Klasse (privat) aufgerufen werden kann und der in der Basisklasse (abstrakte Basis), die ihn deklariert, eine 0 (rein virtuell) zugewiesen wird und der später definiert/überschrieben wird in einer abgeleiteten Klasse, die die mehrfach vererbte Basis (virtuelle Basis) auf geschützte Weise gemeinsam nutzt.

2
RoadWarrior

in Ruby ...

i=true
while(i)
   i=false
   a=2
end
puts defined?(a) // returns true
2
Lucas

FORTRAN ist kein wirklicher WTF-Moment, sondern eher ein "Warum muss ich diesen ganzen Müll-Moment tippen?"

IF(12 .gt. 11) THEN
 // Do some magic
ENDIF

Die ".gt." warf mich aus, als ich ein bisschen mit der Sprache spielte, bis mir klar wurde, dass es das ">" Symbol war. Oh, wie ich es liebe, kein Biologiemajor zu sein und mich Tag für Tag mit diesem Mist beschäftigen zu müssen

2
WarmWaffles

In Common LISP sind Arrays mit null Dimensionen seltsam und haben natürlich Lesesyntax.

? (aref #0A5)
5
2
Brian

Ich denke, dies ist kein "Sprachfeature" (C) und ich bin möglicherweise weitestgehend unwissend, wenn ich es poste, aber ich konnte nicht herausfinden, warum dies passiert, also werde ich fragen. Wenn sich herausstellt, dass es mit einem merkwürdigen Sprachfeature zu tun hat, dann hat es mich wirklich zu "WTF" gemacht, also ist es diesen Ort wert.

int a = 0;
int *p = &a;

printf("%d, %d, %d.\n", *p, (*p)++, *p); // Outputs "1, 0, 0.\n" on MinGW's GCC 4.4.1

Warum?

- bearbeiten

Habe es gerade und es ist keine große Sache. Ich kann die C++ - Gurus fühlen, die mich jetzt auslachen. Ich vermute, die Reihenfolge, in der Funktionsparameter ausgewertet werden, ist nicht spezifiziert, daher können Compiler sie nach Belieben aufrufen (und ich glaube, ich habe diese irgendwo in der Dokumentation von boost gelesen). In diesem Fall wurden die Argumentanweisungen rückwärts ausgewertet, was wahrscheinlich die Aufrufkonvention der Funktion widerspiegelt.

2

In LISP können Sie eine Liste und einen Vektor sowie eine Struktur und ein CLOS-Objekt kopieren.

... aber Sie können kein Array oder keine Hash-Tabelle kopieren.

2
user245384

Technisch gesehen keine WTF-Sprache, sondern eine Architektur.

http://www.6502.org/tutorials/6502opcodes.html#JMP

6502 Assembly, indirekte JMP:

Beachten Sie, dass dem indirekten Sprung kein Übertrag zugeordnet ist.

EIN INDIREKTER SPRUNG DARF NIEMALS BENUTZEN

VEKTOR, DER AUF DEM LETZTEN BYTE ANFÄNGT

EINER SEITE

Wenn beispielsweise die Adresse $ 3000 $ 40 enthält, $ 30FF $ 80 enthält und $ 3100 $ 50 enthält, ist das Ergebnis von JMP ($ 30FF) eine Übertragung der Kontrolle auf $ 4080 anstelle von $ 5080, wie Sie es beabsichtigt haben, dh der 6502 hat das niedrige Byte der Adresse übernommen ab $ 30FF und das High-Byte ab $ 3000.

Wenn Sie also Ihrem Code ein einzelnes Byte hinzufügen, kann Ihr indirekter Sprung wild vom Ziel abweichen.

2
Bob Montgomery

Perl kann automatisch Basis 26 in Basis 10 konvertieren, wenn Sie morgens mit sich selbst leben können ...

$ Perl -E "say lc (@a='a'..'asdf')"
30530
2
gamache

Ich kann nicht glauben, dass dieses hier noch nicht aktiviert ist: JSF-Eigenschaftszugriff.

In einem JSF-UI-Tag würden Sie den Wert einer Eigenschaft aus dem serverseitigen Objekt in die Schnittstelle einfügen, indem Sie folgendermaßen darauf verweisen:

<h:inputText value="#{myObject.property}></h:inputText>

Die Sache ist, dass Java keine Eigenschaften unterstützt, daher müssen Sie Methoden schreiben, die mit get und set beginnen, um das UI-Objekt mit der "Eigenschaft" auf dem Server zu verknüpfen.

public void setProperty(String property){...}
public String getProperty(){...}

Dies hat mich verwirrt, als ich JSF zum ersten Mal lernte und ich halte es immer noch für WTF-tauglich ... obwohl es wirklich keine andere Möglichkeit gibt, dies zu tun, bis Java die Unterstützung für C # -Stileigenschaften implementiert.

2
iandisme

Konjunktiv in Englisch.

Oh warte, meintest du Programmiersprachen? Verwenden Sie dann (macro) in C, um den Präprozessor #define von macro() zu umgehen. Wenn zum Beispiel jemand #define free(...) hat, ist (free)(...) nicht dasselbe wie free(...).

2
MSN

COMEFROM jemand?

2
Gaurav

JCL Bedingte Ausführung.

//STEP02 EXEC PGM=PROG02,COND=(4,GT,STEP01) .

Mit dieser Funktion können Sie einen Schritt ausführen oder nicht ausführen, abhängig vom Rückkehrcode aus den vorherigen Schritten. Wirklich eine nette Sache.

Bis auf ein paar kleine Features, die die Logik umdrehen.

Zuerst wird der Schritt NICHT ausgeführt, wenn die Bedingung erfüllt ist.

Zweitens bedeutet 4, GT, STEP01 tatsächlich "wenn der Rückgabecode von STEP01 größer als 4 ist".

Das Ganze bedeutet also "Diesen Schritt nicht ausführen, wenn der Rückgabewert von STEP01 größer als 4 ist". Das ist fast das Gleiche wie eine naive Interpretation "Führen Sie den Schritt aus, wenn 4 größer als der Rückkehrcode von STEP01 ist".

Angesichts der Tatsache, dass Sie sich diese Dinge nur dann ernsthaft ansehen, wenn Sie gegen 2.30 Uhr mit einem wilden Nachtschichtfahrer am anderen Ende der Leitung sind, führt diese doppelte Mehrdeutigkeit zu ernsthaften Kopfschmerzen.

2
James Anderson

Dies ist keine seltsame Eigenschaft, in der Tat ist es absolut sinnvoll, wenn Sie darüber nachdenken, aber gab mir trotzdem einen WTF-Moment.

In C++ (und in C #) können Unterklassen einer Basis nicht auf private und geschützte Mitglieder in der Instanz der Basis zugreifen.

class Base {
protected:
 m_fooBar;
};

class Derived: public Base {
public:
 void Test(Base& baseInstance) {
  m_fooBar=1; //OK
  baseInstance.m_fooBar = 1; //Badness
  //This, however is OK:
  ((Derived&)baseInstance).m_fooBar = 1; //OK
 }
};
2
Igor Zevaka

Ich habe vor langer Zeit einmal eine Sprache mit einer BUT-Klausel erstellt.

1
user207421

Der C-Präprozessor und seine Verwendungen. Speziell Präprozessor-Metaprogrammierung und Verwendung des Präprozessors zur Generierung von portablem Code - total mindfcuk.

1
Hassan Syed

"dynamisch" in C #.

Ruiniert den Tag für alle, die mit einem RAD oder python Opfer zusammenarbeiten müssen, da Intellisense, Typensicherheit und Determinismus bei der ersten Verwendung des Schlüsselworts "dynamic" sofort sterben.

1

C # verfügt über eine Funktion namens "Erweiterungsmethoden", die in etwa mit Ruby Mix-Ins vergleichbar ist. Im Wesentlichen können Sie jeder vorhandenen Klassendefinition eine Methode hinzufügen (z. B. können Sie "reverse" hinzufügen. ) "zu String, wenn Sie so geneigt waren). Das allein ist in Ordnung. Der "seltsame" Teil ist, dass Sie diese Erweiterungsmethoden mit einem Methodenkörper und allem zu einem Interface hinzufügen können. Einerseits kann dies nützlich sein, um einer ganzen Reihe von Klassen, die nicht Teil desselben Vererbungsbaums sind, eine einzige Methode hinzuzufügen. Auf der anderen Seite fügen Sie Schnittstellen erweiterte Methoden hinzu, die im Wesentlichen die Definition einer Schnittstelle sprengen.

1
callingshotgun

Rückblickend ist FORTRANs berechnetes Goto ziemlich seltsam. Wikipedia sagt mir einige BASICs übertreffen es.

Ein weiterer berühmter Favorit ist ALGOL 60's call by name Parameterübergabe.

1
reinierpost

In J sind die meisten Primitiven (a.k.a. Funktionen) monadisch (ein Argument) oder dyadisch (zwei Argumente, eines nach links, eines nach rechts). Aber das Anpassungsprimitiv braucht 3 (ich denke, es ist das einzige, abgesehen von Ausländern). Es ist verständlich, dass es 3 dauern würde, aber es sieht auf den ersten Blick ... falsch aus.

vector =: i. 10   NB. Vector will be 0 1 2 3 4 5 6 7 8 9
(10) (0) } vector NB. Will yield 10 1 2 3 4 5 6 7 8 9
1
MPelletier

Ich habe mich immer über den Zweck dieser Funktion in der Math-Klasse der Java Core-Bibliothek gewundert:

static double expm1(double x);  // Returns e^x - 1.
1
Benno

In J sind Ausländer (!:) verschiedene Funktionen, die zusammengefasst sind. Das linke Argument ist eine Kategorie, bei der es sich wie beim rechten um häufig (aber nicht immer) inkrementelle Werte für verschiedene ... Dinge handelt. Zum Beispiel:

 2!: 55 NB. Konsole schließen 
 9!: 10 NB. Stellen Sie die Druckgenauigkeit 
 6! Ein: 0 NB. Aktuelle Zeit 
 6!: 2 NB. Ausführungszeit 
 4!: 3 NB. Geladene Skripte 

Natürlich ist es das Schlaue, sie einzuwickeln, aber manche sind nur dem Gedächtnis verpflichtet. Übrigens, all das ist triadisch, mit 2 Argumenten rechts und einem links. Keine der oben genannten Möglichkeiten funktioniert, wenn Sie ihnen kein endgültiges gültiges Argument geben.

1
MPelletier

In PHP müssen Sie explizit auf globale Variablen verweisen und this -> explizit für Klassenvariablen verwenden. Refactoring macht Spaß. Sie können eine Variable/ein Argument nicht zu einem globalen oder einem Klassenmitglied hochstufen, ohne alle Verwendungspunkte zu finden.

1
Seva Alekseyev

In C ist a[b][c] genau dasselbe wie c[b[a]].

1
user245839

Welcher Datentyp ist foo?

SELECT TOP 1
   NULL AS foo
INTO
   dbo.bar
FROM
   sys.columns --trivial

Warum geht alles auf Null?

SELECT CAST('' AS int), CAST('' AS datetime), CAST('' AS float)

... außer das

SELECT CAST('' AS decimal)
1
gbn

Haskells Verwendung von Maybe und Just. Maybe a ist ein Typkonstruktor, der einen Typ von Just a zurückgibt, aber Maybe Int akzeptiert nicht nur ein Int, sondern muss ein Just Int oder sein Nothing. Im Wesentlichen handelt es sich in der Haskell-Sprache Just Int also um ungefähr so ​​viel von einem Int wie ein Apple eine Orange ist. Die einzige Verbindung besteht darin, dass Just 5 einen Typ von Maybe Interger zurückgibt, der mit der Funktion Just und einem Integer-Argument erstellt werden kann. Das macht Sinn, ist aber so schwer zu erklären, wie es theoretisch sein kann. Was ist der Zweck von haskell, oder? Also ist Just wirklich JustKindaLikeButNotAtAll ja sorta, und ist Maybe wirklich KindaLooksLikeOrIsNothing ja sorta wieder.

-- Create a function that returns a Maybe Int, and return a 5, which know is definitly Int'able
>  let x :: Maybe Int; x = 5;
<interactive>:1:24:
    No instance for (Num (Maybe Int))
      arising from the literal `5' at <interactive>:1:24
    Possible fix: add an instance declaration for (Num (Maybe Int))
    In the expression: 5
    In the definition of `x': x = 5

>  Just 5  
Just 5
it :: Maybe Integer

    -- Create a function x which takes an Int
>  let x :: Int -> Int; x _ = 0;
x :: Int -> Int
-- Try to give it a Just Int
>  x $ Just 5                   

<interactive>:1:4:
    Couldn't match expected type `Int' against inferred type `Maybe t'
    In the second argument of `($)', namely `Just 5'
    In the expression: x $ Just 5
    In the definition of `it': it = x $ Just 5

Viel Glück beim Lesen, ich hoffe es ist richtig.

1
Evan Carroll

In ColdFusion werden Textwerte für verschiedene Zwecke automatisch in verschiedene Datentypen konvertiert. Ich bin auf ein seltsames Problem gestoßen, bei dem "00A" und "000" als gleich zurückgegeben wurden. Es stellte sich heraus, dass ColdFusion "00A" als Zeit interpretierte, in ein numerisches Zeitformat konvertierte und es in 0 konvertierte. "000" wurde in 0 konvertiert. Beide wurden daher als gleichwertig angesehen. Zu diesem Zeitpunkt habe ich die Vergleichsfunktion für Zeichenfolgen kennengelernt.

1
Dan Roberts

Vor nicht allzu langer Zeit, als ich die C-Sprache zum ersten Mal in meiner CS-Klasse entdeckte, war es sehr merkwürdig, wie sich die Zeiger verhielten. Wir haben nur Programme geschrieben und erraten, was es tun würde, bis sie das richtige Verhalten haben

1
iChaib

Smalltalk:

Haben Sie eine Klassenmethode in einem Klassentest, die eine konstante Zeichenfolge zurückgibt:

method1
    ^ 'niko'

Sie sollten damit rechnen, dass diese Methode in jedem Fall den String 'niko' zurückgibt. Das ist aber nicht der Fall.

s := Test method1 

(Setze s auf 'niko'.)

s at: 4 put: $i.

(Setze s auf 'niki'.)

s := Test method1

(Stellen Sie s wieder auf 'niki'.)

Was also passiert, ist, dass die zweite Codezeile method1 permanent geändert hat, um 'niki' anstatt 'niko' zurückzugeben, obwohl der Quellcode der Methode nicht aktualisiert wurde.

1
nes1983

Pythons ternärer Operator

In Python ist der C-ternäre Operator (C++ - Beispiel: bool isNegative = i < 0 ? true : false;) als syntaktischer Zucker verfügbar:

>>> i = 1
>>> "It is positive" if i >= 0 else "It is negative!"
'It is positive'
>>> i = -1
>>> "It is positive" if i >= 0 else "It is negative!"
'It is negative!'

Es ist nicht wirklich seltsam, aber ein Feature. Das Seltsame ist die geänderte Reihenfolge (A, wenn CONDITION else B) im Vergleich zur (IMO logischeren) Reihenfolge in C (CONDITION? A: B).

1
AndiDog

Die impliziten Variablen\Konstanten und veränderlichen Konstanten in Ruby

1
Lucas

Versuchen Sie es mit else

try:     pass
except:  pass
else:    pass
finally: pass

Wenn keine Ausnahme abgefangen wurde, wird der else-Teil ausgeführt.

Macht Sinn, aber zuerst hatte ich wirklich keine Ahnung, was es tut.

Beispiel :

def show_square(string):
  try:
    n = int(string, 10)
  except ValueError:
    print "I can't do that, Dave."
  else:
    print n * n
1
Mene

Tcls Virtualisierung des Zeitgefühls im Interpreter ist ziemlich seltsam: http://www.tcl.tk/cgi-bin/tct/tip/233.html

Grundsätzlich können Sie den Interpreter veranlassen, eine andere Quelle für Zeitdaten zu verwenden, z. Um zuerst Hardwaretests in einem Simulator durchzuführen und dann später nur die Timerfunktionen zu ersetzen und die identischen Tests gegen die reale Sache auszuführen.

1
schlenk

In awk beginnen Arrays bei Index 1, was am wenigsten verwirrend ist.

1
helpermethod

Warum ist das in C # nicht legal?

public class MyClass<T>
    where T: Enum
{

}

Es wäre ziemlich cool, wenn Sie neben Func <T> Erweiterungsmethoden für Enum hinzufügen könnten, wobei T die zu erweiterende Enumeration wäre, damit Sie eine Typinferenz für diese Enumeration erhalten können.

Zu dem Kommentar: Ja, Sie können eine tatsächliche Aufzählung erweitern, aber hier ist der Unterschied:

Du kannst das:

public static void DoSomethingWithEnum(this Enum e)
{
   //do whatever
}

aber was ist, wenn Sie eine Func mit Ihrer Methode verwenden möchten, die dem Typ Ihrer Aufzählung entspricht:

public static void DoSomethingWithEnum<T>(this T e, Func<T,bool> func )
   where T: Enum
{
   //do whatever
}

Auf diese Weise können Sie Ihre Methode folgendermaßen aufrufen:

DayOfWeek today = DayOfWeek.Monday;
today.DoSomethingWithEnum(e => e != DayOfWeek.Sunday);

oder etwas ähnliches. Du kommst auf die Idee ... DAS ist nicht möglich und ich weiß nicht warum ...

1
BFree

In JavaScript 2.0 - 1.1 = 0.8999999999999999. Dies ist ein Ergebnis der Implementierung von Floats in der Spezifikation, so wird es immer so sein.

1
Zeki

Anruf/cc. Call/cc übergibt eine Funktion, die den Rest des Programms darstellt, an seinen Körper.

1
Watson Ladd

In MySQL werden beim Vergleichen von Zeichenfolgen die Groß- und Kleinschreibung nicht berücksichtigt.

> SELECT * FROM blah WHERE foo = 'BAR';
> SELECT * FROM blah WHERE foo = 'Bar';
> SELECT * FROM blah WHERE foo = 'bAr';

Sind alle gleichwertig. Nicht nur, dass sie mit jedem Wert von foo übereinstimmen, der wie 'bar' aussieht (z. B. wenn foo = 'bar', stimmt er mit BAR, baR, bAR usw. überein).

1
user244377

In C # generiert der folgende Code den Compilerfehler "Konvertieren von Methodengruppe zu Delegieren nicht möglich". Obwohl die Logik dahinter vernünftig ist, fühlt es sich für mich immer noch seltsam an.

control.BeginInvoke(delegate { DoSomething(); });
1
Dudu

In SQL Server kann es zu bösen Überraschungen kommen, wenn Sie in Ihrem Produktionscode select * verwenden. Die Verwendung von select * wird ohnehin nicht als bewährte Methode angesehen, aber es ist gut, einige der interessanten Verhaltensweisen zu kennen.

Siehe Frage “select * from table” vs “select colA, colB, etc from table” interessantes Verhalten in SqlServer2005 für weitere Details

1
kristof

In ColdFusion

Struct (aka Java HashMap) wird als Referenz übergeben.

Sie hätten gedacht, dass sich ein anderer Datentyp wie Java verhält ...

Array ist als Wert übergeben, wtf!

Liste ist nur eine einfache alte durch Kommas getrennte Zeichenfolge!

1
Henry

Eine Java Quelldatei kann mit dem Zeichen \u001a (Strg-Z) enden.

1
An̲̳̳drew

Nun, das erste, was mir in den Sinn kam, war "noop", mein Gehirn tat das Gleiche, als ich das erste Mal darauf stieß!

1
MikeAinOz

das hat mich umwerfend gemacht

#define _ -F<00||--F-OO--;
int F=00,OO=00;main(){F_OO();printf("%1.3f\n",4.*-F/OO/OO);}F_OO()
{
            _-_-_-_
       _-_-_-_-_-_-_-_-_
    _-_-_-_-_-_-_-_-_-_-_-_
  _-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
  _-_-_-_-_-_-_-_-_-_-_-_-_-_
    _-_-_-_-_-_-_-_-_-_-_-_
       _-_-_-_-_-_-_-_
           _-_-_-_
}
1
binaryguy

Go's Pseudokonstante Iota:

type ByteSize float64
const (
_ = iota;   // ignore first value by assigning to blank identifier
KB ByteSize = 1<<(10*iota); MB; GB; TB; PB; YB;
)   
1
mdm

verschiebung;

manchmal sehen Sie es in der allerersten Zeile einer Perl-Methode, wenn der Selbstzeiger gelesen wird

1
Nylon Smile

Beschriftete break and continue-Anweisungen in Java. .

Sie ermöglichen es Ihnen, mit einer einzigen Unterbrechung aus mehreren Steuerblöcken auszubrechen.

1
Roel van Dijk

Ich weiß nicht, ob es noch stimmt, aber wir haben zufällig festgestellt, dass VS FORTRAN (66 oder 77) keine Rekursion unterstützt. Die Rekursion war zufällig und unser Standard-F77 hat sie wunderbar unterstützt, aber als wir die Quelle zu einem IBM - Whatta Mess brachten.

1
Dave

Perl

my %h1 = map { $_ => 1 } qw/foo bar baz/;    // construct an 'is_member' type lookup table
my %h2 = map { "$_" => 1 } qw/foo bar baz/;

die zweite Zeile ist ein Syntaxfehler, auch wenn es für einen erfahrenen Perl-Programmierer so aussieht, als wäre es identisch. Der Nachteil von Perl ist, dass es immer versucht, das zu tun, was Sie meinen, nicht das, was Sie gesagt haben.

1
Rob Van Dam

C # Ertragsaussage, nicht seltsam, aber ziemlich nützlich.

http://msdn.Microsoft.com/en-us/library/9k7k7cf0 (VS.80) .aspx

1
senthil

Hier ist eine über Python:

>>> print 07
7
>>> print 08
  File "<stdin>", line 1
    print 08
           ^
SyntaxError: invalid token

Ist das nicht eine Schönheit?

Besonders unüberlegt, wenn man bedenkt, wie Menschen Daten schreiben, was folgenden Effekt hat:

datetime.date(2010,02,07) # ok
datetime.date(2010,02,08) # error!

(Der Grund ist, dass 0x als oktal interpretiert wird, also print 0108 druckt!)

1
Olivier Verdier

Ich bin auf dieses Modell gestoßen, als ich versuchte, ein MAKRO zu finden, das absolut keinen Sinn ergab, aber trotzdem funktionierte. Dies gilt für Objective-C, aber möglicherweise auch für andere Varianten von C (oder zumindest für den GCC-Compiler).

NSString *oneString = @"This " @"is " @"just " @"one " @"normal " @" string";

gleich

NSString *oneString = @"This is just one normal string";

Dies gilt auch für Strings im C-Stil

char* str = "this " "also " "works";
1
Ron Srebro

In Python war das zumindest für mich sehr schwierig! das erste mal habe ich es gesehen:

>>> "ja " * 5
'ja ja ja ja ja '

Sie können Zeichenfolgen multiplizieren! WTF ??

PS: Ich denke, das liegt daran, dass x * n bedeutet: n times x, also 5 times "ja " ist "ja ""ja ""ja ""ja ""ja " und weil Sie Zeichenfolgen wie diese verketten können:

>>> "ja ""ja ""ja ""ja ""ja "
'ja ja ja ja ja '

Dass zwei Codes dasselbe Ergebnis haben (und vielleicht auch dasselbe sind)

In Java gibt es einige Inkonsistenzen, wie Strings den Operator == behandeln, je nachdem, wie er erstellt wurde.

String a = "Hello";
String b = "Hello";
System.out.println(a == b ); // prints true.
String c = new String("Hello");
String d = new String("Hello"); 
System.out.println(c == d ); // prints false
1
Jacob Bellamy

Im Schema gibt es no reservierte Bezeichner. Der folgende Ausdruck ergibt also 1:

((lambda (lambda) lambda) (let ((let 1)) let))

Beachten Sie, dass es eine Einschränkung für Definitionen innerhalb eines bestimmten Bereichs gibt: Keine Definition darf einen Bezeichner neu definieren, der zum Definieren von Bezeichnern innerhalb dieses Bereichs verwendet wird. Daher ist Folgendes ein Syntaxfehler:

(begin (define define 1) define)
1
Dietrich Epp

In der Einheit,

GameObject.Find("MyObject")

wird Ihr Objekt normal zurückgeben. Wenn Sie jedoch so etwas tun:

GameObject.Find("MyObject").active = false;
//do other stuff
if (GameObject.Find("MyObject").active)
{
    //do stuff
}

Dann erhalten Sie eine Nullreferenz. In Unity iPhone funktioniert dieser Code im Editor häufig einwandfrei, verursacht jedoch einen SIGBUS, wenn er vom iPhone ausgeführt wird. Das Problem ist, dass GameObject.Find () nur aktive Objekte findet. Selbst wenn Sie nur prüfen, ob es aktiv ist, rufen Sie effektiv if (null.active) auf.

Damit es richtig funktioniert, müssen Sie es speichern, bevor Sie es inaktivieren.

GameObject obj = GameObject.Find("MyObject");
obj.active = false;
//do other stuff
if (obj.active)
{
    //do stuff
}

Das ist wahrscheinlich sowieso besser, aber die Art und Weise, wie Unity inaktive Objekte behandelt, ist im Allgemeinen ziemlich seltsam. Es scheint einen großen Teil des inaktiven Objekts (Texturen usw.) zu entladen, aber nicht den gesamten, sodass inaktive Objekte immer noch viel Speicherplatz verbrauchen können.

1
Eli

Und nochmal Haskell:

In Haskell können Sie eine Datei in beliebiger Größe so behandeln, als ob es sich um ein einfaches String handelt. Die Datei wird nur gelesen, wenn der String tatsächlich verwendet wird. Aufgrund der unglaublichen Faulheit von Haskell wird ein Programm wie dieses unabhängig von der Dateigröße in einem konstanten Speicherbereich ausgeführt:

main = interact (>>= \x -> if x == '\n' then "\r\n" else [x])

(Dieses Programm konvertiert eine Datei von stdin nach stdout und ersetzt LF durch CRLF. Die Funktionseingabe interact wandelt das gesamte stdin in eine Funktion um und verschiebt die Ausgabe nach stdout.)

Diese Faulheit kann auch zu Problemen führen, denn wenn Sie ein Datei-Handle schließen, können Sie nicht völlig sicher sein, ob Lazy Haskell bereits alle Daten daraus analysiert hat.

1
fuz

Das ist nichts Seltsames oder Überraschendes, aber es ist ​​etwas, das mich immer sagen ließ WTF:

Groß- und Kleinschreibung in der Syntax oder in Bezeichnernamen.

Die meisten Sprachen, die es haben, scheinen es nur zu haben, weil C es hat. Es gibt keinen guten Grund dafür.

1
kes

Dieses C-Programm gibt ein anderes Ergebnis auf x86 als auf x86-64 aus:

#include <stdio.h>
int main (void)
{
  long a = -1; 
  unsigned b = 1; 
  printf ("%d\n", a > b); 
  return 0;
}
0
John Regehr

in Java

String("aaa")==String("aaa") //false
//you need to use
String("aaa").equals(String("aaa")) // true
0
user422991

#:

var a = Double.Parse("10.0", CultureInfo.InvariantCulture); // returns 10
var b = Double.Parse("10,0", CultureInfo.InvariantCulture); // returns 100

In der invarianten Kultur ist Komma kein Dezimaltrennzeichen, sondern ein Gruppentrennzeichen.

Wie ich weiß, ist es ein häufiger Fehler für Programmieranfänger aus einigen Regionen.

0
Alex

In C++ finde ich es seltsam und unangenehm, dass "virtuelle" MI (Mehrfachvererbung) es der Klassenhierarchie "Diamantform" ermöglicht, "zu funktionieren"

A : Base class, e.g. "Object"
B, C: both derive (virtually or not) from Object and 
D: derives from both B and C

Problem: Die "normale" Vererbung bewirkt, dass D zwei mehrdeutige Arten von A sind. Die "virtuelle" MI reduziert A von B und A von C auf ein einzelnes gemeinsames Basis-A-Objekt.

Selbst wenn Ihr Rad ein Objekt und Ihr linkes Vorderrad ein Rad ist und Ihr Auto vier Arten von Rädern erbt, ist Ihr Auto dennoch nur eine Art von Objekt mit virtuellem MI. Ansonsten ist Ihr Auto kein Objekt, sondern ein 4-Rad-Objekt.

Dies ist eine Sprachfunktion, die schlechtes Design belohnt, Compiler-Autoren bestraft und Sie zur Laufzeit fragen lässt, wo zum Teufel das Objekt wirklich ist - und ob virtuelles MI-Gepäck verlegt wurde.

Wenn Sie das Rautenmuster in Ihrer Klassenhierarchie wirklich benötigen, können Sie es mit einem regulären MI und einem "AProxy" ausführen, der an die einzelne A-Basis delegiert.

 A : Base class, e.g. "Object"
AProxy: Base class, constructs with other A to bind to
B : derives from A
C : derives from AProxy
D : derives from both B and C (passing B's A to C's AProxy at construction)

Dies erfordert ein wenig mehr Arbeit für diejenigen, die Diamond MI wirklich mögen und lässt den Rest von uns in Ruhe mit einem besser verständlichen Satz von Sprachfunktionen.

0
reechard

Für diejenigen, die noch nie mit COBOL gearbeitet haben, ist dies eine übliche Codezeile, die jedoch nicht das tut, woran Sie vielleicht denken

PIC XXX

0
The_Black_Smurf

Hier ist eine, die ich für komisch hielt:

In C/C++ können Sie in MS C++ so viele Semikolons haben, wie Sie möchten:

int main(void)
{
 cout<<"Hello World";;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;;;
 return 0;;;;;;;;;;;;;;;;;;;;;;;
}
0
Daniel

PHP (schon wieder?)

Erstens: Casting vom Typ (unset).

$a = 1;
$b = (unset)$a;
var_dump($a); // 1
var_dump($b); // NULL

Verwendung: http://www.php.net/manual/en/language.types.type-juggling.php#89637

Zweitens: Unterschied zwischen = NULL und der Funktion unset().

$c = 10;
$d = &$c;
$c = NULL;
var_dump($c); // NULL
var_dump($d); // NULL


$e = 10;
$f = &$e;
unset($e);
var_dump($e); // NULL
var_dump($f); // 10 - WTF?
0
Vili

In C

 int x = 1;
 int y = x++ + ++x;
 printf("%d", y);

Ist nicht eindeutig, was gedruckt wird, hängt vom Compiler ab. Der Compiler könnte den neuen Wert von x ++ speichern, bevor ++ x ausgewertet wird, oder am Ende der Anweisung.

0
TDJoe

In PHP:

<?php
$o = new stdClass;
echo count($o);
?>

..prints 1. Ich habe nie herausgefunden warum.

0
Robin

Delphi interessiert sich nicht für Typumwandlungen wie "Word" und liest außerhalb des Arrays arr [0..65535] wobei pos = 65535: arr[Word(pos + 10)]

0
Vladimir