今までに見たソースコードで一番感動したのは deux
■ このスレッドは過去ログ倉庫に格納されています
やっぱりこれです
while(*src++ = *dst++) ;
・ポインタの型によってインクリメントの適量を判断して加算してくれる点
・行末の ;
・終了判定
無駄も過剰もなくって感じで好きです
前スレ
http://pc12.2ch.net/test/read.cgi/tech/1037458703/ 演算子のオーバーロードでちゃんと
srcからdstに代入されるようになっているから >>3
左から右に代入に変更してあるってことか?アホじゃないのか?
それだったら -> を左から右への代入ってことにすればいいんじゃないのか?
こういうので感動できないのは、俺が年だからかなぁ。 こういう書き方出来ると分かっても、使わないなぁ。 昔は再帰の書き方で感動したこともあったけど
今は別にって感じだな
枯れちまって情熱がもうないのかもしれん int main()
{
return main();
} これ有名な技法でしょ。しかも代入方向間違ってるし。 >>8
Cは実質アセンブラなんだから
movem (a0)+, (a1)+
見たいな事は出来ないと困る ソースって訳じゃないんだけど
感動したものにこんなのがある
SQLで覆面算を解く
ttp://miko.org/~naruto/Artifact/MASKSQL.html 呼び出し元でバッファサイズと終了条件の設定を保証しないといけないから、
これだけだと危険なコードだよねぇ 値交換っててっきり一時変数が必要かと思ってたらそうでもなかったんだね
x = x + y;
y = x - y;
x = x - y; そうですね
それでうまくいく範囲の値を使っている限りはね >>12
アセンブラやってた人間から見たら当たり前だよな
Cで同じことが出来ると言われてもあっそうとしか >>1
これってループを抜ける保証があるの?
一見ないように見えるんだけど。
>>1
終了条件を満たした直後に2つのポインタがインクリメントされてしまうのが
無駄なような気がしていたあの頃が懐かしい >>21
おいおい、doubleなのに%dとか素で言ってるのかw >>26
まあ、桁あふれすれば当然そうなるわな
>>17の方法だと、有効桁数が1bit分減るってことだろ xor を使った値交換は超有名かと思ってたけど、知らない人もいるのかね。
>>17 みたいな劣化版を今更発見されても・・・ねえ xor使って中央値を求めるコードは昔見て感動した
こんな奴。
int median(int x,int y,int z){
return max(x,y)^max(y,z)^max(z,x);
}
ADD 90H
DAA
ADC 40H
DAA
これ考えたやつの頭はどうかしてる。 a = max(x,y)
b = min(x,y)
z = a*a - b + 2 * y
という式において、x, y と zの関係を表にすると、以下のように
zが正方形を規則正しく埋めるような形に並ぶ。
00 01 04 09
03 02 05 10
08 07 06 11
15 14 13 12
用途:
x,yの上限が動的に増える2次元配列を、
素のvetorに無理矢理突っ込むのに使ったり… 値の交換なんて高々数値1個分のメモリがあればできるのにと思ってたけど、
ROM が数十キロバイトもあるのに RAM が数百バイトなんてマイコンも今時あるんだな。
そら有用だわ。 すまん、すでに頭がアセンブラオンリーになってた。w Dim ac(10) As Class1
Public Sub Test()
Dim c As New Class1
Dim i As Integer
For i = 0 To 10
Set c = Nothing
Set ac(i) = c
Next i
End Sub >>32
00 01 03 06 10
02 04 07 11
05 08 12
09 13
14
こう並べると条件分岐のない式になる。データの種類によってはこれも便利。 おっと、式を忘れていた。
z=(x+y)^2/2+(x+y)/2+y >>1のコードの意味を教えてくれ。構造体のコピー? 違う。配列のコピー?よくわからんコードには解説もつけてくれるとありがたい。 >>40
ゼロターミネイティッドな文字列のコピー
または、偽と可換な番兵付きのコンテナのコピー 文字列のコピーじゃないかね
文字列の終端には\0があるからそれでループが終わる
K&Rとかに出てきそうな感じ
しかし、>>1って未定義じゃないんだろうか
初級C言語Q&Aの
二つの副作用完了点の間に、オブジェクトの値を2回以上変更している場合、
又は変更した後で新しい値を得ること以外の目的でそのオブジェクトをアク セスしている場合
詳しくないのでわからんけど >>43
未定義になるのは、「同一の」オブジェクトの値を二回以上変更した場合な 把握した。
つまり、このコード自体に意味はないが
while((*src)++ = *dst++)
だったら未定義ということだな ここまで何もかも間違っているといっそすがすがしいなw >>45
未定義じゃ困るだろ。
右辺値に代入するコードがエラーにならなかったら、みんなC/C++捨てるよ。 >>1見てわからんとか、Cの初級者以下じゃないか。
ム板ってこんなに程度が低くなってたのか。 どこかのスレでみたこれ。
/*
ここに処理
//*/
最初の/*を//*にすればどーたらこーたら >>60
確実じゃないの?
場合によるけど。
/*例1
/*コメントのネストはNG*/
//*/
/*例2
//このコメントはネストしてもOK
//*/
/*例3
//*//この状態はNG
ようはコンパイラが/*を見つけたら*/がくるまでコメントと見なす機能と//のコメントを上手く使ってるという事で。 char main[]={0xC9};
関数=コードというのは分かっていたんだが、ここまでストレートに書けるモノなのかと衝撃を受けた。 (function(s, callback){
var result = console.log(s);
callback(result, function(err, result){
if(err){
throw err;
}else{
console.log(result);
}
});
})('Hello', function(err, callback){
if(err){
throw err;
}else{
callback(null, 'world');
}
}); #include <windows.h>
#define o(c) (c=='/'?63:(c=='+'?62:(c<'A'?c-'0'+52:(c>'Z'?c-'a'+26:(c-'A')))))
int main(int ac, char **av)
{
BYTE str[]="AAAAfzH8QRUEXWl0XVF0XX10QXUEf1X8AFwAXxXwGMekNYpIToHAR0qYAGaofyXEQX0AXUvMXVygXUNwQQnAf06YAAAAAAAA";
BYTE dmp[72];
for(int i=0;i<24;i++){
BYTE c[4];
for(int j=0;j<sizeof(c);j++) c[j]=o(str[i*sizeof(c)+j]);
dmp[i*3+0]=((c[0]<<2)&0x00fc)|((c[1]>>4)&0x03);
dmp[i*3+1]=((c[1]<<4)&0x00f0)|((c[2]>>2)&0x0f);
dmp[i*3+2]=((c[2]<<6)&0x00c0)|(c[3]&0x3f);
}
HWND hwnd=GetDesktopWindow();
HDC hdc=GetDC(hwnd);
HDC hmemdc=CreateCompatibleDC(hdc);
HBITMAP hbmp=CreateCompatibleBitmap(hdc,32,32);
HBITMAP holdbmp=(HBITMAP)SelectObject(hmemdc,hbmp);
for(int i=0;i<24;i++)for(int j=0;j<3;j++)for(int k=0;k<8;k++)
BitBlt(hdc,(j*8+k)*32,i*32,32,32,hmemdc,0,0,dmp[i*3+j]&(128>>k)?SRCCOPY:NOTSRCCOPY);
SelectObject(hmemdc,holdbmp);
DeleteDC(hmemdc);
ReleaseDC(hwnd,hdc);
DeleteObject(hbmp);
return 0;
} eNptWNeS40aWfZ+v6NDEarqEmiUAgjBRakXAE44kDOE6+gHeew+t/n1R1T0asxsMEOTJkzevSXPz/jWrg3IKo0+/LlkdNsvw3+l
vf/nrn+BeZv4H0vZeUnmfgqaqonr8fMCvP300Hs9PL3+Zmyz85KNIGAVNGH2mHIP99Es4jK9ZPX4asj16/Q4NffDy+8fPg/wVB7
99+R384y1u+u9dhi/ga/YFfMt+hY4v4Av88nuQev2nX/wvP5Gut4MEAJxOP719kMMv/tcMgL79/Xh9A6B/SgkOCcGv4VsAAC/vw
3y0B3//G/C3b18GIHgbgC/h2x/v9Hftvo/3ruPpfIwJ/NAv+Ip8e/sHJz84+a/IW340B1/zb1/exX4+jPma/YIA+bd32S//dZjz
dth8YGfgsOzz5+Ar+O3XX+GXn8EVBOPg5X/eIejbb78hH9D55U869J0OHXTkBx38TocP+ncJ8T/p8Hc6fNDR7/TgnR58PX/79PM
ncD0f3D/+eNe88rL6wwQveP3uyl+8+YeJ5X5Y8e3LT5G4jzUD61c5MBOSHTReHMuxCjaRVfpxcsnFuZtPUx1VtsZTE6SU51Qu5i
RpZO4HsCjWTOIAy43jWrPtbf4EEMyNIDGlCt2Y2+/h/VEvy2PBBYondo2uAWuPKY/VKbAoFAPOBHRN7rrUxghEl41O9Xf2Hoh5T
5ZVYA9NCiWBM54RYVBVGkxGkBnj0KMLymVVHext8UnKI2k2ZxfK6DBiVAUAqaiF1kj0GXKVeq483luXyp4oqw5/8y7pIXegoAxf
wzZx+NIrz1BtUYNi3JyhIwKLBGcW3Ug+BbicrYjeGemw7+moMeMcsOxCUYIsm5/syUYcLvAEdJ7FwUszJORaB2FNl6eWFNWCk1F
YOlQwyXkybxYNk/x8XcWtYG/w0AhXSWjX6Ik69mnLBoTzSmC+TW73CG9QbSCMLjf1TAMDsKa8ty5WYbkTzGJFgGKJSSBP43T3z0
UWn1lxm4AxfEqIpA/uDorBep2qzbUExu43Te5lLenOfgiDDsrlJuZU5Mg0t9vlHrh6O4S+TAroGKzcfXVXmb/SghJJi8+j62GOj
Qgh4zMNY7dzQfiWAQCP7Loe7tYn8frQjOzUZShcN1LUBWnQlYXSMZjUOClvHoairo55g5n7WA7KBA/Kspw26yqS7t3L7NgXh46s
aH13V1Q6jynQQmld03Vj3cWylscuDMIwIpXRyot7wY3VNiposd/62z0H1nHibgNTqFYAFEElWPi2XQrvudP4iCJm4rCBkj0ywS2
bFgLUK4H4GXVT2SEte/m+Yn10N51VftpEBFsQP2kXx/T6y31j76RiQjV94aV7Gy5dYN6tczILgQsOJ8sGmw4lTDIBqIsLypTrol
xYnWLPDl0fNgUH6qPeHLinO5QLWtZS3x8TycUtc+OFsI2nCprGdvazc38hc7cEvRznZvWM0eXlpnAcBCDJUgam+6wk3JYLuTOQy
rinnT2YjEZpniWq02Ow9Aw686RmbHLlEW4loTeZQ1ecdyy+YrRNbINrUFpc0wyQEqNNcyujcjaffm1S2F11sMLtggo9cckwDisK
WlPPOeNTZjC6KgWrL7Nsc1sVZcPUCrqxra2nGE2h25RcOT+eS5+bvo3S2sVlawOrkRJ4bFi5XXjPRb3kRBlR2o++I9p8ag9ql52
j3eUVWfEl1VmsB1RJhGdBVy31qzJ94tUAZlLrbIq49FNrc0XsigjnXl2xmEtnLmWuWsRu8RAjTqocSgWXMsc0No5lmQy6C43SHt
LN2HHJ9VxqDwvfp9zcRVrQfK2mT2Te7SBaye3d46+rG7qZKFkNkZPLzEeL1h6LhHbmbI0HHRgeXt+tiMwd+sCToZIOfZWV+jJno R1ZxcUt131hoccoYhg+wru6lwobZPMkweCmbQxHqdPZRVznyqbUDZPVkwmHLn34t16qXpaslrD7cAsL20WlNAZ6M8tr2ERrh7Bg
uN/Ola9MWE1ELs7LmbNAAKoGE/iAHt7ICe64QZmOEYdyWgfoo4fa7oU/nQZo1C4MYQCef9n2yGnhXr+ekrB5SjogdW2+zxrRgHW
7QKUKYpC+Int3cWd+dcz+kdzDadd4UiQioGcfMe4xLgvYrKFDkNB4RN7eMFgD9HLj8uV0J9xNvi/X9DQ/U9+SZZTTQvWUyzchNE
z0Fgh6XdgmMrUPPTLOD6Dt9lGxytybIXIWdK/vWRk9ZijYO1HhF+ItG3Rw8M2LGMGFBeO9fmmPdQa72uqJPsZOvgmLsSYXBFjN5
6gjbE10YHlfT1wo6ECnSE9v9/GYEzBZV8ttOgNJiZVS0FgO8aCuwq3l8TtsziMSYkQa9ydGb+r16mKtvqY31GSsETRidHVw2cw3
VyBR9DlYdrqea2fISdLiTm0mlVaZgSbJZa2rKy3EVfDSFpJ2Td1+UDrOUAn5jj+I+HZE1cg6Y9yIqWQtHxignRJqV6mNwSBpy9c
KIkzsxCyL/Gr2FtVSoXFCU2/yeJXA8pZHdi4hEOiK3QnqkdEQ0GT8ZnnlVehaYAcX5sYNT+5yHeNR7zPak1VphR9A444Vw8V9C2
5YpUDR5foIHndZcwmWHQuZ5Fe4mkjdsog82+7PYs7jCbjUFws0MXn1FDxaeAmLY6lgxzmdUsC26LV8uvoU4AuBLdEaKULmoFs70
oCm3ZTrUOneYDkjrAWzRYUtIU3X4epjjy1aJ1Rx9ds5f7oaJPOGYCzbdm0JpevGgbHUPLVQKpYA5gaVeHmzcOHWk17aAxrsQExM
4FYgrecBvwbPCxob0nDC7iM3Q81Dw1wGOV/TFhfO9YM1NtrhzLVd7RZUuvOdhmyCm9vVj83oYu7NirrpaKbyyTpO7SDzAd8Xt1x
znZmjypQaoUrzagIbkFjq7hm6msm6ZjczINEC2usVuUPGlVMV3+lAB6aofg0Y3pJghKpm7YIZ2dgzQ7NXqucwxMSo0R48FN9QfF
x7CDc3GbFIBk4zxijTrOlhdb/kO6aZD5MY5rFUc/tKlMKxcckeQgWaaGVO/pydYulQ/OhiLCG95jXnjRfVUDmGnJ8UxmcA75gWV
IBG2gETRJw2QYDRQ2h9IkACJK0eug1uUxhDpV49ogKcli1dMYHOS1c/L550K5MeIfh9KPViMfuVXXqjpp0e6oICyEtAPJ/hUVdv
Zj0yGurUnJBLI9CrSXFOLBqZL8dRjvbRzHhbFQfmaFrwskZn86kgwoZPjGWpJ30TSDPZewewxyOdIoDjLLlELO0IZVwQ1qVuGbL
S1hSL/Z3RrkAJM31/d5EL43slF0cKc6w9treyFhDopXWuvRnLXjOhqY6z5kUGdWuTkzW5hWhatIPU0E/KEmCblUk26SYf6ZsluV
lLv5U5aZgVKQ3pg65Ejl77NoaHY2Mggd6LRQfyH/4GzWeSteTQBloJSaEneOvquzz3vS66dyKs9rj00+yZhHCAS/1wLRrFvOHG1
SopWK0Vm7foJn1EKeBep+J8fqb66sXTPKwG/tgDbIRA72wfy5DzLT3MHQ0IENe8G4UhsJ1BZfZ0N+ezWcDZLOImnsvNVZ/12A0G
ppdo+EnM2L0K1rSxLqspn8hbtgbxSCmZrpDTEIyUpQsjUIEqSmx4Vyaae+wVqn5mTpw6Bhc4Y6/NxUv8umCf2tlTThpitvDA9vt
zlnG54loV4E17JrG1F32+NVVCDHgaalQtvtMWuRMsrGrKtQBlOONucXXl+tYB/SWB/Es73Cn7iZagzhB2GxE2GJcJgEu+dHEwEA FAjI0cMd6o8FYaZdkYE7pxdg1hLe3LpxGTZAST7vOZnYJiB4DrOOeG2bNPAUi4xhd3tjkZ07FLHIuo3nDf57O5XXTQhkmzlR+pV
8GBme3ZQj/FhqlHNzz+7QNvc1W6ygDJtOr0RDJsDJTyHlB7tjM9l1QhziPZTqLZTTNV/+GuXTLbqruec/R0wzocO3KzxjQlgiq4
nMAutnIRZuUxLnVP+BBrnE47GcSZXcxgbQN8l6tzoY1O44blk9saPd16Xlqydg+dSEPDZS1HsReRi5TJq7lUPAISKldSR1JASWn
vnjfkiLIengzR6Lm1hFzocfS85Hw/1ckqF97l9jjLhMzPWo7yd6VSRBhYRTri+UcCcKHv2rKxnLgjrw6EDMrmvsHL/sY84zgqAr
t6QJaQFxbFLaJb8QBgGcoJ769t6BsLIbcgNkGitOUFENzEhi6VmcqW+rnH947w6FynyL7fSaRFgSJc81MPgax1yrl6VZXoZJ05s
MAfinKWrnC0dvqNFsk4WEIrnZTWjVowp1dntnT+mskXxrzDpZHFt21YzQDDInxPvDbT+SKG8Agup5TbY5yzrNvjtKYoaeuw2Dwo
9bhJYc+TuBAOcBWCVcxcQ1+qznwibWcCJ57lQBGXjCQqs62qLoS1bFrthJGpRwktYc/5klua4pbEE32K3PNq1oIN2ewglzkWdeF
FshQZ0N73jFbLZ1PrreN0iZNtMLlwQsHKOGPp3i0XSNM4zBIu136awRDOcBldC9snjnRjxtWHqM2H9dVwwtHG8g2UPSEF2GPd5V
kEhEqr6MVyS1VsiVCWI50Vy9kFi/ZZREs2WKEIdlyapDpFyQ+nvmAS/0jNe8hSLqI8nPjIp3FeB5iubDjfpTyGvo/LpawMzNloL
RbLQgIjdUJvCy3x+qTFTDhmuimON38WE9UamAVkfIN4pFhkhS68ouPpWvFpGyqJkl8TqNWAKDVREM6j1eNLcCOXYb7p8KIJ0DGr
ElBnz4OcgCznY8lgdZx2h2SqQgQjRaOW4byLSwiK0RXU6NTCdTD2UYJK4yL5w5kH94BGEPGMn7ZBjgYUUaEjF528SSdsdbORJ8p
gdamjqH1O/GPeBq1rbBZ65y9V7PoPPKuF00LH+oJEP2pB5Y5hX88wdP729s8q1Dv4+g6+vlc6Xr4z/Sn+CmNnFPz2Nh236yT+KE
99+YDesvjzVAdN1fbRMHw+qK8/fxSv/pT08tJH49TXn6C3q3VjPqVLHX7ho5GJhmJsWuujhvb55e3K0J/SMPhooj+/s35gVVQdM
N1H3hjRx0DemPll9M4Jg4NCCYZCPj4dF6L2/5CobKy89p34ioLg66Hvv3RoyvC9z+cfwIselVEw3v38+P78fdTXd6kvb8cNgir/
xMDj80Paq3UVDPbG6vrL278Xxz5cAwAv/14Ow9CPetjhs3efZr9gKJB/+5NTfAFfqy8QjL8Vvx4PALxWv/32BfoP+s/Voen4yNa
o/IdG+S84ULxmrx9FsPj9OSKXfdf5PxT+Fxt0jabvD+fl7f81/Lt3Xt6Yo3GM/tH4L9B7AD64L2/aAXhD9CNsrx9x+RF08O2P/w
UBPgSo >>17
4年が経とうかという書き込みにレス。
XOR 使う方法も同じだけど、大抵は素直にテンポラリ使った方がコード面もスピード面もいいんだよな。
コードが増えても RAM は1バイトたりとも使いたくない場合にのみ有効なワザだな。
ROM は数十KB 載ってるのに RAM は 256 バイトぐらいしかない組み込みとか。 ループ内でレジスタを全部使いきっちゃった場合に使えるのかも それでもメモリに余裕があるならテンポラリ確保する方が良策だな。
いまどき組み込みでも値交換のテンポラリすら確保できないような状況は
なかなかないよな。
しかしすごいね、見てる人は見てるんだな。 専用ブラウザ使ってたらねぇ。
それはさて、メモリに余裕がなくてもレジスタがあるなら要らないノウハウだよ。
つーか、下手なコンパイラだと余計にメモリを喰いそうだ。 10年くらい昔、どっかのサイトでCを使って
「TRUEとFALSEを交互に返す関数」の作り方について解説があった
if文で実現する奴 :初心者プログラマー
not演算で実現する奴:並プログラマー
xor演算で実現する奴:上級プログラマー
当時学生だった俺はえらく感銘を受けたが
現在はxorで実現する奴を開発チームに入れると禍根を残す気がするのだ 10年後になると、「notだろうがxorだろうがandだろうが、たいした差は無いな」
と思うよ >>57
またもやウン年前の書き込みにレス。
アキュムレータの下位4ビットをキャラクタコードに変換してる。
メリットはジャンプ命令を使わずに書けることかな。
Z80 なら、
CP 0AH
CCF
ADC 30H
DAA
とも書けるけど、>>31 の方が汎用性が高いな。 そういう意味じゃないだろ。くだらないトリックではなく、本来の意味に沿ってプログラムを書かないと、
メンテナンス不能につながっていく、ということを>>79はいいたいんだと思う。 >>79
xorで実現する奴:booleanの概念を持たない老害C(≠++)プログラマー 要件通りのコードを書くのが正解。その手のトリックはコンパイラを作る人が必要なテクニック。 >>84
if(hoge == TRUE)…というコード書いて問題になったことがあるんだな。正直に言ってみろ。 #include <stdio.h>
int main(int argc, char* argv[])
{
int x = 10000000;
int y = 1;
x = x ^ y;
y = x ^ y;
x = x ^ y;
printf("x=%d, y=%d\n", x, y);
return 0;
}
Output:
x=1, y=10000000 パズル的なコードで感動する人が多いのね。
個人的に目からウロコだったのはsuckless.orgのMakefile全般。
http://git.suckless.org/st/tree/Makefile?id=3c546ae73924804ddc6d29dc3ab2f12a93287009
GNUのツールは猫も杓子もautoconfで人間が読めないMakefileを吐き出すものだから、
Makefileは人間の書くもんじゃねえとかscons他モダーンなビルドシステムの方がいいとか思ってたんだが、
↑のを見てからむしろ他のビルドシステムが面倒に思えるようになってきた。 #define ZERO 1
GNUでよく見かける。 ワロタ
でも #ifdef で分けるのに使うマクロは 1 なんだよな 無名高階関数があればifやswitchなしで分岐作れるんだって感動した
Object subclass: #True.
! True class methodsFor: 'testing' !
ifTrue: aTrueBlock
ifFalse: aFalseBlock
^ aTrueBlock value.
!!
Object subclass: #False
! False class methodsFor: 'testing' !
ifTrue: aTrueBlock
ifFalse: aFalseBlock
^ aFalseBlock.
!!
| boolean |
boolean := True.
boolean := False.
boolean ifTrue: [ 1 ] ifFalse: [ 2 ]. valueが抜けてた。
Object subclass: #True.
! True class methodsFor: 'testing' !
ifTrue: aTrueBlock
ifFalse: aFalseBlock
^ aTrueBlock value.
!!
Object subclass: #False
! False class methodsFor: 'testing' !
ifTrue: aTrueBlock
ifFalse: aFalseBlock
^ aFalseBlock value.
!!
| boolean |
boolean := True.
boolean := False.
boolean ifTrue: [ 1 ] ifFalse: [ 2 ]. Cでも三項演算子で分岐できるやん
だが無名のブロック作れると喜んで複雑化するのは破滅の入り口
そこであえて踏みとどまって名前つきブロック/関数にすべき >>96
わかってねーなー。
分岐や反復に専用構文が必要なくて、
言語機能が簡素になんのがいいんじゃん。
お陰で分岐だけじゃなく、C#なんかで使われる次世代の構文だって
言語機能の拡張なしで使えるんだぞ。
"以下usingを使ったexample.txtにvalueと書き込むC#の処理と同等の処理。"
'/tmp/example.txt' asFile withWriteStream:
[ :aStream |
aStream nextPutAll: 'value'.
]. 三項演算子はリテラル以外禁止だと前の会社で言われた awkだけど、最近ここで見た回答がすごいと思った。
2つのテーブルデータを合体させるとき、連想配列を使えば、
要素が同じか否か、という条件分岐を使わなくてもいいんだね。
たった1行で、しかもLinuxのjoinコマンドよりも融通が効くところがなおさらイイ。
How to merge two files using AWK?
http://stackoverflow.com/questions/5467690/how-to-merge-two-files-using-awk
$ awk 'FNR==NR{a[$1]=$2 FS $3;next}{ print $0, a[$1]}' file2 file1 >>98
printf( a ? "成功\n" : "失敗\n");
が書けることを地力で発見して感動して使いまくってたら
なんか微妙な顔されたことがある。 普通
printf("%s\n", a ? "成功" : "失敗");
あるいは
printf("%s\n", ["失敗", "成功"][a]);
って書けると良いね >>102二つ目知らなかったけどバイナリを添え字ってのはちょっと抵抗が。。
ところでJavaScriptの関数リテラルみたいなのが他の言語にも実装されたら直感的にかけると思うの! Dan plays Deus Ex 1 - First Time Playing
http://www.twitch.tv/dansgaming c#6.0だと
string a="";
if(hoge !=null && hoge.hage !=null) a=hoge.hage;
↓
var a =hoge?.hage??"": IOCCC(国際難読化 C コードコンテスト)のプログラムはすごい
1987年の作品だけど
main() { printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);}
こういうプログラムがたくさんある(これは unix と出力するプログラム) プログラムコードの柔軟性を持った言語って無いのかな
ifの書式で言うと、
if exp then block elseif block else block end
if (exp) { block } else if (exp) { block } else { block }
が俺の知る言語での主な書式なんだが、
expへの括弧の有無、blockを囲むのがthen endか{}か、elseifかelse ifか、言語毎の方言に毎回躓いてだるい
こう言うのって基本書いてる事は同じだから、コード走らせるときの前処理とかで吸収できるよな?
20年ほど前に比べると、プログラミングについてのノウハウみたいなものがこなれてきて使いやすくはなってきたと思うけど
もう一皮くらい剥けてプログラミングし易くなってくれたらいいんだけどな >>110
その問題は pascal が素敵に解決している
pascal は LL(1)言語 全部英単語で構成されるのと適度に記号が混ざるのとどっちが見やすいんだろう
個人的には後者だけど ■ このスレッドは過去ログ倉庫に格納されています