トップページ⇒tech
102コメント28KB

The --C Programing Language

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
規定しろ。
0002名無しさん@EmacsNGNG
お断りだハゲ.
0003デフォルトの名無しさんNGNG
if 文とかが気に入らない。

if true と死体のに if (true) とせにゃならん。
return は付けても付けなくてもいいのに。

あとブロックにラベルをひっつけたい。
でないと大域脱出に goto 使わなきゃならんし。

switch ももーちっと拡張してほしいなっと。
0004デフォルトの名無しさんNGNG
ハゲゆーなーーーーーーーーーーーーーー
0005名無しさん@EmacsNGNG
>if true と死体のに if (true) とせにゃならん。
>return は付けても付けなくてもいいのに。
returnは'付けない'だろ. ただ式として()を付けても付けなくても
同じ評価がなされるから, 可読性・趣味の観点で付けてる奴がいるだけだ.

>あとブロックにラベルをひっつけたい。
>でないと大域脱出に goto 使わなきゃならんし。
goto否定派なので何とも…今だかつてgoto使ったことないし.

>switch ももーちっと拡張してほしいなっと。
同意.
0006デフォルトの名無しさんNGNG
FALLTHRU無くして欲しい
0007デフォルトの名無しさんNGNG
>>1
C--は既にあるよ。
0008デフォルトの名無しさんNGNG
ブロック文といえば最後にセミコロンを付けなくても良いのは何か
しっくりこない。

構造体には付けなくちゃ駄目なのにな。

おそらく

struct {} hoge;

というケースがあるからなのだろうけど。
0009デフォルトの名無しさんNGNG
>>8
関数本体はtypedefできないから。
0010デフォルトの名無しさんNGNG
>returnは'付けない'だろ. ただ式として()を付けても付けなくても
>同じ評価がなされるから, 可読性・趣味の観点で付けてる奴がいるだけだ.

if とかもそうしてほしかったりする。
for とかは付けないとどうしようもなさそうだが。
ていうか for の構文自体汚くて嫌いだなっと。
0011デフォルトの名無しさんNGNG
>>5
return は昔、関数として実装されていた処理系があったらしい。
後に構文として正式に定義された。
つまりreturn(...);は歴史的経緯。
0012デフォルトの名無しさんNGNG
>>10
forはこう変更するとか。

for int i = 0 to 3 step i++ do ;
for int i = 0 to 3 step i++ {}

…うわあ。
0013デフォルトの名無しさんNGNG
>>10
Delphiでも使えや。
0014デフォルトの名無しさんNGNG
if に括弧が無いと、thenみたいなキーワードが必要になると思うけど。

  if 式 true文 false文

・・・そうでもないか?
0015デフォルトの名無しさんNGNG
if true delete >>1 else exit (0);
0016名無しさん@EmacsNGNG
>>10
for文の構文ね…whileで同じことやるよりはスッキリしてて俺は好きだよ.
  for(i = 0 ; i < n ; i++)
って書いたら, あぁiを0〜(n-1)ねって直観的に分かるじゃん.
それ以外の方法でループする時はwhile使う.

>>11
ふぉーん…初耳ぽ.
0017デフォルトの名無しさんNGNG
3項演算子(?:)みたいなのを廃止して、ifとかを文としてではなく
式として解釈できる様にしてほしい。
int i = if (n < 10) 0 else while (...) ;
とか。
0018デフォルトの名無しさんNGNG
>>17
rubyみたいで素敵。

でもコンパイラ作れるのかな。
0019名無しさん@EmacsNGNG
>>17
利点が分からんとかじゃなくて, そのサンプルコードの挙動が分からん….
002017NGNG
そうなるとwhileの終了値がよくわかんないな・・・

while(繰り返し条件) 繰り返し文 else 終了値;

みたいにするか!
ifと絡めると混乱しそう。
0021名無しさん@EmacsNGNG
>if true と死体のに if (true) とせにゃならん。
>return は付けても付けなくてもいいのに。
これさ,もしやるならthenの変わりに','使ったらどうよ.

 if variable,
  sentence;
002217NGNG
>>19
頭がぼーっとしてるので、なにも考えてません。
20と絡めると、

int i = if (n < 10) 0; else while (...) ... else n;

です!
elseの掛かり方がさっぱりな素敵な構文ですね!
0023名無しさん@EmacsNGNG
あのさ, >>17のソースはメンテしたくないよ…マヂで.
002417NGNG
あ、else if の他に else while や else forも書けると思ったら、
結構、説得力ありそうですね!
おれ頭いい!
0025デフォルトの名無しさんNGNG
if variable, sentence;

英語っぽくて素敵。
どうせなら ; を . にしてみるとか。
0026名無しさん@EmacsNGNG
>>25
それするとCでは何とかなるけどC++でアヤスィな…w
ごめん, 冗談で言っておいてアレだけど何気にいい構文な気がしてきた…w > if
002717NGNG
>>25
,は既に連結演算子として使われているので混乱すると思いますよ!
普通に括弧かthenでいいと思いますよ!

>>23
わたしもこんなのは嫌です!特に他人が書いたソースは!
0028デフォルトの名無しさんNGNG
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;
}

こんな感じかな。便利?
0029名無しさん@EmacsNGNG
>>27
あぁ, 連結演算子っていうのか…名前知らんかったw 確かに被るな, 面倒っぽ.

>>28
Javaにあるよ, そんなの. 言語仕様に書いてあった.
…けど使ったことないし,使い方が分からん….
0030デフォルトの名無しさんNGNG
>>28
開発スレに帰れ!
つーか、あそこ活動してんの?
0031名無しさん@EmacsNGNG
>>30
誤爆?

何でもいいけど, >>1の以降とは裏腹に「珍妙文法を列挙せよ」なスレになってきたな.
0032デフォルトの名無しさんNGNG
> Javaにあるよ, そんなの. 言語仕様に書いてあった.
うわあ本当だ。ラベルつきブロック脱出まである。

さすがにgoto使えない言語だけのことはあるなあ。
0033デフォルトの名無しさんNGNG
goto無いの?
そんな言語使えるの?
0034名無しさん@EmacsNGNG
基本的な制御構文とbreak,continue(ラベル付脱出じゃなくて普通の)が
あれば, gotoなくてもプログラム書けるよ….
そんな事したら要らないフラグが立ったり…云々ってのは設計とか
アルゴリズムがヘタレだからじゃない?
break,continueはソースの見通しよくなるから必須だねぇ…. gotoと
似てるじゃん, とか言わないでね. 制限が在る分, 可読性がいいんだから.

でも正直, goto云々じゃなくてスパゲッティ作ってくれるウザィ人を
よっぽど廃絶したいよ….
0035デフォルトの名無しさんNGNG
case ..1:
case 2 < :
case "":
case === CHoge:
0036名無しさん@EmacsNGNG
>>35
caseに拘らないでこうしたらどうよ.

switch {
variable_1 <= 1:
sentence_1;
break;

variable_2 > 2:
sentence_2;
break;

string.equals(""):
sentence_3;
break;
}

これに加えて通常のcaseも使えると…イイ!!
0037デフォルトの名無しさんNGNG
関数内関数が欲しいな。
特にC++で、特定のメンバ関数からしか呼び出さない非常にローカルな関数を、
同じようにメンバ関数にするのはいやん。
0038名無しさん@EmacsNGNG
>>37
そのためのprivateじゃないのかと小一時間…(略).
gccなら独自拡張で関数内関数をサポートしてるよ.
もちろん, -ansiとか付けると文句タレるが.
0039名無しさん@EmacsNGNG
余談 || 連続投稿すまそ

関数内関数ってpascalだと使えるの? Googleでヒットしたんだが.
http://www.google.com/search?hl=ja&inlang=ja&ie=Shift_JIS&q=pascal+%8A%D6%90%94%93%E0%8A%D6%90%94&btnG=Google+%8C%9F%8D%F5&lr=lang_ja
0040デフォルトの名無しさんNGNG
>>38
いや、privateなprivateなのがイイ!!
gccでは出来るのか。gccは食わず嫌いであまりいじったこと無かった。thanks!

>>39
pascalだと出来るらしいね。
inner functionでgoogleってみそ。
0041名無しさん@EmacsNGNG
>>40
>privateなprivateなのがイイ!!
そんなこと言ってるとlong longみたいにprivate privateができるぞ…止めてくれw

>inner function
さんくすこ. …が, 正直使いたくないな…w
0042デフォルトの名無しさんNGNG
schemeでも使ってる!
0043デフォルトの名無しさんNGNG
おまいら、ここにきてください。お願いします。

開発室
http://isweb43.infoseek.co.jp/computer/am_dev/cgi-bin/bbs/dev/index2.html

かちゅーしゃ用定義
isweb43.infoseek.co.jp/computer/am_dev/cgi-bin/bbsdev開発室

ちなみに >>30 の言う開発スレはここのことです。
(2ch のスレッドは落ちました)
0044デフォルトの名無しさんNGNG
TAB が消えてしまいました

かちゅーしゃ用定義
isweb43.infoseek.co.jp/computer/am_dev/cgi-bin/bbs dev 開発室

bbs dev 開発室 とTAB で区切ってください
0045デフォルトの名無しさんNGNG
関数内観数…これじゃ駄目?

int main() {
 class inner { public: static void main() { cout << "ok" << endl; } };

 inner::main();

 for_each(v.begin(), v.end(), inner::main());
}
0046デフォルトの名無しさんNGNG
関数内関数はPerlでもいけます
0047デフォルトの名無しさんNGNG
関数内関数激しくホシィ
0048デフォルトの名無しさんNGNG
>>45
あ、なんかそれいい。
0049デフォルトの名無しさんNGNG
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;
0050デフォルトの名無しさんNGNG
うげスペースが消えてる
0051デフォルトの名無しさんNGNG
(´-`).。oO(>>45のやり方初めて知った・・・サンクス
0052(≧▽≦) ぶわっはっはっはっNGNG
なんだC++で関数内関数できるじゃないか (≧▽≦) ぶわっはっはっはっ
0053名無しさん@EmacsNGNG
単にinnerクラスに関数持たせてるだ…ゲホッゲホッ.

>>48
使うのはいいだろうが, メンテナンスする側に回ると….
経験談から.
0054デフォルトの名無しさんNGNG
メンテナンスになんか問題あるの?
その関数からしか使われない関数ってのが明示されて、逆にいいと思うんだけど。
あったらいいなと思ってた > 関数内関数
0055名無しさん@EmacsNGNG
>>54
innerクラスに50個近く関数内関数があるとねぇ….
機能自体に問題はないと思うけど, あれ以来トラウマがな….
キチンと使えるなら問題ないのかもしれんが.
0056デフォルトの名無しさんNGNG
C/C++で無名関数って作れたっけ?
perlだとできるよね。あれで、関数内関数みたいな事の代用できそう。
0057デフォルトの名無しさんNGNG
>>55
いや、これから使おうと思うのでトラウマになるようならデメリットあるなら、教えて欲しいのだが・・・
それ本当に関数内関数と関係ある?
0058名無しさん@EmacsNGNG
>>57
いや, 多分ない. 始めて見た時の使い方があまりにもアレだったんだと思う.
普通にクラス作る時みたいに旨く切り分けてinnerクラスにすればオケーだよ.
0059デフォルトの名無しさんNGNG
そか、ありがとう。
0060デフォルトの名無しさんNGNG
呼び出し元のさらに呼び出し元に、指示された回数分一発で戻れる
multi_return()みたいなのを使いたいときがある
0061デフォルトの名無しさんNGNG
>>60
setjmp(), longjmp()じゃ駄目なの?
0062デフォルトの名無しさんNGNG
>>60
例外使え
0063デフォルトの名無しさんNGNG
>>62
ああ、そうか。
例外使えばやりたかったことストレートにできる。
どうも。
0064名無しさん@EmacsNGNG
これでメンテナンス性に優れたコードが世に増えたわけだ.
>>62よ, ありがとう.
0065デフォルトの名無しさんNGNG
無名関数ってどんなの?

void (* pf)(int n) = { cout << n << endl; };

vector< int > v(10);
for_each(v.begin(), v.end(),

こんな感じ?
0066デフォルトの名無しさんNGNG
無名関数ってなに?
0067デフォルトの名無しさんNGNG
無名関数というより、無名関数へのリファレンスか。
perlの話だけど。
実際に使ったことない(その上ラクダ本会社に置きっぱなしな)ので
例は書けないが、

my $foo = sub {
  print "ちんこギター\n";
}
&$foo; # これで実行(?)

こんな感じだったような…
0068デフォルトの名無しさんNGNG
で、なんつーか自己レスみたいなもんなんですが、
Cでは(ちゃんと普通に定義されている)関数へのポインタは作れる。
でも、その場限りの、無名関数を定義して、そのポインタを保持することはできない。

これでいいんだっけ?
C++も同じか。
無名クラスは作れても、無名関数は作れない。(のか?
0069名無しさん@EmacsNGNG
>>67
my $foo = sub {
  print "ちんこギター\n";
}; # (*)
&$foo;

(*)の部分にセミコロンがいる, そんだけ.

0070デフォルトの名無しさんNGNG
>>69
なるほど。サンクスコ。
(…しかし俺のうろ覚え知識はスゲーぜ…)
0071名無しさん@カラアゲうまうまNGNG
>>68
> でも、その場限りの、無名関数を定義して、そのポインタを保持することはできない。
つーかランタイムに関数を作る方法は(一般に)ない。
0072デフォルトの名無しさんNGNG
コンパイラをラップしたライブラリで動的にコンパイル&実行
0073デフォルトの名無しさんNGNG
>>71
C/C++みたいな、非スクリプト言語じゃ無理って事かな。
処理系がどう実装されてるか、とかの話になると良く分からん。
0074デフォルトの名無しさんNGNG
あ、Cで、関数のプロトタイプ宣言を
別の関数の中に置く事ができたような気が
0075デフォルトの名無しさんNGNG
できますが何か?
0076デフォルトの名無しさんNGNG
>>74-75
知らなかった。それは便利ですな。
0077デフォルトの名無しさんNGNG
でもプロトタイプ宣言がちょっと深いところにあったとしても、
関数定義のうしろでは普通に使えちゃうんだよね。
0078デフォルトの名無しさんNGNG
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()があるくらいだから、
オブジェクトの移動くらいサポートしてもいいと思うんだけど。
0079デフォルトの名無しさんNGNG
C言語にテンプレートだけ追加した言語が欲しい。
C++はコンストラクタや演算子オーバーロードや例外等などの
プログラマから見えない処理がムカツク。
0080デフォルトの名無しさんNGNG
 _____
/@@\
|三Å三| ・・・
\_____/
6(---)o
 O-O
0081名無しさん@EmacsNGNG
俺、Javaに列挙型とテンプレート付けてネイティブコードを吐き出してくれれば
それでいい。1.5で始めの2つは付くかも…らしいんだけど。
0082デフォルトの名無しさんNGNG
俺はGCが無くなってデストラクタが作られればそれでいい
0083デフォルトの名無しさんNGNG
Javaって列挙型って無かったの?
0084名無しさん@EmacsNGNG
ない。前身になったOwkにはあったんだっけな…忘れた。int型の定数で代用するか、
クラスにしてしまうかで代用。俺は用途にとって使い分けするけど。
前者は変な入力があった場合にメソッド内でIllegalArgumentExceptionあたり
投げたりとかしないといけないし、後者もnullの入力は止めれないから美しくないと思う。

C#ってデストラクタ無いの?GCはあるみたいだけど。
0085デフォルトの名無しさんNGNG
どっちもない
0086名無しさん@EmacsNGNG
自己レスだけど。
http://www.c-sharpcenter.com/Tutorial/GC.htm

GCあるじゃん(笑)
0087デフォルトの名無しさんNGNG
あたりまえじゃん
0088デフォルトの名無しさんNGNG
GCってさ、「掃除のおばちゃん雇うから、もうごみ箱いらないよね」っていうこと?
0089デフォルトの名無しさんNGNG
>>88
そう
それでゴミをそこら中にまき散らし
掃除のおばちゃんがゴミをいくつか拾い忘れたりする
0090デフォルトの名無しさんNGNG
拾い忘れるんじゃなくて、それがゴミかどうかわからないのでは。

更に整理整頓までしてくれるおばちゃんもいるのだが、雇用条件が厳しいらしい。
0091デフォルトの名無しさんNGNG
×owk
○oak
か?
0092sageNGNG
>>91
AWKでは?
0093名無しさん@EmacsNGNG
>>91 >>92
typo指摘thx。樫の木が語源だからOakですたい。
0094デフォルトの名無しさんNGNG
アゲ━━━━━━(゚∀゚)━━━━━━!!!!!
0095デフォルトの名無しさんNGNG
>>43

http://pc3.2ch.net/test/read.cgi/tech/1020711295/

まだ落ちてない気がする…どちらにしろ寂しいのは間違いないが。
作るって言ってた人も最近見かけないし。
0096デフォルトの名無しさんNGNG
>>94
貴様さっきからそのAA使いたいだけちゃうんかと(略
0097デフォルトの名無しさんNGNG
>>79
>C言語にテンプレートだけ追加した言語が欲しい。
>C++はコンストラクタや演算子オーバーロードや例外等などの
>プログラマから見えない処理がムカツク。
コンストラクタ、オーバーロード、例外等の機能を使わなければいいだけなんでは。
0098デフォルトの名無しさんNGNG
>>97
標準ライブラリ使わない、ってキッツイ気が
てゆうかどれも、見えない処理でも無いけどな…
0099デフォルトの名無しさんNGNG
Cの標準ライブラリ普通に使えるぞ。
0100デフォルトの名無しさんNGNG
すまん。意味が分かった(w
0101デフォルトの名無しさんNGNG
昔言語仕様(ループとか)まで記述できる言語を考えた。
gotoとifだけで。

__declstruct void for(init; test; inc) {statement}:
{
init();

back:
if (!test()) {
goto end;
} else {
statement();
inc();
goto back:
}
end:
}

Lispってこういうことできるん?
0102デフォルトの名無しさんNGNG
>>101
macro で出来るよ。
■ このスレッドは過去ログ倉庫に格納されています