1 :
デフォルトの名無しさん :
2001/06/06(水) 08:02 結果は同じだけど、どっちがカッコイイか知りたい! そんな思いをこのスレにぶつけましょ まず私からですね if (!stricmp(msg, "hello")) if (stricmp(msg, "hello") == 0) 上と下のどっちがカッコイイ書き方なんですかねぇ?
2 :
デフォルトの名無しさん :2001/06/06(水) 08:08
STLを使う
if (msg.equals("hello"))
============終了============
============再開============ なわけ無いので ============終了============
7 :
sage :2001/06/06(水) 12:35
上げちまった…
> if (!stricmp(msg, "hello")) なんじゃこりゃ? ============終了============
俺も真似して終了したくなったので、 ============終了============
12 :
6 :2001/06/06(水) 13:21
>>7 うーん。作られるコードが違うんだよ。
って、みんな知らないの? まいった。
まあ、最近のコンパイラは最適化しちゃうからなぁ。
A - if (!stricmp(msg, "hello"))
B - if (stricmp(msg, "hello") == 0)
Aの方が Bより「早く動く」コードを作る場合があるのさ。
アセンブラの知識があればわかるよ。
>>12 おまえばかだろう
stricmp関数の処理速度が上がるのなら意味があるけど
その戻り値を処理する部分がちょっと早くなっても
何の意味もないんだよ
14 :
6 :2001/06/06(水) 13:36
>>13 がーん。ほんとにみんな知らないのか!?
ま、10年以上前の話の事だからなぁ。
日本が初めて"C"言語を知った時、その実体を洋書からしか
情報が得られない時代。
その時はC言語がめちゃくちゃ遅かった時代なんだよ。ま、みんな
アセンブラ使ってたからな。
で、最適化なんてほとんど無いから、細かい記述で高速化を
計ったのさ。
しかし、ホントにみんな知らないンだな。
戻り値の判定部分だけでも10倍ぐらい早く出来たのさ。
やれやれだよーん。2chレベル低すぎ。
コンパイラに、よりけり・・・ この前、制御系のコンパイラで、 return 0 ; return (0) ; で結果が違ってぶっとんだ
16 :
デフォルトの名無しさん :2001/06/06(水) 13:47
0との比較と、0以外との比較ってスピード違ったっけ?
まぁ
>>6 さんがこれだけ言うからには違うんだろうなぁ
forループなんかで i++ を ++i って書きますか?
17 :
15 :2001/06/06(水) 13:50
>>16 俺の経験では、
>0との比較と、0以外との比較ってスピード違ったっけ?
の違いのでるコンパイラにあったことない。
そもそも早さを要求する所で、stricmp()なんて始めから使わない・・・
19 :
デフォルトの名無しさん :2001/06/06(水) 13:56
6のいってることは常識かと思ってたが・・・ 他にも unsigned int i; unsigned short j; for(i=0;i<1000;i++){ } for(j=0;j<1000;j++){ } jのループのほうが実行命令が長くなる場合がある
% java -version
java version "1.3.0_02"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.0_02)
Java HotSpot(TM) Client VM (build 1.3.0_02, mixed mode)
/* a.java */
class a
{
void b()
{
for( int i = 0; i <= 100; i++ );
}
void c()
{
for( int i = 100; i >= 0; i-- );
}
}
% javac -O a.java
% javap -c a
Method a()
0 aload_0
1 invokespecial #1 <Method java.lang.Object()>
4 return
Method void b()
0 iconst_0
1 istore_1
2 goto 8
5 iinc 1 1
8 iload_1
9 bipush 100
11 if_icmple 5
14 return
Method void c()
0 bipush 100
2 istore_1
3 goto 9
6 iinc 1 -1
9 iload_1
10 ifge 6
13 return
参考リンク
http://www.asahi-net.or.jp/~dp8t-asm/java/tips/OptCompareZero.html
21 :
6 :2001/06/06(水) 14:02
>>17 >>18 うーん。10年以上前は、動かすハードもめちゃくちゃ遅かった。
あなーた、Z80の2.5メガヘルツ相当とかで組んでみなさいって。
当時のcmpとxorの速度差ってどのくらいあったっけか?
まあ、今の若い衆には「信じられない」話なんだろうね。
22 :
デフォルトの名無しさん :2001/06/06(水) 14:06
if( aaa == 0 ) if( !aaa ) これって今は同じコード吐くの?
23 :
デフォルトの名無しさん :2001/06/06(水) 14:07
24 :
デフォルトの名無しさん :2001/06/06(水) 14:09
6よ、PentiumIII 500MHz程度のCPUで、その比較は一体何nsec違うんだい?
高速化というのはボトルネック個所に対して行うべきであって、 件の個所が何ミリ秒向上しようと、1度しか呼ばれない個所なら意味が無い。 1億回のループの中とかなら話は違うかもしれないけどさ。 みんな書き方によって処理速度が微妙に違うのは承知しているでしょ。 ただ、現在はプロセッサの処理速度が飛躍的に向上したので、 わかりにくいけど微妙に速いという表記より、保守しやすいコードが望まれる。 昔の幻影にとらわれているジジイは逝ってください。 stricmpのように真偽を返す関数でないものは、 明示的にゼロと比較したほうがスキルの低い開発者にも理解しやすいので、 チーム開発を行うときにバグを抑制できる可能性がある。
戻り値をそのまま判断にかけるか、定数0と比較するかの違いでしょ?
最適化しないコンパイラなら吐き出すコードも違うだろうけど
なんつーか、この程度の事でレベル云々言う
>>14 イタイ
大体この程度の最適化で10倍の差がでる環境ってどういう環境だよ(藁
俺もアセンブラやるけどそんな環境見たことねーよ
ついでに言うと処理系依存のハナシはナシな、釘刺しとくぞ
>>14
アホか。 俺が6809でCやってたころは、 文字列比較ごときで遅いライブラリ関数なんぞ呼ばなかったわい。
>>19 逆にiのループのほうが実行命令が長くなる場合もある
CPU(MPU)が8ビット処理か16ビット処理かによる・・・
29 :
:2001/06/06(水) 14:15
今時、無意味なのは当然だけど、 うるさがたのジジィに文句言われない為に 結論キボン
30 :
15 :2001/06/06(水) 14:15
>>うーん。10年以上前は、動かすハードもめちゃくちゃ遅かった。 >>あなーた、Z80の2.5メガヘルツ相当とかで組んでみなさいって。 ってゆーか、制御系なんで未だにそんなもんです・・・
>>25 組み込み分野に来てよ。
いまだに手動最適化に命削ってるよ。
高速化よりはコンパクト化に命削ってるけど・・・
1バイト削るのも大変で泣ける。
アルゴリズムの見直しで大抵圧縮できるけどね。
俺様の開発したhogehoge-cは!の処理が==よりも1兆倍遅いんで、 ==の方が超高速だぞ。 ギコハハハハハ
33 :
デフォルトの名無しさん :2001/06/06(水) 14:17
>>33 いや結論っていうか何ていうか
1はどっちが「カッコイイ?」って聞いてるんスけど…
35 :
デフォルトの名無しさん :2001/06/06(水) 14:26
PCでやってる限りは、どちらでもいい。 アナクロな6は逝ってよし。 制御系を前提に話してたとしても、注釈もつけずに そんな一般的でないターゲットを前提に話してる時点で 逝ってよし。
36 :
6 :2001/06/06(水) 14:30
いやー、一部の短絡的なみなさん。 話が「違いがあるのか?」って流れだったから、 「ある」って事で書いただけで、 違いがある->早くするために昔はやったんだ。 と、俺は言っただけ。べーつに、高性能な環境でわざわざヤレ なんて言ってないよ。 要求されなければ、メンテナンス優先のソースにするのは当たり前です。 私はプロですから。
37 :
デフォルトの名無しさん :2001/06/06(水) 14:30
あんまり叩かないでくれよ~ 重箱の隅つつく人の書き込みないとつまらないので
38 :
デフォルトの名無しさん :2001/06/06(水) 14:32
>>36 お前、Cの前に日本語勉強しろよ
どっちがカッコイイ?
って話だったのに、勝手に解釈捻じ曲げんなよ
39 :
デフォルトの名無しさん :2001/06/06(水) 14:33
どうみても6の勝ちです
26に同意。 インプリメンテーション依存の話は、処理系を明らかにして 話さないと意味がないし、1の意図と異なる。 本題については、定数は比較演算子の左に書く癖を付けて おいた方が、単純ミスを減らす効用があるという合理的な理 由があるので、Aの方がカコイイ(藁
41 :
ひげねこ :2001/06/06(水) 14:34
25に同意 大量に比較する場合、文字列クラスで囲って中では ハッシュ値で比較する方が速いと思うのですが…。 6のような人用に「ロートルプログラマー板」キボーン
if(0==stricmp(msg,"hello"))
43 :
26 :2001/06/06(水) 14:35
と言うか何時の間にか「制御系だったら」とか言ってるけど 制御系で最適化語るならstricmp()は無いだろうが… 取り敢えず6は逝っていいです
44 :
デフォルトの名無しさん :2001/06/06(水) 14:36
6は1の「結果が同じ」という文を深い意味で捉えているだけ
>>36 >>要求されなければ、メンテナンス優先のソースにするのは当たり前です。
>>私はプロですから。
要求されなくても、メンテナンス優先にのソースにするのがプロです。
unsigned char aaa( void ) { return 0 ; } unsigned char bbb( void ) { return 0 ; } unsigned char ccc( void ) { if ( ! aaa() ){ return 1 ; } if ( ! bbb() ){ return 2 ; } return 0 ; }
_aaa: ld A,0x0 ret _bbb: ld A,0x0 ret _ccc: ld HL,(__FP_STACK) push HL cal _aaa cmp A,0x0 j f,L57 ld A,0x1 j L50007 L57: cal _bbb cmp A,0x0 j f,L58 ld A,0x2 j L50007 L58: ld A,0x0 L50007: pop HL ld (__FP_STACK),HL ret
48 :
6 :2001/06/06(水) 14:38
へー。私はプロですが。 マニアックな皆さんにお伺いしますヨ。 if (!stricmp(msg, "hello")) if (stricmp(msg, "hello") == 0) C言語の歴史背景から、どっちが「かっこいい」書き方ですか? さあ、マニアの観点からだと、どっちなの? レベルの低い奴は何を言っても、レベルの低さは変わらないということだ。
49 :
:2001/06/06(水) 14:39
最適化スレッド過去になかったけか? 盛り上がらないんだよね 「こう書くのが定石」 みたいな本ないかな~
50 :
6 :2001/06/06(水) 14:40
>>45 うーむ。流れを読んでください。
制御系の実装の話がでてるでしょ?
要求とはそういう要求の事で、「メンテナンス優先という要求がない」
ということじゃありません。
コピペミスった。。。 /*******************************************************/ unsigned char aaa( void ) { return 0 ; } unsigned char bbb( void ) { return 0 ; } unsigned char ccc( void ) { if ( ! aaa() ){ return 1 ; } if ( bbb() == 0 ){ return 2 ; } return 0 ; } /*******************************************************/ _aaa: ld A,0x0 ret _bbb: ld A,0x0 ret _ccc: ld HL,(__FP_STACK) push HL cal _aaa cmp A,0x0 j f,L57 ld A,0x1 j L50007 L57: cal _bbb cmp A,0x0 j f,L58 ld A,0x2 j L50007 L58: ld A,0x0 L50007: pop HL ld (__FP_STACK),HL ret とゆーことで、東芝の8ビットMPUでは、結果は同じ。。。6はバカ。
6とじゃないと一緒に仕事する気がおきない
53 :
:2001/06/06(水) 14:41
>>46 そんな程度のソースじゃ 最適化すると
おかしなソースはかないか?
実行されないコードとか生成しないよね?
54 :
デフォルトの名無しさん :2001/06/06(水) 14:45
>>48 っていうか6よ、
>C言語の歴史背景から、どっちが「かっこいい」書き方ですか?
>さあ、マニアの観点からだと、どっちなの?
…スレの趣旨変えんなよ、見苦しいから。
新スレ立ててそのまんま沈んでくれ…
; Line 10 push ebp mov ebp, esp ; Line 11 call _aaa and eax, 255 ; 000000ffH test eax, eax jne SHORT $L472 ; Line 12 mov al, 1 jmp SHORT $L471 $L472: ; Line 14 call _bbb and eax, 255 ; 000000ffH test eax, eax jne SHORT $L473 ; Line 15 mov al, 2 jmp SHORT $L471 $L473: ; Line 17 xor al, al $L471:
「詳細C言語入門 6著」 \2,800
57 :
6 :2001/06/06(水) 14:53
ま、俺的に 2chはバカが多いって事がわかったよ。>> バカな皆さんへ
000006 FE0 @ 39 jsr _aaa 000007_ D80000 @ 40 cbne 0,D0,L00007 00000A_ A010 41 mov 1,D0 00000C_ EE0 @ 42 jmp L00010 43 L00007 00000E FE0 @ 44 jsr _bbb 00000F_ D80000 @ 45 cbne 0,D0,L00011 000012_ A020 46 mov 2,D0 000014_ EE0 @ 47 jmp L00010
>>41 ロートルプログラマ板 ローカルルール(x86用)
・mov ax, 0よりxor ax, ax
・条件によって変数に違う値を入れる場合、まず代入して条件によって上書き
・jpzの前にcmp ax, 0がくるようなコードはCのレベルで阻止
61 :
26 :2001/06/06(水) 15:07
なんでこうなるかね…
>>48 =57
なんと言えば良いのやら、端的に言うと幼稚だ。
自分の
>>12 とか
>>14 の発言読み返してみ。
1の趣旨に反して最適化とか昔話とかレベルとか言い出したの誰なんだろうね。
で、俺の
>>26 については言及せずに逃げる、と…
スマンが「幼稚」以外の形容詞が浮かばんよ。
「へー。私はプロですが。」が聞いて呆れる。
俺自身if(!hoge())…みたいな書き方はしても、それでレベル云々は言わんなぁ
だって恥ずかし過ぎるし、マジで。
stricmp()なんか使わん
つーか6はミエミエの煽り厨房なんだから放置しろよ。 どうせ6は職場でも放置され慣れてるんだからさ。
結果が違う==作られるコードが違う 真にならない人は低レベル。
65 :
6 :2001/06/06(水) 15:13
ま、俺的に 2chはバカが多いって事がわかったよ。>> バカな皆さんへ
66 :
42 :2001/06/06(水) 15:13
だから俺のが一番だってば。
悲惨な6だな・・・
1は二つの式の真偽が同じって言ってるようにしか読めないんだが、 出力コードの差とか言い出したバカは誰だ? 先にも出てるけどコードの差なら処理系依存じゃねぇの?>>どっかのバカ
71 :
66 :2001/06/06(水) 15:22
(・∀・)ホウチプレイ!!!
っていうかこのスレ終了だろ? 代表して1が氏んでおいてくれ ======== 終了 ========
俺は6の主張に共感する。 俺は6のような人間になりたい。 俺は6と同じ時代を生きていることを誇りに思う。 俺は6のことをもっと知りたい。
>>74 激しく同意。
俺も6と仲良くなりたい。
俺も6と結婚したい。
俺も6のケツの穴にティムポ突っ込みたい。
俺も6のティムポをしゃぶりたい。
6が死んだ! この突然もたらされた吉報はあっという間に日本中をいや、世界中を駆け巡った。 「今日と言う日は人類がこの世に誕生してから、最もめでたい日です。さあ、皆で祝いま しょう」 そして天皇陛下のそんな一声によって始まった盛大なパーティー。 その歓喜は瞬く間に地球上を覆い尽くし、今や絶頂の極みにあった。 「本当に死んでくれてホッとしてますわ。あの子を産んでからこの三十年、楽しいと思っ た事など一度たりとも無かったんですもの」 そう喜びの涙を零しながら語ってくれたのは6の母である夕子さん(54)。 彼女は6を生んだ責任で一時期、牢獄に囚われていた悲しき女性だ。 だが、もう6はいない。 彼女の喜びは世界中に伝播し、この地球上に住む有りとあらゆる生き物に感動を与えたと 言っても過言ではないだろう。 「もう、最高よ!こんな楽しい事があるのなら頑張って生き続けようと思うわ」 そう笑顔を浮かべながら語るのはワシントン州精神心理学付属病院に通院しているナンシーさん(32)。 彼女は幾度と無く自殺未遂を繰り返していたがこの一件で生きる希望を見出したという。 「良くは分からないけど、とても嬉しいです。何かこう、力が湧いて来ました」 ベトナム難民の一人であるベス君(10)もはにかんだ表情を浮かべながら我々にそう語 ってくれた。 そして夜がふけても行なわれる盛大なパーティー。 それは地球上の有りとあらゆる場所で行なわれ、我々人類に、いや生けとし生けるものに 明日を生き抜く力を与える。 我々はその光景を人類始まって以来の奇跡だと確信し、ワイングラスで乾杯する。 この喜びが未来永劫続きますように。 ちっぽけな存在である我々はそう願う事しか出来ないのだから。
>>6 = 74 = 75
いいかげん自分の馬鹿さ加減に気付けよ
大6皇帝陛下に対しての無礼は許しませんよ!!
81 :
・・・ :2001/06/06(水) 15:34
6の云いたい事は解るけど、関数の戻り値での場合 殆どの処理系で同じコードを吐く。 ↓のケースの場合は、違うけどね。 for(i=5;i!=0;i--) for(i=5;i>0;i--)
82 :
デフォルトの名無しさん :2001/06/06(水) 15:34
みんな年寄りを大事にしようよ。 新しい技術についていけない人もいるって事を忘れるなよ。 自分が唯一威張れる昔の話をしたいのだよ。 みんなもいつの日か同じ立場になるのだから、 もっとやさしくしようよ!
1 + 2 + ... + 36 = 666
あぁ、これが一人芝居というものなのですね。 6さん、感動しました。 感動のあまり「あうー」って言っちゃいました。 こんなに幸せな気分になったのは初めてです。
85 :
ぐひひ :2001/06/06(水) 15:39
>>81 for( i=5; i ; i-- ){ ... }
この書き方、あたらしいスタンダードにならないかな!?
見た目クールだし実行コードも速いし、どうだい?
波に乗り遅れた・・・
87 :
デフォルトの名無しさん :2001/06/06(水) 15:50
6月6日age
おお。今日は6の日なんですね。
6月6日に6がイカレるとは… このスレは呪われている! って事でオーメソsage
あーあ。乗り遅れ。
良スレになりそうだったのにな。
>>6 俺もオールドプログラマに分類される部類だから、
なおのこと見苦しい。「昔からやっている」ことを自
慢したいようにしか見えん。
>しかし、ホントにみんな知らないンだな。
「皆が知らない」んじゃなくて、アンタが文脈読めてない
だけだ。
>戻り値の判定部分だけでも10倍ぐらい早く出来たのさ。
どういう環境だよ、それ。
91 :
66 :2001/06/06(水) 16:12
目指せ666!
92 :
6 :2001/06/06(水) 16:16
既にこのスレは終了しました。
>92 名前:6 投稿日:2001/06/06(水) 16:16 6ばっかり!!
>>85 うんそれサイコー!今日から使うよ!
・・・自作自演はむなしいなぁ
95 :
デフォルトの名無しさん :2001/06/06(水) 16:21
きょうの主役は、6番さんだよー がんばってねー
コード==フリップフロップのスレッショルドレベル 真にならない人は低レベル。
>>64 >結果が違う==作られるコードが違う
>真にならない人は低レベル。
文脈によるだろ。
流れを読まない+レベルを持ち出す = 64=6
98 :
デフォルトの名無しさん :2001/06/06(水) 16:26
6は今日のヒーローでしょ
>>96 ショットキバリアなので、直前の状態によって結果が変わります。
6
6たん、ハァハァ
a
b
c
d
106げっと!!
だからstrcmpiスレは矢なんだよな。 いきなり変なヤシが変なツコッミいれて C厨のクダラネー話になる。
108 :
デフォルトの名無しさん :2001/06/06(水) 16:34
6+5の文字列を逆ポートランド法で計算させる関数はC言語のライブラリー にある。VBにはあるんだけど。 自分で作らなければだめ? 教えて。
ポートランド
VBにはあるんだけど
ポートランドって何?
ボーランド
115 :
1 :2001/06/06(水) 17:25
if (0 == stricmp(msg, "hello")) これがク~ルな書き方なんすねぇ~ 「結果は同じ」これは同じ動作って意味ですよ 吐き出されるコ~ドがちょこっと違うのは当然じゃございません? 書き方変えまくって吐き出されるコ~ドを 全くいっしょにする事なんて出来るの?
116ゲット!!
118 :
ぐひひ :2001/06/06(水) 17:34
>>115 最近のコンパイラは賢いから最適化かかったらみんな同じ
ってことをいいたいんじゃないの?
小手先の技術でステップ縮めるよりもアルゴリズムの改良と
手順の効率化で高速化を図ろうよ
ってことをいいたいんでしょ。
119 :
shige :2001/06/06(水) 17:56
真のUNIXハッカーはrubyを使うって本当ですか?
言語選ばず。
完全に乗り遅れだけども、せっかく試してみたので。 hoge.c--------------------------------------------------- #include <string.h> extern void hoge(); char *msg; int main() { if (!stricmp(msg, "hello")) hoge(); if (stricmp(msg, "hello") == 0) hoge(); return 0; } hoge.s--------------------------------------------------- ... _main: pea ?C0(OPC) move.l _msg,-(sp) jbsr _stricmp addq.w #8,sp tst.l d0 jbne ?5 jbsr _hoge ?5: pea ?C0(OPC) move.l _msg,-(sp) jbsr _stricmp addq.w #8,sp tst.l d0 jbne ?6 jbsr _hoge ?6: moveq.l #0,d0 rts ...
122 :
6 :2001/06/06(水) 20:07
ま、俺的に 2chはバカが多いって事がわかったよ。>> バカな皆さんへ
666666
125 :
デフォルトの名無しさん :2001/06/06(水) 20:31
マジレス (1) if (!stricmp(msg, "hello")) (2) if (stricmp(msg, "hello") == 0) windozeなら(2) !がプロポーショナルフォントで見つけにくいから。 emacsでもやっぱり(2)かな、strcmpは嫌い。 下みたいな反対の条件で、(ii)みたいに書く人いる? (i) if (stricmp(msg, "hello")) (ii) if (stricmp(msg, "hello") != 0)
126 :
1 :2001/06/06(水) 20:34
>>121 結局は同じなのねw
10倍の差が付くと言ったバカは誰よw
127 :
デフォルトの名無しさん :2001/06/06(水) 20:40
6の頭の中の仮想マシンのことだろ(藁
藁多
誰も突っ込まないので、もしかしておれが間違ってるの かもしれんが、stricmp ではなく strcmp ではないのか? 手元の処理系には stricmp ってのが無いんだけど…
#define streql(s1,s2) !strcmp(s1,s2) ←ここはお好きに として if( streql( s, "hogehoge" ) )… としたほうが、よっぽどスッキリかと。
131 :
デフォルトの名無しさん :2001/06/06(水) 21:15
>>129 stricmp 文字列中の文字を小文字として比較します
>>129 ホントだ、コピペしてたから気が付かなかったヨ
'i'って小さいから見落としてた(藁
>>125 ソースコードをプロポーショナルフォントで表示する方が悪い。
>>131 今調べたらありました。
うわ、一人羞恥プレーイ>俺
まぁ、strcmpでもstricmpでも議論には影響はないな。 # 偉そうなことを言っているが、俺も1つ物知りになった。
136 :
デフォルトの名無しさん :2001/06/06(水) 21:28
>>64 x:結果出力 y:コード出力
結果違う == コード違う
→(x(a) != x(b)) == (y(a) != y(b))
→!(x(a) != x(b)) == !(y(a) != y(b))
→(x(a) == x(b)) == (y(a) == y(b))
→結果同じ == コード同じ
今更、age足
137 :
6 :2001/06/06(水) 21:29
しかし、なんというか。
俺達がどっちかっていうと試行錯誤して会得した、ちょいとしたテクってのは
いまの若衆にはあまり伝わってないんだな。
CodeCompleteな本とか、少ないもんなぁ。
例えば、
if (0 == stricmp(msg, "hello"))
っての。これ、stricmp()じゃ無い関数で返値を変数と比較したい時も、
こう書いちゃう?
>>115 まあ、 if ( isRet == foo(msg, "hello")) てなぐあいにさ。
俺の手下がこんなスタイルを、クールだ、なんて言ったら、そく引っぱたくね。
これをクールだなんて…、<* バカ丸出し *>、だよ。
138 :
デフォルトの名無しさん :2001/06/06(水) 21:45
139 :
デフォルトの名無しさん :2001/06/06(水) 21:47
まあ、そういう時代もあったな。 しかし今はまったく通用しないぞ。 6は20年前に登場すべきだったな。
140 :
デフォルトの名無しさん :2001/06/06(水) 21:48
if( foo(msg,"hello") == isRet ) とかいう事?
>>137 それ、どっかおかしいのか?
おれには今ひとつ理解できん
マジ解説頼むわ
>俺達がどっちかっていうと試行錯誤して会得した、ちょいとしたテクってのは >いまの若衆にはあまり伝わってないんだな。 だったら今ここで伝えてくれよ、ご老体。
143 :
デフォルトの名無しさん :2001/06/06(水) 21:52
>>141 変数が右辺にあると == と = を間違えた時に発見し難いって事じゃねぇの?
if( strcmp() == 0 ) の方がいいだろ
定数と変数を比較するなら
if( 0 == hoge ) とした方がいいだろうけど
144 :
143 :2001/06/06(水) 21:53
あ、へんな事書いてる忘れて(藁 だんだん気が変になってきたYO
6月6日に現れた、蒼き流星6。漏れは忘れない。。。
146 :
sage :2001/06/06(水) 22:02
うだうだ言う前に最適化技法を勉強しとこう。 !xx も == 0 も生成されるコードは同じだ。 バイト・位置サイクル単位の小手先の最適化前に 構造的な無駄を省け。 if (0 == xx) だろうが if (xx == 0) だろうがどっちでも統一してればよし。 複数言語経験者が集まる開発なら = と == の誤記入を避ける 意味で、よし。 同じ生成コードが同じでも if, while, for に続く括弧をスペース空けずに記入するのはやめとけ。 前後括弧内のスペースは大目に見てやる。 あと fooBar みたいなハンガリアンでもなんでもないいかれポンチな名前つけるのも やめとけ。
壁 | _・。) 俺なら int iRet; // 返血見るぞゴルァ iRet = foo( msx , "hello" ); if( iRet ) // ゼロじゃねーぞゴルァ { } って書くよ。 壁 |。)ミ
148 :
デフォルトの名無しさん :2001/06/06(水) 22:07
fooBar ってだめか? class名 が FooBar で インスタンスが fooBar とかやってるよ getHoge とか、java ってこのスタイルじゃないっけ?
149 :
デフォルトの名無しさん :2001/06/06(水) 22:10
しかし、、、 このスレ、よくもつな。 6って類まれな厨房的才能をもってるんじゃねーか?
sage忘れたスマソ
151 :
デフォルトの名無しさん :2001/06/06(水) 22:10
最適化とか考えてコード組むときりがないような気がする。 C++の継承って使うと遅くなるんでしょ? じゃ駄目じゃんみたいな。
152 :
デフォルトの名無しさん :2001/06/06(水) 22:12
>C++の継承って使うと遅くなるんでしょ? 迷信です。VFT経由で1アクション増えるだけでしょ
>>146 if ( foo() == 0) { }
こう書けということか?
ifの後にスペース入れるの気持ち悪いんだが。
もしかして、
sizeof(xxx);
みたいにsizeof()のときはつめてる?
統一感無くて美しくないぞ、それ。
154 :
66 :2001/06/06(水) 22:17
>>137 一応それの元ネタは漏れっぽいので。
変数なら当然そんな風にはかかん。
定数限定。
>定数と変数を比較するなら >if( 0 == hoge ) とした方がいいだろうけど だからそんな小細工する前に コンパイラの警告レベル上げろよと もうこの板、この1年間で何度も何度も何度も以下略
156 :
sage :2001/06/06(水) 22:23
>>148 javaはjavaのスタイルに従うのがよいと思う
C/C++ではやめちくり
>>151 実行速度をいちいち気にしないというのはある意味正しい
実際に使ってみて速度が問題になったときに
はじめて、仕様の簡略化->構造の最適化->
末端部分のコードの最適化を行うべきだ。
組み込み系の人だと、命令コードのバイト数まで
最適化しなければならないこともあるけどね。
>>153 K&R, whitesmithあたりを見習おうということ
構造制御系のキーワード(for, while, return, if)は
スペースを空ける。
sizeofと関数呼び出しの括弧は演算子なのでくっつけておく
ちなみに
sizeof/returnは括弧いらない
昔は returnに括弧をつけないとバグって正しい値が
返らないことがあった
だから、括弧つきでreturnを書くのは、昔の名残なので、許す
()にもいろいろ種類があるってこと。
>>137 何話ずらそうとしてる?(藁
>>1 にある評価式の書き方で出力コードが変わるとか10倍の速度差が出るとかって話はどうした?
>>26 が書いてる事読んでから答えてくれよ、他人をバカと言える程の自称プロなんだろ?(藁
158 :
6 :2001/06/06(水) 22:30
>>6 CP/M用のコンパイラでも !xと==0の最適化くらいはしてたぞ
PDP-11なんかのころのコンパイラか?
ならしらん。
>>忘れた
short/longで速度が違うかもしれんが
Cでは符号拡張が頻繁に行われるため
コスト的にはあまり変わらんことが多いぞ。
float/doubleも然り。
でも、データ件数が数万件とかでかいときに
わざわざ大きなメモリを足らないようにちびちびやるのはよくある。
昔しか知らないバカよりはいい
161 :
デフォルトの名無しさん :2001/06/06(水) 22:38
つーか組込み系が何時までたっても、進歩しないのは 実は組込み屋さんが進歩しようとしないからなんじゃないの? これは邪推すぎ?
>>160 同意
多分今でもz/cフラグの動きを頭の中で追っかけてるんだよ。
出てくるコードは同じだけどな。
でもまあ、6のように、微妙に、違う場合があるってのは、賛成する。
CPUの種類も増えてきてるし、cisc/mipsなんかは、ずいぶん状況異なるしな。
でも、微妙すぎて、そんな重箱の隅をつついいてるよりも
もっと他にやることいっぱいあるだろ、と思う。
163 :
デフォルトの名無しさん :2001/06/06(水) 22:42
祝!
イタイ
>>6 復活age
6が言ってる事は「処・理・系・依・存」(はぁと
結局
>>26 に反論出来てないやん
164 :
デフォルトの名無しさん :2001/06/06(水) 22:43
?を使うのはどう思われますか? bool a = x? true : false; bool a; if (x != 0) a = true; else a = false; 前者は馬鹿には理解できんらしいので、 うちのプロジェクトでは禁止されています。
競争が激しい中で、製品のコストを下げるには 少ないメモリ、しょぼいCPUでがんばるのも仕方ない。 たとえば、いまある電子ジャーやテレビのリモコンのCPUが WinCEで使われてるみたいなリッチなのに置き換えられて 便利になるけど、 高いとか、重いとか、すぐ電池切れるとかじゃ悲しすぎるだろ。 ファーム系にはファーム系の事情ってもんがあって、 それはそれで、立派な技術を持ってるところも多いよ。
166 :
デフォルトの名無しさん :2001/06/06(水) 22:46
>前者は馬鹿には理解できんらしいので、 >うちのプロジェクトでは禁止されています。 自信が湧いてきました。ありがとう
馬鹿に理解できないコードを禁止するのも、良くあった。 メモリ・CPUに贅沢できるPC/WSのアプリ系コーディングでは、 馬鹿に理解できるコードというよりは 一目で理解できるようなすっきりした、 メンテしやすいコードを書くのがあたりまえになってる。 馬鹿馬鹿しいけど、副作用のある式を三項演算子や論理演算子なんかと 組み合わせて使ったときの挙動など、プロジェクトの全員が、 勘違いしてたり、誤った解釈をしてたりすると悲しいことが起こるので、 そういうのは控えよう。 でも、禁止はやりすぎかも。
168 :
66 :2001/06/06(水) 22:52
>>166 うちの兄の会社の新人研修(COBOL)では、否定演算はわかりにくいので
禁止、だったぞ?無駄に不等号とか使ってがんばってた。
俺もアセンブラでゲームを作っていた世代だから、
6が言いたい事はわかる。
しかし6の知識はCISC全盛期のまま止まっている。
>>6 あるCPU+コンパイラで速かったから、
別のCPU+コンパイラで速いとは限らない。
>>12 でAとBの速度が逆転する処理系は実在する。
cmpとbranchを1クロックで処理できるRISCチップなんか
いまどき珍しくない。
xor後にbranchするほうが2クロックかかってかえって遅い。
6の経験ってそんな程度。
出力されたコードを確かめもせず、
昔はこれで速かったから、今でもこれで速いんだと思い込み、
遅いコードを作りつづける……。
170 :
90 :2001/06/06(水) 23:12
わ、まだ居たんだ。わーい、俺にも弄らせて。
>>21 =6
>あなーた、Z80の2.5メガヘルツ相当とかで組んでみなさいって。
>>17 を受けてこれかい?
10倍違うコンパイラを具体的に教えてくれ。頼む。
>当時のcmpとxorの速度差ってどのくらいあったっけか?
手元に資料がないので断言できんけど、10倍差は絶対ない。
揚げ足もついでに取っとくとZ80でのcompareはcpじゃねえの?
ロートルさんようっ(藁
ってか
>>12 の
>って、みんな知らないの? まいった。
これ恥ずかし過ぎ…
どう見ても一人上手だよ…
並列演算できるメインフレーム系のFORTRANの最適化とか strength-reduceとか知らないまま PC/ファーム系でやってたんだろうなぁ。 char x=0; の代わりに インラインアセンブラとかでxor aとか書いてるのかも
>>169 Λ_Λ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( ´∀`∩ミ< 単に馴染んだ手法から脱却できないルー大柴ってだけですよ。
( つ \__________
| | |
(__)_)
一応元ネタ
piza.2ch.net/test/read.cgi?bbs=tech&key=966655286&st=620&to=620&nofirst=true
174 :
ぐひひ :2001/06/06(水) 23:31
>>170 たぶん、6 はループの展開とかいまだにやってるんじゃないかな。
確かに遅くて古いZ80とか68kとかのCPUでなら効果覿面だけど。
(さすがに10倍は無理でも2,3倍の速度upは見込めた)
xorとcpとの速度比較の話とかも持ち出してきたけど、
それって処理系依存だしね。(悪いことだとは言わないけど)
どっちにしろ、組み込み系だろうとなんだろうと、"開発環境"は
昔に比べて進歩してるんだから、最初っから小手先の技術を
盛り込まなくったって最後の段階でちょちょいと置換すれば
いいだけだし。
175 :
デフォルトの名無しさん :2001/06/06(水) 23:33
私はルー大柴が大好きだ。 浅ヤンは毎週にて大爆笑したものだ。 どうしてどの局もゴールデンに出さないのか? そう疑問に思いつつ、日本TV、日本のお笑いの未来を憂慮する毎日である。
176 :
90 :2001/06/06(水) 23:39
>>174 >たぶん、6 はループの展開とかいまだにやってるんじゃないかな。
しかも最適化バリバリかかるPCのCコンパイラで!
…とか彼の文章読んでいるとマジで思う。
速度重視という指定があったら大喜びで「知らないの!」とか
周囲にわめきながらやってそう。
>xorとcpとの速度比較の話とかも持ち出してきたけど、
>それって処理系依存だしね。(悪いことだとは言わないけど)
全く。
今の時勢では一般論に敷衍するのは全く無理な話。
177 :
うにゅ :2001/06/06(水) 23:40
バカの書き込み除去フィルターを作ってください~ なかなか面白いスレのにな~ 批判単品がなくなれば、2chはいいコミュニケーションサイトになると おもうんですんがね >構造制御系のキーワード(for, while, return, if)は >スペースを空ける。 どのように書くのでしょうか? 「こうした方が読みやすい」というのには 素直に従って書きたいものですね PERLだと、けっこう どっちがかっこいい?ってのが発生しそうですが、 Cにはあまりないですね
>>177 146にあるとおりだよ。
括弧とスペースのことを言ってるなら
if (a != 2)
と
if ( a != 2 )
はどっちでもいい
でも
if(a != 2)
と
if( a != 2 )
はよろしくないという意味。
式や、演算子に関していうと
結合度の強い単項演算子、関数呼び出し、[]演算子、.演算子、->演算子はくっつけって書く
その他の二項・三項演算子、はスペースを入れて書く
演算順序に注意しなければいけないときは、無駄のようでも括弧でくくる
かな。
古いけど、K&Rあたりの書式に関する説明や、knuth先生の本とか読んでみよう。
別にK&R至上主義でもないし、
GNUスタイルみたいなポリシーも、統一されてればいいと思う。
で、実際の職場なんかだと、
K&R/whitesmithあたりのコードの書き方が、
みんな知っているし、見づらくもない書き方だということ。
既に本物の6は居ないと思われ
無理でしょう。
x86のコードしか知らんけど、 関数の戻り値がAXに保存されるとして、 問題の部分を素直にコード化すると、上の式は次のようになり、 test ax,ax jnz _01 下の式は、次のようになるように見えますが、 cmp ax,00000h je _01 (速さは同じだが、1バイト短い(AX以外だと2バイト)) 実際は、次のようになる可能性があるからでは? cmp ax,word ptr[_02] je _01 でも、本当の結果は最適化次第ですけどね。(^^;
(古い言い方だけど、)最適化コンパイラはコードを一度、中間コードになおすんだ。 たとえばサイズ優先最適化オプションがついてたとするけど、 そのとき、if(!x) a; b; と if (x == 0) a; b; は別の中間コードになってると思う。 (条件分岐 (negate x) label_b) (a) (jump c) label_b: (b) label_c: (条件分岐 (equal x 0) label_b) (a) (jump c) label_b: (b) label_c: 典型的なパターンを最適化するフェーズがきたときに、 いくつかある最適化用のテンプレートと、中間コードを比較して、 「ああ、ここは最適化できるよ」 って、コンパイラが考えるわけ。 (条件分岐 (equal x 0) label b)より(条件分岐 (negate x) label_b) の方がバイト数の少ないアーキテクチャなら、 上の式は(条件分岐 (negate x) label_b)に置き換えられるし その逆なら、(条件分岐 (equal x 0) label b)に置き換えられる (本とはもっと、複雑な条件が絡んでるけどね) で、本物のアセンブラ・もしくは機械語のコードを出力するフェーズになってはじめて cmpとかjnzとかに置き換えられる。 相対ジャンプのほうが絶対ジャンプより速くてバイト数の少ないアーキテクチャなら、 とび先までの距離を調べて、相対ジャンプに置き換えたり、とかもする。 これが絶対じゃないけど、 大体、アセンブラレベルに落とす前に最適化フェーズが複数あるので、 最適化をまったく意識してないコンパイラでもない限りは、 やっぱり、最適化されるよ。
あ、negateは符号反転だ。 すげーうそくせーよ でも、なんとなく、わかってくれ
185 :
6 :2001/06/07(木) 01:31
みんなすごいねぇ。よくまあ、この程度の話題にそこまでダラダラ
と書けるもんだ。
俺は「これで書くべし」なんて一言も言ってないンだけどねぇ。
しかし、もう一度言うけどさぁ、俺はあくまで昔話をしただけだよ。
ANSI規格化以前の話だし、ホントに遠い昔話だよ。
えーと、
>>26 って、なんだっけ?
ああ、これにも書いてあるじゃん。
「最適化しないコンパイラなら吐き出すコードも違うだろうけど 」
って。
ホントにたのみますよ、しかし2chの中でも特に馬鹿な人っているんだね。
186 :
>>6 :2001/06/07(木) 01:35
10倍差が出る環境おしえてよ
>>185 その後の一文を引用しとくよ(藁
>なんつーか、この程度の事でレベル云々言う
>>14 イタイ
#14=6
で、やっぱり「処理系」と「10倍」については反論できてないねぇ
逃げてるだけじゃん
そろそろ負けを認めれば?
>>185 =6
恥の上塗りしてどうする?
スレ全部読んだけど、やっぱりアンタの言ってる事って整合性ないよ?
>>6 で見当違いの突っ込み入れた挙句に、
>>12 で「って、みんな知らないの? まいった。 」
ってアンタ…
マジで病院逝って下さい
>>185 今更26の事を言ってる(その後何度か書き込んでる)のもおかしいので、
ただ、板を汚して楽しみたいだけの、偽者じゃないですか?
>>191 なに!?そのスレの80っておれだよ・・・
6最高。 是非一緒の職場で働きたいです。 貴方のような優秀な方が、日本に存在していたと言うだけで僕の心は 澄み渡る初夏の暑い日差しのようよ澄み切っています。 今まで巧く歩けなかった平均台も、これからは軽々わたって行けそうです。 本気で感謝しています。 有り難う6。 本気で貴方の事を愛してしまいそうです。 thank you.thank you.thank you.
194 :
6 :2001/06/07(木) 03:28
>>189 >>6 で見当違いの突っ込み入れた挙句に、
日本語が不便な人だね。こういうのは「ボケ」って言うんだよ。
195 :
6 :2001/06/07(木) 03:29
>>193 そう思うなら、俺を誉め称えるスレを立ててくれ。
>>177 > うにゅ
んー、あの人じゃないよね…。
198 :
6 :2001/06/07(木) 03:44
>>187 「処理系」でウダウダ言ってる奴は、C言語がどんな言語なのか
勉強しなおしたほうがよい。
バカバカしいのは相手にしていないので、相手にされなかった
奴は、バカだと思われたと考えるように。
>>1 話を元に戻して、
if (!stricmp(msg, "hello"))
if (stricmp(msg, "hello") == 0)
出来るだけ、意味の無い定数は使いたくないので上。
元に戻ってねぇじゃん。(笑) 理由じゃなくて、どっちがカッコイイか…。 でも、結果は同じく上。 0は良いけど、"=="が、何かダサい。
201 :
66 :2001/06/07(木) 04:06
だから if(0==stricmp(msg,"hello")) が一番カッコイイんだってば。
#define strieq(l, r) (!stricmp(l, r)) または typedef const char *cs_t; int strieq(cs_t l, cs_t r) {return !stricmp(l, r); } で if (strieq(msg, "hello")) は?
>>199 -200
同意。
>>201 定数を==の左に持ってくるのって
if(lvalue = 0)って間違いをなくすためにやるのだろうけど、
stricmp(msg,"hello")ってlvalue(左辺値)じゃないから
この場合は必要ないと思うよ。
そもそもif(lvalue = 0)ってwarningでるだろうから
どの場合でも必要ない気もする。
>>202 必要以上にマクロ使うのは好きじゃないなぁ。
!stricmp(foo,bar)がそんなに見にくいわけでもないしね。
204 :
デフォルトの名無しさん :2001/06/07(木) 04:42
どちらもカッコイイとは思わない。 私なら、わかりやすさから if (stricmp(msg, "hello") == 0) です。
真偽を返す関数でないので!をつかうのには抵抗が。 つーわけで if (stricmp(msg, "hello") == 0) に一票。
if( tolower( string(msg) ) == "hello" )
ハァ?
>>205 そんじゃ、これでどう?(笑)
if (~stricmp(msg, "hello"))
bool(ean)型以外で条件文がかけるCって本当にいろんな書き方があるんだな。
==を使わずに、真偽を否定する、これならどうだ? if ( !(stricmp(msg,"hello") != 0) )
非ゼロを真、ゼロを偽とするのはいいんだけど、 一般的には成功で真、失敗で偽とすることが多いよね。 stricmp関数を文字列が等しいかという意味で使おうとすると、 等しければ偽、等しくなければ真が帰ることになる。 if(!stricmp(msg,"hello")) のような書き方は、スキルの低い開発者に「偽==失敗==等しくない」という 誤解を与える可能性がある。 よって俺は==0を推奨。
>>213 >スキルの低い開発者に「偽==失敗==等しくない」という誤解を与える可能性
アホな学生の間違いでは?
少なくとも、開発者なんて肩書きを持ってたら、
それくらいの知識は、あって当然だと思いますし、
そもそもifは、真(!0)偽(0)で条件分岐するのであって、
等しいか、等しくないかで分岐する訳ではないですからね…。
理系の学生のがよっぽどいいヨ なんで文系のやつがソフトハウスに入ってくるんだヨ なんでプログラムできないのにSEになれるんだヨ
>>217 理系でもプログラム書けない奴もいるし
文系だからってプログラム書けないってこたぁない。
217 == 文系に仕事をとられたかわいそうな人 218 == 理系から馬鹿にされているパシリプログラマー
220 :
66 :2001/06/07(木) 10:37
>>214 -215
同意。
ようするにこのレベルではどうでもいい。
1もカッコイイ書き方、とちゃんといってる。
219 == 高卒ドキュソプログラマー
>>221 = 217 or 218
残念でした
まだ大学生だよ
くだらない事にいちいち反応してる人がいますね。
224 :
デフォルトの名無しさん :2001/06/07(木) 12:38
私なら if (stricmp(msg, "hello") == 0) と書く。 if (!stricmp(msg, "hello")) のほうがカッコイイが、わかりにくい。
if (STRCMP_RETURNED_MATCH(strcmp(msg, "hello")) いや、ねたですって。やってないよ、ホント。
226 :
デフォルトの名無しさん :2001/06/07(木) 12:47
なんかちょっと香ばしいスレになってきたな。
227 :
デフォルトの名無しさん :2001/06/07(木) 12:59
私なら if (stricmp(msg, "hello") == 0) と書く。 if (stricmp(msg, "hello") >= 0) と、なったり if (stricmp(msg, "hello") <= 0) と、なったりしたりすることもあるので。
stricmpはもう飽きたので次のネタきぼーん
>>227 素晴らしい。どっちでもいいや派だったが、== 0派に転向するぜ!
わりと最初の方から「真偽を返さない関数じゃないから」という理由はでてたぞ。
234 :
66 :2001/06/07(木) 14:06
鬱氏「真偽を返す関数じゃないから真偽として評価すべきじゃない」といい直しとく。
205じゃないよ。たんなる傍観者。 次の寝たき盆
こんな俺はダメダメですか? #include <stdio.h> #include <string.h> #define STREQUAL(a, b) (strcmp((a), (b)) == 0) int main(void) { char *a = "ABC"; if (STREQUAL(a,"ABC")) printf("等しい\n"); else printf("等しくない\n"); if (STREQUAL(a,"DEF")) printf("等しい\n"); else printf("等しくない\n"); return 0; }
>>164 bool a = (x != 0);
ネタだけど。
既出ですか。スマン。
ネタふり if(hogehoge) foo(); else bar(); を (hogehoge)? foo() : bar(); と書いてみるのはどうだろう
>>243 6が昔話をまじえつつ語ってくれるのを待て
foo()にセミコロンが無いのが気持ち悪い
3項演算子はやはり1行の方がいい。
247 :
66 :2001/06/07(木) 16:53
if(hogehoge){ foo(); } else { bar(); } の方が好み。 3項演算子バージョンは格好悪いと思う。 hogehoge、ではネタ的にいまいちひねる部分が無い気も。
} else { この部分はいただけない。 って突っ込んで欲しくてわざと書いたでしょ?
249 :
デフォルトの名無しさん :2001/06/07(木) 17:04
6の下でないと働く気がおきません また戻ってきて昔の話を語ってください
250 :
デフォルトの名無しさん :2001/06/07(木) 17:10
>3項演算子はやはり1行の方がいい。 複数行もよいと思うけど。 hoge = (cond1) ? val1 : (cond2) ? val2 : (cond3) ? val3 : (cond4) ? val4 : val5; って感じで、switch~case 文のように書くんだよ。
>>250 すげークールだ!ちょっとかっこいいかも
250マンセー!! 6なんて250に比べたらウンコクソですね!!
while ((c = getchar()) != EOF) {..} はいかに。
いいんでない?
ごめ getc->getchar
スタイルは関数の型に依存しない方がいいぞ。 関数の型が左辺値になったらどうするよ(藁)。
262 :
6 :2001/06/07(木) 18:31
みんなすごいねぇ。よくまあ、この程度の話題にそこまでダラダラ
と書けるもんだ。
俺は「これで書くべし」なんて一言も言ってないンだけどねぇ。
しかし、もう一度言うけどさぁ、俺はあくまで昔話をしただけだよ。
ANSI規格化以前の話だし、ホントに遠い昔話だよ。
えーと、
>>26 って、なんだっけ?
ああ、これにも書いてあるじゃん。
「最適化しないコンパイラなら吐き出すコードも違うだろうけど 」
って。
ホントにたのみますよ、しかし2chの中でも特に馬鹿な人っているんだね。
263 :
デフォルトの名無しさん :2001/06/07(木) 18:35
264 :
6 :2001/06/07(木) 18:54
レベルの低い奴は何を言っても、レベルの低さは変わらないということだ。
265 :
デフォルトの名無しさん :2001/06/07(木) 19:02
if ((fp = fopen(..)) != NULL) { readやらなんたら if (error == 0) { readやらなんたら if (error == 0) { readやらなんたら fclose(fp); return (0); } } fclose(fp); } return (1); と if ((fp = fopen(..)) == NULL) return 1; readやらなんたら if (error != 0) { fclose(fp); return (1); } readやらなんたら if (error != 0) { fclose(fp); return (1); } fclose(fp); return (0); はどっち?
別スレで見掛けたやつ。 sizeof(式) return(~) はどうっすか?
267 :
デフォルトの名無しさん :2001/06/07(木) 19:17
sizeof ()、return ()、予約語だからスペース入り。 しかし、そうしないと予約語を関数と間違えるツールって なんだろう。 そういえば関数で get_data (..) とスペース入れる人がいるけどあれは何故だろう。
え?sizeofやreturnかっこつけない・・・ if などの制御文スペース空ける。
一部のバカがカッコを付けないのをかっこいいとおもっている
一部のバカがカッコを付けないのをかっこいいとおもっている
カッコつけるな。
>>266 sizeof(xx)
return x;
xxx x[nn];
for (i = 0; i < sizeof(x) / sizeof(xxx); i++)
こんなかんじのとき
for (i = 0; i < sizeof x / sizeof xxx; i++)
だとわかりづらいだろ?
return x; は return (x); でもいいぞ
コンパイラがばぐったこともあったので、昔の人は括弧つけた。
>>257 EOFが10000でも動くよ
理解した上で使うなら別にいいと思う
return x でバグるコンパイラなんて本当に存在したのか? なんかウソくさいなあ。
>>271 上手い。
でも、個人的にはカッコつける。
>>274 あなたの知らない世界。
私も知らない世界。
でも、あったと言う話は、たまに聞く…。
K&Rのころの実装だったらreturnは括弧が無いとダメだったかもね。 でもせいぜいコンパイラがエラー吐いて終わりだと思うが。 バグるってのはどーにも。 なんかやたら特殊環境持ち出す人が居るけど、 そういう人はせめてどこのプラットホームのなんてコンパイラか書きません? こんな環境もあるよーって言われても知らん人にはウソくさく見えたりするし、 極端言えば俺の作ったコンパイラではこけるとか言い出すかもしれない。 実装依存は実装を明記してほしい。
277 :
デフォルトの名無しさん :2001/06/08(金) 07:07
return 文はカッコつけると関数と間違えちゃうからだめよんと 教えられたが、、、
>>276 すまん、returnのばぐりは
俺も、話にしか聞いてない。
Sun3使いの人の台詞だったから
実際にあるとしたらそれ以前の実装だと思う。
(ネタなので、本気で突っ込みを入れないように) #define Spartan return #define Project return int foo () { int X ; ………… Spartan X ; } char *bar () { char *A ; ………… Project A ; }
>>278 別に関数と間違えてても、気付いた時に恥をかくだけで、
実質的には、あまり問題ないと思いますが…。
間違うっていうか retarn(0);などと書いたとき コンパイルエラーがでず(括弧がないとでる) リンク時にエラーになるまで気づかないとかいう話かと。
283 :
デフォルトの名無しさん :2001/06/08(金) 09:43
>>265 関数の引数にファイルポインタを渡して、
関数呼び出しの前後でfopen()、fclose()をしたほうが
良いと思われ。
>>276 >K&Rのころの実装だったらreturnは括弧が無いとダメだったかもね。
無いと駄目なものもあったかも知れないが、殆どは無くても大丈夫
だったと思う。
それこそ処理系依存な話なので、議論しても不毛だな。
285 :
デフォルトの名無しさん :2001/06/08(金) 12:08
>>265 fp = fopen();
if (!error){
}
if (!error){
}
if (fp != 0){
fclose(fp);
}
ってやる人もいるね。
昔、某T芝のコンパイラで、コンパイル結果が違った。 どのように違ったかは忘れたが、とりあえず危険だとの判断で、全部カッコつけた。