The --C Programing Language
1 :
デフォルトの名無しさん:
規定しろ。
お断りだハゲ.
3 :
デフォルトの名無しさん:02/08/15 03:34
if 文とかが気に入らない。
if true と死体のに if (true) とせにゃならん。
return は付けても付けなくてもいいのに。
あとブロックにラベルをひっつけたい。
でないと大域脱出に goto 使わなきゃならんし。
switch ももーちっと拡張してほしいなっと。
4 :
デフォルトの名無しさん:02/08/15 03:34
ハゲゆーなーーーーーーーーーーーーーー
5 :
名無しさん@Emacs:02/08/15 03:37
>if true と死体のに if (true) とせにゃならん。
>return は付けても付けなくてもいいのに。
returnは'付けない'だろ. ただ式として()を付けても付けなくても
同じ評価がなされるから, 可読性・趣味の観点で付けてる奴がいるだけだ.
>あとブロックにラベルをひっつけたい。
>でないと大域脱出に goto 使わなきゃならんし。
goto否定派なので何とも…今だかつてgoto使ったことないし.
>switch ももーちっと拡張してほしいなっと。
同意.
FALLTHRU無くして欲しい
ブロック文といえば最後にセミコロンを付けなくても良いのは何か
しっくりこない。
構造体には付けなくちゃ駄目なのにな。
おそらく
struct {} hoge;
というケースがあるからなのだろうけど。
10 :
デフォルトの名無しさん:02/08/15 03:45
>returnは'付けない'だろ. ただ式として()を付けても付けなくても
>同じ評価がなされるから, 可読性・趣味の観点で付けてる奴がいるだけだ.
if とかもそうしてほしかったりする。
for とかは付けないとどうしようもなさそうだが。
ていうか for の構文自体汚くて嫌いだなっと。
>>5 return は昔、関数として実装されていた処理系があったらしい。
後に構文として正式に定義された。
つまりreturn(...);は歴史的経緯。
>>10 forはこう変更するとか。
for int i = 0 to 3 step i++ do ;
for int i = 0 to 3 step i++ {}
…うわあ。
if に括弧が無いと、thenみたいなキーワードが必要になると思うけど。
if 式 true文 false文
・・・そうでもないか?
if true delete
>>1 else exit (0);
>>10 for文の構文ね…whileで同じことやるよりはスッキリしてて俺は好きだよ.
for(i = 0 ; i < n ; i++)
って書いたら, あぁiを0〜(n-1)ねって直観的に分かるじゃん.
それ以外の方法でループする時はwhile使う.
>>11 ふぉーん…初耳ぽ.
3項演算子(?:)みたいなのを廃止して、ifとかを文としてではなく
式として解釈できる様にしてほしい。
int i = if (n < 10) 0 else while (...) ;
とか。
>>17 rubyみたいで素敵。
でもコンパイラ作れるのかな。
>>17 利点が分からんとかじゃなくて, そのサンプルコードの挙動が分からん….
そうなるとwhileの終了値がよくわかんないな・・・
while(繰り返し条件) 繰り返し文 else 終了値;
みたいにするか!
ifと絡めると混乱しそう。
>if true と死体のに if (true) とせにゃならん。
>return は付けても付けなくてもいいのに。
これさ,もしやるならthenの変わりに','使ったらどうよ.
if variable,
sentence;
>>19 頭がぼーっとしてるので、なにも考えてません。
20と絡めると、
int i = if (n < 10) 0; else while (...) ... else n;
です!
elseの掛かり方がさっぱりな素敵な構文ですね!
あのさ,
>>17のソースはメンテしたくないよ…マヂで.
あ、else if の他に else while や else forも書けると思ったら、
結構、説得力ありそうですね!
おれ頭いい!
if variable, sentence;
英語っぽくて素敵。
どうせなら ; を . にしてみるとか。
>>25 それするとCでは何とかなるけどC++でアヤスィな…w
ごめん, 冗談で言っておいてアレだけど何気にいい構文な気がしてきた…w > if
>>25 ,は既に連結演算子として使われているので混乱すると思いますよ!
普通に括弧かthenでいいと思いますよ!
>>23 わたしもこんなのは嫌です!特に他人が書いたソースは!
break ブロック名;
でブロックの脱出が出来たらいいなあ。
while (i)
for (j = 0; j != 0; j--)
if (j == 0) break while;
とか。何も指定なしなら一番上のブロックを抜ける。
{
break; // 一番内側のブロックを抜ける
}
continue も同様に、とか。
ブロックにラベルというのは
label : {
while (i)
for (j = 0; j != 0; j--)
if (j == 0) break label;
}
こんな感じかな。便利?
>>27 あぁ, 連結演算子っていうのか…名前知らんかったw 確かに被るな, 面倒っぽ.
>>28 Javaにあるよ, そんなの. 言語仕様に書いてあった.
…けど使ったことないし,使い方が分からん….
>>28 開発スレに帰れ!
つーか、あそこ活動してんの?
>>30 誤爆?
何でもいいけど,
>>1の以降とは裏腹に「珍妙文法を列挙せよ」なスレになってきたな.
> Javaにあるよ, そんなの. 言語仕様に書いてあった.
うわあ本当だ。ラベルつきブロック脱出まである。
さすがにgoto使えない言語だけのことはあるなあ。
goto無いの?
そんな言語使えるの?
基本的な制御構文とbreak,continue(ラベル付脱出じゃなくて普通の)が
あれば, gotoなくてもプログラム書けるよ….
そんな事したら要らないフラグが立ったり…云々ってのは設計とか
アルゴリズムがヘタレだからじゃない?
break,continueはソースの見通しよくなるから必須だねぇ…. gotoと
似てるじゃん, とか言わないでね. 制限が在る分, 可読性がいいんだから.
でも正直, goto云々じゃなくてスパゲッティ作ってくれるウザィ人を
よっぽど廃絶したいよ….
case ..1:
case 2 < :
case "":
case === CHoge:
>>35 caseに拘らないでこうしたらどうよ.
switch {
variable_1 <= 1:
sentence_1;
break;
variable_2 > 2:
sentence_2;
break;
string.equals(""):
sentence_3;
break;
}
これに加えて通常のcaseも使えると…イイ!!
関数内関数が欲しいな。
特にC++で、特定のメンバ関数からしか呼び出さない非常にローカルな関数を、
同じようにメンバ関数にするのはいやん。
>>37 そのためのprivateじゃないのかと小一時間…(略).
gccなら独自拡張で関数内関数をサポートしてるよ.
もちろん, -ansiとか付けると文句タレるが.
>>38 いや、privateなprivateなのがイイ!!
gccでは出来るのか。gccは食わず嫌いであまりいじったこと無かった。thanks!
>>39 pascalだと出来るらしいね。
inner functionでgoogleってみそ。
>>40 >privateなprivateなのがイイ!!
そんなこと言ってるとlong longみたいにprivate privateができるぞ…止めてくれw
>inner function
さんくすこ. …が, 正直使いたくないな…w
42 :
デフォルトの名無しさん:02/08/15 06:54
schemeでも使ってる!
43 :
デフォルトの名無しさん:02/08/15 11:06
TAB が消えてしまいました
かちゅーしゃ用定義
isweb43.infoseek.co.jp/computer/am_dev/cgi-bin/bbs dev 開発室
bbs dev 開発室 とTAB で区切ってください
45 :
デフォルトの名無しさん:02/08/15 15:28
関数内観数…これじゃ駄目?
int main() {
class inner { public: static void main() { cout << "ok" << endl; } };
inner::main();
for_each(v.begin(), v.end(), inner::main());
}
関数内関数はPerlでもいけます
関数内関数激しくホシィ
class inner { public:
static intdata;
static intmain() { return data; }
};
// int inner::data; // これだとエラー
inner::data = 32;
cout << inner::main() << endl;
//こうできたら面白そうなんだけど。
classinner{ public:
static intdata(boolisset, intv = 0){
static ints;
if(isset)s = v;
returns;
}
static intmain(){ returndata(false); }
};
inner::data(true, 32);
cout << inner::main() << endl;
うげスペースが消えてる
(´-`).。oO(
>>45のやり方初めて知った・・・サンクス
なんだC++で関数内関数できるじゃないか (≧▽≦) ぶわっはっはっはっ
単にinnerクラスに関数持たせてるだ…ゲホッゲホッ.
>>48 使うのはいいだろうが, メンテナンスする側に回ると….
経験談から.
54 :
デフォルトの名無しさん:02/08/15 20:24
メンテナンスになんか問題あるの?
その関数からしか使われない関数ってのが明示されて、逆にいいと思うんだけど。
あったらいいなと思ってた > 関数内関数
>>54 innerクラスに50個近く関数内関数があるとねぇ….
機能自体に問題はないと思うけど, あれ以来トラウマがな….
キチンと使えるなら問題ないのかもしれんが.
56 :
デフォルトの名無しさん:02/08/15 20:32
C/C++で無名関数って作れたっけ?
perlだとできるよね。あれで、関数内関数みたいな事の代用できそう。
>>55 いや、これから使おうと思うのでトラウマになるようならデメリットあるなら、教えて欲しいのだが・・・
それ本当に関数内関数と関係ある?
>>57 いや, 多分ない. 始めて見た時の使い方があまりにもアレだったんだと思う.
普通にクラス作る時みたいに旨く切り分けてinnerクラスにすればオケーだよ.
そか、ありがとう。
60 :
デフォルトの名無しさん:02/08/15 20:45
呼び出し元のさらに呼び出し元に、指示された回数分一発で戻れる
multi_return()みたいなのを使いたいときがある
>>60 setjmp(), longjmp()じゃ駄目なの?
62 :
デフォルトの名無しさん:02/08/15 20:52
63 :
デフォルトの名無しさん:02/08/15 20:57
>>62 ああ、そうか。
例外使えばやりたかったことストレートにできる。
どうも。
これでメンテナンス性に優れたコードが世に増えたわけだ.
>>62よ, ありがとう.
65 :
デフォルトの名無しさん:02/08/15 21:36
無名関数ってどんなの?
void (* pf)(int n) = { cout << n << endl; };
vector< int > v(10);
for_each(v.begin(), v.end(),
こんな感じ?
無名関数ってなに?
67 :
デフォルトの名無しさん:02/08/15 21:58
無名関数というより、無名関数へのリファレンスか。
perlの話だけど。
実際に使ったことない(その上ラクダ本会社に置きっぱなしな)ので
例は書けないが、
my $foo = sub {
print "ちんこギター\n";
}
&$foo; # これで実行(?)
こんな感じだったような…
で、なんつーか自己レスみたいなもんなんですが、
Cでは(ちゃんと普通に定義されている)関数へのポインタは作れる。
でも、その場限りの、無名関数を定義して、そのポインタを保持することはできない。
これでいいんだっけ?
C++も同じか。
無名クラスは作れても、無名関数は作れない。(のか?
>>67 my $foo = sub {
print "ちんこギター\n";
}; # (*)
&$foo;
(*)の部分にセミコロンがいる, そんだけ.
>>69 なるほど。サンクスコ。
(…しかし俺のうろ覚え知識はスゲーぜ…)
>>68 > でも、その場限りの、無名関数を定義して、そのポインタを保持することはできない。
つーかランタイムに関数を作る方法は(一般に)ない。
コンパイラをラップしたライブラリで動的にコンパイル&実行
>>71 C/C++みたいな、非スクリプト言語じゃ無理って事かな。
処理系がどう実装されてるか、とかの話になると良く分からん。
74 :
デフォルトの名無しさん:02/08/15 22:44
あ、Cで、関数のプロトタイプ宣言を
別の関数の中に置く事ができたような気が
できますが何か?
77 :
デフォルトの名無しさん:02/08/16 12:51
でもプロトタイプ宣言がちょっと深いところにあったとしても、
関数定義のうしろでは普通に使えちゃうんだよね。
78 :
デフォルトの名無しさん:02/08/16 17:54
C++のコピーコンストラクタは、不必要な場所でも完全なコピーを
要求するから嫌。重くなるだけならいいけど、例外を起こされたら
たまらない。
vector(vector &src, move_t) throw()
: _M_start(src._M_start), _M_finish(src._M_finish),
_M_end_of_strage(src._M_end_of_strage) {}
みたいに定義しておくと、returnする時とかの、本当のコピーが
要らない場合に呼ばれるようにしてほしい。ついでに
void vector::assign(vector &src, move_t) throw() {
vector tmp(src, move_t);
swap(tmp);
}
なんてのも用意して、STLから使えば、もっと安全で高速なコンテナが
作れるし。uninitialized_copy()やdestroy()があるくらいだから、
オブジェクトの移動くらいサポートしてもいいと思うんだけど。
C言語にテンプレートだけ追加した言語が欲しい。
C++はコンストラクタや演算子オーバーロードや例外等などの
プログラマから見えない処理がムカツク。
_____
/@@\
|三Å三| ・・・
\_____/
6(---)o
O-O
俺、Javaに列挙型とテンプレート付けてネイティブコードを吐き出してくれれば
それでいい。1.5で始めの2つは付くかも…らしいんだけど。
俺はGCが無くなってデストラクタが作られればそれでいい
83 :
デフォルトの名無しさん:02/08/18 03:37
Javaって列挙型って無かったの?
ない。前身になったOwkにはあったんだっけな…忘れた。int型の定数で代用するか、
クラスにしてしまうかで代用。俺は用途にとって使い分けするけど。
前者は変な入力があった場合にメソッド内でIllegalArgumentExceptionあたり
投げたりとかしないといけないし、後者もnullの入力は止めれないから美しくないと思う。
C#ってデストラクタ無いの?GCはあるみたいだけど。
どっちもない
86 :
名無しさん@Emacs:02/08/18 14:34
あたりまえじゃん
88 :
デフォルトの名無しさん:02/08/18 14:41
GCってさ、「掃除のおばちゃん雇うから、もうごみ箱いらないよね」っていうこと?
>>88 そう
それでゴミをそこら中にまき散らし
掃除のおばちゃんがゴミをいくつか拾い忘れたりする
拾い忘れるんじゃなくて、それがゴミかどうかわからないのでは。
更に整理整頓までしてくれるおばちゃんもいるのだが、雇用条件が厳しいらしい。
91 :
デフォルトの名無しさん:02/08/18 19:13
×owk
○oak
か?
アゲ━━━━━━(゚∀゚)━━━━━━!!!!!
>>94 貴様さっきからそのAA使いたいだけちゃうんかと(略
97 :
デフォルトの名無しさん:02/08/23 14:52
>>79 >C言語にテンプレートだけ追加した言語が欲しい。
>C++はコンストラクタや演算子オーバーロードや例外等などの
>プログラマから見えない処理がムカツク。
コンストラクタ、オーバーロード、例外等の機能を使わなければいいだけなんでは。
98 :
デフォルトの名無しさん:02/08/23 14:57
>>97 標準ライブラリ使わない、ってキッツイ気が
てゆうかどれも、見えない処理でも無いけどな…
99 :
デフォルトの名無しさん:02/08/23 15:03
Cの標準ライブラリ普通に使えるぞ。
すまん。意味が分かった(w
昔言語仕様(ループとか)まで記述できる言語を考えた。
gotoとifだけで。
__declstruct void for(init; test; inc) {statement}:
{
init();
back:
if (!test()) {
goto end;
} else {
statement();
inc();
goto back:
}
end:
}
Lispってこういうことできるん?