327 :
デフォルトの名無しさん:03/11/16 20:20
IT業界にアージャイル開発とデザインパターンを広めよう!
C言語を使ってかなり苦労したので
その苦労を最小限におさえるために
アージャイル開発、デザインパターンを
多くのプログラマに使って欲しいと思うことがある。
一種の挨拶みたいなものだね。
「なるべく挨拶を心がけましょう。」
「なるべき綺麗な字で書きましょう。」
のように
デザインパターンを使うこと、アージャイル開発することが
プログラマの習慣、常識になってほしい。
なんとか、デザインパターン文化、アージャイル開発文化を押し広げられたら・・・。
IT業界の将来はオブジェクト指向とアージャイル開発が握っています!
なんだこのスレまだあったのか……
329 :
デフォルトの名無しさん:04/04/14 21:31
関数の頭にしか変数宣言できないなんてC++の俺には耐えられない。
Cの標準ライブラリはコンパイル済みの関数で構成されてるためコールのオーバーヘッドがあるが
STLや最近のiostreamはテンプレートで実装されてるからオーバーヘッドが少ない、とか?
まあ、分岐予測ミスやキャッシュのミスヒットなんかに比べたらたかが知れてるだろうけど
331 :
デフォルトの名無しさん:04/04/15 11:45
332 :
デフォルトの名無しさん:04/04/15 12:05
>>330 テンプレートだからといってその場で全て展開されるわけではない。
型ごとの関数が生成されて、それが呼び出されるだけの話。
知ったかでくだらない妄想を語る前に、出力されたコードくらいみろ。
>>332小物の操作関数ならインライン展開されるじゃん
334 :
デフォルトの名無しさん:04/04/15 13:07
>>333 VC7.1で以下Aをintで使用。
template<class A> int test(A a)
{
return a+1;
}
??$test@H@@YAHH@Z PROC NEAR; test<int>, COMDAT
; 12 : return a+1;
moveax, DWORD PTR _a$[esp-4]
inceax
; 13 : }
ret0
??$test@H@@YAHH@Z ENDP; test<int>
で具体的にどういった関数を作れば展開されるの?
335 :
デフォルトの名無しさん:04/04/15 13:22
>>334 inlineキーワード付けるという基本的なことすら理解できないアホですか?
それ以前に、Visual C++.NET単体(Standard)は最適化スイッチ無効という罠
337 :
デフォルトの名無しさん:04/04/15 14:14
>>335 templateとinlineは別の話。
inlineなら小物云々もまるで関係ない、まったくの後出しじゃんけん。
恥の上塗りはみっともないぞ。
次からは知ったかでいい加減なことを言うなよ。
inlineを使えばどんな関数でもインライン化されるわけじゃないことくらいアセンブリコードの読める人ならわかるでしょ。
クラス内で定義された関数はinlineキーワードの有無にかかわらず展開の対象になりますが?
STLのsortと同等のものをtemplateを使って自分で実装してみれば、いや、わざわざ実装してみなくても、
効率面での違いは解るもの
Cの標準ライブラリのqsortはわざわざ要素の比較の関数を定義し、その関数ポインタを渡してやらなきゃいけない
その都度車輪を発明すればいいじゃない、ってのは無しだよ
>クラス内で定義された関数はinlineキーワードの有無にかかわらず展開の対象になりますが?
これもclassの話であって、templateとは別の話。
いつまで恥の上塗りを続けるつもりなんだ?
>>340の脳内ではクラスとテンプレートとインラインは排他的にしか利用できないのですか?
>>341 延々と後出しじゃんけんか。
知ったかするだけあって、間違ったプライドだけは高いな。
こっちは困らないから、そのまま恥の上塗りを続けてくれ。
>>342 C++で提供される機能の1つを例に出せば、それの排他的利用法しか思い浮かべることのできない
思考停止っぷりにはかないません。
templateを使わなくても、class中に関数を書いたり、
inlineキーワードを用いれば、インライン展開される。
これは併用するも何も、別の機能の話。
>STLや最近のiostreamはテンプレートで実装されてるからオーバーヘッドが少ない
つまりテンプレートだからではなく、インライン展開されやすいように作られているから。
テンプレートは型を汎用的に扱うためのものであって、
インライン展開したいだけであれば、テンプレートとは無関係に作れる。
346 :
デフォルトの名無しさん:04/04/15 16:02
テンプレートベースのライブラリは主に未コンパイルのコードの記述されたヘッダのみで
構成されてるわけだから、インライン化できるものはインライン化するのが妥当だし、
STLなんかは事実そうなってる。
演算子の + や == を利用する度に関数コールのオーバーヘッドが生じてたんじゃ使い物にならない。
もちろん、テンプレートそのものがオーバーヘッドを無くしてるわけじゃないが
プリプロセッサマクロの代替として実装された経緯を考えれば、inlineとtemplateは切り離せないし
STLのsortにせよ、わざわざ比較関数のポインタを渡す必要がないのは、
汎用化してるからでしょう
Cのqsortやbsearchをインライン化しようと、比較ルーチンを関数として呼び出してる以上は
速度の向上は殆ど見込めないわな。
テンプレート無しに、比較ルーチンを関数化しなくていい方法があるなら、教えてもらいたい。
その都度型に合わせてコードを書けばいいじゃないか、と言われれば、inlineも要らない。
それこそ、その都度自分で展開すれば良い。ついでにプリプロセッサマクロも要らない。
348 :
デフォルトの名無しさん:04/04/15 20:46
某金融機関の社内SE(25)です。
言語歴:研究室でUC→VC(実写エロゲ開発。)→→就職。UC漬(プチC++)→現在Java研修中。
↓ ↑
VBに浮気。 ↑
口当たりのいいRADでいい気になる。
漏れはCが男らしいと思います。
言語使用がより簡潔でさっぱりしてるから。
急な仕様変更にも愚痴をこぼさず、
遅くまで黙ってゴリゴリ作っていた高倉健似の先輩を見て
漏れもいつかああなりたいと思いました。
まあCかC++かではなく、
RTL、SS、WinならAPIや.NETFWなどを見切ってこその、
老師なんじゃないかなぁ。
Cのエディターって、例えばマイクロソフトのVisualC++とか、できたらフリーのエディターがいいんですが
自動メンバ表示みたいな機能ある?
宣言または参照されてる構造体のメンバをタグ名を入力したら選択できるように表示されるとか
参照するヘッダーで定義されている関数や、自分で定義した関数など
「関数名+(」を入力したら引数の型や数が表示されるような機能。
インテリセンスって奴ですけど、もしご存知でしたら教えてください。
お願いします。
C/C++なんて自己満足じゃ使いこなせない言語だよ
Eclipse
352 :
デフォルトの名無しさん:04/04/17 12:59
C?がいいと思います。
>>353 関数ポインタの利便性を説明できるレベルなら大丈夫だと思われ.
>>354 コールバック関数は基本だけど
ぶっちゃけ関数テーブルつかって分岐処理ぐらいまでじゃねえ?
キューに突っ込んで優先度付で処理するとかあんまつかわんきがする。
他になんか使えるテクニックしってたら教えてほしいんだけど.
>>355 リストビューでソート順を指定するのに比較関数を渡すんじゃなかたっけ?
とりあえずC標準ライブラリのqsortを使えるレベルなら十分.
あとは,
malloc( sizeof(WNDCLASSEX) + sizeof(MYDATA) );
みたいなテクニックもちゃんと理解できないといけない.
まぁ関数ポインタが使える人ならメモリの動的確保もちゃんとわかってると思うけど.
>>354>>355 ありがd
とりあえずやってみて
挫折したら
再度Cの入門書をやり直すことにします。
358 :
デフォルトの名無しさん:04/04/18 10:45
ふつうCをやればC++もやるだろ
359 :
デフォルトの名無しさん:04/04/18 11:57
エディタはどれ?
360 :
デフォルトの名無しさん:04/04/30 19:43
>>1 どっちもやれよ・・・
両方言語仕様自体はほぼ同じだぞ
C++でC使えるし
単に両言語の違いは宗教のようなもんだ
#defineではなくstatic constを使え とか
概念的なものばかり
その2つは自分でよ〜く考えて選べばいい
Windows派ならC++
Unix派ならC
っていう観点はどう?
>>360 >単に両言語の違いは宗教のようなもんだ
C++の深奥をご存じないですね
363 :
デフォルトの名無しさん:04/04/30 20:32
>>362 言うと思った
だから宗教だと言ったんだよ。
一番深いところは、generic なとこかな。
あとは他と大して変わらん。
>>361 Unixこそc++という香具師もいるにはいる。
個人開発またはチームの平均年齢が30以上ならC
チームにガキが居ればC++
>>363 すいません.宗教という言葉で意図しようとしているものを汲み取らずに
噛み付いてしまったようです.申し訳ない.
では,宗教という言葉で意図しようとしようとしているものは何なのでしょうか?
少なくとも私は,
>両方言語仕様自体はほぼ同じだぞ
これにはさすがに同意しかねます.
C++が出来る = Cもできる
のが当然と思ってたが、違うのか?
>>368 C++ ≠ C
ゆえに、C++ができる ≠ Cができる
>>369 C++ができる ∋ Cができる
だろ?
C++ができるならばCもできるはず。
CができるからといってもC++ができるとは限らない。
C++ ∋ C
が証明できないので
C++ができる ∋ C
も証明できない。
ってことでしょ。
CができないのにC++ならできる、というのはどういう状況なんだよ。
ありえないだろ。
C++をベターCとして利用するという選択肢は?
Cが出来ればC++でもそんなに理解は難しくないと思うけど。
逆に、C++から始めた人は、C非互換の文法に慣れてるはずだから、Cはすぐにはとっつきにくいんじゃないかと。
C++で書いたコードをCで使うのは難しいしね。逆は容易だけど。
C++から入門した人からすれば、
・クラスやテンプレートがない
・関数の多重定義が出来ない
・定数はenumやマクロで定義し、static constは使えない
・new/deleteは無く、mallocやfree
・例外処理がtry/throw/catchではなく、setjmp()/longjmp()
その他いろいろ、覚えなきゃならないことは多い。
最近、言語にこだわるやつ多すぎる。
言語使用やライブラリの仕様を覚えるのにすべてをつぎ込んで、実際のプログラムはほとんど書けないやつが多い気がする。
言語仕様より、実際のプログラムを作る方が目的だろ。
いくつもプログラムを書いていくうちに、いろいろなことを学ぶと思う。
理論先行で実践的なやつが少ない気がするよ。
プログラミングで一番重要なのは、言語仕様を理解することじゃなくて、
プログラミングの対象となるものの知識(業務アプリならその業務自体の知識など)だよ。
と、落ち毀れてSTLもままならないコーダが喚いています。