【初心者歓迎】C/C++室 Ver.46【環境依存OK】

このエントリーをはてなブックマークに追加
872デフォルトの名無しさん:2008/01/14(月) 17:14:12
WindowsのMSVC++や、UNIXのgccなどで、
64bit環境でコンパイルしても、32bit環境でコンパイルしても、必ず32bitや64bitであることが保証されている型はありますか?
__int32などを使えば良いのでしょうか?
873デフォルトの名無しさん:2008/01/14(月) 17:19:33
int32_t/uint32_t
int64_t/uint64_t

C99だけど大抵の環境で使えるだろう。
874デフォルトの名無しさん:2008/01/14(月) 17:32:13
残念ながら何の意地かしらんがVC++にはないよ
INT32とか使うしかない
875デフォルトの名無しさん:2008/01/14(月) 17:33:55
ビットフィールドで32bitにしてしまえばw
876デフォルトの名無しさん:2008/01/14(月) 17:34:31
あらそうなんだ。まあどっちに合わせるかだね。
俺は標準に合わせといた方が良いと思うけど。
877デフォルトの名無しさん:2008/01/14(月) 17:39:59
boost/cstdint.hpp
878872:2008/01/14(月) 18:11:46
やはり、まちまちなんですね。オープンソースなので、出来るだけコンパイラ依存のコードは避けていますが、
プリプロセッサで判別することにします。ありがとうございました。
>>877
C言語なのでboost使えないんです。抜き出して使おうと思います。
879デフォルトの名無しさん:2008/01/14(月) 18:28:37
stdint.h があるならそれを使うようにして、
ないなら環境ごとに自分で定義すれば?
880デフォルトの名無しさん:2008/01/14(月) 18:30:07
もうそうするって言ってるみたいだがw
881デフォルトの名無しさん:2008/01/14(月) 20:09:29
ヒープ領域にメモリを確保するのが遅いとよく聞きますが、
スタック領域にメモリを確保するのは遅くないのでしょうか?
882デフォルトの名無しさん:2008/01/14(月) 20:15:16
ヒープは仮想メモリを含む スタックは純物理メモリに格納
883デフォルトの名無しさん:2008/01/14(月) 20:18:06
スタック領域にメモリを確保するなんて、
esp レジスタの値をいじるだけだし。
ヒープに確保するのはそれはそれは複雑な処理だ。
884デフォルトの名無しさん:2008/01/14(月) 20:18:42
>>881
スタック上の領域は、確保した逆順にしか解放しない方式なので、仕組みが単純。スタックポインタというCPUレジスタを操作するだけなので高速。
ヒープは任意の順序で解放できるので、少し複雑になり、遅い。
885デフォルトの名無しさん:2008/01/14(月) 21:05:57
C++のクラスのコンストラクタのイニシャライザで構造体のメンバを初期化できないんですか
886デフォルトの名無しさん:2008/01/14(月) 21:08:28
できる
構造体のコンストラクタ呼べば
887デフォルトの名無しさん:2008/01/14(月) 21:08:45
構造体にコンストラクタを書くか、ボディでやるしかないんでは。
888デフォルトの名無しさん:2008/01/14(月) 21:12:59
その構造体もクラスで実装することを検討してはどうだろうか。
構造体って、APIに渡す時ぐらいか使わないなあ。
889デフォルトの名無しさん:2008/01/14(月) 21:13:09
>>882って本当?
890デフォルトの名無しさん:2008/01/14(月) 21:14:46
処理系によるとしか
891デフォルトの名無しさん:2008/01/14(月) 21:15:04
やっぱりコンストラクタが必要ですか
struct tag {
int x , y ;
}
みたいな小さい構造体にコンストラクタは馬鹿らしいと思うので、
コンストラクタ本体で代入することにします。
ご返答ありがとうございました。
892デフォルトの名無しさん:2008/01/14(月) 21:16:52
>>888
個人的には初期化方法のためだけにデータ型をクラスで実装するのは反対。
データ型なんて出てこないように全体的にクラス構成を考え直すということならアリだと思う。
893デフォルトの名無しさん:2008/01/14(月) 21:21:42
c++でクラスと構造体をそんな使い分けする意味なくね?
894デフォルトの名無しさん:2008/01/14(月) 21:30:44
意味無いかな?
Cと文法を共通化させるためとは言っても(structの元々の存在意義ってコレよね?)
せっかくclassとstructがあるんだから、オブジェクト定義とデータ定義で使い分けた方がソース見やすくならない?

まぁ標準ライブラリ自体がアレだから、あんまり意味無いのかなぁ・・・
895デフォルトの名無しさん:2008/01/14(月) 21:45:04
趣味でプログラミングしてきたのですが、
最近興味あるプログラムのソースがC++であることが多くなり
C++も使えなきゃ駄目だなと思っています。
Cでは1500行くらいのプログラムを書いた事が有ります。
ポインタは分かっているつもりです。
アセンブラはほとんど分かりません。ごく稀にgdbでdisassembleする程度です。
オブジェクト指向は分かっていません。構造体の強化バージョン程度の理解です。
こんな感じの自分に、オススメのC++を紹介して頂けないでしょうか。
まぁ、「プログラミング言語の本は、どんな本でも一冊しっかり読めば
基礎力は付く」ってのは無しで。
896デフォルトの名無しさん:2008/01/14(月) 21:48:36
俺は必要とあらば891みたいな構造体にもコンストラクタ付けちゃうけど、
嫌なら、ヘルパ関数作るという手もある。

tag make_point(int x, int y)
{
tag t = {x, y};
return t;
}

class hoge
{
hoge(int x, int y) : foo(make_point(x, y)) {/* ... */}
tag foo;
};
897デフォルトの名無しさん:2008/01/14(月) 21:49:04
>>895
OOPをC++でやりたいならGanf Of Fourの
「オブジェクト指向における再利用のためのデザインパターン」は買っとけ
898デフォルトの名無しさん:2008/01/14(月) 22:04:11
その本ってデザパタドシロートでもOK?
899デフォルトの名無しさん:2008/01/14(月) 22:05:24
>>898
素人でもいい。というかこの本以外に適当なC++でOOPをやってる
本が事実上ないんだよ。
後はネットで簡単なデザパタのページを見つけてそれを参考にいくつか
プログラムを自分で書いてみれば理解できる。
900デフォルトの名無しさん:2008/01/14(月) 22:06:30
別にデザパタ勉強するだけなら、
C++ の本に固執しなくてもいいんじゃないかな。
C++ に応用させればいいだけだし。
901デフォルトの名無しさん:2008/01/14(月) 22:08:21
>>900
それがそうもいかない。C++には他の言語にはあまりない
多重継承という機能がありそれを利用した独特のデザパタがあるし、
ポインタと仮想関数でOOPしなければならないという特殊事情が
ありboostの使用も視野に入れなければならなくなってくる。

他のOOP言語ではC++よりスマートにOOPを実現している。
902デフォルトの名無しさん:2008/01/14(月) 22:16:31
まあ、GoF だけならどの本でもいいんじゃね。
903デフォルトの名無しさん:2008/01/14(月) 22:32:37
マンガとかで、「実行中のプログラムを書き換える」ってネタが良く有るけれど、
実際、デバッグオプションも付けないでコンパイルしたプログラムを、
デバッガも使わず、プログラムの実行中に変数の中身を書き換える事って可能なの?
904デフォルトの名無しさん:2008/01/14(月) 22:36:14
可能
そういうツールもちゃんとある
905デフォルトの名無しさん:2008/01/14(月) 22:44:07
DOS 時代はメモリいじってゲームのパラメータいじって遊んでたな。
906デフォルトの名無しさん:2008/01/14(月) 22:44:18
マジで。
どうやれば実現できるんだろう?
ツール名教えて。
907デフォルトの名無しさん:2008/01/14(月) 22:46:51
>>906
すれ違いだけどうさみみハリケーンとかすぺしゃるねこまんま
名前がふざけすぎだけど中身はまとも
使い方は自分で調べろ

あとメモリエディタでぐぐるとか
908デフォルトの名無しさん:2008/01/14(月) 22:52:20
交換機で
(1)あらかじめ余分にメモリ領域を確保してLM作成。
(2)決まった手順でパッチを作成
(3)パッチをあてると、その領域に新関数を書き込み&旧関数の頭にはジャンプ命令を書き込み
ってのがあった。
動いたままパッチが当てられる。


909デフォルトの名無しさん:2008/01/14(月) 23:02:53
>>901
いきなりエリックガンマを読まなくてもいいだろ。
初心者に勧めるものではないな。
オブジェクト指向のこころのほうがアプローチが分かりやすい。
サンプルはJAVAだがあの程度なら覚えるのは簡単だし、分かりやすい
必要ならC++で記述するのもよし。
910デフォルトの名無しさん:2008/01/14(月) 23:16:12
>>901
「ポインタと仮想関数」って特殊事情ではないだろ。
むしろテンプレートなんかのほうがよっぽど特殊事情だ。
911デフォルトの名無しさん:2008/01/14(月) 23:36:10
C++以外でもインタフェースって名前で実質的な多重継承は使われてるだろ。
912デフォルトの名無しさん:2008/01/14(月) 23:40:31
実装を持てるか持てないかの違いは
あんたが思っている以上に大きい
913デフォルトの名無しさん:2008/01/15(火) 02:59:35
volatileってなんて呼ぶの?
ヴォラタイルであってる?
914デフォルトの名無しさん:2008/01/15(火) 03:18:07
俺はそう呼んでる。ってかfalseやnullと違ってそれ以外の読み方を聞いたことがない。
915デフォルトの名無しさん:2008/01/15(火) 03:34:00
>falseやnullと違ってそれ以外の読み方を聞いたことがない。
ファルスとナルであってる?
916デフォルトの名無しさん:2008/01/15(火) 03:36:30
>>915
ナルはいいけどファルスはやばいwww
917デフォルトの名無しさん:2008/01/15(火) 03:37:35
バルスみたいだな
918デフォルトの名無しさん:2008/01/15(火) 03:41:22
>>916
>ナルはいいけどファルスはやばいwww
ファルスでググったら勃起て出てきたwwww
こんどこらfalseをバルスって呼ぼうぜ!
919デフォルトの名無しさん:2008/01/15(火) 03:58:11
typedefされたものが早く理解できたためしがない
typedef double* vector  とか書かれても読む気しない。

型が増えると逆に理解に苦しむのっては少数派なのか・・・
920デフォルトの名無しさん:2008/01/15(火) 04:02:57
その程度だったら、typedefするほうもどうかと思う。
921デフォルトの名無しさん
まぁ、大きなスコープの中で「あれもこれもtypedef」みたいなやり方を
派手に押し進められると、さすがにね。