【初心者歓迎】C/C++室 Ver.46【環境依存OK】
WindowsのMSVC++や、UNIXのgccなどで、
64bit環境でコンパイルしても、32bit環境でコンパイルしても、必ず32bitや64bitであることが保証されている型はありますか?
__int32などを使えば良いのでしょうか?
int32_t/uint32_t
int64_t/uint64_t
C99だけど大抵の環境で使えるだろう。
残念ながら何の意地かしらんがVC++にはないよ
INT32とか使うしかない
ビットフィールドで32bitにしてしまえばw
あらそうなんだ。まあどっちに合わせるかだね。
俺は標準に合わせといた方が良いと思うけど。
boost/cstdint.hpp
878 :
872:2008/01/14(月) 18:11:46
やはり、まちまちなんですね。オープンソースなので、出来るだけコンパイラ依存のコードは避けていますが、
プリプロセッサで判別することにします。ありがとうございました。
>>877 C言語なのでboost使えないんです。抜き出して使おうと思います。
stdint.h があるならそれを使うようにして、
ないなら環境ごとに自分で定義すれば?
もうそうするって言ってるみたいだがw
881 :
デフォルトの名無しさん:2008/01/14(月) 20:09:29
ヒープ領域にメモリを確保するのが遅いとよく聞きますが、
スタック領域にメモリを確保するのは遅くないのでしょうか?
882 :
デフォルトの名無しさん:2008/01/14(月) 20:15:16
ヒープは仮想メモリを含む スタックは純物理メモリに格納
スタック領域にメモリを確保するなんて、
esp レジスタの値をいじるだけだし。
ヒープに確保するのはそれはそれは複雑な処理だ。
>>881 スタック上の領域は、確保した逆順にしか解放しない方式なので、仕組みが単純。スタックポインタというCPUレジスタを操作するだけなので高速。
ヒープは任意の順序で解放できるので、少し複雑になり、遅い。
C++のクラスのコンストラクタのイニシャライザで構造体のメンバを初期化できないんですか
できる
構造体のコンストラクタ呼べば
構造体にコンストラクタを書くか、ボディでやるしかないんでは。
その構造体もクラスで実装することを検討してはどうだろうか。
構造体って、APIに渡す時ぐらいか使わないなあ。
処理系によるとしか
やっぱりコンストラクタが必要ですか
struct tag {
int x , y ;
}
みたいな小さい構造体にコンストラクタは馬鹿らしいと思うので、
コンストラクタ本体で代入することにします。
ご返答ありがとうございました。
>>888 個人的には初期化方法のためだけにデータ型をクラスで実装するのは反対。
データ型なんて出てこないように全体的にクラス構成を考え直すということならアリだと思う。
c++でクラスと構造体をそんな使い分けする意味なくね?
意味無いかな?
Cと文法を共通化させるためとは言っても(structの元々の存在意義ってコレよね?)
せっかくclassとstructがあるんだから、オブジェクト定義とデータ定義で使い分けた方がソース見やすくならない?
まぁ標準ライブラリ自体がアレだから、あんまり意味無いのかなぁ・・・
趣味でプログラミングしてきたのですが、
最近興味あるプログラムのソースがC++であることが多くなり
C++も使えなきゃ駄目だなと思っています。
Cでは1500行くらいのプログラムを書いた事が有ります。
ポインタは分かっているつもりです。
アセンブラはほとんど分かりません。ごく稀にgdbでdisassembleする程度です。
オブジェクト指向は分かっていません。構造体の強化バージョン程度の理解です。
こんな感じの自分に、オススメのC++を紹介して頂けないでしょうか。
まぁ、「プログラミング言語の本は、どんな本でも一冊しっかり読めば
基礎力は付く」ってのは無しで。
俺は必要とあらば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;
};
>>895 OOPをC++でやりたいならGanf Of Fourの
「オブジェクト指向における再利用のためのデザインパターン」は買っとけ
その本ってデザパタドシロートでもOK?
>>898 素人でもいい。というかこの本以外に適当なC++でOOPをやってる
本が事実上ないんだよ。
後はネットで簡単なデザパタのページを見つけてそれを参考にいくつか
プログラムを自分で書いてみれば理解できる。
別にデザパタ勉強するだけなら、
C++ の本に固執しなくてもいいんじゃないかな。
C++ に応用させればいいだけだし。
>>900 それがそうもいかない。C++には他の言語にはあまりない
多重継承という機能がありそれを利用した独特のデザパタがあるし、
ポインタと仮想関数でOOPしなければならないという特殊事情が
ありboostの使用も視野に入れなければならなくなってくる。
他のOOP言語ではC++よりスマートにOOPを実現している。
まあ、GoF だけならどの本でもいいんじゃね。
マンガとかで、「実行中のプログラムを書き換える」ってネタが良く有るけれど、
実際、デバッグオプションも付けないでコンパイルしたプログラムを、
デバッガも使わず、プログラムの実行中に変数の中身を書き換える事って可能なの?
可能
そういうツールもちゃんとある
DOS 時代はメモリいじってゲームのパラメータいじって遊んでたな。
マジで。
どうやれば実現できるんだろう?
ツール名教えて。
>>906 すれ違いだけどうさみみハリケーンとかすぺしゃるねこまんま
名前がふざけすぎだけど中身はまとも
使い方は自分で調べろ
あとメモリエディタでぐぐるとか
交換機で
(1)あらかじめ余分にメモリ領域を確保してLM作成。
(2)決まった手順でパッチを作成
(3)パッチをあてると、その領域に新関数を書き込み&旧関数の頭にはジャンプ命令を書き込み
ってのがあった。
動いたままパッチが当てられる。
>>901 いきなりエリックガンマを読まなくてもいいだろ。
初心者に勧めるものではないな。
オブジェクト指向のこころのほうがアプローチが分かりやすい。
サンプルはJAVAだがあの程度なら覚えるのは簡単だし、分かりやすい
必要ならC++で記述するのもよし。
>>901 「ポインタと仮想関数」って特殊事情ではないだろ。
むしろテンプレートなんかのほうがよっぽど特殊事情だ。
C++以外でもインタフェースって名前で実質的な多重継承は使われてるだろ。
実装を持てるか持てないかの違いは
あんたが思っている以上に大きい
volatileってなんて呼ぶの?
ヴォラタイルであってる?
俺はそう呼んでる。ってかfalseやnullと違ってそれ以外の読み方を聞いたことがない。
>falseやnullと違ってそれ以外の読み方を聞いたことがない。
ファルスとナルであってる?
バルスみたいだな
>>916 >ナルはいいけどファルスはやばいwww
ファルスでググったら勃起て出てきたwwww
こんどこらfalseをバルスって呼ぼうぜ!
typedefされたものが早く理解できたためしがない
typedef double* vector とか書かれても読む気しない。
型が増えると逆に理解に苦しむのっては少数派なのか・・・
その程度だったら、typedefするほうもどうかと思う。
まぁ、大きなスコープの中で「あれもこれもtypedef」みたいなやり方を
派手に押し進められると、さすがにね。