Hauptmenü  

   

Blogs  

   

Login Form  

   

Das mir sowas passiert...

Details

Unglaublich, ich hätte es kaum für möglich gehalten, aber dennoch ist es mir selbst passiert. Ich habe letztens solch ein Konstrukt gebaut

if(A==B);
{
  // Tu irgendwas
}


Es ist offensichtlich, was der Code tun soll, nämlich wenn A gleich B ist, soll "irgendwas" getan werden. Problem war, dass egal wie A und B waren, immer "irgendwas" ausgeführt wurde. Schuld daran ist das Semikolon hinter der Klammer. Dadurch werden nur A und B auf Gleichheit geprüft. In jedem Fall wird danach aber die geschweifte Klammer ausgeführt. Naja shit happens.

Was soll denn das?

Details

Hallo Leute,

erstmal, Entschuldigung, dass ich nicht so oft zum Schreiben neuer Beiträge komme. Gerade im Bereich Programmierung lass ich es etwas schleifen, weil ich derzeit beruflich sehr viel programmieren darf. Darf... muss! Was mich dabei dann immer am meisten aufregt, ist

Bad style

von anderen Programmierern. Das ist sowieso überhaupt das schlimmste was es meiner Meinung nach gibt, sich in den Quellcode von anderen Leuten einzulesen. Offensichtlich denkt sich der Ottonormalprogrammierer, dass sein Code so unglaublich leicht zu durchschauen ist, dass es gar keiner Kommentare benötigt. Entweder das, oder er will einfach was verschleiern, bzw. sich unersetzlich machen. Eine sehr tolle Konstruktion war diese hier:

int a, b, c, m = 345;

b = a/m;
c = a - b*m;

So, der geübte Mathematiker sieht sofort, dass da eigentlich genauso stehen könnte:

c = 0;

aber nein, der Code hat eine ganz andere Funktion, er errechnet nämlich den Divisionsrest von a und 345 und speichert diesen dann in c ab. Als Formel dargestellt:

modulo

(c = (a mod m)) Für die einfachere und übliche Art dieser Berechnung, hätte auch folgende Zeile erledigt

c = a%m;

Naja, es hat nur ein paar Minuten gekostet um das zu sehen, aber es ist ärgerlich, dass man überhaupt erstmal nachdenken muss. Auch ein Kommentar hätte zum besseren Verständnis beigetragen, aber Pustekuchen. hrmpf

 

Switch Case

Details

Es ist ja unglaublich, da denkt man, man hätte schon alles gesehen und dann sowas. Ich habe nämlich einen interessanten Foreneintrag entdeckt, in dem ein Programmschnipselchen gepostet wurde. In dem kam eine mir unbekannte Verwendung von switch-case vor. Normalerweise würde ich, wenn ich eine Bereichsabfrage machen wollte so vorgehen:

if( (meineVar >= 1) && (meineVar <= 100) )
{
  // Tu etwas
}
else if( (meineVar >= 101) && (meineVar <= 1000) )
{
  // Tu was anderes
}
else
{
  // Tu etwas ganz anderes
}

 Aber ganz offensichtlich geht auch:

switch(meineVar)
{
  case 1 ... 100   : // Tu etwas
                     break;
  case 101 ... 1000: // Tu was anderes
                     break;
  default          : // Tu was ganz anderes
}

 Anmerkung: Ich habe das ganze getestet mit:

  • C (gcc)     - geht
  • Java (1.7) - geht nicht
  • C#            - geht nicht



 
   
© chrimbo