ページ 11

素朴な疑問

Posted: 2010年5月22日(土) 12:08
by 三郎
DOSでCの少しの経験しかありません。私にとってVisual C++は難しくて大変です。

でもVC++でないと複雑な処理に対応が難しいとの事、分る様な気がしました。

しかし、組み込みシステム等に使われているIDE、コンパイラーなどC++ではなくてCで書いてあるような気がします。
何故未だCが使われているのでしょうか?

プロとか、プロみたいな管理人さん始め皆様はゲームなどプログラムにC++ばかりでなく、Cも使われているようにも思われました。
何故なのでしょうか?

書店で未だ、Cの書籍が多く販売されているのは何故でしょうか?

よろしくお願いします。

Re:素朴な疑問

Posted: 2010年5月22日(土) 13:52
by たかぎ
> 何故未だCが使われているのでしょうか?

いくつか理由があります。

ひとつめは、そもそもそのプラットフォームの開発言語にCかアセンブリしか使えないような場合です。

もうひとつは、Cもそうですが、C++もきちんと理解して使わないといろいろ危険が伴います。
多くの開発現場では、安かろう悪かろうのプログラマを頭数だけかき集めてどうにかしようとしますので、その状況でC++を使うのは危険なのです。

> 書店で未だ、Cの書籍が多く販売されているのは何故でしょうか?

学校で習うからでしょうね。
あるいは、C++をやるにしても、JavaやC#などをやるにしても、最初にCを勧める人が多いのも理由です。
残念ながら日本では、初心者~初級者向けの本しか多くの部数を売ることは困難ですので、本を出す側も似たり寄ったりの本ばかり出すようになります。

Re:素朴な疑問

Posted: 2010年5月22日(土) 14:14
by 三郎
たかぎさん、ありがとうございます。
分厚い入門書を買ってきた読んでいた当初printfという表現が全く書いてなかったので戸惑ってましたが此処のサイトに来て、むしろその表現が多いのに驚きました。
パソコン等、日日進歩しているので覚える事で頭がパンクします。

そうなれば、不要なものは忘れる事が大事と思いますが(ここが重要)、歴史の転換点なのでしょうか?。

人間の脳はそれ程、進歩していかないと思うので、このギャップは将来どうなるのでしょうか。

情報化社会、先端技術は凡人ではついていけない。多くの国民は取り残されないでしょうか(私も)。

Re:素朴な疑問

Posted: 2010年5月22日(土) 19:12
by softya
そういえば、VC++とC++はイコールではありませんが、C言語とC++のどちらを今勉強されているのでしょうか?
(VC++は、マイクロソフト社のC++開発環境に過ぎません。他にもC++の開発環境はあります)

>情報化社会、先端技術は凡人ではついていけない。多くの国民は取り残されないでしょうか(私も)。
逆に私は今の開発環境がややこしすぎると思います。一般の人はC++など使わないに越したことはありません(一般の人はプログラミング言語などを使いませんが)。
無理してC++を使うよりは、VBやC#を使った方が生産的だと思います。

Re:素朴な疑問

Posted: 2010年5月23日(日) 05:33
by 三郎
1.私は訳が分らない状態で時代に取り残されてはいけないと思い、昔PC9800を購入した。
2.どのその機械にN88BASICが付いており、多少プログラムを作った。
3.BASICでは、制限から64K以上のソフトが造るのが難しくなった。
4.仕方なしに、マイクロソフトのMSCを勉強し、Cを使ってソフトを造った。
5.DOSの機械がこの世から姿を消した!。今までの知識を放棄するのが、勿体無く悩んだ。
6.グラフィックを結構使うのと、全てパソコンで済ましたいので悩んだ結果、MFCが付属しているVisual VC++にしておけば、大は小を兼ね後悔しないと思い、それを勉強しています。(Win全盛だったし)

一般の人は(私)プログラムなど、ややこしい事をせずに済めば、それに越したことはない。
しかし学校教育でも情報教育は必須にならザざるを得なくなり、ソフトはソフト屋さんに任せればよい訳でないと思うようになりました。
何故なら、ソフトを使う人が自分で使うソフトを自分で造らないと、具合のいいものが出来ない事が、よくあります。Visual VC++を選んだ私の理由です。

Re:素朴な疑問

Posted: 2010年5月23日(日) 12:26
by dic
N88-BASICですか なつかしいですねw
中学生のころでしょうか 擬似3Dダンジョン作ってました

ただ、三郎さんの状況ではプログラム言語ばかりに注意がいってしまっていてて
かんじんなアルゴリズム(物事の考え方)の組み方に目がいってない気がします

N88-BASICもC/C++も言語は違いますが 何かソフトを作るという目的を達成するための
手段ですので N88-BASICからC/C++に変えたからといって 目的が果たせるわけではないです
変わったのは手段だけであって、目的は変わってません

技術(手段)はどんどんスピードを増して進化してますが
基本的な考え方は今も変わらず、今後も使えると思ってます
私としては、基本的な考え方を習得しておけば、どの技術(手段)でも通用すると考えてます


>ソフトを使う人が自分で使うソフトを自分で造らないと、具合のいいものが出来ない事が、よくあります。
具合のいいものを作るというより、プログラマに「具合のいいもの」というものを伝えないと作れないです
ゲームなんかだとよくありますが、ここで○○のような処理をすると書いてるとすると
それはプログラマの都合の良い方向で考えられます
例としては、座標(100,120)で左クリックして1000ms秒以内にダイアログボックスを
座標(200、220)を左上として表示する
と明確に指示してくれないと伝わらないのがよくあります
なので、文章で伝える(書く)力が必要だと考えてます
画像

Re:素朴な疑問

Posted: 2010年5月23日(日) 12:34
by 三郎
皆さんに度々愚問な質問をして申し訳ありませんでした。
努力して頑張ります。

Re:素朴な疑問

Posted: 2010年5月23日(日) 12:39
by Dixq (管理人)
私はC++を勉強し始めるのが遅かった事もあってコンテンツにCが多いのですが、
C++を知るとCに戻れなくなるのは良く解ります。

ただCは知っていてもC++は知らないという人は多いと思います。
ここのHPは初心者をターゲットとしているので(上級者は手取り足とり書かなくても自分で調べて解決しますし)
極力初心者に抵抗の無い記述を心がけています。
よってこれからもCの内容が多くなるかもしれませんが、C++での解説ページも少しくらい作りたいと思っています。

また、現場でCが使われているのは環境的制約がある他に、年配の責任者の考えも影響している場合があります。
まだそれほどC++が主流では無かったころにCを学んだ技術者で、今ではただの責任者になっているような現場で、
その責任人が頑固な人だと
「新しいものは取り入れたくない」
という理由からCのままである所があるようです。

企業は責任がありますから、なるべく安全に作業に取り組みたいと思っています。
万が一不具合が出て製品回収なんてことになったら大損害ですから。

企業で使うOSなんかもひと世代前の物が使われている場合が多いと思います。
まだwindows7が大半を占めているなんてことはないでしょう。
ある程度信頼がおけると解ってから移行すると思います。

前述の頑固オヤジからしてみれば「C++は新しいもので信頼できるか解らない(Cは信頼できると自分が知っている)」とか「単に自分がC++を学びたくない。Cなら現場をとりしきれる」などと思っているのではないでしょうか。
「今までCでやってこれたんだから、わざわざ得体のせいれないものに移行することはない」と思っているかもしれません。

また、組み込み系は制約の問題からCで作ってきた多くのライブラリが存在している場合が多いかもしれません。
近年になってC++が使える組み込みが多くなってきたとは言え、その企業が持っているライブラリの中身はCである為、C++に完全移行する為にはライブラリを作り直さなければならず、その手間を嫌がっている可能性もあります。

私が聞いた話や考えるところの範囲だとこんな感じです。

Re:素朴な疑問

Posted: 2010年5月23日(日) 12:51
by たかぎ
> C++に完全移行する為にはライブラリを作り直さなければならず、その手間を嫌がっている可能性もあります。

これについては誤解も多いので、少し補足しておきます。

C++からはCのライブラリをそのまま利用できると考える人も多いのですが、現実はそれほど甘くありません。
最低限、ヘッダファイルの修正が必要になりますが、多くの場合、extern "C"を付けるだけでは不十分なのです。

だからといって、対応に大きな手間がかかるというわけではないのですが、CとC++の両方を熟知していないと、どれだけの作業が発生するのかが読めません。
また、何も考えずにC++を導入すると、出来上がったプログラムが大きく、遅くなることは避けられません。
これらが一番障害になっているように思います。

Re:素朴な疑問

Posted: 2010年5月23日(日) 12:52
by softya
>何故なら、ソフトを使う人が自分で使うソフトを自分で造らないと、具合のいいものが出来ない事が、よくあります。Visual VC++を選んだ私の理由です。

まぁ、それはその通りです。私は間違いなく、その指向性の人間ですね。
ただ、VC++には固執していません。場合によって使い分けています。
よく使うのは、C言語、VC++とMFC、PHP、VC#です。

>グラフィックを結構使うのと、全てパソコンで済ましたいので悩んだ結果、MFCが付属しているVisual VC++にしておけば、大は小を兼ね後悔しないと思い、それを勉強しています。(Win全盛だったし)

結局MFCは使いこなせておられるのでしょうか?(思うようなソフトが作れているかと意味です)
MFCの終焉も考慮された方が良いかも知れません。
理由
・既にMFC関係の新しい書籍がほとんど発売されていない。
・マイクロソフトは既にMFCから.NET FrameWorkに軸足を移しています。これは、ViusalBasicとC#とC++/CLI他で共通のフレームワークでマイクロソフトはこちらを中心に据えたいと考えていますね。
・MFCはVisualStudio2010からPro以上エディションでしか使えなくなった(アマチュアやプロでもだが高価すぎて手が出し辛くなっている)
私もMFCは使っていますが、そろそろ別の環境に乗り換えることを検討しています。

私見ですが、プログラミング言語は大は小を兼ねないと思います。それにマイクロソフトの開発環境は変化が激しすぎますので、もっと変化の穏やかな言語や環境を使うことをお勧めします。
OSプラットフォーム依存しないという意味ではJava、10年経っても使えると言う意味でも開発環境の安定という意味でもLinuxOSでC言語やC++でじっくり開発する手もあります。LinuxOSのツールや開発環境の大半はC言語やJavaで構築されています。

Qt(キュート)と言うC++言語用のGUIフレームワーク(ウィンドウアプリ作成)もあります。
http://ja.wikipedia.org/wiki/Qt
※日本語の資料は少ないので、初心者向きとは言えませんが。

Re:素朴な疑問

Posted: 2010年5月23日(日) 13:45
by 三郎
>結局MFCは使いこなせておられるのでしょうか?(思うようなソフトが作れているかと意味です)

私はつい先日、無謀にもVisual Studioの正式版を購入した矢先です。
例題の初歩的なところを、入門書の解説どおり打ち込んで動く事を確認している段階です。
従ってMFCを使ったソフトは未だ造っていません。Winでのソフトも造っていません。

皆様の経験豊富なコメント心より感謝します。

私は高齢ですので先ず例題を頭ではなく(理解力が弱く)体で覚える感覚でヨチヨチ歩きで進んでいきます。

Re:素朴な疑問

Posted: 2010年5月23日(日) 13:51
by softya
>例題の初歩的なところを、入門書の解説どおり打ち込んで動く事を確認している段階です。
ちなみに、どの様な入門書をお使いでしょうか?
他にもオススメ出来る本があるかも知れません。

Re:素朴な疑問

Posted: 2010年5月23日(日) 15:01
by 三郎
私が買ってきた本は
1.明快入門 Visual C++ 2008
  ビギナー偏  林晴比古 著 ソフトバンク クリエーテイブ 出版

2.作って覚える Visual C++ 2008  Express Edition 入門
  宮崎昭世 萩原祐之   著  秀和システム出版

この2冊を買ってきました。

Re:素朴な疑問

Posted: 2010年5月23日(日) 15:59
by softya
なるほど一冊目は悪い選択ではないと思いますが、C++の文法の教科書としては力不足かもしれません。
2冊目はMFCの本ではありません。いろんな言い方があり混乱がしますが.NET FrameWorkアプリやマネージドアプリ、CLR、フォームアプリと呼ばれ言語としてC++/CLIと言う名前のC++に別の文法が付け加えられた言語を使用するアプリケーションの作成方法が中心に書かれた本で、一冊目の本のChapter 14から16の内容もそうです。
C++とC++/CLIは別の言語でMFCと.NET FrameWorkは別のフレームワークです。そう意味でも過渡期な次期にMFCを選択された事になりますね。どちらを中心に使われるかよく検討される事をお勧めします。

言語とフレームワークの組み合わせについては以下のとおりです。
・C++とMFC
・C++/CLIと.NET FrameWork
・C++/CLIとMFC(どちらかと言うとマイナーな使い方です)
紹介する本も、どう使うか検討された後で紹介したいと思います。

Re:素朴な疑問

Posted: 2010年5月23日(日) 17:14
by 三郎
そうですか、話は完全に前後しますが一体私はどんなソフトを造ろうかと思っているかと云います。
ソフトとして、特にレベルの高いものでなく今、考えてさせられます。

私は産業界で開発現場でのパイロットプラントの一つ手前の段階のベンチプラントの制御監視の装置(簡単な演算、A/D変換、D/A変換、I・O、通信、ANN、表示・記録・集計、etc)をDOSで各社のインタフェースボードを使い適当に作っていました。
信頼性は左程問いません。要するに汎用の中央制御監視装置です。
このような措置を一つ作っておけば、どの様な現場にも容易にアレンジできます。

これを今回Winの環境で再現したく思います。

今回、通信はRS232、USB、LANでインタネットにも繋げれればとの思いもあります。
そしてこの装置に入れる現場からの入出力は、ルネサステクノロジーのワンチップマイコンを考えています。

現在の私の力では将来的にも無理かも分りません。

Re:素朴な疑問

Posted: 2010年5月23日(日) 17:57
by バグ
通信関係が必要になりそうならば、個人的にMFCよりは、.NETの方が楽かと思います。
そして、もし、.NETを選択するならば、C++よりもVBやC#の方が情報を入手しやすいですね。

Re:素朴な疑問

Posted: 2010年5月23日(日) 18:22
by softya
マイコン関係は、たかぎさんの得意分野かも知れませんね。

ただ私の意見としては、こだわりを捨てればRS-232Cは下記のBASICの方が楽に扱えます。USBもマイコン側の都合がありますがCOMポートとして接続出来ればRS-232Cとして扱えます。

(仮称)十進BASICのホームページ
http://hp.vector.co.jp/authors/VA008683/
既に古い技術かも知れませんが、それだけに安心して使えます。Comポートも扱えますし、昔のBASICよりは遥かに親切です。
※ 書き忘れましたが、十進BASIC自体はまだ更新し続けられている現役のソフトです。文法的に古いって意味です。
http://hp.vector.co.jp/authors/VA008683/basic02.htm
それに64Kなんて制限もありません。 画像

Re:素朴な疑問

Posted: 2010年5月23日(日) 19:03
by たかぎ
> マイコン関係は、たかぎさんの得意分野かも知れませんね。

これはマイコンではありませんね。

まあ、いろいろ勧めても混乱するだけですし、Visual C++に決めたのならそれでやればよいと思います。
ただ、できれば外部ライブラリをうまく活用することをお勧めします。
すでにsoftyaさんが指摘されていますが、マイクロソフトの技術は賞味期限が短いので、先々まで使えるライブラリを選ぶ方が長い目で見れば楽だったりします。