DevC++でC++入門
C/C++入門のホームページは良いものが多くあるので、ここであらためて書いてもしょうがない。
代表的な入門ホームページをここで紹介しておく。
構造体の使い方だけは、理解しにくいと思うので解説を書いた。
C / C++入門の定番といえば粂井氏の”猫でもわかるプ
ログラミング”だ。
”猫でもわかるプログラミング”のサンプルプログラムがすんなり動かないと入門用環境としては失格だ。
ここでは”猫でもわかるプログラミング”中のサンプルをDevC++でコンパイルしてみた結果を報告する。
C言語編で結構修正が必要だった。全くの初心者にはつらいかもしれない。
グラフィック関係とC++編70章以外は一応コンパイルできたのでなんとかつかえるというところか。
実施した章 | 実施してない章 | 問題のあった章 | |
C言語編 第1部 | 1〜100章 | なし |
11〜13、16章(void main()の問題) 17章QuikWinは当然ない 30章atoi();はstdlib.hで定義されている 47,48章printfでLfはつかえない(対処不可) 48章 #include <math.h>が必要。 51章 #include <stdlib.h>が必要 56章8086用アプリは開発できない。 57章WinMainの定義が違う。 62章memset()がみつらない。 76〜77章 toupper()はctype.hで定義されてる。 91〜99章-lwsock32する必要がある。 |
C言語編 第2部 | 101〜102章 | なし | なし |
C++編 | 1〜77章 | なし | 5、15章for外部ではiは定義されない。 31章グラフック関係が無い(対処不可)。 38〜43章 53〜54章 ios::nocreateがつかえない。 38〜43章Jout.open(JFILE, ios::ate);では駄目。 59〜60章toupper()はctype.hで定義されてる。 70章 実行エラーがでる(対処不可)。 |
Windows SDK編 第1部 | 1〜100章 | なし | 1章〜49章(HBURSH)へのキャストが必要。 6章 RCファイルの整形が必要。 39〜40章 型なし宣言はゆるされない。 |
Windows SDK編 第2部 | 未実施 | 101章〜200章 | |
Windows SDK編 第3部 | 未実施 | 201章〜300章 | |
Windows SDK編 第4部 | 未実施 | 300章〜349章 |
(C言語編第1部)
11〜13、16章void main()ではなく int main()で return; は return
0;でないといけない。
30章atoi();はstdlib.hで定義されてる #include <stdlib.h>をたす。
47章printfでLfはつかえない(mingwのバグ!! doubleでがまん)
GCCのlong
doubleは12バイトだ。だが一方でprintfで流用してるwindowsのライブラリは8バイトにしか対応していない。この不整合のため現在の
mingwではlong doubleのprintf出力はできない。VCの場合だとlong
doubleもdoubleも8バイトだからVCを使っても”猫でも”と同じ桁の出力は得られない。(”猫でも”の出力はどんなコンパイラ使ったんだろう
か?ちなみにLinuxのGCCを使えば”猫でも”と同じ出力になる)。
48章 #include<math.h>しないと負の基底がつかえないマクロが適用されてとんでもない結果になる。
51、62章 exit(-1)を使うためにはprocess.hではなくstdlib.hが必要。
57章WinMainの定義が違う。winbase.hの定義にあわせればよい。
62章memset()はstring.hで定義されてる。
76〜77章toupper()はctype.hで定義されてる。
(C言語編第2部)
第102章 スレッドのwhileループにSleep(0);を入れないとHP記載の動作にならない。
(C++編)
5章 15章 iはfor内部でしか使えない(新ISO規格)。
31章 グラフィックは使えない(graph.hがない)。
38〜43章 53〜54章 ios::nocreateは使えない。
ios::nocreateはコンパイラ機種依存性が高い。以下のようにすべき。
fstream foo("foo.txt", ios::in);
if(!foo) {
// ファイルが見つからないとき。
}
else {
// ファイルがみつかったとき;
}
38〜43章Jout.open(JFILE, ios::ate);では、上書きされちゃうようだ ofstremにせず fstreamにしといて
Jout.open(JFILE,
ios::in|ios::out|ios::ate);とios::inをつけないといけない(この動作は VC++7でも同じなんでC++自体の仕様
変更なのかもしれない)。
59〜60章 toupper()はctype.hで定義されてる。。
70章 実行エラーがでる
(SDK編 第1部)
1章〜49章 myProg.hbrBackground
=(HBRUSH)GetStockObject(WHITE_BRUSH);のように(HBURSH)にキャストが必要。
6章 sample02.rc MENUITEM "終了" IDM_END ではだめで MENUITEM
"終了",IDM_END と,をいれて詰めて書かないといけいない。
39〜40章 static draw_on = 0; は static int draw_on = 0;であるべき。
comctl32.libをたす章はリンカのパラメタに-lcomctl32をつければよい。
このHPの内容について問題があればsけいし(skeishi@yahoo.co.jp)まで連絡ください。
DevCPPの使い方に戻る
sけいし発HPに戻る