Écrivez un programme (la taille n'a pas d'importance) et mettez une ligne qui semble inutile, mais ce n'est pas le cas - s'il était supprimé, le programme planterait ou ferait quelque chose de mal. N'hésitez pas à marquer la ligne qui semble inutilisée par un commentaire, ou à mentionner la description de votre code, comme dans l'exemple ci-dessous (bien sûr, dans cet exemple, la ligne n'est en fait pas nécessaire, c'est juste un exemple).
int main(void) {
/* The line below is actually needed. */
2 + 2;
return 0;
}
Comme c'est un concours de popularité, la solution avec le plus grand nombre de votes l'emporte.
popularity-contest
underhanded
Konrad Borowski
la source
la source
Réponses:
C
Ne sera pas compilé si nous supprimons le single
;
.MODIFIER :
Solution ci-dessous:
la source
C / C ++
Juste du code écrit dans le style d'introduction / tutoriel ...
Tutorial nr. 2 : lire des nombres, effectuer des opérations mathématiques sur eux et imprimer les résultats.
La suppression de la ligne
result = 42;
qui, à première vue, semble à la fois superflue et, compte tenu de l'objectif déclaré, en fait faux, entraînera en fait le programme à ne pas faire ce que la description indique.Pourquoi?
la source
>!
au lieu de simplement>
.>!
pas sur toutes les lignes. Je pense qu'ils ne s'affichent pas pour moi comme je les ai écrits. Fait intéressant, l'analyseur SE ne le gâche pas :)"stdio.h"
au lieu de l'inclusion réelle de la bibliothèque,<stdio.h>
Espace blanc
Malheureusement, je ne peux pas montrer mon programme ici parce que StackExchange supprime tous les espaces en fin. La même chose est vraie pour pastebin.com et pastie.org, donc je ne peux pas y lier non plus.
Bien sûr, l' ensemble du programme «semble inutile», mais si vous supprimez une ligne, cela fera quelque chose de différent.
la source
JavaScript:
la source
b
la valeur dealert(a)
": Alors, n'est-ceb+-
pasb+=
?b++
oub--
.b + -2 + 2
. C'est pourquoi si vous supprimez la ligne avec2 + 2;
, elle est évaluéeb + -alert(a);
.C:
Si vous supprimez la ligne,
i = i;
le code ne fonctionnera pas. Ceci est dû au fait...la source
APL
Voici une fonction APL:
Cela fait la même chose que le monadique de J
i.
:Il peut prendre un argument gauche facultatif qui donne le décalage:
La ligne
⍺←⎕IO ⋄ ⎕IO←⍺
semble inutile ("assigner⎕IO
à⍺
, puis assigner⍺
à⎕IO
"), mais la première partie ne s'exécute que si aucun argument gauche n'est donné, donc en fait elle fait quelque chose:⍺
est défini, définissez⍺
sur (global)⎕IO
.⎕IO
sur⍺
la source
C #
La variable
fibo
doit être affectée avant de pouvoir l'utiliser dans un lambda, même si vous vous affectez ce lambdafibo
. Si vous supprimez l'affectation (apparemment inutile), une erreur de compilation se produira («Utilisation de la variable locale non affectée« fibo »»).la source
Lot Windows:
Définissez le programme en cours d'exécution et modifiez le fichier pour:
Si vous supprimez ou redimensionnez le commentaire, cela causera des ravages car la 1ère instance du programme se met en pause puis continue d'interpréter à partir du 19e octet.
la source
Java
Il s'agit d'un programme de travail qui récupère une page Web à partir d'une URL. Vous pourriez être surpris que la ligne
compile sans même un avertissement. En fait, le programme ne compile pas sans lui.
la source
Rubis
Une chose similaire est arrivée au travail récemment - un collègue a en fait signalé mon initialisation apparemment inutile lors de la révision du code, et j'ai été vraiment tenté de mettre l'explication dans un bloc de spoiler. Je vais donc le faire ici.
Sortie telle quelle:
Sortie avec la première ligne de la méthode supprimée:
la source
match = Prime.find { |n| n.to_s[regexp] }
Prime.find
renvoien
(par exemple 223), etmatch
doit l'êtren.to_s[regexp]
(par exemple "22"). Évidemment, j'ai inventé le problème pour que cela soit nécessaire.find
surPrime
et non un tableau. Quoi qu'il en soit, il est encore assez facile de remarquer pourquoi cette ligne est nécessaire ...PHP
Ici,
\n//This is a comment
c'est nécessaire. Sans cela, le code ne fonctionnera pas.Au moins un caractère
\n
est nécessaire aprèsEOT;
pour l'exécuter correctementla source
JAVASCRIPT
Sans le point-virgule
a
deviendrait alors la valeur de retour de la 2e fonction - dans ce cas, c'est le casundefined
. Parce que la fonction initialement affectée àa
sera exécutée immédiatement avec la deuxième fonction comme argumentb
.la source
COBOL (IBM Mainframe)
Si vous exécutez le programme ci-dessus (n'importe quel IBM Mainframe COBOL depuis COBOL II (premier compilateur IBM au standard de 1985, probablement aussi d'autres COBOL IBM), la sortie est:
Cependant, si vous supprimez la ligne triplement inutile "DÉPLACER L'ESPACE VERS W-UNE FOIS COMPILÉ". (le champ a une valeur initiale d'espace et contient d'autres contenus dans l'instruction suivante, et il est de toute façon ramifié) le programme ne produit aucune sortie et en fait Abends (U4038) (ce qui signifie qu'il se bloque) avec le message suivant :
(le code et le texte des messages varient selon les compilateurs, les décalages dépendent du compilateur réel utilisé et des options de compilation, l'adresse dépend de l'endroit où le programme est chargé lors de son exécution).
La raison en est
NEXT SENTENCE
. Ceci est unSecret GO TO
. Le compilateur recherche le prochain point final / période dans la source et génère une branche vers l'instruction suivante. À partir de COBOL II, l'utilisation des arrêts complets / périodes a été assouplie. Un programme doit se terminer par un point / période complète. Dans ce cas, la branche est hors de la fin du programme.Les deux programmes compilent 100% de nettoyages (pas de messages de diagnostic, code retour nul).
Ce comportement est une "extension IBM" stupide pour COBOL. La norme de 1985 ne permet pas
NEXT SENTENCE
dansIF
/END-IF
(CONTINUE
est utilisé à la place, ce qui est un no-op). IBM l'a autorisé - provoquant de temps en temps d'horribles Gotchas.la source
la source
blah
? Ici avec OpenBSD 5.5 / amd64 et le système gcc, il ne se sépare jamais, qu'il y soit ou nonblah
. Le programme compilé alloue 16 octets d'espace de pile et copie la valeur 16 bits de "ok" dans les 2 premiers octets. Le 3ème octet non initialisé a «\ 0» par chance. Siblah
est là, il est dans le 16e octet et ne termine toujours pas la chaîne.~ - ~!
C'est probablement le plus stupide et le plus évident ici.
Il lance une erreur sans cette deuxième ligne, avec elle il imprime
y
.la source
~-~!
Lot Windows
Il s'agit d'un fichier batch qui imprime les numéros 1 à 10 avec une ligne vide après chacun:
Cela utilise effectivement un hack sale pour stocker une nouvelle ligne dans une variable (l'utilisation d'extensions retardées supprime la ligne NL plus effrayante dans la réponse liée). Si vous supprimez ou modifiez les deux lignes vides complètement inutiles au-dessus du commentaire, cela ne fonctionnera pas.
la source
troff
Troff est le système de traitement de texte le plus merveilleux. Je l'utilise pour mes documents. Il nécessite un système de macros pour être prêt à être utilisé, et le plus célèbre est le
ms
package de macros. Compilons le morceau de code suivant avec l'-ms
option classique .La troisième ligne semble être inutile, et serait en fait inutile sans le package de macro. Puisqu'il est suivi deux lignes ci-dessous par un positionnement vertical absolu, il pourrait sembler inutile de ne rien imprimer avant. Mais sans ce caractère invisible, le positionnement vertical n'aura aucun effet, même si je ne suis pas absolument sûr de pouvoir expliquer pourquoi (voir ce fil si vous voulez jeter un coup d'œil à la discussion). Cela rend le nouvel utilisateur fou, mais l'astuce devrait devenir familière à l'utilisateur le plus expérimenté.
Je viens de vérifier avec ma version préférée de troff qui n'est pas très connue (heirloom troff), mais je suis presque sûr que cela fonctionne toujours de la même manière avec GNU troff.
la source