こういう書き方ってどうよ?

1デフォルトの名無しさん
結果は同じだけど、どっちがカッコイイか知りたい!
そんな思いをこのスレにぶつけましょ

まず私からですね

if (!stricmp(msg, "hello"))
if (stricmp(msg, "hello") == 0)
上と下のどっちがカッコイイ書き方なんですかねぇ?
2デフォルトの名無しさん:2001/06/06(水) 08:08
STLを使う
3デフォルトの名無しさん:2001/06/06(水) 08:19
if (msg.equals("hello"))
4デフォルトの名無しさん:2001/06/06(水) 08:19
============終了============
5デフォルトの名無しさん:2001/06/06(水) 08:54
============再開============

なわけ無いので

============終了============
6デフォルトの名無しさん:2001/06/06(水) 10:46
>>1
結果が同じだと思っているので終了。
7sage:2001/06/06(水) 12:35
同じでないの?>>6
8デフォルトの名無しさん:2001/06/06(水) 12:35
上げちまった…
9デフォルトの名無しさん:2001/06/06(水) 12:37
>>6
どこか違うのか? といいつつ終了。
10デフォルトの名無しさん:2001/06/06(水) 12:39
> if (!stricmp(msg, "hello"))
なんじゃこりゃ?

============終了============
11デフォルトの名無しさん:2001/06/06(水) 12:53
俺も真似して終了したくなったので、

============終了============
126:2001/06/06(水) 13:21
>>7
うーん。作られるコードが違うんだよ。
って、みんな知らないの? まいった。
まあ、最近のコンパイラは最適化しちゃうからなぁ。

A - if (!stricmp(msg, "hello"))
B - if (stricmp(msg, "hello") == 0)

Aの方が Bより「早く動く」コードを作る場合があるのさ。
アセンブラの知識があればわかるよ。
13デフォルトの名無しさん:2001/06/06(水) 13:25
>>12
おまえばかだろう
stricmp関数の処理速度が上がるのなら意味があるけど
その戻り値を処理する部分がちょっと早くなっても
何の意味もないんだよ
146:2001/06/06(水) 13:36
>>13
がーん。ほんとにみんな知らないのか!?

ま、10年以上前の話の事だからなぁ。
日本が初めて"C"言語を知った時、その実体を洋書からしか
情報が得られない時代。
その時はC言語がめちゃくちゃ遅かった時代なんだよ。ま、みんな
アセンブラ使ってたからな。
で、最適化なんてほとんど無いから、細かい記述で高速化を
計ったのさ。
しかし、ホントにみんな知らないンだな。
戻り値の判定部分だけでも10倍ぐらい早く出来たのさ。

やれやれだよーん。2chレベル低すぎ。
15デフォルトの名無しさん:2001/06/06(水) 13:40
コンパイラに、よりけり・・・
この前、制御系のコンパイラで、

return 0 ;
return (0) ;

で結果が違ってぶっとんだ
16デフォルトの名無しさん:2001/06/06(水) 13:47
0との比較と、0以外との比較ってスピード違ったっけ?
まぁ >>6 さんがこれだけ言うからには違うんだろうなぁ

forループなんかで i++ を ++i って書きますか?
1715:2001/06/06(水) 13:50
>>16

俺の経験では、

>0との比較と、0以外との比較ってスピード違ったっけ?

の違いのでるコンパイラにあったことない。
18デフォルトの名無しさん:2001/06/06(水) 13:56
そもそも早さを要求する所で、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のループのほうが実行命令が長くなる場合がある
20デフォルトの名無しさん:2001/06/06(水) 13:59
% 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
216: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
>>22
今も昔も、同じコードは吐かない。
24デフォルトの名無しさん:2001/06/06(水) 14:09
6よ、PentiumIII 500MHz程度のCPUで、その比較は一体何nsec違うんだい?
25デフォルトの名無しさん:2001/06/06(水) 14:09
高速化というのはボトルネック個所に対して行うべきであって、
件の個所が何ミリ秒向上しようと、1度しか呼ばれない個所なら意味が無い。
1億回のループの中とかなら話は違うかもしれないけどさ。

みんな書き方によって処理速度が微妙に違うのは承知しているでしょ。
ただ、現在はプロセッサの処理速度が飛躍的に向上したので、
わかりにくいけど微妙に速いという表記より、保守しやすいコードが望まれる。
昔の幻影にとらわれているジジイは逝ってください。

stricmpのように真偽を返す関数でないものは、
明示的にゼロと比較したほうがスキルの低い開発者にも理解しやすいので、
チーム開発を行うときにバグを抑制できる可能性がある。
26デフォルトの名無しさん:2001/06/06(水) 14:10
戻り値をそのまま判断にかけるか、定数0と比較するかの違いでしょ?
最適化しないコンパイラなら吐き出すコードも違うだろうけど
なんつーか、この程度の事でレベル云々言う>>14イタイ

大体この程度の最適化で10倍の差がでる環境ってどういう環境だよ(藁
俺もアセンブラやるけどそんな環境見たことねーよ

ついでに言うと処理系依存のハナシはナシな、釘刺しとくぞ>>14
27デフォルトの名無しさん:2001/06/06(水) 14:12
アホか。
俺が6809でCやってたころは、
文字列比較ごときで遅いライブラリ関数なんぞ呼ばなかったわい。
28デフォルトの名無しさん:2001/06/06(水) 14:14
>>19

逆にiのループのほうが実行命令が長くなる場合もある
CPU(MPU)が8ビット処理か16ビット処理かによる・・・
29 :2001/06/06(水) 14:15
今時、無意味なのは当然だけど、 うるさがたのジジィに文句言われない為に
結論キボン
3015:2001/06/06(水) 14:15
>>うーん。10年以上前は、動かすハードもめちゃくちゃ遅かった。
>>あなーた、Z80の2.5メガヘルツ相当とかで組んでみなさいって。

ってゆーか、制御系なんで未だにそんなもんです・・・
31デフォルトの名無しさん:2001/06/06(水) 14:17
>>25
組み込み分野に来てよ。
いまだに手動最適化に命削ってるよ。
高速化よりはコンパクト化に命削ってるけど・・・
1バイト削るのも大変で泣ける。
アルゴリズムの見直しで大抵圧縮できるけどね。
32デフォルトの名無しさん:2001/06/06(水) 14:17
俺様の開発したhogehoge-cは!の処理が==よりも1兆倍遅いんで、
==の方が超高速だぞ。
ギコハハハハハ
33デフォルトの名無しさん:2001/06/06(水) 14:17
結論は>>25
34デフォルトの名無しさん:2001/06/06(水) 14:21
>>33
いや結論っていうか何ていうか
1はどっちが「カッコイイ?」って聞いてるんスけど…
35デフォルトの名無しさん:2001/06/06(水) 14:26
PCでやってる限りは、どちらでもいい。
アナクロな6は逝ってよし。
制御系を前提に話してたとしても、注釈もつけずに
そんな一般的でないターゲットを前提に話してる時点で
逝ってよし。
366: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の勝ちです
40デフォルトの名無しさん:2001/06/06(水) 14:33
26に同意。
インプリメンテーション依存の話は、処理系を明らかにして
話さないと意味がないし、1の意図と異なる。

本題については、定数は比較演算子の左に書く癖を付けて
おいた方が、単純ミスを減らす効用があるという合理的な理
由があるので、Aの方がカコイイ(藁
41ひげねこ:2001/06/06(水) 14:34
25に同意
 大量に比較する場合、文字列クラスで囲って中では
ハッシュ値で比較する方が速いと思うのですが…。

 6のような人用に「ロートルプログラマー板」キボーン
42デフォルトの名無しさん:2001/06/06(水) 14:35
if(0==stricmp(msg,"hello"))
4326:2001/06/06(水) 14:35
と言うか何時の間にか「制御系だったら」とか言ってるけど
制御系で最適化語るならstricmp()は無いだろうが…

取り敢えず6は逝っていいです
44デフォルトの名無しさん:2001/06/06(水) 14:36
6は1の「結果が同じ」という文を深い意味で捉えているだけ
45デフォルトの名無しさん:2001/06/06(水) 14:37
>>36

>>要求されなければ、メンテナンス優先のソースにするのは当たり前です。
>>私はプロですから。

要求されなくても、メンテナンス優先にのソースにするのがプロです。
46同じになったヨ:2001/06/06(水) 14:37
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 ;
}
47同じになったヨ:2001/06/06(水) 14:37
_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
486:2001/06/06(水) 14:38
へー。私はプロですが。
マニアックな皆さんにお伺いしますヨ。

if (!stricmp(msg, "hello"))
if (stricmp(msg, "hello") == 0)

C言語の歴史背景から、どっちが「かっこいい」書き方ですか?
さあ、マニアの観点からだと、どっちなの?

レベルの低い奴は何を言っても、レベルの低さは変わらないということだ。
49 :2001/06/06(水) 14:39
最適化スレッド過去になかったけか?
盛り上がらないんだよね

「こう書くのが定石」 みたいな本ないかな~
506:2001/06/06(水) 14:40
>>45
うーむ。流れを読んでください。
制御系の実装の話がでてるでしょ?
要求とはそういう要求の事で、「メンテナンス優先という要求がない」
ということじゃありません。
5146=47:2001/06/06(水) 14:41
コピペミスった。。。
/*******************************************************/
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はバカ。
52デフォルトの名無しさん:2001/06/06(水) 14:41
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:
56デフォルトの名無しさん:2001/06/06(水) 14:50
「詳細C言語入門  6著」 \2,800
576:2001/06/06(水) 14:53
ま、俺的に 2chはバカが多いって事がわかったよ。>> バカな皆さんへ
58松下のMPUでも同じ・・・:2001/06/06(水) 14:58
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
59デフォルトの名無しさん:2001/06/06(水) 14:59
>>50

>>45は話の流れを読む以前に、日本語が読めないかと思われ。
60デフォルトの名無しさん:2001/06/06(水) 15:01
>>41
ロートルプログラマ板 ローカルルール(x86用)
・mov ax, 0よりxor ax, ax
・条件によって変数に違う値を入れる場合、まず代入して条件によって上書き
・jpzの前にcmp ax, 0がくるようなコードはCのレベルで阻止
6126:2001/06/06(水) 15:07
なんでこうなるかね…

>>48=57
なんと言えば良いのやら、端的に言うと幼稚だ。
自分の>>12とか>>14の発言読み返してみ。
1の趣旨に反して最適化とか昔話とかレベルとか言い出したの誰なんだろうね。

で、俺の>>26については言及せずに逃げる、と…
スマンが「幼稚」以外の形容詞が浮かばんよ。
「へー。私はプロですが。」が聞いて呆れる。

俺自身if(!hoge())…みたいな書き方はしても、それでレベル云々は言わんなぁ
だって恥ずかし過ぎるし、マジで。
62俺はロートルだから:2001/06/06(水) 15:07
stricmp()なんか使わん
63デフォルトの名無しさん:2001/06/06(水) 15:09
つーか6はミエミエの煽り厨房なんだから放置しろよ。

どうせ6は職場でも放置され慣れてるんだからさ。
64デフォルトの名無しさん:2001/06/06(水) 15:10
結果が違う==作られるコードが違う

真にならない人は低レベル。
656:2001/06/06(水) 15:13
ま、俺的に 2chはバカが多いって事がわかったよ。>> バカな皆さんへ
6642:2001/06/06(水) 15:13
だから俺のが一番だってば。
67デフォルトの名無しさん:2001/06/06(水) 15:14
悲惨な6だな・・・
68デフォルトの名無しさん:2001/06/06(水) 15:18
>>65
激しく同意。

>>63=>>67
放置しないの???(藁
69デフォルトの名無しさん:2001/06/06(水) 15:19
>>66
あほ。
70:デフォルトの名無しさん:2001/06/06(水) 15:21
1は二つの式の真偽が同じって言ってるようにしか読めないんだが、
出力コードの差とか言い出したバカは誰だ?

先にも出てるけどコードの差なら処理系依存じゃねぇの?>>どっかのバカ
7166:2001/06/06(水) 15:22
>>69

反応ありがとう
72デフォルトの名無しさん:2001/06/06(水) 15:23
(・∀・)ホウチプレイ!!!
73デフォルトの名無しさん:2001/06/06(水) 15:24
っていうかこのスレ終了だろ?
代表して1が氏んでおいてくれ

======== 終了 ========
74デフォルトの名無しさん:2001/06/06(水) 15:24
俺は6の主張に共感する。
俺は6のような人間になりたい。
俺は6と同じ時代を生きていることを誇りに思う。
俺は6のことをもっと知りたい。
75デフォルトの名無しさん:2001/06/06(水) 15:24
>>6以外の糞プログラマは首吊って氏ね。
76デフォルトの名無しさん:2001/06/06(水) 15:27
>>6マンセー!!
>>6マンセー!!
>>6マンセー!!
>>6マンセー!!
>>6マンセー!!
>>6マンセー!!
77デフォルトの名無しさん:2001/06/06(水) 15:27
>>74
激しく同意。
俺も6と仲良くなりたい。
俺も6と結婚したい。
俺も6のケツの穴にティムポ突っ込みたい。
俺も6のティムポをしゃぶりたい。
78デフォルトの名無しさん:2001/06/06(水) 15:28
6が死んだ!
この突然もたらされた吉報はあっという間に日本中をいや、世界中を駆け巡った。
「今日と言う日は人類がこの世に誕生してから、最もめでたい日です。さあ、皆で祝いま
しょう」
そして天皇陛下のそんな一声によって始まった盛大なパーティー。
その歓喜は瞬く間に地球上を覆い尽くし、今や絶頂の極みにあった。
「本当に死んでくれてホッとしてますわ。あの子を産んでからこの三十年、楽しいと思っ
た事など一度たりとも無かったんですもの」
そう喜びの涙を零しながら語ってくれたのは6の母である夕子さん(54)。
彼女は6を生んだ責任で一時期、牢獄に囚われていた悲しき女性だ。
だが、もう6はいない。
彼女の喜びは世界中に伝播し、この地球上に住む有りとあらゆる生き物に感動を与えたと
言っても過言ではないだろう。
「もう、最高よ!こんな楽しい事があるのなら頑張って生き続けようと思うわ」
そう笑顔を浮かべながら語るのはワシントン州精神心理学付属病院に通院しているナンシーさん(32)。
彼女は幾度と無く自殺未遂を繰り返していたがこの一件で生きる希望を見出したという。
「良くは分からないけど、とても嬉しいです。何かこう、力が湧いて来ました」
ベトナム難民の一人であるベス君(10)もはにかんだ表情を浮かべながら我々にそう語
ってくれた。
そして夜がふけても行なわれる盛大なパーティー。
それは地球上の有りとあらゆる場所で行なわれ、我々人類に、いや生けとし生けるものに
明日を生き抜く力を与える。
我々はその光景を人類始まって以来の奇跡だと確信し、ワイングラスで乾杯する。
この喜びが未来永劫続きますように。
ちっぽけな存在である我々はそう願う事しか出来ないのだから。
79デフォルトの名無しさん:2001/06/06(水) 15:28
>>6 = 74 = 75
いいかげん自分の馬鹿さ加減に気付けよ
80デフォルトの名無しさん:2001/06/06(水) 15:30
大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
みんな年寄りを大事にしようよ。
新しい技術についていけない人もいるって事を忘れるなよ。
自分が唯一威張れる昔の話をしたいのだよ。
みんなもいつの日か同じ立場になるのだから、
もっとやさしくしようよ!
83デフォルトの名無しさん:2001/06/06(水) 15:34
1 + 2 + ... + 36 = 666
84:デフォルトの名無しさん:2001/06/06(水) 15:35
あぁ、これが一人芝居というものなのですね。
6さん、感動しました。

感動のあまり「あうー」って言っちゃいました。
こんなに幸せな気分になったのは初めてです。
85ぐひひ:2001/06/06(水) 15:39
>>81
for( i=5; i ; i-- ){ ... }

この書き方、あたらしいスタンダードにならないかな!?
見た目クールだし実行コードも速いし、どうだい?
86デフォルトの名無しさん:2001/06/06(水) 15:50
波に乗り遅れた・・・
87デフォルトの名無しさん:2001/06/06(水) 15:50
6月6日age
88デフォルトの名無しさん:2001/06/06(水) 16:05
おお。今日は6の日なんですね。
89:デフォルトの名無しさん:2001/06/06(水) 16:09
6月6日に6がイカレるとは…
このスレは呪われている!

って事でオーメソsage
90デフォルトの名無しさん:2001/06/06(水) 16:12
あーあ。乗り遅れ。
良スレになりそうだったのにな。

>>6
俺もオールドプログラマに分類される部類だから、
なおのこと見苦しい。「昔からやっている」ことを自
慢したいようにしか見えん。
>しかし、ホントにみんな知らないンだな。
「皆が知らない」んじゃなくて、アンタが文脈読めてない
だけだ。

>戻り値の判定部分だけでも10倍ぐらい早く出来たのさ。
どういう環境だよ、それ。
9166:2001/06/06(水) 16:12
目指せ666!
926:2001/06/06(水) 16:16
既にこのスレは終了しました。
93デフォルトの名無しさん:2001/06/06(水) 16:18
>92 名前:6 投稿日:2001/06/06(水) 16:16
6ばっかり!!
94デフォルトの名無しさん:2001/06/06(水) 16:19
>>85
うんそれサイコー!今日から使うよ!

・・・自作自演はむなしいなぁ
95デフォルトの名無しさん:2001/06/06(水) 16:21
きょうの主役は、6番さんだよー
がんばってねー
96デフォルトの名無しさん:2001/06/06(水) 16:22
コード==フリップフロップのスレッショルドレベル

真にならない人は低レベル。
97デフォルトの名無しさん:2001/06/06(水) 16:22
>>64
>結果が違う==作られるコードが違う
>真にならない人は低レベル。
文脈によるだろ。
流れを読まない+レベルを持ち出す = 64=6
98デフォルトの名無しさん:2001/06/06(水) 16:26
6は今日のヒーローでしょ
99デフォルトの名無しさん:2001/06/06(水) 16:27
>>96
ショットキバリアなので、直前の状態によって結果が変わります。
100デフォルトの名無しさん:2001/06/06(水) 16:29
6
101デフォルトの名無しさん:2001/06/06(水) 16:29
6たん、ハァハァ
102デフォルトの名無しさん:2001/06/06(水) 16:29
a
103デフォルトの名無しさん:2001/06/06(水) 16:30
b
104デフォルトの名無しさん:2001/06/06(水) 16:30
c
105デフォルトの名無しさん:2001/06/06(水) 16:30
d
106デフォルトの名無しさん:2001/06/06(水) 16:30
106げっと!!
107デフォルトの名無しさん:2001/06/06(水) 16:31
だからstrcmpiスレは矢なんだよな。
いきなり変なヤシが変なツコッミいれて
C厨のクダラネー話になる。
108デフォルトの名無しさん:2001/06/06(水) 16:34
6+5の文字列を逆ポートランド法で計算させる関数はC言語のライブラリー
にある。VBにはあるんだけど。
自分で作らなければだめ?
教えて。
109デフォルトの名無しさん:2001/06/06(水) 16:58
ポートランド
110デフォルトの名無しさん:2001/06/06(水) 17:08
VBにはあるんだけど
111デフォルトの名無しさん:2001/06/06(水) 17:09
ポートランドって何?
112デフォルトの名無しさん:2001/06/06(水) 17:17
>>111
VBにはあるラシイ
113デフォルトの名無しさん:2001/06/06(水) 17:17
ボーランド
114デフォルトの名無しさん:2001/06/06(水) 17:18
1151:2001/06/06(水) 17:25
if (0 == stricmp(msg, "hello"))
これがク~ルな書き方なんすねぇ~

「結果は同じ」これは同じ動作って意味ですよ
吐き出されるコ~ドがちょこっと違うのは当然じゃございません?
書き方変えまくって吐き出されるコ~ドを
全くいっしょにする事なんて出来るの?
116デフォルトの名無しさん:2001/06/06(水) 17:26
116ゲット!!
117デフォルトの名無しさん:2001/06/06(水) 17:34
>>115
イミフメイ
118ぐひひ:2001/06/06(水) 17:34
>>115
最近のコンパイラは賢いから最適化かかったらみんな同じ
ってことをいいたいんじゃないの?
小手先の技術でステップ縮めるよりもアルゴリズムの改良と
手順の効率化で高速化を図ろうよ
ってことをいいたいんでしょ。
119shige:2001/06/06(水) 17:56
真のUNIXハッカーはrubyを使うって本当ですか?
120デフォルトの名無しさん:2001/06/06(水) 18:05
言語選ばず。
121X680x0のgcc:2001/06/06(水) 18:06
完全に乗り遅れだけども、せっかく試してみたので。

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
...
1226:2001/06/06(水) 20:07
ま、俺的に 2chはバカが多いって事がわかったよ。>> バカな皆さんへ
123デフォルトの名無しさん:2001/06/06(水) 20:12
>>122
激しく同意!
特に↓こいつスゲエ馬鹿!
http://piza.2ch.net/test/read.cgi?bbs=tech&key=991782171&nofirst=true&st=6&to=6
124666666:2001/06/06(水) 20:20
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)
1261:2001/06/06(水) 20:34
>>121
結局は同じなのねw
10倍の差が付くと言ったバカは誰よw
127デフォルトの名無しさん:2001/06/06(水) 20:40
6の頭の中の仮想マシンのことだろ(藁
128デフォルトの名無しさん:2001/06/06(水) 20:56
藁多
129デフォルトの名無しさん:2001/06/06(水) 21:03
誰も突っ込まないので、もしかしておれが間違ってるの
かもしれんが、stricmp ではなく strcmp ではないのか?
手元の処理系には stricmp ってのが無いんだけど…
130デフォルトの名無しさん:2001/06/06(水) 21:03
#define streql(s1,s2) !strcmp(s1,s2) ←ここはお好きに
として
if( streql( s, "hogehoge" ) )…
としたほうが、よっぽどスッキリかと。
131デフォルトの名無しさん:2001/06/06(水) 21:15
>>129
stricmp 文字列中の文字を小文字として比較します
132デフォルトの名無しさん:2001/06/06(水) 21:20
>>129
ホントだ、コピペしてたから気が付かなかったヨ
'i'って小さいから見落としてた(藁
133デフォルトの名無しさん:2001/06/06(水) 21:21
>>125
ソースコードをプロポーショナルフォントで表示する方が悪い。
134132:2001/06/06(水) 21:22
>>131
今調べたらありました。
うわ、一人羞恥プレーイ>俺
135デフォルトの名無しさん:2001/06/06(水) 21:28
まぁ、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足
1376:2001/06/06(水) 21:29
しかし、なんというか。
俺達がどっちかっていうと試行錯誤して会得した、ちょいとしたテクってのは
いまの若衆にはあまり伝わってないんだな。
CodeCompleteな本とか、少ないもんなぁ。

例えば、
if (0 == stricmp(msg, "hello"))
っての。これ、stricmp()じゃ無い関数で返値を変数と比較したい時も、
こう書いちゃう? >>115
まあ、 if ( isRet == foo(msg, "hello")) てなぐあいにさ。

俺の手下がこんなスタイルを、クールだ、なんて言ったら、そく引っぱたくね。
これをクールだなんて…、<* バカ丸出し *>、だよ。
138デフォルトの名無しさん:2001/06/06(水) 21:45
>>137 の例はどうかくのが正解なわけ?
139デフォルトの名無しさん:2001/06/06(水) 21:47
まあ、そういう時代もあったな。
しかし今はまったく通用しないぞ。
6は20年前に登場すべきだったな。
140デフォルトの名無しさん:2001/06/06(水) 21:48
if( foo(msg,"hello") == isRet ) とかいう事?
141ぐひひ:2001/06/06(水) 21:48
>>137
それ、どっかおかしいのか?
おれには今ひとつ理解できん
マジ解説頼むわ
142デフォルトの名無しさん:2001/06/06(水) 21:48
>俺達がどっちかっていうと試行錯誤して会得した、ちょいとしたテクってのは
>いまの若衆にはあまり伝わってないんだな。

だったら今ここで伝えてくれよ、ご老体。
143デフォルトの名無しさん:2001/06/06(水) 21:52
>>141
変数が右辺にあると == と = を間違えた時に発見し難いって事じゃねぇの?

if( strcmp() == 0 ) の方がいいだろ
定数と変数を比較するなら
if( 0 == hoge ) とした方がいいだろうけど
144143:2001/06/06(水) 21:53
あ、へんな事書いてる忘れて(藁

だんだん気が変になってきたYO
145デフォルトの名無しさん:2001/06/06(水) 22:00
6月6日に現れた、蒼き流星6。漏れは忘れない。。。
146sage:2001/06/06(水) 22:02
うだうだ言う前に最適化技法を勉強しとこう。
!xx も == 0 も生成されるコードは同じだ。

バイト・位置サイクル単位の小手先の最適化前に
構造的な無駄を省け。

if (0 == xx)
だろうが
if (xx == 0)
だろうがどっちでも統一してればよし。

複数言語経験者が集まる開発なら = と == の誤記入を避ける
意味で、よし。

同じ生成コードが同じでも

if, while, for に続く括弧をスペース空けずに記入するのはやめとけ。
前後括弧内のスペースは大目に見てやる。

あと

fooBar
みたいなハンガリアンでもなんでもないいかれポンチな名前つけるのも
やめとけ。
147この業界から逃出した男:2001/06/06(水) 22:03
壁 | _・。)
俺なら
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って類まれな厨房的才能をもってるんじゃねーか?
150デフォルトの名無しさん:2001/06/06(水) 22:10
sage忘れたスマソ
151デフォルトの名無しさん:2001/06/06(水) 22:10
最適化とか考えてコード組むときりがないような気がする。
C++の継承って使うと遅くなるんでしょ?
じゃ駄目じゃんみたいな。
152デフォルトの名無しさん:2001/06/06(水) 22:12
>C++の継承って使うと遅くなるんでしょ?

迷信です。VFT経由で1アクション増えるだけでしょ
153デフォルトの名無しさん:2001/06/06(水) 22:12
>>146
if ( foo() == 0) { }
こう書けということか?
ifの後にスペース入れるの気持ち悪いんだが。
もしかして、
sizeof(xxx);
みたいにsizeof()のときはつめてる?
統一感無くて美しくないぞ、それ。
15466:2001/06/06(水) 22:17
>>137

一応それの元ネタは漏れっぽいので。
変数なら当然そんな風にはかかん。
定数限定。
155デフォルトの名無しさん:2001/06/06(水) 22:23
>定数と変数を比較するなら
>if( 0 == hoge ) とした方がいいだろうけど

だからそんな小細工する前に
コンパイラの警告レベル上げろよと
もうこの板、この1年間で何度も何度も何度も以下略
156sage:2001/06/06(水) 22:23
>>148
javaはjavaのスタイルに従うのがよいと思う

C/C++ではやめちくり

>>151
実行速度をいちいち気にしないというのはある意味正しい
実際に使ってみて速度が問題になったときに
はじめて、仕様の簡略化->構造の最適化->
末端部分のコードの最適化を行うべきだ。

組み込み系の人だと、命令コードのバイト数まで
最適化しなければならないこともあるけどね。

>>153
K&R, whitesmithあたりを見習おうということ

構造制御系のキーワード(for, while, return, if)は
スペースを空ける。

sizeofと関数呼び出しの括弧は演算子なのでくっつけておく

ちなみに
sizeof/returnは括弧いらない

昔は returnに括弧をつけないとバグって正しい値が
返らないことがあった
だから、括弧つきでreturnを書くのは、昔の名残なので、許す

()にもいろいろ種類があるってこと。
157デフォルトの名無しさん :2001/06/06(水) 22:28
>>137

何話ずらそうとしてる?(藁

>>1にある評価式の書き方で出力コードが変わるとか10倍の速度差が出るとかって話はどうした?
>>26が書いてる事読んでから答えてくれよ、他人をバカと言える程の自称プロなんだろ?(藁
158:2001/06/06(水) 22:30
>>157
これだから昔をしらないバカは
159sage:2001/06/06(水) 22:36
>>6
CP/M用のコンパイラでも !xと==0の最適化くらいはしてたぞ
PDP-11なんかのころのコンパイラか?
ならしらん。

>>忘れた
short/longで速度が違うかもしれんが
Cでは符号拡張が頻繁に行われるため
コスト的にはあまり変わらんことが多いぞ。

float/doubleも然り。

でも、データ件数が数万件とかでかいときに
わざわざ大きなメモリを足らないようにちびちびやるのはよくある。
160デフォルトの名無しさん:2001/06/06(水) 22:37
昔しか知らないバカよりはいい
161デフォルトの名無しさん:2001/06/06(水) 22:38
つーか組込み系が何時までたっても、進歩しないのは
実は組込み屋さんが進歩しようとしないからなんじゃないの?
これは邪推すぎ?
162sage:2001/06/06(水) 22:41
>>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;

前者は馬鹿には理解できんらしいので、
うちのプロジェクトでは禁止されています。
165sage:2001/06/06(水) 22:45
競争が激しい中で、製品のコストを下げるには
少ないメモリ、しょぼいCPUでがんばるのも仕方ない。

たとえば、いまある電子ジャーやテレビのリモコンのCPUが
WinCEで使われてるみたいなリッチなのに置き換えられて
便利になるけど、
高いとか、重いとか、すぐ電池切れるとかじゃ悲しすぎるだろ。

ファーム系にはファーム系の事情ってもんがあって、
それはそれで、立派な技術を持ってるところも多いよ。
166デフォルトの名無しさん:2001/06/06(水) 22:46
>前者は馬鹿には理解できんらしいので、
>うちのプロジェクトでは禁止されています。

自信が湧いてきました。ありがとう
167sage:2001/06/06(水) 22:51
馬鹿に理解できないコードを禁止するのも、良くあった。

メモリ・CPUに贅沢できるPC/WSのアプリ系コーディングでは、
馬鹿に理解できるコードというよりは
一目で理解できるようなすっきりした、
メンテしやすいコードを書くのがあたりまえになってる。

馬鹿馬鹿しいけど、副作用のある式を三項演算子や論理演算子なんかと
組み合わせて使ったときの挙動など、プロジェクトの全員が、
勘違いしてたり、誤った解釈をしてたりすると悲しいことが起こるので、
そういうのは控えよう。

でも、禁止はやりすぎかも。
16866:2001/06/06(水) 22:52
>>166

うちの兄の会社の新人研修(COBOL)では、否定演算はわかりにくいので
禁止、だったぞ?無駄に不等号とか使ってがんばってた。
169デフォルトの名無しさん:2001/06/06(水) 23:06
俺もアセンブラでゲームを作っていた世代だから、
6が言いたい事はわかる。
しかし6の知識はCISC全盛期のまま止まっている。

>>6
あるCPU+コンパイラで速かったから、
別のCPU+コンパイラで速いとは限らない。
>>12でAとBの速度が逆転する処理系は実在する。
cmpとbranchを1クロックで処理できるRISCチップなんか
いまどき珍しくない。
xor後にbranchするほうが2クロックかかってかえって遅い。

6の経験ってそんな程度。
出力されたコードを確かめもせず、
昔はこれで速かったから、今でもこれで速いんだと思い込み、
遅いコードを作りつづける……。
17090:2001/06/06(水) 23:12
わ、まだ居たんだ。わーい、俺にも弄らせて。
>>21=6
>あなーた、Z80の2.5メガヘルツ相当とかで組んでみなさいって。
>>17を受けてこれかい?
10倍違うコンパイラを具体的に教えてくれ。頼む。

>当時のcmpとxorの速度差ってどのくらいあったっけか?
手元に資料がないので断言できんけど、10倍差は絶対ない。

揚げ足もついでに取っとくとZ80でのcompareはcpじゃねえの?
ロートルさんようっ(藁
171デフォルトの名無しさん:2001/06/06(水) 23:12
ってか>>12

>って、みんな知らないの? まいった。

これ恥ずかし過ぎ…
どう見ても一人上手だよ…
172sage:2001/06/06(水) 23:13
並列演算できるメインフレーム系のFORTRANの最適化とか
strength-reduceとか知らないまま
PC/ファーム系でやってたんだろうなぁ。

char x=0;
の代わりに
インラインアセンブラとかでxor aとか書いてるのかも
173デフォルトの名無しさん:2001/06/06(水) 23:20
>>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、日本のお笑いの未来を憂慮する毎日である。
17690:2001/06/06(水) 23:39
>>174
>たぶん、6 はループの展開とかいまだにやってるんじゃないかな。
しかも最適化バリバリかかるPCのCコンパイラで!
…とか彼の文章読んでいるとマジで思う。
速度重視という指定があったら大喜びで「知らないの!」とか
周囲にわめきながらやってそう。

>xorとcpとの速度比較の話とかも持ち出してきたけど、
>それって処理系依存だしね。(悪いことだとは言わないけど)
全く。
今の時勢では一般論に敷衍するのは全く無理な話。
177うにゅ:2001/06/06(水) 23:40
バカの書き込み除去フィルターを作ってください~

なかなか面白いスレのにな~
批判単品がなくなれば、2chはいいコミュニケーションサイトになると
おもうんですんがね

>構造制御系のキーワード(for, while, return, if)は
>スペースを空ける。
どのように書くのでしょうか?
「こうした方が読みやすい」というのには
素直に従って書きたいものですね

PERLだと、けっこう
どっちがかっこいい?ってのが発生しそうですが、
Cにはあまりないですね
178sage:2001/06/06(水) 23:53
>>177
146にあるとおりだよ。
括弧とスペースのことを言ってるなら

if (a != 2)

if ( a != 2 )

はどっちでもいい
でも

if(a != 2)

if( a != 2 )
はよろしくないという意味。

式や、演算子に関していうと
結合度の強い単項演算子、関数呼び出し、[]演算子、.演算子、->演算子はくっつけって書く
その他の二項・三項演算子、はスペースを入れて書く
演算順序に注意しなければいけないときは、無駄のようでも括弧でくくる

かな。

古いけど、K&Rあたりの書式に関する説明や、knuth先生の本とか読んでみよう。
別にK&R至上主義でもないし、
GNUスタイルみたいなポリシーも、統一されてればいいと思う。

で、実際の職場なんかだと、
K&R/whitesmithあたりのコードの書き方が、
みんな知っているし、見づらくもない書き方だということ。
179デフォルトの名無しさん:2001/06/07(木) 00:07
既に本物の6は居ないと思われ
1806代理:2001/06/07(木) 00:13
>>179
じゃ、おれが代理をつとめよーか。
181デフォルトの名無しさん:2001/06/07(木) 00:18
無理でしょう。
182デフォルトの名無しさん:2001/06/07(木) 00:25
x86のコードしか知らんけど、
関数の戻り値がAXに保存されるとして、
問題の部分を素直にコード化すると、上の式は次のようになり、
test ax,ax
jnz _01
下の式は、次のようになるように見えますが、
cmp ax,00000h
je _01
(速さは同じだが、1バイト短い(AX以外だと2バイト))
実際は、次のようになる可能性があるからでは?
cmp ax,word ptr[_02]
je _01
でも、本当の結果は最適化次第ですけどね。(^^;
183sage:2001/06/07(木) 00:50
(古い言い方だけど、)最適化コンパイラはコードを一度、中間コードになおすんだ。

たとえばサイズ優先最適化オプションがついてたとするけど、
そのとき、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とかに置き換えられる。

相対ジャンプのほうが絶対ジャンプより速くてバイト数の少ないアーキテクチャなら、
とび先までの距離を調べて、相対ジャンプに置き換えたり、とかもする。


これが絶対じゃないけど、
大体、アセンブラレベルに落とす前に最適化フェーズが複数あるので、
最適化をまったく意識してないコンパイラでもない限りは、
やっぱり、最適化されるよ。
184sage:2001/06/07(木) 01:02
あ、negateは符号反転だ。
すげーうそくせーよ

でも、なんとなく、わかってくれ
1856:2001/06/07(木) 01:31
みんなすごいねぇ。よくまあ、この程度の話題にそこまでダラダラ
と書けるもんだ。
俺は「これで書くべし」なんて一言も言ってないンだけどねぇ。
しかし、もう一度言うけどさぁ、俺はあくまで昔話をしただけだよ。
ANSI規格化以前の話だし、ホントに遠い昔話だよ。
えーと、>>26 って、なんだっけ?
ああ、これにも書いてあるじゃん。
「最適化しないコンパイラなら吐き出すコードも違うだろうけど 」
って。
ホントにたのみますよ、しかし2chの中でも特に馬鹿な人っているんだね。
186>>6:2001/06/07(木) 01:35
10倍差が出る環境おしえてよ
187デフォルトの名無しさん:2001/06/07(木) 01:43
>>185
その後の一文を引用しとくよ(藁

>なんつーか、この程度の事でレベル云々言う>>14イタイ

#14=6

で、やっぱり「処理系」と「10倍」については反論できてないねぇ
逃げてるだけじゃん
そろそろ負けを認めれば?
188デフォルトの名無しさん:2001/06/07(木) 01:47
>>185
>ホントにたのみますよ、しかし2chの中でも特に馬鹿な人っているんだね。

激しく同意!
特に↓こいつ大バカだね!ギャはははは!
http://piza.2ch.net/test/read.cgi?bbs=tech&key=991782171&nofirst=true&st=6&to=6
189デフォルトの名無しさん:2001/06/07(木) 01:50
>>185=6
恥の上塗りしてどうする?

スレ全部読んだけど、やっぱりアンタの言ってる事って整合性ないよ?
>>6で見当違いの突っ込み入れた挙句に、>>12で「って、みんな知らないの? まいった。 」
ってアンタ…

マジで病院逝って下さい
190デフォルトの名無しさん:2001/06/07(木) 01:56
>>185
今更26の事を言ってる(その後何度か書き込んでる)のもおかしいので、
ただ、板を汚して楽しみたいだけの、偽者じゃないですか?
191デフォルトの名無しさん:2001/06/07(木) 02:09
http://mentai.2ch.net/test/read.cgi?bbs=prog&key=991562280
の79あたりに引っ越したかな?
192デフォルトの名無しさん:2001/06/07(木) 02:19
>>191
なに!?そのスレの80っておれだよ・・・
1936応援団:2001/06/07(木) 02:38
6最高。
是非一緒の職場で働きたいです。
貴方のような優秀な方が、日本に存在していたと言うだけで僕の心は
澄み渡る初夏の暑い日差しのようよ澄み切っています。
今まで巧く歩けなかった平均台も、これからは軽々わたって行けそうです。
本気で感謝しています。
有り難う6。
本気で貴方の事を愛してしまいそうです。
thank you.thank you.thank you.
1946:2001/06/07(木) 03:28
>>189
>>6で見当違いの突っ込み入れた挙句に、
日本語が不便な人だね。こういうのは「ボケ」って言うんだよ。
1956:2001/06/07(木) 03:29
>>193
そう思うなら、俺を誉め称えるスレを立ててくれ。
196デフォルトの名無しさん:2001/06/07(木) 03:34
>>195
ヒーロースレがあるYO!
197デフォルトの名無しさん:2001/06/07(木) 03:36
>>177
> うにゅ

んー、あの人じゃないよね…。
1986:2001/06/07(木) 03:44
>>187
「処理系」でウダウダ言ってる奴は、C言語がどんな言語なのか
勉強しなおしたほうがよい。
バカバカしいのは相手にしていないので、相手にされなかった
奴は、バカだと思われたと考えるように。
199デフォルトの名無しさん:2001/06/07(木) 03:48
>>1
話を元に戻して、
if (!stricmp(msg, "hello"))
if (stricmp(msg, "hello") == 0)
出来るだけ、意味の無い定数は使いたくないので上。
200199:2001/06/07(木) 03:55
元に戻ってねぇじゃん。(笑)
理由じゃなくて、どっちがカッコイイか…。
でも、結果は同じく上。
0は良いけど、"=="が、何かダサい。
20166:2001/06/07(木) 04:06
だから
if(0==stricmp(msg,"hello"))
が一番カッコイイんだってば。
202デフォルトの名無しさん:2001/06/07(木) 04:07
#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"))
は?
203デフォルトの名無しさん:2001/06/07(木) 04:37
>>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)
です。
205デフォルトの名無しさん:2001/06/07(木) 05:27
真偽を返す関数でないので!をつかうのには抵抗が。
つーわけで
if (stricmp(msg, "hello") == 0)
に一票。
206デフォルトの名無しさん:2001/06/07(木) 05:50
if( tolower( string(msg) ) == "hello" )
207デフォルトの名無しさん:2001/06/07(木) 06:05
ハァ?
208デフォルトの名無しさん:2001/06/07(木) 06:23
>>206
おいおい、大丈夫?
209デフォルトの名無しさん:2001/06/07(木) 06:24
>>205
そんじゃ、これでどう?(笑)
if (~stricmp(msg, "hello"))
210デフォルトの名無しさん:2001/06/07(木) 06:27
>>209
駄目駄目じゃん。
211pascal厨房:2001/06/07(木) 06:42
bool(ean)型以外で条件文がかけるCって本当にいろんな書き方があるんだな。
212デフォルトの名無しさん:2001/06/07(木) 06:49
==を使わずに、真偽を否定する、これならどうだ?
if ( !(stricmp(msg,"hello") != 0) )
213デフォルトの名無しさん:2001/06/07(木) 07:30
非ゼロを真、ゼロを偽とするのはいいんだけど、
一般的には成功で真、失敗で偽とすることが多いよね。
stricmp関数を文字列が等しいかという意味で使おうとすると、
等しければ偽、等しくなければ真が帰ることになる。
if(!stricmp(msg,"hello"))
のような書き方は、スキルの低い開発者に「偽==失敗==等しくない」という
誤解を与える可能性がある。
よって俺は==0を推奨。
214デフォルトの名無しさん:2001/06/07(木) 07:59
>>213
>スキルの低い開発者に「偽==失敗==等しくない」という誤解を与える可能性
アホな学生の間違いでは?
少なくとも、開発者なんて肩書きを持ってたら、
それくらいの知識は、あって当然だと思いますし、
そもそもifは、真(!0)偽(0)で条件分岐するのであって、
等しいか、等しくないかで分岐する訳ではないですからね…。
215デフォルトの名無しさん:2001/06/07(木) 08:02
>>213
そんなトンチキな誤解をする奴はクビ。
216206:2001/06/07(木) 08:09
>>208
C++では大丈夫ですが。
217デフォルトの名無しさん:2001/06/07(木) 08:29
理系の学生のがよっぽどいいヨ
なんで文系のやつがソフトハウスに入ってくるんだヨ
なんでプログラムできないのにSEになれるんだヨ
218デフォルトの名無しさん:2001/06/07(木) 09:32
>>217
理系でもプログラム書けない奴もいるし
文系だからってプログラム書けないってこたぁない。
219デフォルトの名無しさん:2001/06/07(木) 09:54
217 == 文系に仕事をとられたかわいそうな人

218 == 理系から馬鹿にされているパシリプログラマー
22066:2001/06/07(木) 10:37
>>214-215
同意。
ようするにこのレベルではどうでもいい。
1もカッコイイ書き方、とちゃんといってる。
221デフォルトの名無しさん:2001/06/07(木) 10:54
219 == 高卒ドキュソプログラマー
222219:2001/06/07(木) 10:59
>>221 = 217 or 218

残念でした
まだ大学生だよ
223デフォルトの名無しさん:2001/06/07(木) 11:15
くだらない事にいちいち反応してる人がいますね。
224デフォルトの名無しさん:2001/06/07(木) 12:38
私なら
if (stricmp(msg, "hello") == 0)
と書く。
if (!stricmp(msg, "hello"))
のほうがカッコイイが、わかりにくい。
225デフォルトの名無しさん:2001/06/07(木) 12:45
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)
と、なったりしたりすることもあるので。
228デフォルトの名無しさん:2001/06/07(木) 13:15
>>227
正解。
229203:2001/06/07(木) 13:16
>>227
負けました。
230名無しさん:2001/06/07(木) 13:18
stricmpはもう飽きたので次のネタきぼーん
231デフォルトの名無しさん:2001/06/07(木) 13:31
>>227
素晴らしい。どっちでもいいや派だったが、== 0派に転向するぜ!
232デフォルトの名無しさん:2001/06/07(木) 13:32
>>227
そうか。それなら納得。
233デフォルトの名無しさん:2001/06/07(木) 13:55
わりと最初の方から「真偽を返さない関数じゃないから」という理由はでてたぞ。
23466:2001/06/07(木) 14:06
>>229

同意。
235233:2001/06/07(木) 14:13
鬱氏「真偽を返す関数じゃないから真偽として評価すべきじゃない」といい直しとく。
236デフォルトの名無しさん:2001/06/07(木) 14:21
>>205=>>233

わかったわかった、君が2位ってことにしといてやるよ(w
237233:2001/06/07(木) 14:30
205じゃないよ。たんなる傍観者。
次の寝たき盆
238デフォルトの名無しさん:2001/06/07(木) 14:41
>>237
次のネタは多分ないよ。
239デフォルトの名無しさん:2001/06/07(木) 14:53
こんな俺はダメダメですか?

#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;
}
240sageる:2001/06/07(木) 14:57
>>164

bool a = (x != 0);

ネタだけど。
241デフォルトの名無しさん:2001/06/07(木) 15:08
>>239
>>202-203
しつこいね。

>>240
bool a = x;
じゃだめ?
242239:2001/06/07(木) 15:19
既出ですか。スマン。
243デフォルトの名無しさん:2001/06/07(木) 15:44
ネタふり

if(hogehoge)
  foo();
else
  bar();



(hogehoge)?
  foo()
:
  bar();

と書いてみるのはどうだろう
244デフォルトの名無しさん:2001/06/07(木) 15:55
>>243
6が昔話をまじえつつ語ってくれるのを待て
245デフォルトの名無しさん:2001/06/07(木) 16:02
foo()にセミコロンが無いのが気持ち悪い
246デフォルトの名無しさん:2001/06/07(木) 16:14
3項演算子はやはり1行の方がいい。
24766:2001/06/07(木) 16:53
if(hogehoge){
foo();
}
else {
bar();
}

の方が好み。
3項演算子バージョンは格好悪いと思う。
hogehoge、ではネタ的にいまいちひねる部分が無い気も。
248デフォルトの名無しさん:2001/06/07(木) 17:02
}
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 文のように書くんだよ。
251デフォルトの名無しさん:2001/06/07(木) 17:13
>>250
すげークールだ!ちょっとかっこいいかも
252デフォルトの名無しさん:2001/06/07(木) 17:33
250マンセー!!
6なんて250に比べたらウンコクソですね!!
253デフォルトの名無しさん:2001/06/07(木) 17:39
while ((c = getchar()) != EOF) {..}
はいかに。
254デフォルトの名無しさん:2001/06/07(木) 17:48
いいんでない?
255デフォルトの名無しさん:2001/06/07(木) 17:51
>>253
7行スレ http://piza.2ch.net/test/read.cgi?bbs=tech&key=984182993 での下のテクとどっちが カコイイ?

while((c=getc(r))-EOF){}
256255:2001/06/07(木) 17:52
ごめ
getc->getchar
257デフォルトの名無しさん:2001/06/07(木) 17:59
>>255
EOF==-1って保証されてたっけ?
258デフォルトの名無しさん:2001/06/07(木) 18:04
>>257 いいえ
259デフォルトの名無しさん:2001/06/07(木) 18:05
>>252
比べるまでもなく6はウンコだろ…
260デフォルトの名無しさん:2001/06/07(木) 18:15
スタイルは関数の型に依存しない方がいいぞ。
関数の型が左辺値になったらどうするよ(藁)。
2616の下僕:2001/06/07(木) 18:22
2626:2001/06/07(木) 18:31
みんなすごいねぇ。よくまあ、この程度の話題にそこまでダラダラ
と書けるもんだ。
俺は「これで書くべし」なんて一言も言ってないンだけどねぇ。
しかし、もう一度言うけどさぁ、俺はあくまで昔話をしただけだよ。
ANSI規格化以前の話だし、ホントに遠い昔話だよ。
えーと、>>26 って、なんだっけ?
ああ、これにも書いてあるじゃん。
「最適化しないコンパイラなら吐き出すコードも違うだろうけど 」
って。
ホントにたのみますよ、しかし2chの中でも特に馬鹿な人っているんだね。
263デフォルトの名無しさん:2001/06/07(木) 18:35
>>261
 その中にあったこれが笑えた。
http://mentai.2ch.net/test/read.cgi?bbs=otaku&key=991903680&ls=100
5で止まってる。次に書き込むと6になっちゃうんだね。
2646: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);
はどっち?
266デフォルトの名無しさん:2001/06/07(木) 19:06
別スレで見掛けたやつ。

sizeof(式)
return(~)

はどうっすか?
267デフォルトの名無しさん:2001/06/07(木) 19:17
sizeof ()、return ()、予約語だからスペース入り。
しかし、そうしないと予約語を関数と間違えるツールって
なんだろう。
そういえば関数で
get_data (..)
とスペース入れる人がいるけどあれは何故だろう。
268デフォルトの名無しさん:2001/06/07(木) 19:28
え?sizeofやreturnかっこつけない・・・
if などの制御文スペース空ける。
269デフォルトの名無しさん:2001/06/07(木) 19:45
一部のバカがカッコを付けないのをかっこいいとおもっている
270デフォルトの名無しさん:2001/06/07(木) 19:46
一部のバカがカッコを付けないのをかっこいいとおもっている
271デフォルトの名無しさん:2001/06/07(木) 19:48
カッコつけるな。
272sage:2001/06/07(木) 20:41
>>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); でもいいぞ
コンパイラがばぐったこともあったので、昔の人は括弧つけた。
273デフォルトの名無しさん:2001/06/07(木) 21:34
>>257
EOFが10000でも動くよ
理解した上で使うなら別にいいと思う
274デフォルトの名無しさん:2001/06/07(木) 23:04
return x でバグるコンパイラなんて本当に存在したのか?
なんかウソくさいなあ。
275デフォルトの名無しさん:2001/06/08(金) 00:35
>>271
上手い。
でも、個人的にはカッコつける。
>>274
あなたの知らない世界。
私も知らない世界。
でも、あったと言う話は、たまに聞く…。
276デフォルトの名無しさん:2001/06/08(金) 01:06
K&Rのころの実装だったらreturnは括弧が無いとダメだったかもね。
でもせいぜいコンパイラがエラー吐いて終わりだと思うが。
バグるってのはどーにも。

なんかやたら特殊環境持ち出す人が居るけど、
そういう人はせめてどこのプラットホームのなんてコンパイラか書きません?
こんな環境もあるよーって言われても知らん人にはウソくさく見えたりするし、
極端言えば俺の作ったコンパイラではこけるとか言い出すかもしれない。
実装依存は実装を明記してほしい。
277デフォルトの名無しさん:2001/06/08(金) 07:07
278デフォルトの名無しさん:2001/06/08(金) 07:24
return 文はカッコつけると関数と間違えちゃうからだめよんと
教えられたが、、、
279sage:2001/06/08(金) 07:35
>>276
すまん、returnのばぐりは
俺も、話にしか聞いてない。

Sun3使いの人の台詞だったから
実際にあるとしたらそれ以前の実装だと思う。
280デフォルトの名無しさん:2001/06/08(金) 07:39
(ネタなので、本気で突っ込みを入れないように)
#define Spartan return
#define Project return

int foo () {
int X ;
…………
Spartan X ;
}

char *bar () {
char *A ;
…………
Project A ;
}
281デフォルトの名無しさん:2001/06/08(金) 07:43
>>278
別に関数と間違えてても、気付いた時に恥をかくだけで、
実質的には、あまり問題ないと思いますが…。
282デフォルトの名無しさん:2001/06/08(金) 08:31
間違うっていうか
retarn(0);などと書いたとき
コンパイルエラーがでず(括弧がないとでる)
リンク時にエラーになるまで気づかないとかいう話かと。
283デフォルトの名無しさん:2001/06/08(金) 09:43
>>265
関数の引数にファイルポインタを渡して、
関数呼び出しの前後でfopen()、fclose()をしたほうが
良いと思われ。
284デフォルトの名無しさん:2001/06/08(金) 09:55
>>276
>K&Rのころの実装だったらreturnは括弧が無いとダメだったかもね。
無いと駄目なものもあったかも知れないが、殆どは無くても大丈夫
だったと思う。
それこそ処理系依存な話なので、議論しても不毛だな。
285デフォルトの名無しさん:2001/06/08(金) 12:08
>>265
 fp = fopen();
 if (!error){
 }
 if (!error){
 }
 if (fp != 0){
  fclose(fp);
 }
ってやる人もいるね。
286returnの()
昔、某T芝のコンパイラで、コンパイル結果が違った。
どのように違ったかは忘れたが、とりあえず危険だとの判断で、全部カッコつけた。