何?エラーなし?[閉まっている]


197

あなたの仕事は簡単です。コンパイルまたは実行時に一目で明らかにエラーを生成するはずのプログラムを作成しますが、他の無関係なエラーは生成しないか、生成します。これは人気コンテストですので、クリエイティブになりましょう。


11
うーん...これは頭の体操です。+1
ティムセギーン14年

1
「if if if = then then = else then else = if then else ...」の行に沿ったステートメントを含む古いPL / Iの例がありました(PL / Iの使用は許可されていました)キーワードを変数名として使用し、Cに似た条件式を使用しました?:if / then / elseキーワードも使用しました...)
ケシュラム14年

8
BFコードはコンパイルできないように見えるため、brainfuck言語全体をお勧めします。
アギハマーシーフ14年

@NigelNquandeあなたがそれに精通していない場合にのみ...;)
ジョスティ14年

回答:


281

C ++

次のコードを必ず標準準拠モードでコンパイルしてください(たとえば、g ++では-ansiフラグを使用します)。

int main()
{
  // why doesn't the following line give a type mismatch error??/
  return "success!";
}

使い方:

?? /は、次の改行をエスケープするバックスラッシュに変換される3文字表記シーケンスであるため、次の行はまだコメントの一部であるため、構文エラーは生成されません。C ++では、戻り値を省略することmainは明確に定義されており、0を返すことと同等であり、実行が成功したことを示します。


7
最初の答えは、これをすぐにインスタウォンで獲得したように感じます。
temporary_user_name 14年

1
C99でも有効です。
R ..

1
-Wall
BЈовић14年

2
@BЈовић壁は常にすべてについて警告を投げる
Kiwy 14年

4
@Kiwy上記のようなガベージコードに対してのみ警告をスローします。-Wallはすべてに対して警告をスローしません。
BЈовић

86

ルビー

いつもこれのファンです。

x = x

いいえNameError。xは今nilです。

これはRubyの単なる「機能」です:-)

これは私が以前に手に入れたもっとありふれたものです:

x = 42

if x < 0
  raise Exception, "no negatives please"
elseif x == 42
  raise Exception, "ah! the meaning of life"
else  
  p 'nothing to see here...'
end 

「ここには何も表示されません」と出力します。

それはだELSIF、ないELSEIF。(そして、それは確かにエリフではありませ - わがままなpythonプログラマー(私)に悲惨です!)インタープリターelseifは通常のメソッド呼び出しのように見え、x <0ブロックを入力しないので、すぐに他に進み、例外を発生させないでください。このバグは、構文強調表示環境では信じられないほど明白です。ありがたいことに(?)コードゴルフはそのような環境ではありません。


5
まいったよ。PythonとLuaの両方を実行したことがありますが、現在はRubyを使用しています。Luaはそれを使用します。
ライディング14年

7
宇宙の意味は何も見えませんか?
user80551 14年


77

C?

ここにかなり普通のコード...

void main() = main--;

CではなくHaskellです。2つの引数を取る「void」という名前の関数を定義します。最初の名前は「main」で、2番目の(名前のない)タプルが空の場合、「main」変数を返します。「-」はHaskellでコメントを開始するため、「;」コメントアウトされています。


21
つまり、不正行為ですか?
ミスターリスター

75
不正行為は、コードチャレンジ競技では正常です。私たちはそれを創造性と呼びます。:P
ジョーZ. 14年

31
私はこれを、創造性ではなく、不正行為と呼びます。いくつかのコードがエラーになるかどうかを検討する前に、実行している環境を定義する必要があります。そうでなければ、Malbolgeであるラインノイズを与えて、コンパイルするかどうかを尋ねることができます。
ティムS. 14年

5
それはただあなたを一瞬立ち止まらせ、そして「あなたそれをすることできますか?」:)
intx13 14年

10
@JoeZ。それは可能性があるいくつかのケースではperlのように見えます。
user80551 14年

72

JavaScript

var а = 100;
if (typeof a !== 'undefined') throw 'This should always throw, right?';
console.log('How am I still alive?');

仕組みは次のとおりです。

最初aは実際にはа(つまり、Crylic Unicode "a")です。


8
このトリックは、Unicodeトークンを受け入れる言語(Java、C#など)に適用できます。
n̴̖̋h̷͉a̷̭̿h̸̡̅ẗ̵̨d̷̰ĥ̷̳

83
@ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳、ユーザー名で例示
TheDoctor 14年

9
あまりにも明白な解決策
thepirat000

6
以前に出くわした人にとってはあまりにも明白です。たくさんの初心者やいわゆる「ウェブの専門家」がつまずくかもしれません。
Thebluefish 14年

42
明らか?それで、あなたは常に変数名を、それらがどのように見えるかではなく、Unicode番号を通して見ますか?「a」(または「а」?)を検索して期待するものを見つけられなかった場合に気付くかもしれませんが、単に読んでいるときは(少なくともここに示すフォントでは)表示されません。
ティムS. 14年

70

JavaScript

次のコードを提供していたときに、「タイプミスであるに違いありません。どのように機能しますか?」と何度も言われました

console.log( 42..toString(2) );

以下の記述はまさに最近のケースからコピーされました。

おそらくご存知のように、JavaScriptでは、リテラル以外はすべてオブジェクトです。数字もオブジェクトです。したがって、理論上(および実際上)、またはのように、ドット表記を介して任意の非リテラルのプロパティを取得したり、メソッドを呼び出し'string'.lengthたりできます[1,2,3].pop()。数値の場合も同じことを行うことができますが、単一のドットの後に、パーサーは数値の小数部分を探して浮動小数点値を期待することに注意する必要があります(など123.45)。整数を使用する場合、小数部分が空であることをパーサーに「伝える」必要があります123..method()。プロパティを指定する前に余分なドットを設定します。


18
Luaの男として、私は期待していた422
mniip

3
これまでこの使用法を見たことがありません。
NIT

5
完全に使用されているために悪い感じ..の表記が、について全く無知.toString(a freaking argument here?)表記:Pウェルああ、:)今ではそれを考え出した
デヴィッド・モルダー

この出力は何ですか?なぜ ?気になります。
ニコラスバルブレスコ14

3
レイジーの場合、引数はベースを指定するため(これはバイナリで42を出力します)、このコードにとってはまったく重要ではありません。..紛らわしい部分です。
カット14年

63

バッシュ

#!/bin/bash

[ 1 < 2 ] && exit

for i in `seq 1 $[2 ** 64]`
    do "$0" | "$0"
done

while [[ false ]]
    do :
done

if maybe
    do [: [: [: [: [; [; [; [; ;] ;] ;] ;] :] :] :] :]
fi

結果

  • スクリプトは、最初のコマンドの後に終了するため、エラーをまったく生成しないと予想される場合があります。そうではありません。

  • forループが原因で進行中のフォーク爆弾が原因の典型的なエラーメッセージが表示されることがあります。フォーク爆弾はありません。

  • bashは、maybeコマンドの欠落やifブロック内の構文エラーの全体について不満を言うかもしれません。しません。

  • スクリプト生成する唯一のエラーメッセージはで終わり2: No such file or directoryます。

説明

  • [bashにとって特別なものではないため< 2、通常どおりリダイレクトを実行します。2現在のディレクトリに名前の付いたファイルがない場合、エラーが発生します。

  • 上記のエラーにより、前のコマンド&&はゼロ以外の終了ステータスになり、exit実行されません。

  • forループは無限ではありません。実際、ループはまったくありません。bashは2の64乗を計算できないため、算術式の結果は0です。

  • [[ false ]]falseがNULL文字列かどうかをテストします。そうではないので、このwhileループは無限です。

  • 上記のため、ifステートメントは実行されないため、エラーは検出されません。


55

Perl

use strict;
use warnings;
Syntax error!
exit 0;

ソースと説明:https : //stackoverflow.com/questions/11695110


137
Perlプログラムは一般にエラーのように見えます。
ウゴレン14年

1
@ugoren Perlの知識がほとんどない人によって書かれ、読まれる場合のみ。
TLP 14年

8
あなた@ ugorenさんのコメントが答え:)の2倍のupvotesを持っていることをお奨め愛
よ」

2
Windowsシェルトリックを思い出します。「満足しているなら、構文エラーです!」
ジョスティ14年

47

Java

class Gotcha {
    public static void main(String... args) {
        try  {
            main();
        } finally {
            main();
        }
    }
}

ここでスタックはオーバーフローしません。一緒に移動。

一見、これはを生成するはずStackOverflowErrorですが、そうではありません!実際には永久に実行されます(少なくともすべての実用的な目的のために、技術的には宇宙の時代よりも数桁長い時間後に終了します)。あなたはこれがどのように動作するか/理由を知りたい場合は、参照これを。また、main()メインメソッドが一般にString[]引数を必要とする場合に引数なしで呼び出すことができる理由を知りたい場合は、ここで変数引数であると宣言したためです。これは完全に有効です。


3
リンクした質問が説明するように、それは無期限に実行されるのではなく、非常に長い時間実行されます。
ケビン14年

1
@Kevinここで不必要に教訓的にならないようにしましょう。「宇宙の時代よりも長い」は、すべての実用的な目的のために、「永遠に」です。
アルシャジー14年

8
「スタックオーバーフローはありません」と言いますが、実際には、システムはスタックオーバーフローを継続的にスローし続け、最終的にはスタックオーバーフロー例外をスローします。(おっしゃるように、最終的には非常に長い時間になる可能性があります)そして、それはスタックの深さに依存します。より小さなVMまたは組み込みシステムでは、スタックの深さははるかに小さくなります。
マッケイ

@McKayその文は明らかに単なる使い捨ての行であり、文字通り解釈されることを意図したものではありません。OPはエラーを生成するように見えるプログラムを要求しますが、そうではありません。一般的な場合、上記の答えはこの要件を満たします。もちろん、そうではないあいまいな状況を作成することはできますが、それで答えが無効になるわけではありません。あなたがあなたの投票権を再考することを願っています。
アルシャジー

3
ところで@McKayは、そのスタックサイズが想定している(10,000〜通常のとは対照的に、例えば100)小型、我々はできるまだ毎秒10,000,000呼び出しを行います。その後、合計実行時間は4,019,693,684,133,147年になります-まだ宇宙の年齢よりも桁違いに大きいです。
アルシャジー

42

CoffeeScript

What? No error? Yep, this code does not have any bugs, why would it?

?後にスペースが続くと、関数が呼び出されますが、それは存在する場合のみです。JavaScriptには呼び出されるWhat関数がないため、関数は呼び出されず、その引数は単純に無視されます。コード内の他の単語は、What関数が存在しないため、実際には呼び出されない関数呼び出しです。?呼び出し関数では使用されないため、最後に存在演算子です。メソッドのように、.または機能!しないなど、他のセンテンスエンダーは演算子.!はありません(識別子の後に使用することはできません)。CoffeeScriptがこれをJavaScriptに変換する方法については、http://coffeescript.org/#try: What%3F%20No%20error%3F%20Yep%2C%20this%20code%20does%20not%20have%20any%20bugs%2Cにアクセスしてください。 %20why%20it%20would%3F


36

VBScript

&VBScript の演算子は文字列の連結ですが、&&and &&&演算子は一体何ですか?(「と」VBScriptでオペレータであることを思い出してAnd、ではありません&&。)

x = 10&987&&654&&&321

そのプログラムフラグメントは正当なVBScriptです。どうして?そして、の価値はx何ですか?

レクサーはこれをとして分解しますx = 10 & 987 & &654& & &321。で始まる整数リテラル&は、奇妙なことに、8進数リテラルです。で終わる8進リテラル&は、さらに奇妙なことに、長整数です。したがって、xの値は、これら4つの整数の10進数値の連結です10987428209


8
それはただ...すごい。
プリモ14

27

Objective-C

大したことではありませんが、コメント内にリンクを挿入しようとしていたときに驚きました:

http://www.google.com
        return 42;

httpはここではコードラベルです。このようなラベルはgoto命令で使用されます


8
これは、//コメントをサポートするC言語のような言語で動作するはずです。
イルマリカロネン

ええ、おそらく、私は投稿中に確信がありませんでした
Piotr 14年

14
ただし、スコープごとのプロトコルごとに1つのURLを制限します。
ベンフォークト

1
同じスコープでhttps://を引き続き使用できます。
フロリアンF 14

25

C#

class Foo
{
    static void Main(string[] args)
    {
        Bar();
    }

    static IEnumerable<object> Bar()
    {
        throw new Exception("I am invincible!");
        yield break;
    }
}

Barメソッドはを実行するため、メソッドはyield呼び出されたときに実際には実行されず、列挙子を返します。この列挙子は、反復されるとメソッドを実行します。


最後に...ここにFOOとBARがあります:)
VVK 14年

1
それがfooとbarの目的です;)実際には関係ないものの名前。
マッケイ14年

22

C

main=195;

195がretのオペコードであるx86プラットフォームで動作します。何もしません


retのオペコードは193ではなく195ですよね?
デニス14年

私にはうまくいきません。私は、これはアドレス195でコードを実行するために期待
nwellnhof

Tbanks @Dennis、コードは正しく、説明は間違っていました。
ウゴレン14年

3
実行可能でなくてもページを読み取ることができるプラットフォーム(最新の x86 を含む)では、実行可能でないデータセグメントに配置されているmainため、エントリ時にクラッシュしmainます。面白いこと、const int main=195であろうない(x86の)クラッシュ(しかしごみ終了ステータスを生成する)ため.rodata、デフォルトでは同じセグメント内に置かれ.text、従って実行可能です。(const char main[]="1\300\303";正常に終了します!(まだx86で))
zwol 14年

2
私は64ビットマシンを使用しており(これにより何かが変わるかどうかはわかりません)、main = 195はセグメンテーション違反になりますが、const int main = 195; 動作します。
w4etwetewtwet

21

Java

おそらくあまりにも明白です。

public static void main(String[] varargs) throws Exception{
    char a, b = (char)Integer.parseInt("000d",16);
    // Chars have \u000d as value, so they're equal
    if(a == b){
        throw new Exception("This should be thrown");
    }
}

何?

の後に構文エラーをスローします\u000d\u000dは、新しい行のUnicodeです。コメントアウトされていますが、Javaコンパイラーはコメントアウトされていないため、この後のコードをコードとして扱います。


11
あなたvarargsは可変引数ではありません;)
Navin 14年

問題は「失敗したように見えるが失敗しないように見えるコード」であり、「失敗したように見えるが異なる方法でそうなるコード」ではありませんでした。例外ではなく構文エラーが発生することは依然としてエラーです。
Nzall 14年

19
元の質問をもう一度読む必要があると思います。「または他の無関係なエラーを生成します。」
トムヴェレスト14年

実際、なしでは\u000d、未定義の値への参照を使用しますa
LegionMammal978

19

C ++

#include <iostream>

int succ(int x)
{
  return x + 1;
}

int succ(double x)
{
  return int(x + 1.0);
}

int succ(int *p)
{
  return *p + 1;
}

int main()
{
  std::cout << succ(NULL) << '\n';
}

どうして?

NULLは整数の定数であるため、intオーバーロードと厳密に一致しint*ます。それでも、ほとんどのプログラマーはNULLポインターに関連付けられているため、NULLポインターの逆参照が予想されます。


11
ありがたいことに、C ++ 11では、実装がNULLとして定義できるようnullptrになっており、そうする実装(まだ私が知っているものではないが、期待している)は、予想されるセグメンテーションフォールトを提供します。
hvd 14年

16

Python

print """""quintuple-quoted strings!"""""

完全に有効ですが、出力を推測するのは困難です。最初の3つの "文字は複数行文字列を開始し、次の2つは文字列の一部です。最後に、最初の3つの"は文字列を終了し、最後の2つはパーサーによって複数行文字列に連結される空の文字列リテラルです。


20
ただのボーナス:print """""""""Python strings don't have to start with the same number of quotes they end with."""""
コンラッドボロスキー14年

15

JavaScript

if (1/0 === -1/0) {
  throw "Surely there's an error in here somewhere...";
}

使い方:

JSには正と負の無限大があり、ゼロ除算のエラーはありません。


2
あなたは...あまりにもNaNにしていくつかのトリックを行うことができるはず
intx13

8
まあ、これはフロートを持つすべての言語で発生します。
ナビン14年

3
@Navin:ゼロで除算してもエラーが発生しない浮動小数点の言語。
nwk 14年

2
@nwk floatのIEEE標準では、ゼロによる除算はinfでなければならないとされています。これを変更する言語は知りません。
ナビン14年

1
IEEE 754は2つのモデルを指定します:NaN / Infのシグナリング(FPゼロ除算、-1からの平方根、アンダーフロー/オーバーフローなどの例外を発生させる)、および非シグナリング(明確な数学で通常の代数的値を扱うNaN/のInfように)それらの上に)。最新のFPハードウェアは、両方の方法で動作するように構成できます。言語に依存しない; 知らない恥。
ulidtko

14

C ++

トリグラフとスペースのないラムダを混ぜることは非常に混乱しやすく、トリグラフを知らない人にとって間違いのように見えます。

int main()
{
    return??-??(??)()??<return"??/x00FF";??>()??(0??);
}

使い方:

??で始まる3つのシンボルで構成される一部のシーケンスは、トライグラフと呼ばれ、完全に準拠したプリプロセッサに置き換えられます。前処理された問題の行は次のようになります。return〜[](){return "\ x00FF"; }()[0]; ご覧のとおり、これは0xFF番目の文字で構成される文字列を返す余分なラムダ関数に他なりません。[0]ちょうどその文字を抽出し、 NOTとそれを、その0が返されます。


12
有効なC ++プログラムはint main(){(([](){})());}trigraphedときも...素敵に見えるかもしれません
Angew

1
それは何をするのでしょうか?
ジョーZ. 14

1
@Joe Z [](){}は、[](int a){return a+1;}1つと同様にラムダ関数です。([](){})()その関数を呼び出して、void間違っていない場合に戻ります。全体(([](){})());はに要約されますが(void);、これは何もしないステートメントです。mainその後、returnステートメントがなくてもよいように、ゼロを返します。
tomsmeding

13

VBA / VB6

Private Sub DivByZero()

    Dim x() As String
    x = Split(vbNullString, ",")

    Debug.Print 1 / UBound(x)

End Sub

空のカンマ区切り文字列を分割すると、空の配列が得られます。ゼロエラーによる明らかな除算であるはずですよね?

いや。驚くべきことに、長さゼロの文字列が分割されると、ランタイムは、下限が0で上限が-1の配列を提供します。上記のコードは-1を出力します。


@minitech実際、空の配列をUBoundに渡すと、Subscript out of rangeエラーが発生します。
コミンテルン14年

…まあ。私はそれを取り戻します。VBA = /
Ry- 14年

1
@minitechうん。これは、VB6のSplitの元の実装のバグであると理解しています。.NETでは、このハックを利用したすべてのVB6コードとの下位互換性を維持するために、-1のUBoundを返す空の配列の動作を意図的に「追加」しました(または文書化したほうが良い言葉です)。null文字列の分割は、Windows API呼び出しなしでVBA / VB6でこの配列をネイティブに取得する唯一の方法です。
コミンテルン14年

12

Javascript

5..toString();
5 .toString();

与える:5

一方、

5.toString();

SyntaxErrorを返します

使い方:

JavaScriptは、数値上のドットを浮動小数点リテラルとして解析しようとします


13
私が1時間後に私とまったく同じケースを投稿したのはどうしてですか?
VisioN 14年

1
ちょっとビジョン、申し訳ありませんが、私はあなたの答えを確認しませんでした。スペース付きのケースも追加しました。私はこれをjavascriptの庭で一度読んだことがあります。
Sumeetカシャップ

1
すみません、ごめんなさい。あなたの答えは、@ VisioNによる答えよりも優れています。
ニコラスバルブレスコ

12

HTML

ここに最初の投稿、これを取得するかどうかはわかりませんが、ここに行きます。

<html>
    <head></head>
    <body>
        <?php $_POST['non-existant'] = $idontexisteither ?>
    </body>
</html>

それは.htmlファイルです...


9
だから、トリックはファイルに.html拡張子があり、Webサーバーが.htmlファイルをPHPとして解析するように設定されていないため、PHPブロックを実行しないということだけですか?
ビジョン

5
はい。これは不正行為ですか?@VisioN
アルブジ

2
これは不正行為だと確信しています。少なくとも、上部に太字の「HTML」を記述します。
ナビン14年

いいね!:-)トリックは私に働いた。
ニコラスバルブレスコ14

1
これがどの言語で書かれているかを明確にするために編集しました
vijrox

9

PHP(40バイト)

<?for(;;$e.=$e++)foreach($e::$e()as&$e);

これがこの質問で私が出した答えでした:狂気チェックプログラム

アイデアは、エラーを生成するコードを作成することでした。

私たちが考える最初のエラーは、構文エラーです。

構文エラーはありません...

その他は、クラス/関数が存在しないことです。

それはそこまで実行されません...

その他はタイムアウトまたはメモリオーバーフローになりますが、繰り返しますが、そこまでは到達しません...

ここでコードをテストします:http : //writecodeonline.com/php/(テストするため<?に最初の部分を削除します)。


3
これは人気コンテストです。バイトを節約するためにurコードを縮小する必要はありません。読みやすくするためにフォーマットし直してください;)
Songo 14年

後で読みやすいバージョンを追加します。私は同じ正確な答えを使用しましたが、まったく編集しませんでした。
イスマエルミゲル14年

foreach(e()as&$e);このソリューションの中核です。e()シンタックスチェッカーを継続するだけで、&$eその後asは失敗の原因になります。
TheConstructor 14年

実際、すべてが重要な役割を果たします。
イスマエルミゲル14年

9

VBScript

Visual Basic 6ユーザーはそれを知っているでしょう

If Blah Then Foo Bar

そのまま合法です

If Blah Then 
    Foo Bar
End If

しかし、どうですか

If Blah Then Foo Bar End If

?VBScriptでは有効ですが、VB6では有効ではないことがわかりました。どうして?

これはパーサーのバグです。意図はこれを拒否することでした。を検出するコードは、End Ifそれが複数行のIfステートメントであるかどうかもチェックするはずでしたが、チェックしませんでした。修正を試みて、修正を含むベータ版を送信したとき、特定の有力な業界ニュース組織は、VBScriptプログラムの1つにこのコード行があることを発見し、新しいバージョンの評価を低くしない限り、ソースコードを変更したくないため、バグを修正しました。


VB6で有効ではないVBSコードを作成できるようにすることを除いて、バグを未修正のままにしておくことには不利な点はありますか?
ゲイブ14年

1
@Gabe:いいえ、VBScriptコードをVBに移植するのが難しいこと以外に欠点はありません。
エリックリッパー14年

1
名前 !この報道機関は誰ですか?
ニコラスバルブレスコ14

9

C

これは、Cを学んだときに遭遇したエラーを思い出させました。残念ながら、元のバリアントは現在のGCCで動作しないようですが、これはまだ動作します:

#define ARR_SIZE 1234
int main() {
    int i = ARR_SIZE;
    int arr[ARR_SIZE];
    while(i >= 0) {
        (--i)[arr] = 0;
    }
    i = *(int*)0;
}

nullポインターを逆参照するため、これは明らかにセグメンテーション違反です。

間違っています-実際、ループ条件が1つずれているため、無限ループです。プレフィックスの減少によりi、1023から-1になります。これは、割り当てがのすべての要素だけでなくarr、その直前のメモリ位置も上書きすることを意味します-これはたまたまi保存されている場所です。に達すると-1iそれ自体で上書き0され、ループ条件が再び満たされます...

これは元のバリアントIで、もう再現できません。

同じことはi、0から上に1ずつずれていくことで機能しました。最新のGCCは常にi以前arrにメモリに保存されます。これは古いバージョンでは異なっていたはずです(おそらく宣言の順序に依存します)。これは、配列を処理する最初のおもちゃプログラムで発生した実際のエラーでした。

また、Cでポインターがどのように機能するかを知っている場合、これは明らかですが、そうでない場合は驚くかもしれません

の割り当て(--i)[arr]はエラーをスローすると考えるかもしれませんが、それは有効であり、と同等ですarr[--i]。式a[x]*(a + x)、インデックス付き要素へのポインタを計算および間接参照するための単なる構文上の砂糖です。加算はもちろん可換なので、と同等*(x + a)です。


1
私が見る限り、ループ本体は決して実行されるべきではありません(1234 <= 0はfalseと評価されるため)。「> =」と書くつもりでしたか?
celtschk 14年

1
@celtschkはい、それはタイプミスでした。気づいてくれてありがとう!
l4mpi 14年

このメモリアライメントは実際に指定されていますか、それとも一部のコンパイラでこのように実装されていますか?
パエロエベルマン

9

Java

public class WhatTheHeckException extends RuntimeException {
    private static double d;        // Uninitialized variable
    public static void main(String... args) {
        if (d/d==d/d) throw new WhatTheHeckException();
        // Well that should always be true right? == is reflexive!

        System.out.println("Nothing to see here...");
    }
}

これが機能する理由:

ユニット化されたフィールドにはデフォルト値があります。この場合、dはちょうど0です。0/0 =二重除算のNaN。NaNがそれ自体と等しくなることはないため、ifはfalseを返します。0/0 == 0/0の場合、これは機能しないことに注意してください。atは整数0/0で除算するとArithmeticExceptionがスローされます。


8

C ++ 11

struct comp {
    comp operator compl () { return comp { }; }
    operator comp () { return comp { }; }
    compl comp () { return; comp { }; }
};

int main() {
    comp com;
    compl com;
}

を使用して、警告なしでコンパイルおよび実行しg++ -pedantic-errors -std=c++11ます。

complはの標準的な代替スペルであり~、同様notにの代替である!complここでは、最初にオーバーライドしてoperator~からデストラクタを定義するために使用されます。別のトリックはoperator comp、型compからそれ自体への変換関数です。驚くべきことに、標準はそのような変換関数を禁止していません-しかし、それはそのような関数が決して使われないと言います。


8

VBScript

function[:(](["):"]):[:(]=["):"]:
end function
msgbox getref(":(")(":)")

'Output: :)

それが何をする:

角括弧を使用する場合、VBScriptの関数、サブ、および変数名は何でもかまいません。このスクリプトは、呼び出される関数:(と1つの引数を作成します"):"が、通常の命名規則に従っていないため、角括弧で囲まれています。戻り値はパラメーター値に設定されます。追加のコロンを使用して、すべてを1行で取得します。Msgboxステートメントは、関数への参照を取得しますが(かっこは必要ありません)、:)パラメーターとしてスマイリーを使用して呼び出します。


1
非常に多くのしかめっ面:(
Joe Z. 14

8

C#

実際、私は間違ってそれをやったことに気づいた:)

public static object Crash(int i)
{
    if (i > 0)
        return i + 1;
    else
        return new ArgumentOutOfRangeException("i");
}

public static void Main()
{
    Crash(-1);
}

投げる返さない。


ハハ、サイトへようこそ!最初の投稿としてのこれに対する勇気に称賛を。:)
ジョナサンヴァンマトレ14年

7

Java

enum derp
{

    public static void main(String[] a)
    {
        System.out.println(new org.yaml.snakeyaml.Yaml().dump(new java.awt.Point()));
    }
}

そして、それがどのように機能するか:

最初に、Enumは有効ではないが、有効であると考えます。その後、標準のPointオブジェクトの属性は印刷されますが、Gotcha!Snakeyamlのシリアル化方法により、スムーズなStackOverFLowエラーが発生します

そしてもう一つ:

enum derp
{

    ;public static void main(String[] a)
    {
        main(a);
    }
    static int x = 1;

    static
    {
        System.exit(x);
    }
}

Stackoverflowは明らかな再帰のために発生すると思いますが、プログラムはそれを実行するとstatic{} block最初に実行され、main()がロードされる前に終了するという事実を悪用します

enum derp
{

    ;
        public static void main(
            String[] a)
    {
        int aa=1;
        int ab=0x000d;
        //setting integer ab to \u000d  /*)
        ab=0;

        /*Error!*/
        aa/=ab;
    }
    static int x = 1;
}

これは/*Error*/、ab = 0の前に開かれたコメントの終了点として、コメントアウトされたコードに依存しています。0x000dの整数abに関するExplainは、改行を非表示にして次の行のコメントアウトをアクティブにします


1
今はできませんが、可能であればこれを再フォーマットするといいでしょう。それは...そのまま読み取ることが少し難しい:P
Jwosty

emをより明確にしました。そしてスポイラータグが意図されているトリックは、最初は明らかアレント原因
masterX244

2
待ってください。実際、最初のものはエラーを生成しますか?それは質問が尋ねているものの反対です。そして、なぜ2番目のSystem.exit(1)だけではありませんか?
ライキン14年

3
2番目のスニペットでスタックオーバーフローが発生することを期待するJavaプログラマーはいません。申し訳ありませんが、それは非常に明白です。
トビアス

1
@VVK codegolfingの習慣を使用して1バイトenum{class{保存する代わりに
masterX244 14年

6

C

cの文字列と配列はかなりわかりにくい

main(){
  int i=0;
  char string[64]="Hello world;H%s";
  while(strlen(&i++[string])){
    i[' '+string]=string[i]-' ';
  }
  5[string]=44;
  return printf(string,'!'+string);
}

9
そのハードが、私はこのから期待しているエラーの人々のどのような種類がわからない読み取るために
ブライアン・チェン

3
私は、有効であるが型にはまらない記法を人々に思い出させたかっただけです。これが有効であると言う前に、私は確かに3回見ていたでしょう。まず、5 [string]のような式は、カジュアルなコーダーにはあまり知られておらず、配列のインデックス付けのロジックに逆らっています。次に、 '' + stringは2つの文字列を追加するように見えますが、引用符のタイプが間違っています。3番目に、&i ++は整数のアドレスのように見えます(ただし、優先順位はそれを考慮します)。最後に、文字列リテラルを超えて書き込みを行います(ただし、より大きなバッキングバッファーを超えては書き込みません)。
オリオン14年

悪くないようです。私はC ++で少しだけコーディングしましたが、これは理解できます。
ナビン14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.