トップページ⇒tech
246コメント63KB

【冬厨】Cの文句は俺に言えぇ!part1【歓迎】

■ このスレッドは過去ログ倉庫に格納されています
0001 ビル・ジョブス NGNG
( ´o`)y━・~~Cの文句は俺に言えぇ

Cに関する論争、C++に関する論争、Recoder論争、何でもありだ。
ただしどんな論争でも初心者はお断りだ。参加したい香具師は知ったかできる程度まで
勉強して来い。できないならテメー相応のスレへ逝け。
特に、
   C 言 語 初 心 者 は 「C言語は俺に聞け」 ス レ へ 逝 け。

ちなみに、「C言語は俺に聞け」はライバルであり朋友(ポンヨウ)だ。

(*注意:適切なスレに誘導された場合は指示に従うようにしてください。)
0153デフォルトの名無しさんNGNG
式は不定とか未定義とかくだらない事言わないで
きちんと評価順を決めるべきだ。副作用も起こる位置を決めるべきだ
int i=3;
++i=++i;はi==5になるべき。
(右辺を評価しその副作用を起こし、左辺を評価しその副作用を起こし、
最後に代入i=iを行う。)
0154デフォルトの名無しさんNGNG
右辺を評価し、代入してから、左辺を評価しなければ5にはならない。
0155デフォルトの名無しさんNGNG
C++がヘッダファイルと不可分であるのは気に入らない
特にtypeinfoとnewだ。既に定義されている例外を投げるのは
気持ち悪いったらありゃしない。せめて#include<new>しなければ
newは失敗時に0を返すとか出来なかったのか。
0156デフォルトの名無しさんNGNG
>>152
我慢できない
>>154
++iはiの参照を返すから++iを二度行った時点で参照先は5になっている
0157デフォルトの名無しさんNGNG
そんな事をしても、七行プログラムで役に立つくらいで
実際には、ソースの可搬性が落ちるだけ
>>153だけでも>>154との副作用の見解が違うのだから
但し、評価順を決めるのだけは同意
0158デフォルトの名無しさんNGNG
C++でmain関数を呼べないのは気に入らない
0159デフォルトの名無しさんNGNG
コンパイラのオプションかなんかで
ガーベッジコレクション ON/OFFが出来るようにして欲しい。
0160デフォルトの名無しさんNGNG
>>158
これでガマンして

int main( int argc, char *argv[] )
{
  return Main ( argc, argv ) ;
}
#define main Main
0161デフォルトの名無しさんNGNG
ラベル名はアドレスを返すべきだ。
そしてgoto label_pointer;(つまり間接goto)をサポートすれば
いろいろ面白いことが出来る。ついでにgosubもサポートしろ
0162デフォルトの名無しさんNGNG
break label;は絶対必要だ
0163デフォルトの名無しさんNGNG
もちろん
continue label;もだ
0164デフォルトの名無しさんNGNG
sizeof ( 関数 ) があれば便利だ
さらに、sizeof ( 関数::ラベル ) があればさらに便利だ
0165デフォルトの名無しさんNGNG
int main( int argc, char *argv[] )
{
int (*pmain)(int,char **)=main;
(*pmain)(argc,argv);
}
0166デフォルトの名無しさんNGNG
関数テンプレートには型を自動解決する機能があるが
クラステンプレートにはない。しかしコンストラクタで
型解決する機能があってもいいはずだ。
vector v(10,0);ならばvecor<int>
vector v(10,0.0);ならばvector<double>だ
0167デフォルトの名無しさんNGNG
>>164
なんに使うの?
ローダ?
0168デフォルトの名無しさんNGNG
>>164
> さらに、sizeof ( 関数::ラベル ) があればさらに便利だ
何返すんだ。
0169デフォルトの名無しさんNGNG
>>167
ひみつ
>>168
ラベル{}で括られたサイズ
0170デフォルトの名無しさんNGNG
構造体と同じようにクラスを初期化する書式を許すべきだ。つまり
StructA a={1,"Mike",17};のように
ClassB b={1,"Mike",17};を可能にする。もちろんこれは
ClassB b(1,"Mike",17);と同等だ。これでクラスの配列も
ClassB ba[2]={{1,"Mike",17},{2,"Sue",16}};というように出来る
ついでにnewでも
ClassB *bp=new BlassB[2]{{1,"Mike",17},{2,"Sue",16}};のように
出来るようにする
0171デフォルトの名無しさんNGNG
なんで一文字目が大文字なんだろう。
0172デフォルトの名無しさんNGNG
ブロック構文{}は常に省略可能であるべきだ。
ifやforの後のように。そうすれば
int max(int x) return x>=0?x:-x;
try max(5);catch(...);
などと書ける。K&Rの宣言法がなくなったC++では可能なはずだ
0173デフォルトの名無しさんNGNG
>>172
無理
void hoge::Hoge() const int value = 0; // const があいまい
0174デフォルトの名無しさんNGNG
>>172
馬鹿馬鹿馬鹿馬鹿馬鹿馬鹿馬鹿馬鹿馬鹿馬鹿馬鹿馬鹿
0175デフォルトの名無しさんNGNG
C言語プログラミング H.M.ダイテル + P.J.ダイテル 著

良書中の良書。バイブルだ。おまえら、最低限これを理解してから物言えよ。
0176デフォルトの名無しさんNGNG
バイブルはK&R
0177デフォルトの名無しさんNGNG
構造体とかクラスとか定義した後インスタンスを
作らないとならないでしょう?
関数もそうしたらどうだろう。

int F(int x){return x;}
F f;//これではじめて使える。
F g,h,i;//いくらでも作れる。
int MAIN(void){return 0;}
MAIN main;//mainもこうして作る。
0178デフォルトの名無しさんNGNG
ファイルスコープでのインクルードの様な物が必要だと思うんだが
---myold.h---
#include <stdio.h>
---eof---
---myold.c---
#include <myold.h> //stdio.hもばらまかれる。
---eof---
に対して
---mynew.h---
#static_include <stdio.h>
---eof---
---mynew.c---
#include <mynew.h> //stdio.hは忘れ去られる
---eof---
のように
0179デフォルトの名無しさんNGNG
>>177
そりゃもうC言語じゃないな
0180デフォルトの名無しさんNGNG
マクロに型が付いてる場合は
型によって、違う結果に展開出来れば便利ポ
#define foo( int i ) bar_int( i )
#define foo( double d ) bar_double( d )
0181デフォルトの名無しさんNGNG
基本はCなのは分かるが入り込むのは危険だ
ほどほどに
0182デフォルトの名無しさんNGNG
マクロを無駄に技巧的に使う奴は芯でください

ていうかテンプレートをください
0183デフォルトの名無しさんNGNG
テンプレートを技巧的に使う奴はどうなんだ?
0184デフォルトの名無しさんNGNG
おまえらC++つかえよ
0185デフォルトの名無しさんNGNG
>>183
俺が理解できないので禁止。Boostなどもってのほか
0186デフォルトの名無しさんNGNG
switchブロックの中でbreakが使えるのだから
continueも使えるべきだ
0187デフォルトの名無しさんNGNG
>>159
業務アプリ向けなんかで需要がありそうなもんだけど、
どうしてないんだろうね。
0188デフォルトの名無しさんNGNG
>>185
ネタじゃなかったら死んでいいよ。
0189デフォルトの名無しさんNGNG
おまえらObjective-Cつかえよ
0190デフォルトの名無しさんNGNG
ヌル参照を導入して参照の付け替えを可能にする
0191デフォルトの名無しさんNGNG
>>187
メモリの確保/解体のタイミングに依存してるプログラムはどうすんのさ?
0192デフォルトの名無しさんNGNG
>>187
GC OFFにしたらどうやってヒープのメモリ解放するんよ?
0193デフォルトの名無しさんNGNG
>>191-192
よう分からんけど、自分で細かく制御するんじゃないの?
0194デフォルトの名無しさんNGNG
>>193
ソースコード内部でそれをプログラマがやっているなら、
GCがあろうがなかろうが、どうせ何もしていないことになるので、
GCがオーバーヘッドなどにはならんはずだが。
0195デフォルトの名無しさんNGNG
>>194
>GCがあろうがなかろうが、どうせ何もしていないことになるので、
何かしてたら?
0196デフォルトの名無しさんNGNG
>>195
ああそうか。すまん。
0197187NGNG
何か勘違いしてるかもしんないけど、
自分でメモリ管理をするならGC OFFで、
自分でメモリ管理をしないならGC ON
という二者択一の使い方を考えてたんだけど。
自分でメモリ管理をする必然性のあるプログラムは
そんなにないと思うから、
そーゆー場合はメモリ管理をGC任せにできればなぁと
思ったわけ。
0198デフォルトの名無しさんNGNG
virtual変数がホスイ
で、返り値の型が同じであれば、
変数と関数を混ぜられるようにしてホスイ
0199デフォルトの名無しさんNGNG
>>198
関数ポインタの集合でなんとかならんか?
変数は、「引数をただ返すだけの関数」にするとか。
0200デフォルトの名無しさんNGNG
>>199
ただ単に「引数をただ返すだけの関数」を作りたくないからホスイの
まぁ、変数と関数を混ぜるのは、色々と問題があるから難しいと思うけど
0201デフォルトの名無しさんNGNG
戻り値でもオーバーロードできるといいのに
0202デフォルトの名無しさんNGNG
>>201
常に戻り値を受けるとは限らないだろ。戻り値を受けないと判断できない。
0203202NGNG
×判断できない。
○どの関数を使えばよいのか判断できない。
0204202NGNG
あ、戻り値を受けない場合は戻り値の型がvoidの関数を選ぶのか?
いちいちそれを作らなければならないのは面倒だ。
0205_NGNG
http://homepage.mac.com/hiroyuki44/jaz09.html
0206デフォルトの名無しさんNGNG
グローバル変数ってなんで嫌がられるの?
0207デフォルトの名無しさんNGNG
あの気の狂った関数ポインタ宣言はどうにかならんのか?
0208デフォルトの名無しさんNGNG
>>206
わからなければおまえの預金通帳と印鑑の置き場を
公園のベンチにしてみろ。
0209デフォルトの名無しさんNGNG
>>208
なかなかうまいたとえだな
0210206NGNG
ん?なんで?
他の人に取られちゃうなぁ、ってことしかわからん。
0211デフォルトの名無しさんNGNG
ちょっと違う

わからなければおまえの彼女を公園のベンチに固定してみろ
0212デフォルトの名無しさんNGNG
別にCの文句じゃないな。
0213206NGNG
街のチンピラのホットステーションになるねぇ
0214デフォルトの名無しさんNGNG
do{}while(){} を私に下さい
0215デフォルトの名無しさんNGNG
>>202
優先順位を決めればいい
void>int>char>double>float>その他クラスはアルファベット順
0216デフォルトの名無しさんNGNG
>>206
とある部屋に本棚が大量にあります
各本棚はジャンル別に事細かく分けられてます
各本棚には、それなりの量の本があります
ローカルな本は各ジャンルに合った本棚にしか置く事が出来ません
グローバルな本はジャンルに関係なく何処にでも置く事が出来ます
先日、私は、とある一組のグローバルな本を読みました
上巻は無事に読み終えたのですが、下巻の本が、何処にもありません
どうやら、誰かが、もう必要ないだろうと思って捨ててしまったらしいです
しかし、私には、どうしても必要な本なので、本を探して買う事にしました
結局、その本自体には、あまり価値が無いのですが
すでに、絶版となっていた為、手に入れるのに、かなりの労力を必要としました
明くる日、私は、懲りずに、一組のグローバルな本を読んでいました
今度は、上下巻揃っている事を予め検索して確認していたので安心していました
しかし、上巻を読み終え、私は旋律しました
ローカルな本なら、絞り込み検索すれば本棚の名前が出てくるのに
なんと、グローバルな本は、絞り込み検索しても本棚の名前が出てこないのです
結局、上巻の本の内容を頼りにジャンルを絞り込み、自分で探しましたが
似たようなジャンルの本棚が大量にある為、私は断念しました
0217デフォルトの名無しさんNGNG
ブックオフみたいだな
0218206NGNG
つまりグローバル変数って全部の関数から参照できるけど
それゆえ、変数名で混乱しやすい(ソースを後でチェックしたとき混乱する)ってこと?

そして、それを避けるために関数から値を2つ以上受けるときはポインタを使うの?
0219デフォルトの名無しさんNGNG
まぁそういうこと、
必要ないものまで他人に見せると、
余計な変数に余計な変更を加えられたり、
どれを使えばいいのかわかりにくくなったり、
いいことはない。

必要な情報を必要なときにだけ渡して、
内部的な情報は外部から隠蔽してしまうべき。
0220デフォルトの名無しさんNGNG
ネームスペースをください
0221山崎 渉NGNG

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
0222デフォルトの名無しさんNGNG
冬厨ハッケソ
0223デフォルトの名無しさんNGNG
C++でいいデリゲートの実装方法教えてくらさい
0224デフォルトの名無しさんNGNG
>>223
private継承するとか。
0225デフォルトの名無しさんNGNG
>>224
デリゲートを分かってませんね。
0226山崎 渉NGNG
(^^)
0227山崎 渉NGNG
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン
0228デフォルトの名無しさんNGNG
あの気の狂った関数ポインタ宣言はどうにかならんのか?
0229デフォルトの名無しさんNGNG
慣れれば非常に読みやすいぞ
0230デフォルトの名無しさんNGNG
>>228
演算子の優先順位を知っていれば問題ない。
↓ここがおすすめ。
ttp://www.arcpit.co.jp/winapi/api_01/ap010404.htm
0231デフォルトの名無しさんNGNG
慣れればどんなものでも読めるだろうがもっとbetterな構文があったはず。
char *(*(*p[])())[]とか読みやすいとはいえない。俺的には。
0232デフォルトの名無しさんNGNG
>>231
確かにな
0233デフォルトの名無しさんNGNG
>>231
そういうコーディングをする前に、設計をなんとかしようと考えた方が良い。
もしくは、C言語はフリーフォーマットである事を活かして、行分割して
良いコメントを付けるのが良い。

と思うが、いかが?
0234デフォルトの名無しさんNGNG
>>233
>分割して良いコメントを付けるのが
分割しないでその前後にデータ構造の表を罫線を駆使して書いて欲しいがな…
コメントって言ったって
「char *の配列を返す関数(引数void)を指すポインタへのポインタの配列」
とかだろ?
意味無いじゃん…いつか必ず誰かが混乱するだけだって
0235デフォルトの名無しさんNGNG
このスレはまだあったのか。
0236デフォルトの名無しさんNGNG
>>234
そう書いてあるだけでもずいぶん助かる
0237デフォルトの名無しさんNGNG
関数ポインタはジャンジャン typedef してほしいな・・・


漏れは返り値 void の関数っつーのが気に入らない
本当は代入の構文も嫌いだが、これはもう慣れちゃったしな・・・
0238デフォルトの名無しさんNGNG
>>237
代入の構文のどこが嫌なんだ?
0239デフォルトの名無しさんNGNG
>>238
= は外の世界では等号だから。
不気味に感じる初学者はそれなりにいるみたいだよ。

BASIC のように
Let i = 0
(let は省略可能)
とか Pascal のように別に記号を設ける方が好み。

もう慣れちゃったから、違う構文だと不便に感じるだろうけど。
0240デフォルトの名無しさんNGNG
= は慣れの問題かな。
それより、関数が変数持ってるってのがぁゃιくてならない。
0241デフォルトの名無しさんNGNG
>>240
function を一律「関数」と訳した奴が悪い。
0242デフォルトの名無しさんNGNG
冬なのでage
0243デフォルトの名無しさんNGNG
このスレ、面白くもなんともないな。
0244デフォルトの名無しさんNGNG
& | ^
この3つはなんで優先順位が違うんだ?
俺は同じでいいと思うんだけどさ。(必要に応じて括弧使え)
&&と||も同様。
0245デフォルトの名無しさんNGNG
一応、ANDは積、ORは和、相当らしい。
0246デフォルトの名無しさんNGNG
>>245
そうか!そう考えればいいのか。
長年の疑問が解決した。Thx
■ このスレッドは過去ログ倉庫に格納されています