2ちゃんねる版 邪悪なCコードコンテスト
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG邪悪なCコードコンテスト(IOCCC)ホームページ
http://www.au.ioccc.org/
サンプルコード
(1987年度「最悪なスタイル賞」受賞作品 by Spencer Hines)
#include <stdio.h>
#include <malloc.h>
main(togo,toog)
int togo;
char *toog[];
{char *ogto, tgoo[80];FILE *ogot; int oogt=0, ootg, otog=79,
ottg=1;if ( togo== ottg) goto gogo; goto goog; ggot:
if ( fgets( tgoo, otog, ogot)) goto gtgo; goto gott;
gtot: exit(); ogtg: ++oogt; goto ogoo; togg: if ( ootg > 0)
goto oggt; goto ggot; ogog: if ( !ogot) goto gogo;
goto ggto; gtto: printf( "%d goto \'s\n", oogt); goto
gtot; oggt: if ( !memcmp( ogto, "goto", 4)) goto otgg;
goto gooo; gogo: exit( ottg); tggo: ootg= strlen(tgoo);
goto tgog; oogo: --ootg; goto togg; gooo: ++ogto; goto
oogo; gott: fclose( ogot); goto gtto; otgg: ogto= ogto +3;
goto ogtg; tgog: ootg-=4;goto togg; gtgo: ogto= tgoo;
goto tggo; ogoo: ootg-=3;goto gooo; goog: ogot= fopen(
toog[ ottg], "r"); goto ogog; ggto: ogto= tgoo; goto
ggot;}
0526525
2006/10/10(火) 00:02:320527デフォルトの名無しさん
2006/10/10(火) 00:15:38>配列の範囲をオーバーするアクセスは動作未定義。
マジで? きっちり定義されてたものだと思ったが・・・
0528デフォルトの名無しさん
2006/10/10(火) 00:24:49サイズ0の配列はmalloc()で割り当てるから問題ない。
0529デフォルトの名無しさん
2006/10/10(火) 01:18:49#include <stdio.h>
int main(void) {
volatile int i, arr[10];
for (i = 0; i < 20; i++) arr[i] = (int) main;
printf("Hello\n");
return 0;
}
うちの処理系(VC++2005)でこいつをコンパイルして実行したら、「Hello」がたくさん
表示された挙げ句に落ちた。これは定義された動作とは言えない。
ちなみにvolatileは最適化によるコードの消滅を回避するために必要。
>>528
ほとんどのコンパイラの実装だとまあ問題ないだろうが、それでも標準ではない。
VC++2005だとゼロ配列の定義は禁止されるし、構造体の末尾で宣言しても
非標準の拡張機能とやらで警告される。
万が一添え字を検査するような処理系があったとしたらmallocの余白が後方に
あろうが何だろうが容赦なく落とす可能性もある。
0530デフォルトの名無しさん
2006/10/10(火) 01:33:56それは落ちるでしょ。メモリ確保して無いんだから。アホですか。
サイズ0の配列定義は、共用体で真価を発揮するんだよ
0531デフォルトの名無しさん
2006/10/10(火) 01:55:15C++でも出来た気がするが、処理系依存かもしれない(GCC等では、Cでも出来る)。
可変長構造体は、昔から使われているテクニック。
ファイルフォーマットがどうのというのは、本当のメリットではない。
(ヘッダとデータを別領域に置くやり方と大差ない)
本来は、例えば下のFAQの例において、namestrをポインタとして実体を別に持つことと比較して
mallocの呼び出しコストと管理領域(およびポインタ1つ分の領域)を節約するというのが
明らかなメリットを生かした使い方となる。
で、この可変長構造体と呼ばれるテクニックは、
C FAQにおいても、邪道ながら「全てのコンパイラで使える」と記されている。
http://www.kouno.jp/home/c_faq/c2.html#6
intのサイズを始め、ほとんどの「規格に明記されていない点」は
例外的な処理系をいくつも挙げているというのに。
0532デフォルトの名無しさん
2006/10/10(火) 03:25:49けど、まあ、やっぱりそれでも、普通に邪悪だよな。
むしろC99で認められたあたり、完全にプロ向けの言語仕様だから
故意的に使うなら構わないってことなのかもしらんけど、
はじめて見た時は目疑った。
0533516
2006/10/10(火) 06:38:35可変長構造体の話でもねーよ。
ArrayListの実装として、動的配列が使われていたりすると、
Length = 0で、当たり前の状況として、Size 0の配列ができあがるわけだが。
別に、ArrayListに限った話ではなく、生で使う場合でも、あるって話。
0534デフォルトの名無しさん
2006/10/10(火) 06:45:52その中で「サイズ0の配列」の話が出ているのに
一人だけが「誰もC言語の話じゃない」と叫んでいること。
0535デフォルトの名無しさん
2006/10/10(火) 08:46:16>>529は単に
>配列の範囲をオーバーするアクセスは動作未定義。
の簡単な例を挙げているだけに見えるのだが。そんなところに噛み(ry
と、どうでもいいところにつっこんでみるテスト
0536デフォルトの名無しさん
2006/10/10(火) 11:31:54しらねーよ。
オレ、C言語使いじゃないし
0537デフォルトの名無しさん
2006/10/10(火) 12:29:490538デフォルトの名無しさん
2006/10/10(火) 15:28:57スレタイ100万回読め
0539デフォルトの名無しさん
2006/10/10(火) 19:04:48百万秒ROMってろ。
0540デフォルトの名無しさん
2006/10/10(火) 21:06:30習っとけよ。コンピュータ使いの一般教養なんだから。
0542デフォルトの名無しさん
2006/10/10(火) 22:21:460543デフォルトの名無しさん
2006/10/10(火) 23:04:32友達だったら面白いヤツだけど、
会社の同僚だったら殺したいヤツだな。
0544デフォルトの名無しさん
2006/10/10(火) 23:49:390545デフォルトの名無しさん
2006/11/07(火) 16:58:52ドヴォルザークの英語の綴りをググっている最中にここに辿り着きました。
0546デフォルトの名無しさん
2006/11/07(火) 17:43:230547デフォルトの名無しさん
2006/11/07(火) 23:06:040548デフォルトの名無しさん
2006/11/23(木) 14:12:26それって、約11日半。
半年に満たない。
0549デフォルトの名無しさん
2006/11/23(木) 19:27:02だからもう書いてもいいんだよ。良かったね。
0550デフォルトの名無しさん
2006/12/03(日) 09:13:45{
printf("ハングルい むぐるうなふ くとぅるぅ るるいえ ウリ=ナムル ダンクン\n");
}
0551470
2006/12/24(日) 04:38:16上連雀三平は、エロを通じて漫画の面白さを世に広めようとしてるんだよ。
アナルジャスティスも、となりの精液さんも、単なる通過点に過ぎない
と断言してもいい。
>>474
短編なら宇宙のよめがお勧め。
0552デフォルトの名無しさん
2006/12/24(日) 16:10:49誤爆につっこむ奴が居ないほど
過疎っているのか……
0553デフォルトの名無しさん
2006/12/24(日) 20:10:00そうでもない。例えば>>552とかがつっこんでる。
0554デフォルトの名無しさん
2006/12/28(木) 21:02:57#define long "%d %d\n", x??(10??), x??(11??)
main()
??<
int x??(100??);
x??(10??) = 2;
11??(x??) = 3;
printf("longのサイズ = %d\n", sizeof(long));
??>
0555デフォルトの名無しさん
2007/01/12(金) 18:18:21P;
0556デフォルトの名無しさん
2007/01/13(土) 03:37:35もっと短いC言語ソースコード
;
0557デフォルトの名無しさん
2007/01/13(土) 03:51:420558デフォルトの名無しさん
2007/01/13(土) 05:38:32cc -DC="R>0" -DI="if(T)O" -DO="c=write(1,&c,1);" \
-DP="main(){X}" -DR="read(0,&c,1)" -DT="c!=015" \
-DW="while(C)I" -DX="char c;W" file.c
というオチ
0559デフォルトの名無しさん
2007/01/14(日) 00:24:310560デフォルトの名無しさん
2007/01/14(日) 01:00:130561デフォルトの名無しさん
2007/01/14(日) 01:17:520562デフォルトの名無しさん
2007/01/14(日) 07:12:410563デフォルトの名無しさん
2007/01/14(日) 12:41:19UNIX板の連中が書き直したんじゃないっけね、第1次消滅危機のとき。
0564デフォルトの名無しさん
2007/01/14(日) 16:43:240565デフォルトの名無しさん
2007/01/15(月) 02:50:02http://www.asahi-net.or.jp/~KH4S-SMZ/roguelike/rogue80/index.html
これは恐らく、数々のRogueプレイヤかつプログラマにとって真に*邪悪*なコードに違いない!-more-
0566デフォルトの名無しさん
2007/01/15(月) 11:48:39すげええww
0567デフォルトの名無しさん
2007/01/15(月) 12:03:2180字*n行を目指してる、が正解な。
0568デフォルトの名無しさん
2007/01/15(月) 21:51:24怪 物 め
0569デフォルトの名無しさん
2007/04/07(土) 19:28:09int i;
void main(void)
{
hogehoge();
}
・
・
・
0570デフォルトの名無しさん
2007/04/07(土) 19:40:170571デフォルトの名無しさん
2007/07/02(月) 07:56:57forとかwhileとかgotoとか使わずに素数を求めるプログラム。
0572デフォルトの名無しさん
2007/07/02(月) 22:31:450573デフォルトの名無しさん
2007/07/03(火) 07:47:510574デフォルトの名無しさん
2007/07/05(木) 12:27:08void init_table()
{
for(int i=0; i<10; i++)
for(int j=0; j<10; j++)
for(int k=0; k<10; k++)
for(int l=0; l<10; l++)
for(int m=0; m<10; m++)
for(int n=0; n<10; n++)
table[i][j][k][l][m][n] = 0;
}
0575デフォルトの名無しさん
2007/07/05(木) 15:20:04エラーにならないか?
0576デフォルトの名無しさん
2007/07/05(木) 22:39:33■ このスレッドは過去ログ倉庫に格納されています