1 :
デフォルトの名無しさん :
2005/08/09(火) 20:45:08 それぐらい分かれ、コンパイルしる!
3 :
デフォルトの名無しさん :2005/08/09(火) 21:34:14
マニアは「それを越えられない方が悪い」ぐらいに言う。 こんなつまらない物に労力かけられるか
Cは「それくらいやってくれ」を別の意味で補完してくれるんだよ。 高級すぎると重箱の隅が突けないから、Cに頼る羽目になる。 最近のJavaは恐ろしいほど柔軟だけどね・・・
Cプログラムって事はコンパイル済みのプログラム全部(Cで書かれたもの)に対 して不満があるんですよね。
Cプログラマーってワザと分かり難いプログラム書いて、自慢するよな。 たぶん、そう言う書き方を推奨してるK&Rが全て悪い。
Perlプログラマーってワザと分かり難いスクリプト書いて、自慢するよな。 たぶん、そう言う書き方しか出来ないPerlが全て悪い。
Cが必要なところなんて、本当に、本当にごくごく限られたところでしかないだろ。 せめてC++に移行してくれ。
高級アセンブリ言語Cを使わなくてどうするんだ
何このスレ
何の言語を一番気に入ってるのかね。 Windowsアプリの作りやすさに終始するならVBでいいんじゃないか。
>>6 これにはおれも同意
絶対に分りやすいことが第一だ!
10行を4行に縮めて、見にくくなってるのに、なぜそんなに得意げなんだ!?
>>13 1行当たりにたくさん詰め込みすぎた複雑な式のことかいな。
>>13 分かり難いって例えばどんなのを言ってるんですか?具体的に。
while(0 == (n = hoge())) { //statement }
どうせ代入しながら評価するなら、カンマ演算子を使うほうが良くないか。 while(n = hoge(), !n) { //statement }
そんなのあんの?Cの知らない機能って結構あるのかも
>>19 ・ループは二回で済む。三回回しているのは明らかに冗長。
・isspace()を使わずに、制御文字を全て空白と見做すのは明らかな怠慢。
>>20 >・ループは二回で済む。三回回しているのは明らかに冗長。
しかし、strlen()をしてるものが多いが、その関数の内部では同じようにループ
をしてるわけだが。
#include <ctype.h> char *trim(char *str) { char *src, *dst, *last; if( str == NULL ) return NULL; for(src = str; isspace(*src); ++src) ; if(src == '\0') { *str = '\0'; return str; } last = str - 1; for(dst = str; *src != '\0'; ++dst, ++src) { *dst = *src; if(!isspace(*src)) { last = dst; } } *(last + 1)= '\0'; return str; }
23 :
22 :2005/08/10(水) 23:38:29
ちと整理。ひとつ不要な判定があった。 #include <ctype.h> char *trim(char *str) { if( str != NULL ) { char *src, *dst, *last; for(src = str; isspace(*src); ++src) ; last = str - 1; for(dst = str; *src != '\0'; ++dst, ++src) { *dst = *src; if(!isspace(*src)) last = dst; } *(last + 1)= '\0'; } return str; }
>>22 ほお、すごいな。
そういえば、最初のNULLチェックもちゃんと付けてるな。
でも、
>if(src == '\0') { *str = '\0'; return str; }
if(*src == '\0')
じゃないかな。
とりあえず、22を確認してみたけど、23はこれを書き込んでからな。
あっ、最初のNULLチェックで、引数がNULLならその引数をそのまま返せば NULLを返すというわけだな。
26 :
22 :2005/08/10(水) 23:51:15
>>24 指摘のとおりそこは *str でした。
でもそこで判定しなくても、その後のfor の継続判定が同じだったので、そもそもその判定自体がいらなかった。
>>22 (23)
ふむ、それと、str != NULL のときだけ変数を生成するようにブロック内変数にしたんだな。
ただ、引数 str の先頭からコピーし直すようなことまでは、しなくていいと思うんだが。
なんかおちてたな。
さて、
>>23 には実は無駄がある。
*dst = *src のところで、right trim で取り除かれるべき空白文字まで無駄にコピーしている。
最終的に*(last+1)='\0' でコピーした余白が切り取られるのだが、それにしても無駄。
そこに注目して、修正してみた。
#include <string.h>
#include <ctype.h>
char *trim(char *str)
{
if( str != NULL )
{
char *begin, *end, *p;
int len;
for(begin = str; isspace(*begin); ++begin) ;
end = str - 1;
for(p = begin; *p != '\0'; ++p)
if(!isspace(*p)) end = p;
*(++end)= '\0';
if( (len = (end - begin)) > 0 )
memmove(str, begin, len + 1);
}
return str;
}
memmove をしているわけだが、果たして
>>23 とどっちが効率いいのか。微妙。
>>27 なるほど、それでいいなら、もっと簡単になるな。
#include <ctype.h> char *trim(char *str) { char *pc1, *pc2, *pc3; if (str == NULL) return NULL; for (pc1 = str; isspace(*pc1); pc1++) ; pc3 = pc1; for (pc2 = pc1; *pc2; pc2++) if (!isspace(*pc2)) pc3 = pc2; *(++pc3) = '\0'; return pc1; }
あのさぁ、途中に空白あったらその後捨てちゃうわけ? で、詰め直しをする必要もないから1ループで事足りるんですが。 詰めることばっかりに夢中になって本質を見失うなんて頭足りないんじゃない?
たかがCひとつ満足に理解できない馬鹿の立てたスレは、ここでっか?
>>31 の言ってることは最初は無茶苦茶だが後半に同意。
ということで、1ループで事足らせてみた。
char * trim(char * str)
{
if (str) {
char * first;
char * last;
for (first = NULL; * str; ++str) {
if (!isspace(* str)) {
if (!first) {
first = str;
}
last = str;
}
}
if (first) {
* ++last = '\0';
return first;
}
}
return str;
}
較べたわけじゃないけど、isspace()が散らばらない分コードはタイトでしょ。
>>30 空白だけの文字列を食わせるとナルキャラの先を壊す。
35 :
デフォルトの名無しさん :2005/08/11(木) 09:29:55
>>6 CにしろPerlにしろC++にしろ
書く奴によって差がとんでもなく開きすぎるあんなに
読みにくいコードを簡単に書くことができてしまうのは
なんともなんとも。
STLが気に入らないからVectorを自作だなんだとか
ヘッダファイル問題で苦しめられる始末といい
コーディング規約を見直したほうがいいんじゃないのか?
ここでBASICに帰ろう
>>31 >で、詰め直しをする必要もないから1ループで事足りるんですが。
しかし、ループ箇所を少なくするだけでは良いとは限らないんじゃないか。
そのためにループ内で幾つもの評価式を並べて、全体の式の評価回数を増やすだけに
なるようなものでは、良いとは言えない。
>>34 pc3 = pc1; を
pc3 = pc1 - 1; に直す。
俺としては、if や while や for などに対応する文は、規則正しく常に次の行に書いてもらえたほうがいい。 それと、書き込むときは、字下げのためのスペースやタブは、全角のスペースに変換すると、体裁が保たれる。
40 :
34 :2005/08/11(木) 12:37:34
>>39 2バイト空白はなぁ……評価するときに、変換する手間が掛かるんだけど。
それよりは、エディタにインデント掛けて貰う方が楽だが。
1行目はそうだけど、それよりもブロック化してないことのほうが気になる。
つーか、>30の変数名は如何なものかと。
>28とか>33の方がその点は読みやすいと思うのだが。
そうそう、Cygwinでコンパイルした結果だと、>33が一番短くて
メモリアクセスも少ないコードになったよ。ループ内の分岐は>30の方が少ないけどね。
>>40 >2バイト空白はなぁ……評価するときに、変換する手間が掛かるんだけど
意味が分かりにくいが、もしかして、
>それと、書き込むときは、字下げのためのスペースやタブは、全角のスペースに変換すると、体裁が保たれる。
が正しく伝わってないのかな。「書き込むときは」とは、この掲示板に書き込むときのことを言ってるんだが。
普通に投稿すれば、字下げのないソースのレスになってしまうから、それを問題にして言ってるんだが。
42 :
34 :2005/08/11(木) 13:11:03
>>41 ヒント:私は>34と>40を書いている。
#どっちが読解力ないのかな?w
>>42 全然意味がわからないんだが。
>#どっちが読解力ないのかな?w
の意味もわからないんだが。
ヒント:なんて使ってる奴はみんな痛い
45 :
34 :2005/08/11(木) 13:39:40
はぁ… ソースを読むときではなく、コンパイルするときに余計な手間が掛かるということが読み取れないもんかねぇ。 読むだけなら別にわざわざインデントしなくても読むのに困らんし、 困るならエディタにインデント掛けて貰えばいいだろうと。 つーか、わざわざ変換するなら>28を見習えと言いたい。 #>28ならコピペでそのままコンパイルできる。
>>45 >ソースを読むときではなく、コンパイルするときに余計な手間が掛かるということが読み取れないもんかねぇ。
人にわかりやすく話すことができないのかね。
>読むだけなら別にわざわざインデントしなくても読むのに困らんし、
>困るならエディタにインデント掛けて貰えばいいだろうと。
>つーか、わざわざ変換するなら>28を見習えと言いたい。
>#>28ならコピペでそのままコンパイルできる。
随分自己中心的だな。
嫌ならわざわざコンパイルしなければいいだろ。
自分は何様のつもりだ。
コンパイルするときにはわざわざ手打ちしろってか?w
>>45 それに、その非常識の考えが前提の話なら、普通の人がそう簡単に理解できると思うか?
>>47 手打ちも何もするな。
常識をわきまえることから始めろ。
>>48 君から常識って言葉が聞かれるとは思わなかったな
オツムノ弱い子には便利な言葉だよね
>>49 何を言いたいのかね。
>オツムノ弱い子には便利な言葉だよね
どういう意味なのかわからないんだが。
なにここ?雑談スレ? "常識をわきまえる" の検索結果 約 189 件中 1 - 100 件目 (0.61 秒)
何も34(40, 45)を対象として元々書いてるわけじゃないんだからな。
何きれてんの?
>嫌ならわざわざコンパイルしなければいいだろ。 謹んであんたのハンドルをNGnameに登録させて貰うよ。
>>54 なぜそういうレスになるのかわからないんだが。
それよりも、自分の態度を反省するほうが大事じゃないかね。
>>55 君には自戒と言う言葉は理解できないだろうな
>>54 えぇ〜、勿体無い。
C言語スレとかC++移行スレなんかと楽しいレスも読めなくなっちゃうのにぃw
>>56 >君には自戒と言う言葉は理解できないだろうな
自戒と言う言葉は理解できても、そのレスが何を言いたいのか理解できんな。
意味不明なレスが多すぎる。 もう書くな。
夏休みになると自己陶酔型の学生似非PGが増えるのは仕方の無いこと
あのあと規制に巻き込まれて最終結論がかけませんでした。
荒れちゃったようですが、一応買いときます。
>>28 に
>>27 に言われた、所を反映。多分これが一番効率いいね。
>>30 に
>>38 の修正を入れればほぼ同じコードになりますが、こっちの方がローカル変数少ない。
たいした違いではありませんが。
#include <ctype.h>
char *trim(char *str)
{
if( str != NULL )
{
char *end, *p;
for(; isspace(*str); ++str) ;
end = str - 1;
for(p = str; *p != '\0'; ++p)
if(!isspace(*p)) end = p;
*(++end)= '\0';
}
return str;
}
しまった、最終結論これじゃなかった。 これでもいいんだけど、最初のNULLガードのところを if( str != NULL && *str != '\0') としたほうが、精神衛生上いいかと。 本当にどうでもいいことですが。
コテは一人残らず死ねばいい
a
b
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
_____
program trimprg(input, output); var str : packed array[0..256] of char; pc1 : pchar; function isspace(c1 : char) : boolean; begin isspace := (c1 <= ' ') and (
(c1 = '') or (c1 = '') or (c1 = '') or (c1 = ' ') or (c1 = chr(10)) or (c1 = chr(13)) ) end; function trim(str : pchar) : pchar; var pc1, pc2, pc3 : pchar; c1 : char; begin if str = nil then trim := nil;
pc1 := str; while isspace(pc1^) do inc(pc1); pc3 := pc1; dec(pc3); pc2 := pc1; c1 := chr(0); while pc2^ > c1 do begin if not isspace(pc2^) then pc3 := pc2; inc(pc2) end;
inc(pc3); pc3^ := c1; trim := pc1 end; begin write('入力 : '); readln(str); writeln('文字列1: ''', str, ''''); pc1 := trim(str); writeln('文字列2: ''', pc1, '''') end. (* Copy right データボックス 2005.Inc *)
(* 70 *) (c1 = ' ') or (c1 = '') or (c1 = '') or (c1 = ' ') or (c1 = chr(10)) or (c1 = chr(13)) ) end; function trim(str : pchar) : pchar; var pc1, pc2, pc3 : pchar; c1 : char; begin if str = nil then begin trim := nil; exit end;
copyrightとcopy rightの区別のつかないスレ違いの阿呆がいるスレはここですか?
背伸びしたいお年頃なんだろ
>>69-73 Copyright (C) 2005 データボックス, All Rights Reserved.
どうでもいいが2chに投稿した内容は 既存の著作物や犯罪に関わる事柄でない限りひろゆきのものだ。
そんなことないはず。 複製その他の利用が自由であることに同意しないと投稿できないというだけ。
>>8 望み通り、高級アセンブリ言語Cではなく、その他の言語Pascalでプログラム作ったぞ。
どうだ、これで満足か?
80 :
デフォルトの名無しさん :2005/08/20(土) 22:53:23
迷スレあげ
初心者なので再帰関数は勘弁...
C++の中にCプログラムてんこ盛りにするのはやめてほしい
C++の設計者はそのような嫌がらせとしか思えない状況を実現するために 苦心惨憺して上位互換性を確保したのだw
なんかC勉強してると自分の馬鹿さ加減に嫌気が差してきます. ああ,もう別に優秀なプログラマーになれなくてもイイやって気分になってしまいます. CPUのレジスタやエンディアンなんて言葉すら知らないアマの僕には...
>>83 確かにそうとしか思えないときがある。
ugly_old_code {
//醜いC的なコーディングはこのブロック内でのみ有効
}
という仕様にすればよかったのに
>>81 ゲームの思考ルーチンとか
ディレクトリの階層を掘り下げたりするような探索プログラムを書くときに
再帰が使えないと、つらいじょ
>>84 CPUのレジスタやエンディアンなんて必要なときにしか意識しない僕は
社会の底辺ですがどうでしょう