Q: How did the IOCCC get started? A: One day (23 March 1984 to be exact), back Larry Bassel and I (Landon Curt Noll) were working for National Semiconductor's Genix porting group, we were both in our offices trying to fix some very broken code. Larry had been trying to fix a bug
優勝はもらった (スコア:0)
#define FALSE -1
Re:優勝はもらった (スコア:2)
#define END ;}
Re: (スコア:0)
オイオイV7 UNIXの真似をして優勝はないだろう?
http://minnie.tuhs.org/cgi-bin/utree.pl?file=V7/usr/src/cmd/sh/mac.h [tuhs.org]
Re: (スコア:0)
> V7 UNIXの真似
せっかくcまでこれたものを、アセンブラに戻してどうする
しかし、これわかりやすいかも MASMみたいでなついよ
Re: (スコア:0)
Pascalかも。
Re: (スコア:0)
ALGOL です(ALGOL 68 だったかな)。
というか、IOCCC 開催のきっかけとなったのが、そのマクロを用いて書かれた Bourne Shell のソースコードなわけですが、ここスラドにおいてももはや UNIX 文化はコモンセンスではないのですね。
IOCCC FAQ [ioccc.org] からの引用:
Re: (スコア:0)
どうせなら、逆に定義しろ
Re: (スコア:0)
プリプロセッサ系は卑怯な気がするなぁ。
#define car <st
#define id .h>
で、
#include cardioid
#include carringid
とかやられたら、誰にも読めない。
Re:優勝はもらった (スコア:4, 参考になる)
「プリプロセッサ系は卑怯」なんてことは全然ありませんが、審査するのは人間ですから、ありきたりな手を使っても良い評価は得られません。実際、ガイドライン [ioccc.org]の Our Likes and Dislikes の節に
と書いてある通り、マクロを使って読みにくくしていることしか見るべきところがないようなエントリーは古臭いというのが評価基準です。
ちなみに、 #2052882 [srad.jp] の人も書いている通り、 #2052871 のコードはコンパイルエラーだと思いますけど……。マクロ展開は字句解析の後で起こるので、 car というマクロが定義されていても cardioid というトークンには影響を与えません。 (なんてのは当たり前過ぎる話なので、何か引っかけがあるのかと思いますが、わかりません。)
Re: (スコア:0)
プリプロセッサを手動で反復適用するとかすれば、あるいは。
ああ、でも、n 回目のプリプロセスのためのディレクティブが n - 1 回まではエスケープされるように書かなきゃならなくなるのか。
Re: (スコア:0)
あなたの望むようには展開されない
Re: (スコア:0)
真面目にやってこそアレゲ [pro.or.jp]
たとえ本人にその意志がなかったとしても
Re:優勝はもらった (スコア:2)
Re: (スコア:0)
もう「CとしてもFortran 77としてもシェルスクリプトとしても正しいプログラム」とか「シェルスクリプトとして実行すると自分自身をMakefileとして自分自身をコンパイルするプログラム」はあるよねw
Re:優勝はもらった (スコア:3)
言語1のプログラムが言語2のプログラムを出力して、言語2のプログラムが言語3のプログラムを出力して、言語3のプログラムが最初の言語1のプログラムを出力するというような循環的な自己出力プログラムは一般化されています [sigfpe.com]。
Fnxyは言語xで書かれたプログラム(関数)であるとする。
Fnxyはn個の文字列G1, ..., Gnを引数として取り、言語yによるプログラムYを出力する。
Yはn個の文字列G2, G3, ..., Gn, G1に対して言語yで書かれた関数G2を適用するものであるとする。
このとき、言語xによるプログラムF3xy(F3xy, F3yz, F3zx)は言語yによるプログラムF3yz(F3yz, F3zx, F3xy)を出力する。
F3yz(F3yz, F3zx, F3xy)はF3zx(F3zx, F3xy, F3yz)を出力し、F3zx(F3zx, F3xy, F3yz)はF3xy(F3xy, F3yz, F3zx)を出力するので元に戻る。
これを応用して、各言語での関数定義の構文などを定義すると、循環的な自己出力プログラムを出力するプログラム [sigfpe.com]が書けます。
Re:優勝はもらった (スコア:1)
//から始まる形式のコメントを使っていいのなら、コンパイラがShift_JISに対応しているか否かで挙動が変わるプログラムが書ける……ってのも、既出?
1を聞いて0を知れ!
Re: (スコア:0)
あーMozillaでそれをナチュラルにやってるソースがあって(外人が書いてるから仕方ない)日本語環境でコンパイルしたときだけ一部のテストが失敗するというわかりにくいバグになってたことがあったなー。
修正後は再発防止にstatic_assert入れといた
Re: (スコア:0)
マシン語で、エントリポイントを変えると別のプログラムになる、ってのが昔あったような。
オペコードとオペランドが交互に並んでいて、それを逆に解釈するみたいなイメージ。
Re: (スコア:0)
マシン語で、エントリポイントを変えると別のプログラムになる、ってのが昔あったような。
オペコードとオペランドが交互に並んでいて、それを逆に解釈するみたいなイメージ。
マシン語だと自分を書き直しながら走るコードを書いたりしませんでした?
単純な所ではジャンプ命令のフラグ判定を違うものに差し替えたりとか
ジャンプ先のアドレスを書き換える事で実行モードの違いを出すとか。
Re: (スコア:0)
役に立つし正しいハズなのになぜかコンパイル通らない罠。VC++はマジ糞