トップページ⇒tech
1001コメント269KB

今はC言語は選ばない方がいい

■ このスレッドは過去ログ倉庫に格納されています
0001ジョセフ ◆.VUCb/gSgo NGNG
このCは約30年前に作られた低レベルな処理しかできない手続き言語である。
言語仕様自体に入出力は無く、関数呼び出しで呼び出し側の変数を操作するにはなんとポインタしか手段が無いのである。
当然オブジェクト指向なんて考えて作られているわけがない。
文字列もポインタを使ってのアクセスだしmalloc/freeでのメモリリークの心配もある・・・これで高級言語?信じられるだろうか。
その上、標準ライブラリはとても貧弱でGUIやネットワークが普通に使われるこのご時世にはとても不適当である。
こんなんじゃまともなプログラムなんて作れるわけがない。

現在はJavaやC#、Delphiなど魅力的な言語は多数ある。
これからプログラミングを始めたいという方はそちらをお勧めする。
0153デフォルトの名無しさんNGNG
>>152
C#の方がもうじき廃止されるんでしょ?
0154デフォルトの名無しさんNGNG
C言語マンセーな方はGNUへどうぞ。
2chはCを推奨しません。
0155デフォルトの名無しさんNGNG
C#のWebアプリはJavaより鯖に負荷がかかるみたい。とにかく遅い。
VC++に戻ろうかと本気で考え中。
0156デフォルトの名無しさんNGNG
Java
0157デフォルトの名無しさんNGNG
>>154
(゚Д゚)ハァ?
0158デフォルトの名無しさんNGNG
>>154
>>148
0159デフォルトの名無しさんNGNG
良すれもげ
0160デフォルトの名無しさんNGNG
就職活動で老人どもに気に入られるにはCも覚えておいたほうがいいってことですか?
0161デフォルトの名無しさんNGNG
MSが作るのものに重いものが多いものは、その重さを解消させるための
次のハードを買わせるため?
0162デフォルトの名無しさんNGNG
今はJavaの方が有利だお
0163デフォルトの名無しさんNGNG
老人はCが気に入り。
0164デフォルトの名無しさんNGNG
マジレスするが
CがいいとかC++が最初に選ぶ言語うんぬんなどはどうでもいことではないか?
プログラムの力というのは、
「所定の動き」を「設計」して「コーディング」する能力であって、それは言語とは関係ない。
目的に応じて必要なものを使えばよい。
細かな文法は違うけど文法なんて問題の本質ではない。どんな言語でもプログラムの力は付けられるはずだ。

ただ、「言語そのもの」の使用方法(使い方ね)や「文法」ましてや「クラスの使用法」の学習は多くの方が指摘しているように、
プログラムの力とは別のものだと思われる。不必要とまでは言わないが。
0165デフォルトの名無しさんNGNG
デニス・モッチーは尊敬するがCは嫌いだな。
0166デフォルトの名無しさんNGNG
どうでも良くはないだろ。
最初に学ぶならFortran66よりCの方が楽だと思うが。
0167デフォルトの名無しさんNGNG
C言語だと覚えられないこともある
他の言語でも同じコトだけどな
たまたまC言語で覚えられないことが今は重要だってだけだ
0168デフォルトの名無しさんNGNG
>>164
言語が嫌いなのはわかったから
偉そうなことは自分ができるようになったら言え。
0169デフォルトの名無しさんNGNG
とてもイイこと言ったよ…>>167が
パパ感激しちゃった(TДT)
0170デフォルトの名無しさんNGNG
何かで議論してると、必ず
「そんなことよりもっと重要なことがあるだろ」
と言い出すヤツがいる。
0171デフォルトの名無しさんNGNG
>164
マジレスなら是非とも匿名掲示板でない場所で書いてホスィ。
0172デフォルトの名無しさんNGNG
>>161
それをいったら、Javaの遅さと重さは、
より高速なCPUとメモリを買わせるためか?
0173デフォルトの名無しさんNGNG
そんなことよりもっと重要なことがあるだろ。
0174デフォルトの名無しさんNGNG
>>167
> たまたまC言語で覚えられないことが今は重要

それって具体的に何の事を指してるの?
0175デフォルトの名無しさんNGNG
おい>>164
さっさと出て来い!マジレスなんじゃなかったのか?
0176デフォルトの名無しさんNGNG
>>166
学習でいうなら1ヶ月でいいのでアセンブラ(机上でかまわない)をお勧め
プログラムがメモリにどのように配置され動作するのか理解でき、アドレス、ポインタの概念も理解できる。

>>164
5種類以上の言語でプログラム組んでるけどなにか?
0177164NGNG
176の書き込みの>>164は>>168の間違い

どうでもいいが 175さんどうしてそんなに熱くなっているんだ?
0178デフォルトの名無しさんNGNG
>>176
そんな概念99%のプログラマには不要ですが?
0179デフォルトの名無しさんNGNG
結局、個人的な希望を他人に押し付けたがるおじさんだったわけか。
うざいからもう来なくていいよ。
0180164NGNG
>>178
本気でいってるかい?
それでは聞くが、クラス継承型言語を扱う上でそれがどのように配置されて動作しているか
想像できる? それが想像できるとその後の理解も早いんだよ。

99%にいらないとはまたずいぶんな数字だな。
百歩譲って仕事ではそうかもしれないけど学習には必要だよ。

0181デフォルトの名無しさんNGNG
どう考えたら>>164のようになるのだろう。。。
0182デフォルトの名無しさんNGNG
>>178
そう思ってるだけだろ (・∀・)
0183デフォルトの名無しさんNGNG
>>180
某大学生?
0184164NGNG
>>183
誰それ?

1生=1言語 じゃないと生きていけないわけでもないし、
いろんなケースに合わせて言語やればいいのでは?
仕事に合わせて言語ぐらい覚えろよ(藁



0185164NGNG
つうか
>>4
さんが結論書いてるよ。
0186デフォルトの名無しさんNGNG
>>180
アドレスとかレジスタとかの低水準な機械要素を意識することは
抽象度の高いプログラミングを身につける上で有害だ。
0187164NGNG
>>186
どう有害なの? マジで知りたいよ。
0188デフォルトの名無しさんNGNG
>>180
おいおい、C++のvirtual関数とかメンバへのポインタとか
メモリ配置を理解しないといけないなら、ほとんど誰も
学習できないって(w
0189デフォルトの名無しさんNGNG
>>164の主張はそれなりにわかる。
MSX-BASICでアセンブラを書こうとあがいてた時期が
ポインタの理解に役立ったことは認めるよ。
でもアセンブラを学習目的に使うなら、1ヶ月も要らないと思う。
高校生以上なら、せいぜい6時間あれば概念は理解できる。
それに学習目的なら、アセンブラである必要はないよね。
Cの本に載ってる、単に箱が並んだ図でもいいんじゃないかな。

でも99%とか言ってる奴ははアホだな(w
分野によってはインラインアセンブラくらい書くだろうに。
0190デフォルトの名無しさんNGNG
>>185
だから、5 以降はネタだろ。気にするな。
0191デフォルトの名無しさんNGNG
>>178
石の気持ちをわかってあげられない人はム板にはいりません。
0192デフォルトの名無しさんNGNG
>>187
「抽象」という言葉の意味を考えれば明らかと思われ
0193デフォルトの名無しさんNGNG
>>186
丸投げ君や孫受けコーダをやるのでなければ、
抽象から具体まで理解してないといけないね。
0194デフォルトの名無しさんNGNG
バカの脳内ハードディスクには空きがないんだ YO !
0195174NGNG
167 やーい、漏れの質問に答えてくれYO・・・気になって気になってリコーダーも吹けない
0196デフォルトの名無しさんNGNG
>>189
ほんとにアセンブラが必要なやつなんか1%もいるもんか。
0197デフォルトの名無しさんNGNG
>プログラムがメモリにどのように配置され動作するのか理解でき、アドレス、ポインタの概念も理解できる。
たしかにアセンブラを知ってれば
ポインタでつまずく人は一人もいない。
ただ、x86とかじゃなくて
必要最小限の命令セットを持ったバーチャルなCPUで
学習しないと、やる気はでないかも。

で、メモリ上で何が行われているのか知ってれば、
スタック、ヒープの違いもわかるだろうから、
ローカル変数のアドレスを保持しておいて、
スコープを抜けてからアクセスしてドッカーンって事になる
事もないだろうし、
オブジェクト指向ならポリモーフィズムがどのように
実現されているかもなんとなく想像がつくだろう。
0198デフォルトの名無しさんNGNG
164さんにやさしくされたい。
0199デフォルトの名無しさんNGNG
例えば、
class A{
a(){
b();
}
b(){
print("a");
}
}
class B{
override b(){
print("b");
}
}
main(){
A a=new B();
a.a();
}
とやった時何が起きるかも容易に想像できる。
まあ、言語使用依存である事は確かだけどw
0200デフォルトの名無しさんNGNG
>>192
抽象的な概念と、ハード寄りの概念は衝突しない。
衝突するのは、単に片方だけを学習しつづけてしまうから。

両方やればいいってこった。
0201デフォルトの名無しさんNGNG
じゃあお前らC++でメンバへのポインタをどうやって表現してるか
しってるのかよ(w
0202デフォルトの名無しさんNGNG
おまえら、多重継承されたクラスのvtblがどうなってるのか
わかってますか?
0203デフォルトの名無しさんNGNG
GUI部品やスレッドの内部を知って使えってか?
そんなん無理に決まってるだろ!
0204デフォルトの名無しさんNGNG
だいいち、AdaのACCESS型やPascalのポインタならともかく
Cのポインタと整数がごっちゃになった演算なんて
たいていのプログラマには有害なだけだもん。
素直に配列使ったほうが速いし。
0205デフォルトの名無しさんNGNG
>>203
全てを知ろうとするのは素人だと思う。
0206デフォルトの名無しさんNGNG
>>204
だからアセンブラだけやらずにCやPascalやJavaもやれと
何度言ったら。。。。
0207197=199NGNG
ただし、
アセンブラでプログラムを書くケースはないと思う。
だから、必要最低限の命令セットを持った
バーチャルCPUでのアセンブラができる環境があれば
3時間程度いじってればいい。
要するにアセンブラから学べる事がそれほど多くない事も事実。
ただし、俺はその少ないエッセンスが重要だと思ってるけど。

プログラミングってのは
プログラミング言語に詳しいだけじゃダメで
(コーダーならいいけど)
アルゴリズムの知識とか、数学なんかも必要になる。
嘘だと思ったら
http://pc3.2ch.net/test/read.cgi/tech/1020161792/l50
これに参加して優秀な成績を残す努力をしてみればいい。

プログラミング言語に関しては
論理プログラミングのprologを除けば
だいたい似たような物だと思う。
まあ、それぞれの言語には独自の言語機能が実装されていて
C++やJAVAだとオブジェクト指向に関する機能。
Perlなんかでは正規表現の機能。
それぞれ目的にあわせて使えばいいと思う。
オブジェクト指向は、初めてC言語を勉強するのと同じくらい
難しい事だけどね。
0208デフォルトの名無しさんNGNG
>>207
数学的美しさと低次元のキタナラシサを
初学者にいっぺんに詰め込むのか?
0209197=199NGNG
>Cのポインタと整数がごっちゃになった演算なんて
これは誰が推奨してるの?
今時そんな事やってる人はいないでしょ。
0210164NGNG
>>189
昔、専門学校でアセンブラ教えていまして、その時の経験上1ヶ月というわけでして
理解が早い人は6時間でOK<でも1週間1日時間だと1ヶ月なんですよね。
実際(机上・架空)のCPUでの勉強でOK
チューリングや、ノイマンのお話も交えてやると効果高し(藁

で抽象的なプラグラムの話は私はいまだに理解できないですよ。
申し訳ない。

0211デフォルトの名無しさんNGNG
>>205
負け惜しみにもなってないぞ(禿藁
0212デフォルトの名無しさんNGNG
>>210
低次元から入るとそうなる。
0213デフォルトの名無しさんNGNG
>>164には全然賛同できない。
0214197=199NGNG
>>208
俺はどっちも必要だと思うんだよね。
(同時に学習するかは別として)

例えば、いいゲームのアイディアが浮かんでも
実装に関する技術がなきゃ作れないし、
実装できても、コーダーじゃ意味ないでしょ。
どっちかが欠けてるとプログラミングの面白さがわからない。

で、どっちから勉強してもいいんだから
それは個人の問題という事で、どうだろ?
0215デフォルトの名無しさんNGNG
>>209
メモリ上で配列がどう配置されてるかとか教えるんだろ?
「ポインタ+整数」を教えずに教えようが無いじゃないか。
0216デフォルトの名無しさんNGNG
>>211
全てを知ろうとするのは素人だが、内容が想像できないようでは無能だ。
0217デフォルトの名無しさんNGNG
>>214
ゲームのレンダリングみたいに性能要求がシビアなものは
例外として、ふつうにアプリを書く上の実装技術に
「メモリ上の配置がどうなってるか」なんて不要だし
かえって邪魔になる。
0218デフォルトの名無しさんNGNG
>>215
あんた本当にポインタを理解してる?
もしそうなら間違ってもそんなセリフは吐けないはずだけど。
単に自分が痛い目にあったから敬遠してるだけじゃないの?
0219197=199NGNG
>>215
言ってる事がよくわからないんだけど、
ポインタに整数を足すと何が起こるかは
C言語の言語仕様の特徴がすごく出てると思うんだけど。

で、
>メモリ上で配列がどう配置されてるかとか教えるんだろ?
そんな具体的なことじゃなくてもいいのでは?
というか、どこをどう解釈したの?
0220デフォルトの名無しさんNGNG
>>217
なら教えてくれ。
その辺を理解していない人が一概にクソコードを書くのは何故だ?
単に漏れに高確率で DQN が回ってきただけか?
0221デフォルトの名無しさんNGNG
>>216
じゃあ「メンバへのポインタ」想像してみてくれよ。
で、それが見当外れだったらどうするの?
想像できて何が嬉しいの?
0222164NGNG
>>217
普通のアプリってなんだ?
普通のアプリのほうが、メモリ配置がどうなってるか考えないといけないのでは?

0223デフォルトの名無しさんNGNG
>>203
必死だな、おい!
中身を理解しないまま使ってると謎のバグに悩ませられる事ぐらいわかってて言ってんだろうな。当然
0224デフォルトの名無しさんNGNG
ポインタも抽象的な概念かどうかということですね。
0225197=199NGNG
>>217
えーと、>>197と>>199は読んでくれた?
俺は言語機能を理解するために
メモリ上の配置を学ぶ価値があるって言ってるんだよね。
だって、そうじゃなきゃポリモーフィズムなんて
理解できないでしょ?
>>199に書いたコードはわかる?
0226デフォルトの名無しさんNGNG
>>218
少なくともメンバ変数やvtblの実装は知ってますが何か?
0227デフォルトの名無しさんNGNG
>>221
「メンバへのポインタ」 だけだと何を指すのか曖昧だ。
もう少し具体的に指定してくれ。
0228デフォルトの名無しさんNGNG
>>225
ポリモルフィズムのような高水準の概念を教えるのに
「メモリ上では…」なんてやったら台無し
0229デフォルトの名無しさんNGNG
まーあれだ。
多くの初心者にとってJavaがイイってこった。
0230デフォルトの名無しさんNGNG
ここオモロイから、もう少し煽っていよう。
0231197=199NGNG
メモリ配置っていう言葉が乱用され始めてるので
ちょっと注意。

メモリ配置ってのは
すごく抽象的な意味で
関数の呼び出しがどう行われるのか?
とか、構造体がどういう風にメモリ上に作られるのか?
とか、クラスのインスタンスがどういう風にメモリ上に作られるのか?
とか、mallocで作った変数と、ローカル変数の違いとか?
そんな意味でよろしく。
補足があればよろしく。
そろそろ時間なので落ちます。
0232デフォルトの名無しさんNGNG
>>226
(゚Д゚)ハァ?
それと

> 215
> 「ポインタ+整数」を教えずに教えようが無いじゃないか。

は何の関係があるの?
0233デフォルトの名無しさんNGNG
>>197
mallocで作った変数とautoの違いは良いとして
他は本当に抽象的なのか?
「アドレス」なんて言葉が出て来たらそりゃ抽象的とは
とても言えんぞ。
0234デフォルトの名無しさんNGNG
プレステ2は128Bit alignmentでメモリアクセス
しないといけない場合があるので、禿げしく鬱。
0235197=199NGNG
>ポリモルフィズムのような高水準の概念を教えるのに
あれは言語機能なだけで、使用する際においては
高水準の概念じゃない。

でも、設計する時にポリモーフィズムを用いる事は
高度な抽象化である事は間違いないと思う。

今度は、言語の知識、アルゴリズムの他にも
デザインっていう要素があったね。
忘れてた。
主軸はこの3つだよね?
0236デフォルトの名無しさんNGNG
まーあれだ。
多くの初心者にとってJavaがイイってこった。
アドレスなんて全く知らずに学べるからな。
0237デフォルトの名無しさんNGNG
まーあれだ。
言語の重要性がわかってない奴はプログラマにあらず
ってこった。
0238197=199NGNG
>他は本当に抽象的なのか?
抽象的って、俺なんか言ったっけ?

やべ、時間が・・・
0239164NGNG
>>232
スタックポインタレジスタを移動して
そのアドレスを記録していくだけなんだけどね。

ローカル変数はスタック上につまれた値(最適化でレジスタの場合もあり)
構造体は静的に作られた場合、最初からメモリに置かれるし、動的配置なら
スタックフレームに作られます。

間違ってたら補足してください



0240デフォルトの名無しさんNGNG
駄スレの伸びっぷりに1さんご満悦
0241デフォルトの名無しさんNGNG
>>239
突っ込みどころ満載だが、
ネタにしてもつまらなさすぎ。
0242デフォルトの名無しさんNGNG
>>226
高水準と低水準の概念を同時に教えようとする君は能無し
0243197=199NGNG
>メモリ配置ってのは
>すごく抽象的な意味で

ここか。
抽象的っていうよりは、広義な・・・ってとこかも。
メモリアドレス***にどういうデータがあって、
その上に***で・・・みたいな事じゃない。
0244デフォルトの名無しさんNGNG
漏れはアドレス叩きこみ賛成派だが、>>228 には同意だ。
0245デフォルトの名無しさんNGNG
漏れは石川はうんこしないよ派だが、>>244には同意だ。
0246デフォルトの名無しさんNGNG
おーい、静かになってきたぞ。みんなもっと煽れ。
0247197=199NGNG
>スタックポインタレジスタを移動して
>そのアドレスを記録していくだけなんだけどね。
アセンブラで再帰やるとわかるね。
スタックがどんなもんなのかってのが。
再帰をwhileでやるにはどうすればいいかとか。
アセンブラじゃなくてもわかる人はわかるけど、
わかり易さのはなしね。

では、落ちます。
夜に現れるかも。
0248デフォルトの名無しさんNGNG
多数決してるんじゃないんだから、同意とか反対とか
そういう意見はいらないよ。
0249246 号線NGNG
あ、そか・・・昼休み終了だった。つまらん。
0250デフォルトの名無しさんNGNG
>>248
じゃ、何してるの?
0251デフォルトの名無しさんNGNG
いいかお前ら!
プログラムが実際どう動いてるのかわからないと、


    C O B O L e r と 呼 ば れ る ぞ ! !

0252名無し篭りNGNG
>>251
俺ならわかる、任せろ!
まずローダがexcutableファイルを弄くって調べて
txtセクションのエントリとかその他色々でヘッダを調べて
そんで未定義シンボルを探しDLLを持ってきてリロケーティオンして
バインドするんだ!
あとは機械語コードの実行で特権レベル0の命令はOSが独り占めマンセーしてやがるから
CALL Gateとかセグメント間jmpしてどうにかするんだな!
LGDTでディスクリプタテーブルレジスタにロードするんだよ!
この時点では32bit protected modeには移行してるからリアルモード死ねんんだな!
んで、86の場合は4KB境界にページをマップするんだ!

ふう。
色々あるからこれくらいにしとく。
■ このスレッドは過去ログ倉庫に格納されています