- 1 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 09:10:30 ]
- エスケープシーケンスやWin32APIなどの環境依存な物でもOK。
ただしその場合、質問者は必ず、環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.39【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1182740506/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
- 152 名前:関数はこうなっています・・・ [2007/07/21(土) 20:34:20 ]
- HARC WINAPI UnZipOpenArchive(const HWND hWnd,LPCSTR szFileName, const DWORD dwMode);
機能 指定ファイルが UNZIP32.DLL に有効な書庫ファイルかどうか調べ、 有効であればオープンし、一意の数値(ハンドル)を返します。 以後の書庫ファイルへのアクセスはこのハンドルでおこないます。 アクセスを終了する時は UnZipCloseArchive 関数を呼ばなければなりません。 引数 hWnd UNZIP32.DLL を呼び出すアプリのウィンドウ・ハンドル。 szFileName 書庫ファイル名。 dwMode 処理モードを指定するフラグ。次の値を|(オア)で 組み合わせる。 戻り値 指定の書庫ファイルに対応したハンドル。エラー時は NULL を返します。 int WINAPI UnZipGetArcFileName(HARC hArc,LPCSTR lpBuffer,int nSize); 機能 書庫ファイル名を得ます。 引数 hArc UnZipOpenArchive() で返されたハンドル。 lpBuffer ファイル名を格納するバッファ。 nSize バッファのサイズ。 戻り値 正常終了時に0、異常時にはエラーコード(0以外)が返ります。
- 153 名前:151 [2007/07/21(土) 20:39:24 ]
- 自己解決するかもしれないです・・・
- 154 名前:151 [2007/07/21(土) 20:42:36 ]
- 自己解決しました
- 155 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 20:53:49 ]
- C++(DirectX)でファイルを入出力する関数を作っています。
現在Cのfopenやfreadなどを使っており、スコアデータはこのファイルのxx番目だからfseekで移動して読み込むといった形を取っています。 しかしこれだと、例えばDirectXのXファイルであればMeshNormalsの位置に移動して、必要な数だけ読み込むといった手段が取れません。 検索してもファイルの入出力の解説を扱っているサイト自体少なく、2行目の方法が中心で困っています。 どこか参考になるサイト、もしくは書籍はありませんでしょうか。 また、ExcelデータはC++で読み書き(データの追加・削除)はできるのでしょうか。 ファイルの入出力周りは私の持っている本ではほとんど書かれていませんでしたので放置していたのですが・・ここに来てツケがorz
- 156 名前:151 本物 [2007/07/21(土) 20:57:49 ]
- 自己解決しました
#include <windows.h> #include <iostream> using namespace std; typedef HWND (__stdcall *FND)(const HWND ,LPCSTR , const DWORD ); typedef int (__stdcall *FNE)(const HWND , LPCSTR ,int ); main(){ char buf[128]; HINSTANCE hd = LoadLibrary("UNZIP32.DLL"); FND pd = (FND)GetProcAddress(hd,"UnZipOpenArchive"); FNE pe = (FNE)GetProcAddress(hd,"UnZipGetFileName"); FNE pf = (FNE)GetProcAddress(hd,"UnZipFindFirst"); HWND q=(*pd)((HWND)hd, "file.zip",0); (*pf)(q , "*", NULL); (*pe)(q , buf, 128); cout<<buf<<endl; FreeLibrary(hd); }
- 157 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 20:59:20 ]
- www3.uploader.jp/user/mol/images/mol_uljp00012.txt
11000111101111100011 っていう文字列が与えられた時に、1*2 0*3 1*4 .... って簡易圧縮みたいなのをしたいわけです で、文字列に 1と0以外のものが入ってた時に、とりあえずエラーを出したいんだけれど char buff[1024]; scanf("%s",&buff); for( n=0; buff[n] == '\0'; n++) { if ( buff[n] != '0' || buff[n] != '1' ) { printf("Error!\n"); goto endline; } } ここのifがうまく反応してくれません 初歩的なミスがあると思うのですが、よろしくお願いします
- 158 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 21:03:18 ]
- buff[n] == '\0'の条件を逆にしてみたら?
- 159 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 21:04:56 ]
- for( n=0; buff[n] != '\0'; n++)
- 160 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 21:06:23 ]
- ランレンクス圧縮?
- 161 名前:151 [2007/07/21(土) 21:09:20 ]
- for( n=0; buff[n] != '\0'; n++)
{ if ( buff[n] != '0' && buff[n] != '1' )
- 162 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 21:09:40 ]
- buff[n] != '0' && buff[n] != '1'
- 163 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 21:11:04 ]
- >>155
Xファイルは知らないのでExcelだけ。 Excelのファイルは所詮ただのバイナリファイルなのだから、 C++で読み書きできないわけがない。 しかしWindows上ならプログラムからExcelを操作してやるのが楽。 データ形式を考える必要もなく、しかもオブジェクトという形で取り扱える。 ただ、その独特な仕組みに慣れる必要があるけど。
- 164 名前:151 [2007/07/21(土) 21:14:11 ]
- CSVとかで出力してあとで変換すればいい
- 165 名前:155 mailto:sage [2007/07/21(土) 21:48:55 ]
- レスありがとうございます。
ファイル操作関連の関数は先ほど上げたものぐらいしか知らなかったので、なんとか前進できそうです。 ツール周りをエクセルからデータを引っ張ってくるようにしようかと考えておりましたが >>164で書かれているように拡張子を変えてやれば配布するデータにも加えれそうですね。 バイナリデータである以上、独自に形式を変えない限りユーザ側で改変するのは容易ですしね。
- 166 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 22:08:46 ]
- (>>158),>>159. >>161,>>162
サンクス! for( n=0; buff[n] != '\0'; n++){ if ( buff[n] != '0' && buff[n] != '1' ){ printf("Error!\n"); goto endline; } こうだった
- 167 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 22:15:03 ]
- なんであほの>>151が混ざってるんだ?
- 168 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 22:17:05 ]
- 私には括弧がついてるよーww
- 169 名前:166 mailto:sage [2007/07/21(土) 22:43:40 ]
- あ、そういうことですか。「逆」って||と&&の話かと
んだば、かっこは解除させていただくの方針で
- 170 名前:デフォルトの名無しさん [2007/07/21(土) 22:46:03 ]
- struct , typedef , class だとどれが一番いいとかありますか?
使わないですむやつありますか
- 171 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 22:50:58 ]
- なぜそこにtypedefが
- 172 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 22:51:03 ]
- >>170
日本語でおk
- 173 名前:デフォルトの名無しさん [2007/07/22(日) 03:03:23 ]
- 同じように見えて確保するサイズが全然違いますね
bitset<1> a[1024]; bitset<1024> b; cout<< sizeof(a)<<" "<<sizeof(b);
- 174 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 03:05:48 ]
- >>173
そりゃそうだろ。でもサイズ自体は実装依存。
- 175 名前:デフォルトの名無しさん [2007/07/22(日) 04:45:28 ]
- 配列を引数にして再帰すると駄目なんでしょうか?やってみていませんが
int fnc(int a[10]){ a[]に対して処理をする fnc(a); };
- 176 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 05:08:33 ]
- 何も問題ないが。
まあ、a はポインタだがな。
- 177 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 08:45:09 ]
- static charなポインタ変数って
0で初期化されているのですか?
- 178 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 08:50:24 ]
- されないから宣言時に0を代入するんだよ
- 179 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 09:01:28 ]
- staticな変数はゼロ初期化される。
- 180 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 09:21:33 ]
- >>179 が正解。
おっそろしく古い太古のコンパイラとか 規格に準拠してないコンパイラとかなら知らんがな!
- 181 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 12:15:15 ]
- >>177
K&Rのp.50
- 182 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 12:18:25 ]
- constって時々目にするけど、どういう意味があるの?
- 183 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 12:21:57 ]
- お前ら入門書読んでから質問しろw
- 184 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 12:23:43 ]
- まだはじめたばっかだから、気にしないで!
- 185 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 13:15:03 ]
- >>182
かなり大雑把なくくりでいうと、その変数の値を変化させることができないということだ。 const int a = 10; a = 5; /* NG */ const int a[10] = {0}; a[5] = 1; /* NG */ int b = 10; const int *a; /* constはポインタが指す値にかかる */ a = &b; /* OK ポインタを変更しているだけ */ *a = 7 /* NG */ b = 7 /* OK コンパイラはaの性質とbの性質の区別ができない*/ int b = 10; int c = 100; int * const a = &b; /* constはポインタにかかる */ *a = 5; /* OK */ a = &c; /* NG */ int b = 10; int c = 100; const int * const a = &b; *a = 5; /* NG */ a = &c; /* NG */ どっか間違ってたら訂正して
- 186 名前:デフォルトの名無しさん [2007/07/22(日) 13:27:31 ]
- VC++2005っていまいくら位でGETできます?
- 187 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 13:27:51 ]
- static charなポインタ変数が
0で初期化されていることは分かりました。 これはメモリアドレスの0番地を指しているという理解で良いでしょうか。 また、この場合NULLとどこが違うのでしょうか? 自分はNULLはメモリアドレスの0番地を指していると理解していたのですが…
- 188 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 13:30:12 ]
- NULLの定義による
- 189 名前:デフォルトの名無しさん [2007/07/22(日) 13:33:19 ]
- #define NULL 0 だから NULLって書いても0って書いても同じですよね
それなのに0で初期化したほうがいいと推奨されているのは何故ですか?
- 190 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 13:36:38 ]
- >>186
Express Edition ならタダ
- 191 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 13:40:02 ]
- >>182
C++だと、関数にconstを付ける場合もある いや、むしろ可能な限り積極的に付けて欲しい。 class Hoge { public: void foo_set(double d) { x = d; } double foo_get() const { return x; } private: double x; } hoge; ↑の例だと、void hoge.foo_set(double)関数は、メンバ変数 x を変える可能性がある。 同じクラス内のメンバ変数を変える可能性がある関数は、constにできない(コンパイルエラー) double hoge.foo_get()関数は、xの中身を見るだけで、変更する可能性はゼロなので constを **つけることができる** **付けなくてもコンパイルエラーにはならない。** つまり、自分(や、保守のコーダー)に縛りを課すという意味合いがある。
- 192 名前:デフォルトの名無しさん [2007/07/22(日) 13:42:13 ]
- >>189
0で初期化していないと そのポインタを使って何かをしてしまったときに 予期せぬ動作をしてしまうからじゃないの?
- 193 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 13:42:29 ]
- >>187
ポインタが 0 で初期化されるってのは、 ヌルポインタで初期化されるって意味だ。 static char* p; は static char* p = 0; と同じってこと。 ポインタに 0 を代入するとヌルポインタとして扱われるから、 要するにヌルポインタで初期化されるということ。
- 194 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 13:43:12 ]
- >>185
>>191 つまり保護のため?
- 195 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 13:43:24 ]
- >>189
NULLで初期化するなって書いてあった?
- 196 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 13:51:23 ]
- 静的な変数がビット表現 0 の値ではなくヌルポインタで初期化されるというのは、
C++ ならこんな形で確認できる。 #include <iostream> using namespace std; int main() { class A; static int A::*p; static int A::*null = 0; cout << (int&)p << endl; cout << (int&)null << endl; } p と null はメンバ変数へのポインタってやつなんだが、 こいつのヌルポインタのビット表現は大抵の環境で 0 にはならない。 上のコードを実行すると、p と null とで 0 でない同じ値が出力されると思う。
- 197 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 13:56:06 ]
- なんだかよくわからないけど、
とにかくNULLは使わない方がいいというのは解りました ありがとうございます
- 198 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 13:57:53 ]
- >>196
0なんだが
- 199 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 14:02:46 ]
- なんだってー。
0 になる環境もあるのかー。
- 200 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 14:06:16 ]
- g++ なら -1 になる。
- 201 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 14:06:27 ]
- >>189
NULLは、C言語では #define NULL (void *)0 と定義されていた。(今のCは定義を見たことがないから分からない) つまり、このC言語処理系では0はint型。 int *a; a = 0; /* コンパイルエラーまたはウォーニング */ a = NULL; /* OK */ 一方、C++では、0は特別な値に昇格した。 C++では、0はint型と(void *)型の両方の性質を持った。 つまり #define NULL 0 と定義されているが、これはかつて、C++がCの上位互換性的要素が高かったため このように定義してないと移植時に不便であったという意味合いが強い。 int *a; a = 0; // OK(推奨) a = NULL; // OK(互換性のため。推奨されず) C++がなぜそうなったかは私には分からないが、 「ifならカッコの中が0であればif文は実行されない。それ以外は実行される」 という定義のように、C++の構造化の文法に不都合が無かった(むしろ定義上都合がよい)ことや (void *)0 が実用的に不便だったからかもしれない。 その辺はもっと詳しい人に
- 202 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 14:09:30 ]
- >>201
あんま適当な事言わないで。
- 203 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 14:14:33 ]
- >>202
遠慮なく訂正していいんだよ
- 204 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 14:14:55 ]
- まあいいんじゃね。うそをうそと(ry
- 205 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 14:19:42 ]
- まず、C の時代から 0 はヌルポインタだ。
だというのに C で NULL を ((void*)0) と定義することが許されていたのは、 整数型へそのまま代入できてしまわないようにするためだ。 まあ警告止まりかもしれないが、ないよりゃマシだ。 何で C++ でその定義が許されなくなったかというと、 C では void ポインタから他のポインタへの暗黙のキャストが許されていたけど、 C++ ではそれを禁止するようになったからだ。 いちいち明示的なキャストが必要になるのでは困るので、 NULL は 0 と定義されるようになった。 そして、C でも C++ でも NULL が推奨されないなんて話は聞いたことがない。 ポインタを扱っているという目印になるわけで、プログラムを読みやすくする効果がある。 どんどん使えばいい。
- 206 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 14:30:56 ]
- 注意する点があるとすれば、
NULL にキャストが必要になるっつー状況がないわけではないことだ。 例えば C++ で NULL を可変個引数に渡す時とか。 そのままだと int 型の 0 が渡されてしまう。 ヌルポインタのビット表現が 0 でない環境だけじゃなく、 ポインタ型のサイズが 64 ビットで int 型のサイズが 32 ビットなんて環境(普通の 64 ビット環境)でも問題になる。 C++ においては NULL は単にプログラムを読みやすくするためだけに使われるもので、 NULL と書いたから安心だ、と思ってはいけない。 そういう意味で NULL には危険性はあるのかもしれないけど、 NULL を使わないと可読性が大きく犠牲になるから NULL を使った方がマシ。
- 207 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 14:51:39 ]
- >>201
0は単なる整数リテラルだからint型と決まっている。処理系の都合なんかではない。 C++で特別になったわけでもない。 0がポインタ型に変換できて、ヌルポインタになるのはCのときから変わっていない。
- 208 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 14:54:54 ]
- int *p = (1 - 2 + 1); /* ヌルポインタ */
- 209 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 15:06:36 ]
- そもそも、規格でのNULLの定義は、C++の場合「処理系定義の空ポインタ定数」となっている。
つまり0である必要性はなく、例えばGCCでは#define NULL __nullとなっている。 __nullはポインタ型へは暗黙の変換が可能だが、整数型へ暗黙の変換を行うと警告になる独自拡張の定数。 あと、NULLではなく0でいいだろと言っているのはBjarne。 だからC++にはNULL使わない派もそれなりにいる。どれくらいいるのかは知らないけど。 少なくとも、俺もその内の1人。
- 210 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 15:09:31 ]
- FAQ くらい嫁、で済む話じゃね?
ttp://www.kouno.jp/home/c_faq/c5.html#0
- 211 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 15:22:00 ]
- >>209
NULL使わない人もいるのか。 if(str!=NULL){ iVal = str->iHoge; } とかって場合でも使わないの? ASSERT(str!=NULL); とかも使わないの?
- 212 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 15:24:21 ]
- つか、もう NULL をキーワードにしてくれ。
- 213 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 15:28:27 ]
- >>212
つnullptr in C++/CLI
- 214 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 15:30:41 ]
- 俺は usertype.dat に NULL 入れてるよ
- 215 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 15:35:10 ]
- それ色が変わるだk(ry
- 216 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 15:37:23 ]
- >>213
スレ違い
- 217 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 15:53:32 ]
- もういい加減しょうもない議論やめろ
- 218 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 15:55:15 ]
- 誰か議論なんてしてたっけ?
- 219 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 16:09:04 ]
- A name for the null pointer: nullptr (revision 3)
www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2214.pdf
- 220 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 18:12:27 ]
- しかし久々にぬるぽ いんたーという言葉を聞いた気がする。
- 221 名前:デフォルトの名無しさん [2007/07/22(日) 20:19:03 ]
- iteratorってポインタと同じようにアドレスを表すものですか??
同じですか??
- 222 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 20:31:57 ]
- >>221
抽象度が違う。 アドレス < ポインタ < イテレータ アドレスはポインタとして使えるし、ポインタはイテレータとして使える。
- 223 名前:デフォルトの名無しさん [2007/07/22(日) 20:33:45 ]
- サンクス
- 224 名前:デフォルトの名無しさん [2007/07/22(日) 20:41:34 ]
- 同時に10個のファイルを開いて置くとして、新しいファイルに書き込む
必要が出てきたとき、もっとも使われていないものを閉じて、新しく開く というコードはどうやったらいいですかね???
- 225 名前:デフォルトの名無しさん [2007/07/22(日) 20:53:16 ]
- 1:日本赤十字に5万円振り込む
2:新潟中越沖地震の救援基金に5万円振り込む のどちらか
- 226 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 20:57:06 ]
- すっきりとは解せないけどなんとなく分かるw
- 227 名前:224 [2007/07/22(日) 21:05:28 ]
- おねがいします
使われた順に、ファイル名とポインタを整列させようとしたんですけど・・ ファイルポインタがコピー出来ません・・・
- 228 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 21:13:30 ]
- >>205
前も誰か言ってたけど、0はCの頃から整数0ですよ。 必要なときにヌルポインタに暗黙のキャストされるだけですよ。
- 229 名前:244 [2007/07/22(日) 21:14:15 ]
- コンパイラや、機種によって同時に開けるファイル数に制限があるため
ひらっきっぱなしにするとエラーになってしまいます・・・ 互換性を保つため10個までにしたいのですが・・ いい方法ないですか??
- 230 名前:デフォルトの名無しさん [2007/07/22(日) 21:26:42 ]
- class A{ A(); };
A::A(){ char *i = new char ; } int main(){ A a* = new A; delete a ; return 0 ; } こういった場合でもメモリは開放されるのでしょうか?
- 231 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 21:29:55 ]
- されない。
i が行方不明になってメモリリークが発生する。 これは静的に A のインスタンスを作っていたとしても変わらない。 A のデストラクタの中で delete を呼び出すべき。
- 232 名前:230 [2007/07/22(日) 21:33:21 ]
- ありがとうございました。
- 233 名前:デフォルトの名無しさん [2007/07/22(日) 21:33:47 ]
- 現在時刻をミリ秒単位で取得する、移植性の高い方法ってありますか?
- 234 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 21:36:01 ]
- >>224
>ファイルポインタがコピー出来ません 詳しく書いてみ?
- 235 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 21:36:10 ]
- ない
- 236 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 22:19:29 ]
- >>228
0はCの頃からヌルポインタ定数ですよ。
- 237 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 22:21:24 ]
- 0は0だろ
- 238 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 22:24:15 ]
- >>236
0はヌルポインタ定数に変換できるというだけだろ。>>210
- 239 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 22:31:09 ]
- >>238
その言い方はおかしい。 0 を含めて整数の 0 と評価される定数式(C 限定で、それを void* にキャストしたもの含む)が ヌルポインタ定数。ヌルポインタ定数はポインタとして使われた場合にヌルポインタに変換される。
- 240 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 22:36:09 ]
- pow(2,2)
とかをコンパイル時に計算して、4をコードに埋め込んでしまうコンパイラも あるが、こういうのって定数式なのかしら?
- 241 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 22:40:01 ]
- 少なくともCとC++の構文上は定数式ではない。
- 242 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 22:41:47 ]
- Cで正規表現などをもちいて文字列を置換したりするときに、
文字列を細切れにぶったぎって それを再び結合したりするわけですが しばしばその文字列はもとより長くなったりしますので マジメにやろうとするとメモリ管理だの何だのが とてもめんどうくさく、しかも適当にやると ヘタをするとPerlのほうが速かったりするかと思います 効率よく楽なほうほうは何かありますか ロープというデータ構造は結合が鬼のように早いと聞きますが ロープに対して使える正規表現ライブラリなど寡聞にして知りません え?C++を使え?実におっしゃるとおりですね
- 243 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 22:42:33 ]
- >>241
ありがとう ということは、そのようなものがコンパイラの最適化によってゼロに 化ける場合は、ヌルポ定数とは扱われない ということかしら
- 244 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 23:01:22 ]
- >>243
関数呼び出しは定数式に含まれないことになってる。
- 245 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 00:00:41 ]
- >>236
じゃあ、引数不定個の関数で、0がintとして渡されるのは なんででしょうねえ。 printf("%d %d %s", 0, 0, 0) 64bit環境向けにコンパイルすると 全部intの0として扱われてることが明白ですよ。 何か変ですか?それともあなたが変ですか?
- 246 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 00:09:04 ]
- www.kouno.jp/home/c_faq/c5.html#2
- 247 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 00:55:18 ]
- いつまでゴチャゴチャ言いあってんだよ。
- 248 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 01:03:41 ]
- >>245 ポインタとして使われてないから。
- 249 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 01:38:56 ]
- またこの宗教論争やってんのかよwwww
- 250 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 01:43:25 ]
- 規格に照らして正しさが確かめられるんなら、宗教論争とは言わんだろ。
マクロ NULL を使うべきかどうかってんなら間違いなく宗教論争だけど。
- 251 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 02:06:46 ]
- 初心者の人、ちゃんとついてこれてます?
- 252 名前:205 mailto:sage [2007/07/23(月) 03:55:59 ]
- >>228 が正しいんだからもう終わりにしようぜ。
俺も言い方が悪かった。
|

|