【初心者歓迎】C/C++室 Ver.26【環境依存OK】
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2006/03/29(水) 11:59:26ただしその場合、質問者は必ず、環境を書きましょう。
※sageは禁止です。
【前スレ】
【初心者歓迎】C/C++室 Ver.25【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1140963340/l50
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0002デフォルトの名無しさん
2006/03/29(水) 12:54:280003デフォルトの名無しさん
2006/03/29(水) 13:36:07おつ
0004デフォルトの名無しさん
2006/03/29(水) 16:13:060005デフォルトの名無しさん
2006/03/29(水) 18:53:53乙
>前1000
GJ
0006デフォルトの名無しさん
2006/03/29(水) 20:42:480007デフォルトの名無しさん
2006/03/30(木) 22:02:04当方VC6.0しか環境が無く。どうにか、これでRAD的に簡単にGUI組んでいく方法ない?
0008デフォルトの名無しさん
2006/03/30(木) 22:09:050009デフォルトの名無しさん
2006/03/30(木) 22:16:550010デフォルトの名無しさん
2006/03/30(木) 22:50:35ごめん。せっかくだけどSP2入れれないから、俺無理だった。。。
>>9
そんなことが出来るのか。
思ったんだけど、EcllipseにGUIエディタ入れて、C++のも入れて編集したりとかできないかな
つか、VCでのGUIの組み方を親切丁寧に教えてくれてるサイトって無いものか
0011デフォルトの名無しさん
2006/03/30(木) 23:51:49ツールバーとかつけるだけでも大変だけど、
それを簡単に作れるようにマイルーチンを鍛えていくのが楽しい。
0012デフォルトの名無しさん
2006/03/30(木) 23:59:12ダイアログエディタはそんなに使いづらかった?
0013デフォルトの名無しさん
2006/03/31(金) 00:50:350014デフォルトの名無しさん
2006/03/31(金) 11:04:04メニュー付きで編集できるなら良かったのだけど(ダイアログ
画像(BMP〜PSDくらいまで)を単純にファイル選択ウィンドウから開いて
加工して、プレビューで見せて任意形式で保存するようなアプリにしたいのだけど
0015デフォルトの名無しさん
2006/03/31(金) 13:37:34つ[ImageMagick]
0016デフォルトの名無しさん
2006/03/31(金) 21:46:15初めからダイアログボックスにメニューをつけて画像開くようにしようとおもう
ところでピクチャボックスにファイル開いて画像の表示って出来るかな
>>14
やりたいことがあるから既存のソフトウェアは。。。
0017デフォルトの名無しさん
2006/03/32(土) 01:56:01デストラクタはvirtual宣言しておくべきだと言えるのですか?
0018デフォルトの名無しさん
2006/03/32(土) 02:09:28001916
2006/03/32(土) 02:20:53002017
2006/03/32(土) 02:21:420021デフォルトの名無しさん
2006/03/32(土) 02:33:51void make_obj_b;
};
void A::make_obj_b;(){
obj_b B;
]
class B{
}
void
int main (){
obj_a A;
obj_a::make_obj_b;
// <-ココ
return;
}
とした場合、コメントの場所でobj_bは破棄されてしまいます。
obj_aが生きている間はobj_bを保持する方法などはありますか?
0022デフォルトの名無しさん
2006/03/32(土) 02:37:25集約の関係にする。
お前はOOPのなんたるかを勉強し直せ
0023デフォルトの名無しさん
2006/03/32(土) 02:43:17thx.
002417
2006/03/32(土) 03:51:45それは、基本クラスオブジェクトへのポインタを通じて派生クラスオブジェクトへアクセスする事例を考慮しての事ですか?
0025デフォルトの名無しさん
2006/03/32(土) 03:53:350026デフォルトの名無しさん
2006/03/32(土) 03:54:18サブクラスのデストラクタを呼ぶため
002717
2006/03/32(土) 04:17:28002817
2006/03/32(土) 04:19:40アップキャストと言うのですね。
勉強になりました^^
002917
2006/03/32(土) 04:20:52アップキャストと言うのですね。
勉強になりました^^
独習C++では教えてくれませんでした><
0030デフォルトの名無しさん
2006/03/32(土) 04:27:07アップキャストは「アクセスすること」じゃなくて、
アクセスするためにポインタや参照を変換することを言う。
0031デフォルトの名無しさん
2006/03/32(土) 05:54:40そこから仮想関数呼んだらまだ派生クラスの関数の方を呼ぶんですか?
0032デフォルトの名無しさん
2006/03/32(土) 05:57:23この動作が気に食わないならvirtualせずにオーバーライドしとけ
0033デフォルトの名無しさん
2006/03/32(土) 06:03:27今は基本クラスのオブジェクトを指してる筈だから、基本クラスのvirtualついた方を呼ぶべきだと思います><
0034デフォルトの名無しさん
2006/03/32(土) 06:08:21日本語でおk
0035デフォルトの名無しさん
2006/03/32(土) 06:12:490036デフォルトの名無しさん
2006/03/32(土) 06:14:160037デフォルトの名無しさん
2006/03/32(土) 06:26:31日本語でおk
0038デフォルトの名無しさん
2006/03/32(土) 06:29:47どうせあんたなんか朝生でも見て暇を持て余してたんでしょ!
で、変なの居るから適当にいじめてやろうって魂胆でしょ!?><
0039デフォルトの名無しさん
2006/03/32(土) 06:53:55もうvirtualの存在意義とか混乱して分からなくなりました><
0040デフォルトの名無しさん
2006/03/32(土) 07:19:23んで、ダウンキャストしたら基本クラスの方を使いたいなら
virtual無しオーバーライドにすると。
0041デフォルトの名無しさん
2006/03/32(土) 07:21:29>呼ぶべきだと思います><
派生クラスの関数を呼ぶためにvirtual にしてるんだから何もおかしくないだろ
0042デフォルトの名無しさん
2006/03/32(土) 07:26:550043デフォルトの名無しさん
2006/03/32(土) 07:32:25キャストの仕組みが理解できてないのだと思います。
0044デフォルトの名無しさん
2006/03/32(土) 07:47:250045デフォルトの名無しさん
2006/03/32(土) 08:05:47vitualつけてないと、ダイナミックキャストで継承クラスのポインタを得たりしない限り
アップキャストしても基本クラスの関数呼び出しです。
継承クラスのオブジェクトのポインタからダイナミックにダウンキャストした場合でも
基本クラスの関数を呼び出します。
vitualをつけると、キャストがアップダウン関わらずvirtualがついてない方を呼び出すよう努力します。
0046デフォルトの名無しさん
2006/03/32(土) 09:16:06C++の学習をしています、クラスライブラリを作って見たいのですが
どういうライブラリを製作していいか思いつきません
皆さんがC++を学んだ当初どのようなライブラリを作られましたか?
題材のヒントをもらえないでしょうか
0047デフォルトの名無しさん
2006/03/32(土) 09:37:070048デフォルトの名無しさん
2006/03/32(土) 12:49:580049デフォルトの名無しさん
2006/03/32(土) 12:59:10環境はcygwinです。
configure --enable-widecの後makeしたncursesを使っています。
コンパイルはgcc test.c -lncurseswです。。
printwもaddwstrも文字化けしてしまいします。
コンソールプログラムのprintf("こんにちは");は正常に表示されています。
0050デフォルトの名無しさん
2006/03/32(土) 18:27:510051デフォルトの名無しさん
2006/03/32(土) 18:34:260052デフォルトの名無しさん
2006/03/32(土) 18:34:28A(char *x){.....}
B(){char x[]=(..);....A(x)...}
としたら、'char *' 型は 'char[]' 型に変換できない エラーになりました
どうしたらいいですか
0053デフォルトの名無しさん
2006/03/32(土) 18:39:250055デフォルトの名無しさん
2006/03/32(土) 18:49:03とりあえずstatic_cast。
それで駄目ならreinterpret_castかconst_cast。
C形式のキャストは出番無し。
0056dynamic_cast
2006/03/32(土) 18:53:510057初心者
2006/03/32(土) 19:07:38>>52
A(char **x){.................}
だとどうかな?
char x[]=(.........)のxはポインタポインタのレベル?だから
入れる方も**にしてポインタポインタにしないといけないんじゃないかな?
005850
2006/03/32(土) 19:08:13intをただunsignedにするだけでもわざわざstatic_castするんですか?
0059デフォルトの名無しさん
2006/03/32(土) 19:30:55するよ。
0060デフォルトの名無しさん
2006/03/32(土) 19:47:11帰れ
006150
2006/03/32(土) 19:53:22あり^^
006252
2006/03/32(土) 20:02:440063デフォルトの名無しさん
2006/03/32(土) 20:24:41代わりにコンテナへのポインタを格納するようにするのですか?
0064デフォルトの名無しさん
2006/03/32(土) 20:25:34vector<vector<int> > vv;
とかそういう事?
006563
2006/03/32(土) 20:27:300066デフォルトの名無しさん
2006/03/32(土) 20:35:47で、>>64のような書き方ではコンパイルエラーが出るの?
ポインタを入れたいのはなぜ?
0067デフォルトの名無しさん
2006/03/32(土) 20:36:06略し過ぎ。
さっぱり分からん。
0068デフォルトの名無しさん
2006/03/32(土) 20:36:400069デフォルトの名無しさん
2006/03/32(土) 20:45:19俺も最初そう思った。しかしコンパイルエラーを晒してくれないので
さっぱり原因がわからん。
0070初心者(今までのは全部間違い、すまそ)
2006/03/32(土) 20:46:19// test.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
void name(char* s){
cout << s << "\n";//(s:文字列の先頭を指すポインタ)を入れるとcoutが文字列にして全部表示してくれる
cout << &s << "\n";//(&s:文字列の先頭を指すポインタの中身)
cout << s[14] <<"\n";//(s[14]:15番目のポインタ)をcoutが文字にして表示してれる
}
int _tmain(int argc, _TCHAR* argv[])
{
char s[]= "2chnerehayaku sine";
name(s);
return 0;
}
>>52
ゴメン、今までの全部なしにして
>>52の通りで普通に出来たけど
何か駄目なのか?
007163
2006/03/32(土) 20:47:59なんだかエラーが出たような気がしないでもないから苦肉策としてです。
僕も自然な表記で済むならそうしたいです。
007263
2006/03/32(土) 20:51:18調べて参ります。
0073デフォルトの名無しさん
2006/03/32(土) 20:51:26気になるならvector< vector<int> >とかやればいいんでないの。
これでも気になるなら他の手段使えばいいよ。
0074初心者
2006/03/32(土) 21:00:51cout << &s << "\n";//(&s:文字列の先頭を指すポインタの中身)
↓
cout << *s << "\n";//(*s:文字列の先頭を指すポインタの中身)
に変更
上のはポインター自体のアドレスだがや
0075初心者
2006/03/32(土) 21:15:55ていうのも違うな
cout << s[14] <<"\n";//(s[14]:15番目の文字)をcoutが文字にして表示してれる
15番目の文字って意味だな
(ポインタともいえるのかもしれないけど、一応 *s[14] って出来ないから文字だな)
0076初心者
2006/03/32(土) 21:22:53cout << s << "\n";//(s:文字列の先頭を指すポインタ)を入れるとcoutが文字列にして全部表示してくれる
cout << s + 14 << "\n";//(s:文字列の先頭を指すポインタ)を入れるとcoutが15番目の文字から文字列にして最後まで表示してくれる
cout << *s << "\n";//(*s:文字列の先頭を指すポインタの中身 )
cout << &s << "\n";//(&s:文字列の先頭を指すポインタのアドレス)
cout << s[14] <<"\n";//(s[14]:15番目の文字)をcoutが文字にして表示してれる
俺、全然駄目だな・・・
0077デフォルトの名無しさん
2006/03/32(土) 21:37:31floatは必ずしもdoubleにされるわけじゃないですよね?
K&R1版にはdoubleに格上げされるとあるようですが、
古い仕様ですよね?
0078デフォルトの名無しさん
2006/03/32(土) 22:01:54その通り
007977
2006/03/32(土) 22:07:090080初心者
2006/03/32(土) 22:32:200081デフォルトの名無しさん
2006/03/32(土) 22:57:450082初心者
2006/03/32(土) 23:12:27としたとき
東京の”京”の字だけ出すにはどう配列を書いたら良いの?
0083初心者
2006/03/32(土) 23:25:07ポインタの配列か
0084デフォルトの名無しさん
2006/03/32(土) 23:40:08#include <stdio.h>
#include <wchar.h>
wchar_t const* s1[3] = {L"東京",L"大阪",L"名古屋"};
fputwc(s1[0][1], stdout);
0085デフォルトの名無しさん
2006/03/32(土) 23:45:22何をしたいのかわからんが、"京"は2バイト文字なので、
s1[0][2]とs1[0][3]のchar型2つ分の内容で"京"1文字を表す。
0086デフォルトの名無しさん
2006/03/32(土) 23:48:03いい加減なこと言うなや
0087初心者
2006/03/32(土) 23:49:34ありがとう
やっぱ
他の関数使わないと無理なのな
0089デフォルトの名無しさん
2006/03/32(土) 23:55:56例えばEUCだと3バイト文字がある
0090デフォルトの名無しさん
2006/03/32(土) 23:59:54扱えないっちゅうことか?
0091デフォルトの名無しさん
2006/04/02(日) 00:04:290092初心者
2006/04/02(日) 00:20:06の時
s1[0]+1
s1[0][1]
は同じ事なのかな?
0093デフォルトの名無しさん
2006/04/02(日) 00:41:52*(s1[0]+1)
と
s1[0][1]
が同じ。
0094デフォルトの名無しさん
2006/04/02(日) 00:48:59前者はchar *型、
後者はchar型
s1 : char *[3]型
s1[0] : char *型
s1[[0][0] : char型
こうするとわかりやすい。
std::cout << typeid(s1[0] +1).name() << std::endl ;
std::cout << typeid(s1[0][1]).name() << std::endl ;
009563
2006/04/02(日) 00:50:35コンテナはコンテナを格納出来ます。
0096初心者
2006/04/02(日) 01:11:41>>94
つまり
s1[0][1]って
はchar型なのな
だから
&s1[0][1]ってやると
okyoになるのか
結局、普通の配列なのか
0098デフォルトの名無しさん
2006/04/02(日) 01:46:29wchar_tのエンコーディングは何も規定されてないよ、規格上は。
Unicodeを使うのが最近では一般的だけど
そうでない実装も普通にある/あった。
0099デフォルトの名無しさん
2006/04/02(日) 02:16:51Cでprintfなら一瞬なのに、C++のやり方だと一文字ずつズラーっと並ぶ感じ。
0100デフォルトの名無しさん
2006/04/02(日) 02:28:22それはそれでカッコいいじゃん
0101デフォルトの名無しさん
2006/04/02(日) 02:39:46PhotoShopで作成したアルファを適応したPNGファイルが読み込みたいので
ttp://www.topposystem.co.jp/GDIp/GDIp/gdi_flat_api.htm
にあるGDI+FlatsAPIsの関数を使用しファイルの読み込みに
336 GpStatus WINGDIPAPI GdipCreateBitmapFromFile(GDIPCONST WCHAR* filename, GpBitmap **bitmap);
でGpBitmapを作成し
344 GpStatus WINGDIPAPI GdipCreateHBITMAPFromBitmap(GpBitmap* bitmap, HBITMAP* hbmReturn, ARGB background);
でhBitmapに変換しそれをUpdateLayeredWindowで表示させようと思ってるのですが
GpStatus GdipCreateBitmapFromFile("ファイル", GpBitmap **bitmap);の形で書くと
初期化子の数が多いと言われ、上のリストと引数が違い詳細がわからず困っています。
環境はVC++.NET2003で作成しています。
この方法でアルファが抜けた状態でウィンドウを表示する事は可能なのでしょうか?
普通のBitmapやアルファの付きのBMP等の表示は成功しています。
どなたか教えて頂けないでしょうか?よろしくお願いします。
0102デフォルトの名無しさん
2006/04/02(日) 02:41:41こんなんじゃJavaにすら負けそう
0103初心者
2006/04/02(日) 02:55:44は最大の大きさ[10]をあらかじめ決めないといけないけど
char* a[]
は自動でぴったり確保される
よね?
char a[3][10]の方は使わない部分は空白で埋まるわけ?
0104デフォルトの名無しさん
2006/04/02(日) 02:59:38配列が静的なものか、定義するときに初期化子をつけていれば、初期値の無い部分は 0 で埋まる。
あと、文字列リテラルには書き込みできないから気をつけろ。
0105デフォルトの名無しさん
2006/04/02(日) 03:02:50コンパイラはBCCです。
0106デフォルトの名無しさん
2006/04/02(日) 03:03:290107デフォルトの名無しさん
2006/04/02(日) 03:18:14ありがとうございます。
どこかでBCCでは作れないと聞いたので安心しました。
0108デフォルトの名無しさん
2006/04/02(日) 03:29:01最適化をかければ10倍ってことはないような気がするけど。
まあ確かに C++ のストリームではフォーマッティングがやりにくいとは思う
printf流のフォーマッティングも型安全でないところとかが気に入らないけど
使いやすさでいえば確かに使いやすいしな
0109デフォルトの名無しさん
2006/04/02(日) 03:53:53それってエラーじゃなくて、
デバッグ文字列が255文字を・・・とかいう警告じゃない?
#pragma で消せるはず。
0110デフォルトの名無しさん
2006/04/02(日) 03:58:18>どこかでBCCでは作れないと聞いたので安心しました。
お前が心配だ。
0111デフォルトの名無しさん
2006/04/02(日) 04:46:22intとfloatとdoubleのみ可能みたいな。
0112デフォルトの名無しさん
2006/04/02(日) 04:49:27汎用関数って何だ?Templeteか?
せいぜいその3種類のみに特化させて、他は何も無しぐらいしかないんじゃね?
間違ってるかも知れんからあくまで参考程度にとどめてくれ
0113デフォルトの名無しさん
2006/04/02(日) 04:54:01その他の場合はコンパイル時にエラー起こすようにしたらいい
エラー起こす手段は適当にstatic assertでぐぐってくれ
0114デフォルトの名無しさん
2006/04/02(日) 07:21:10サンキュウエニウェイ
011552
2006/04/02(日) 07:54:23が元のソースです。BCCの問題かもしれません
0116デフォルトの名無しさん
2006/04/02(日) 08:01:41VC++Expressのcl.exeだと/EHscオプションつければ警告も無くコンパイル成功
0117デフォルトの名無しさん
2006/04/02(日) 10:21:02こんな方法もある。
//hoge.h
template <typename T>
int hoge(T t) ;
//hoge.cpp
template <typename T>
int hoge(T t)
{
//適当に実装
}
template int hoge(int) ;
template int hoge(float) ;
template int hoge(double) ;
//main.cpp
int main()
{
0118デフォルトの名無しさん
2006/04/02(日) 10:23:05//main.cpp
#include "binary.h"
int main()
{
hoge(0) ; //hoge<int>
hoge(0.1) ;//double
hoge("hoge") ;//エラー
}
0119117
2006/04/02(日) 10:25:18C++ Template Metaprogramming読んで適当に試している最中だったんだ。
0120デフォルトの名無しさん
2006/04/02(日) 13:35:03いや、お前が心配だ。
BCCはscrnsave.lidが無いから無理。
0121デフォルトの名無しさん
2006/04/02(日) 13:42:18scrnsave.libはスクリーンセーバを書くときのお約束をまとめただけのもので必須ではない。
もし使いたいならmingwプロジェクトのscrnsave.cを使えばいいし。
0122デフォルトの名無しさん
2006/04/02(日) 13:47:06それ猫(ryに書いてあった!
*Borland C++ Compilerにはscrnsave.lidが付属していないため、
本章(スクリーンセーバーを作る章)のサンプルコードをコンパイルすることはできません。
0123デフォルトの名無しさん
2006/04/02(日) 16:02:58{
HRESULT Next (unsigned long celt,LPWSTR * rgelt,unsigned long * pceltFetched );
HRESULT Skip (unsigned long celt );
HRESULT Reset ( );
HRESULT Clone (struct IEnumPStoreItems * * ppenum );
virtual HRESULT __stdcall raw_Next (unsigned long celt,LPWSTR * rgelt,unsigned long * pceltFetched ) = 0;
virtual HRESULT __stdcall raw_Skip (unsigned long celt ) = 0;
virtual HRESULT __stdcall raw_Reset ( ) = 0;
virtual HRESULT __stdcall raw_Clone (struct IEnumPStoreItems * * ppenum ) = 0;
};
�@
IEnumPStoreItems : IUnknown
はクラスの定義でよろしか
�A
HRESULTというのはエラー定義ですよね?
HRESULT Next (unsigned long celt,LPWSTR * rgelt,unsigned long * pceltFetched );
とは変数Nextにunsigned long celt,LPWSTR * rgelt,unsigned long * pceltFetchedを
引数として一緒に返す関数ってことですか。また、
�B
virtual HRESULT
はどのように理解したらよろしか
オナガイシマス
0124デフォルトの名無しさん
2006/04/02(日) 17:33:04IUnknownクラスを継承したIEnumPStoreItemsクラスの宣言
2.
HRESULTというのはtypedefされた型名
(unsigned long celt, LPWSTR * rgelt, unsigned long * pceltFetched) を引数として渡して
HRESULTを返すNextという名前の関数
引数として一緒に返すってなんやねん
3.
戻り値の型がHRESULT型の仮想関数の宣言
この場合は =0; があるので純粋仮想関数
0125デフォルトの名無しさん
2006/04/02(日) 18:18:42>IUnknownクラスを継承したIEnumPStoreItemsクラスの宣言
先頭に class なり struct なりクラスキーが付いてないんだから「クラス宣言」といってしまうのはちょっと
JIS 的には、クラスキーを除いた「クラス先頭部」ってところだが……
# 定義=宣言ではあっても、メンバ定義が付いているやつを「クラス宣言」と呼びたくはないなあ
0126デフォルトの名無しさん
2006/04/02(日) 19:30:36>>125
サンクス
123です
2
は戻り値を返すで良いですよね?
0127デフォルトの名無しさん
2006/04/02(日) 21:05:10クラスAにクラスB・C・Dをそれぞれ保持させています。
そのクラスB・C・Dでそれぞれクラスxの機能を使用したいのですが
それぞれにクラスxを保持させる以外にいい方法はないでしょうか。
アドバイスをお願いします。
0128127
2006/04/02(日) 21:06:300129デフォルトの名無しさん
2006/04/02(日) 21:45:31それで問題ないならそれがいいだろう。何が不満なんだ?
0130デフォルトの名無しさん
2006/04/02(日) 21:53:32AがXを保持し、B/C/Dはそこへの参照を保持するようにしたらどう?
0131127
2006/04/02(日) 22:01:33クラスBCD以外にも今後xを使うクラスが増える予定であるのと
クラスAも一つじゃなくて複数なのであまり効率的でないのかなとおもったので・・・・
>>130
参照を保持する・・・具体的にどう記述してよいものか判らないので簡単な例を挙げていただけないでしょうか。
0132デフォルトの名無しさん
2006/04/02(日) 22:30:55学校でプログラムを習っている学生なのですが、
上手くならなくて悩んでいます。
授業では、プログラムソースを1回づつ写すことを繰り返していて、
それを動作させるのは出来ていたのですが、
その後、急に「こういう物を作れ」「ソートを作れ」とだけ問題が出され、
全く分かりませんでした。
普通の人は、その1回で自分の物に出来てしまうのでしょうか?
写す練習を続けていても、どうせ写せても分かるようにならないんだ!
という気分になり、身が入りません・・・
0133デフォルトの名無しさん
2006/04/02(日) 22:36:35プログラムソースを本当に「写す」ことだけを繰り返してたんなら、
あんたプログラム向いてないよ。辞めときな。
普通は写してる途中で考える。
「ここはどういう意味か?」
「ここをちょっと変えたらどうなるのか?」
学校でプログラムを写させる時には、たぶんそういうのを期待している。
そういう考えができないなら本当にプログラムは辞めたほうがいい。
0134132
2006/04/02(日) 22:38:36なるほど・・・納得です。
確かに、ifとかを記号的に扱えれば上手くなるのかな・・・と、思うのですが、
いざ白紙の画面を見ると、何もできないんです・・・。
難しいですね。レスありがとうございます。
0135デフォルトの名無しさん
2006/04/02(日) 22:43:16そういうのってこれ読んだらいいんじゃないの?
0136デフォルトの名無しさん
2006/04/02(日) 22:46:08こんなのとかどうなんだろ?
0138デフォルトの名無しさん
2006/04/02(日) 23:01:17MONAOSのプログラミングに貢献したいと思っているので教えていただきたいです。
0139デフォルトの名無しさん
2006/04/02(日) 23:02:59int array[40] = {};
は邪道ですか?普通?
0140デフォルトの名無しさん
2006/04/02(日) 23:04:01何を聞きたい?
0141デフォルトの名無しさん
2006/04/02(日) 23:11:59それ、 C だとコンパイルできないから、 = {0} にするのが一般。
0143132
2006/04/02(日) 23:48:17参考になります・・・
0144デフォルトの名無しさん
2006/04/02(日) 23:49:19ならない
0146デフォルトの名無しさん
2006/04/03(月) 00:02:16初期化子の不足分には 0 が埋められる。初期化しないときは不定。
静的記憶域の変数なら初期化しないときも 0 になる。
0147デフォルトの名無しさん
2006/04/03(月) 00:41:200148132
2006/04/03(月) 01:52:460149デフォルトの名無しさん
2006/04/03(月) 02:32:440150デフォルトの名無しさん
2006/04/03(月) 03:20:520151デフォルトの名無しさん
2006/04/03(月) 03:22:000152デフォルトの名無しさん
2006/04/03(月) 03:32:43int b[10][10][10] = {{{0}}};
0153デフォルトの名無しさん
2006/04/03(月) 09:16:39ぶっちゃけどちらも{0}でいいんじゃ・・・
015449(ncursesで日本語表示)
2006/04/03(月) 10:40:110155デフォルトの名無しさん
2006/04/03(月) 14:00:53わからないことがありますので教えてください。
strcpy(stackinfo, phost->h_name) ; の
-> とゆう表記はなんでしょうか?
代入?変数?よくわかりません。よくプロの人が
使う技なんでしょうか?
ちなみに初心者の書籍には一切書かれて無かったので、
中級以上の方が使うものだと思われます。
わかる方、よろしくお願いします。
0156デフォルトの名無しさん
2006/04/03(月) 14:03:22アロー演算子でググレ
0157デフォルトの名無しさん
2006/04/03(月) 14:03:380158デフォルトの名無しさん
2006/04/03(月) 14:04:15ありがとうございます。早速しらべてみます。
0159デフォルトの名無しさん
2006/04/03(月) 14:05:11なんという書籍なのか非常に気になる。
ポインタを解説しないCの書籍なんてあるのだろうか。
0160デフォルトの名無しさん
2006/04/03(月) 14:26:110161質問
2006/04/03(月) 15:23:44C言語の質問ではないのですが適切なスレがどこなのかわからないのでここに書いてみました。
Q1.Visual Studio 2003でC++でダイアログプログラムを記述しているのですが
メインダイアログを表示するのにリソースビューからたどって何度かクリックしないといけないのですが、簡単に表示させることはできますか?
Q2.ダイアログでプログラム作成時に常にグリッド表示にしたいのですが、「グリッド」に設定して保存しても、サイドプロジェクトを開くと「ガイドの設定」が「ルーラーとガイド」に戻って
しまいます。ガイドの設定をグリッドに固定することは可能でしょうか?
よろしくお願いします。
0162デフォルトの名無しさん
2006/04/03(月) 15:51:44A2.しりません。やってみたけどできないね。
0163質問の母
2006/04/03(月) 16:13:360164デフォルトの名無しさん
2006/04/03(月) 16:22:10CUI環境でのC++プログラム(と言えない程の物)をちょろちょろ作ってるんですけど、
皆さんは初めてプログラミングを始めようと思ったときどんな事から始めましたか?どんな本を読みましたか?どんな学校でどんな事から学びましたか?
教えていただけるとうれしいす。
初心者歓迎ってこういう事じゃなかったりスレ違いだったりした場合誘導お願いします∧||∧
0165ヒッキー☆
2006/04/03(月) 16:56:17↑このHPの日記にて
「暇だよなネラー爆笑
見ててウケるしワラ〜
自分を相手への中傷でしか表現できなぃ(笑)
頑張ろうね
なんか能力低いっつうか人として低いなって思う(笑)」
↑ようするに
ニートだけならまだしもPCやってる全ての人間を馬鹿にしてるんですよ
あなたは許せますか??
0166デフォルトの名無しさん
2006/04/03(月) 17:02:330167デフォルトの名無しさん
2006/04/03(月) 17:17:11>ニートだけならまだしもPCやってる全ての人間を馬鹿にしてるんですよ
その内容からそういう判断をするお前が人を馬鹿にしているんだよ。
若しくは、お前自身が馬鹿。
0168デフォルトの名無しさん
2006/04/03(月) 18:43:46マ板向きの内容だと思うのでここらへんでどうぞ
スレッドを立てるまでもない質問雑談スレ23
http://pc8.2ch.net/test/read.cgi/prog/1139729337/l50
【ルールは】超初心者が質問するスレ【守れ】
http://pc8.2ch.net/test/read.cgi/prog/1093770642/l50
0170デフォルトの名無しさん
2006/04/04(火) 07:41:51#define y(arg2) x(arg2)を使って展開する
こんな感じでマクロの中で他のマクロを
多重に使えるんでしょうか?
そのとき評価順序はどうなるんでしょう?
0171デフォルトの名無しさん
2006/04/04(火) 08:29:17#define y(arg2) x(arg2)
#define z(arg3) Z z(arg3) Z
x(xxx)
y(yyy)
z(zzz)
↓展開結果 by gcc -E
XxxxX
XyyyX
Z z(zzz) Z
0172デフォルトの名無しさん
2006/04/04(火) 08:31:50#define z(arg3) Z##z(arg3)##Z
z(zzz)
↓ 展開結果 by gcc -E
test.c:2:1: pasting ")" and "Z" does not give a valid preprocessing token
Zz(zzz)Z
0173デフォルトの名無しさん
2006/04/04(火) 08:44:430174デフォルトの名無しさん
2006/04/04(火) 08:47:00として連接されずに、展開対象になっているのかと。
gcc の 2.9.x から 3.x で挙動が変わった?
0175デフォルトの名無しさん
2006/04/04(火) 08:49:18http://blog.tcp-ip.or.jp/ar/syuichi/index.php?mode=show&date=20050112
0176デフォルトの名無しさん
2006/04/04(火) 08:52:06鬱だしのう
0177デフォルトの名無しさん
2006/04/04(火) 09:08:400178デフォルトの名無しさん
2006/04/04(火) 10:58:140179デフォルトの名無しさん
2006/04/04(火) 11:29:130180デフォルトの名無しさん
2006/04/04(火) 12:01:29どう読みこめば?
あかさたなはまやら
というファイルから
かさた、まや
だけ読み込んでcharに
置き換えるにはどうすればいいのでしょう?
0181デフォルトの名無しさん
2006/04/04(火) 12:38:23>そのとき評価順序はどうなるんでしょう?
#define x(a) {a}
#define y(a) <x(a)>
とすると、y(foo)の展開は次のように進む。引数の展開の細かいところは省略した。
矢印は「着目しているトークン」を指す。
→y(foo)
/* マクロyの呼び出しを認識。引数の対応は a -> foo */
/* 引数fooを展開。結果はfoo */
/* yの呼び出しを定義本体で置き換える */
→<x(foo)>
/* <はマクロではないのでそのまま出力 */
<→x(foo)>
/* マクロxの呼び出しを認識。引数の対応は a -> foo */
/* 引数fooを展開。結果はfoo */
/* xの呼び出しを定義本体で置き換える */
<→{foo}>
/* {はマクロではないのでそのまま出力 */
<{→foo}>
/* 以下同様。これ以降マクロの呼び出しはなく、結果は<{foo}>。 */
0182デフォルトの名無しさん
2006/04/04(火) 12:44:00どういう条件で
かさた、まや
だけが抜き出されるのか?
をコンピュータに説明すればいい。
0183デフォルトの名無しさん
2006/04/04(火) 12:51:18char ch ='あ';だとコンパイルエラーだし
0184デフォルトの名無しさん
2006/04/04(火) 12:59:010185デフォルトの名無しさん
2006/04/04(火) 13:42:565冊C++の本あるのにstd::localeのこととか、どれにもほとんど載ってねー
買う本間違ったかな・・・、それとも足りないかな・・・
まあ、ぐぐればそれなりに出てくるみたいだけど
以上チラシの裏
0186デフォルトの名無しさん
2006/04/04(火) 13:52:00それが難しくて出来ないんです
単にfscanfを利用してもできませんし…
0187デフォルトの名無しさん
2006/04/04(火) 14:14:16ワイド文字を含むテキストファイルから、例えば任意のn番目にある文字を知りたい
みたいな感じ?
0188デフォルトの名無しさん
2006/04/04(火) 15:04:47お願いします。
金額を入力して、割引した額を表示させるプログラム
を作ったのですが
printf("一割引の場合\n%d円\n",(int)(a*0.9));
この行の(int)(a*0.9))の(int)がなぜ必要なのでしょう?
実際無くしてやってみたら全部計算結果が0になってしまった
のですが。
0189デフォルトの名無しさん
2006/04/04(火) 15:07:39int型は自動的にdouble型やfloat型などの浮動小数点型に”格上げ”されてしまうため、
(int)でint型にキャストして表示してる
0190デフォルトの名無しさん
2006/04/04(火) 15:12:15ということは、5とか6とか掛けるなら
このintはいらない、ってことですね。
アリガトウございました。
0191デフォルトの名無しさん
2006/04/04(火) 15:42:49、--‐冖'⌒ ̄ ̄`ー-、
/⌒` 三ミヽー-ヘ,_
__,{ ;;,, ミミ i ´Z,
ゝ ''〃//,,, ,,..`ミミ、_ノリ}j; f彡
_) 〃///, ,;彡'rffッ、ィ彡'ノ从iノ彡
>';;,, ノ丿川j !川|; :.`7ラ公 '>了 なにジョジョ? マルチバイト文字一文字が表せない?
_く彡川f゙ノ'ノノ ノ_ノノノイシノ| }.: '〈八ミ、、;.)
ヽ.:.:.:.:.:.;=、彡/‐-ニ''_ー<、{_,ノ -一ヾ`~;.;.;) ジョジョ それは「一文字」と考えるからだよ
く .:.:.:.:.:!ハ.Yイ ぇ'无テ,`ヽ}}}ィt于 `|ィ"~
):.:.:.:.:|.Y }: :! `二´/' ; |丶ニ ノノ 逆に考えるんだ
) :.: ト、リ: :!ヾ:、 丶 ; | ゙ イ:}
{ .:.: l {: : } ` ,.__(__,} /ノ 「2バイトだから文字列だ」と
ヽ ! `'゙! ,.,,.`三'゙、,_ /´
,/´{ ミ l /゙,:-…-〜、 ) | 考えるんだ
,r{ \ ミ \ `' '≡≡' " ノ
__ノ ヽ \ ヽ\ 彡 ,イ_
\ \ ヽ 丶. ノ!|ヽ`ヽ、
\ \ヽ `¨¨¨¨´/ |l ト、 `'ー-、__
\ `'ー-、 // /:.:.} `'ー、_
0192デフォルトの名無しさん
2006/04/04(火) 15:51:09UTF-32だったら4バイトだよ
0193デフォルトの名無しさん
2006/04/04(火) 19:01:40SJIS にしろ EUC にしろ UTF-8 にしろ、
どちらにしろ文字列だな。
0194デフォルトの名無しさん
2006/04/04(火) 21:07:08Shift-JIS環境などでは通る。
>>186
> それが難しくて出来ないんです
まず、条件をまとめろ。
話はそれからだ。
そもそも、人に説明できない事を、
コンピュータに命令出来ると思ってるのか?
抜き出したい各文字がどういう条件で抜き出されるのか、
もう一度よく整理するこったな。
0195デフォルトの名無しさん
2006/04/04(火) 21:34:19最近のC言語の本でも載ってないのけっこうある。
標準だよね?
0196デフォルトの名無しさん
2006/04/04(火) 21:37:28ttp://ja.wikipedia.org/wiki/C99
0197デフォルトの名無しさん
2006/04/04(火) 21:52:39stddef.hの・・・
0198デフォルトの名無しさん
2006/04/04(火) 21:58:080199デフォルトの名無しさん
2006/04/04(火) 22:17:10>int *ptr();とするとint型へのポインタを返すptr関数という意味になります。
これってどういう意味なんですか?
サンプルソースとか誰か書いてくれませんかね?
0200デフォルトの名無しさん
2006/04/04(火) 22:22:39int* ptr();
こう書いたらわかるか。
0201デフォルトの名無しさん
2006/04/04(火) 22:23:10int *ptr(); /* 宣言 */
int *ptr() { return NULL; } /* 定義 */
0202デフォルトの名無しさん
2006/04/04(火) 22:27:12{
static int forex = 10;
return & forex;//int へのポインタ
}
0203デフォルトの名無しさん
2006/04/04(火) 22:28:28ついでに言えば、
int * ptr() = NULL;
はエラー。
int (* ptr) () = NULL;
は合法。
0204デフォルトの名無しさん
2006/04/04(火) 22:36:15どうもありがてれう。
0205デフォルトの名無しさん
2006/04/04(火) 23:12:39val = MyStrSearch( nRnd, *encstring, *(encstring+1) );
decstring[i] = (unsigned char)val;
}
たぶん2重に条件つけてるんだろうけど
for($i=0;なんたら〜;$i++){
}
と展開してくれないかな?
0206デフォルトの名無しさん
2006/04/04(火) 23:27:00〜
}
≒
A
while(B){
〜
C
}
0207デフォルトの名無しさん
2006/04/04(火) 23:29:47それ、山田オルタの宇宙語デコーダだろ?
0208デフォルトの名無しさん
2006/04/05(水) 04:03:51これをCStringに読めるようにする方法、ありますか?
VC++.NET MFC SDIです。宜しくお願いします。
0209デフォルトの名無しさん
2006/04/05(水) 04:44:580210デフォルトの名無しさん
2006/04/05(水) 07:37:000211デフォルトの名無しさん
2006/04/05(水) 08:50:25while(1){
printf("hello\n");
}
というプログラムを実行すると
hello
hello
.....と続くじゃないですか、
一回一回のループでコマンドプロンプトに出力された結果を消去したいんですが・・
つまり hello が一回だけ出力されるようにしたいんですが・・
while使うなって思うかもしれませんがどうしてもwhileはまわしたいんです。
誰か、教えてくださいお願いします
0212デフォルトの名無しさん
2006/04/05(水) 08:52:55system("cls");
#else
system("clear");
#endif
0213デフォルトの名無しさん
2006/04/05(水) 08:59:00助かりました。ありがとうございます
0214デフォルトの名無しさん
2006/04/05(水) 09:24:071行だけしか出力しないなら\rって手もある
printf("hello\r")にすればカーソル位置がhに戻るから上書きされる
進捗度表示するのとかに使えるな
0215デフォルトの名無しさん
2006/04/05(水) 11:31:480216デフォルトの名無しさん
2006/04/05(水) 11:34:04> そういやマルチバイト文字1文字を表すときどうやんの?
> char ch ='あ';だとコンパイルエラーだし
>194 デフォルトの名無しさん 2006/04/04(火) 21:07:08
> >>183
> Shift-JIS環境などでは通る。
0217デフォルトの名無しさん
2006/04/05(水) 11:34:38どうしても下の箇所でエラーが出る
よくよく考えればサイズの分からないものを確保しようとして失敗してるってわかるんだけど、どうにかならないかな
ファイルから文字列を読み込み、rand()%numで文字列配列内の要素にランダムにアクセスしてそれを出力するプログラムです
ReadFile(char**& urllist, int& num)
{
/*・・・・・・・・・・・・・・・・・・*/
strlist = new char*[num];
/*・・・・・・・・・・・・・・・・・・*/
}
0218デフォルトの名無しさん
2006/04/05(水) 11:36:41なんだかいろいろ見つかった。
http://pc8.2ch.net/test/read.cgi/tech/1124256027/583
http://pc8.2ch.net/test/read.cgi/tech/1142302804/988
http://pc8.2ch.net/test/read.cgi/tech/1142302804/983
http://pc8.2ch.net/test/read.cgi/tech/1134128493/382
http://pc8.2ch.net/test/read.cgi/tech/1135077848/437-438
http://pc8.2ch.net/test/read.cgi/tech/1138893959/35
0219デフォルトの名無しさん
2006/04/05(水) 11:38:19・std::vectorを使う。
・関数I/Fを見直す。
・newを使うという発想の愚かさに気づく。
0220デフォルトの名無しさん
2006/04/05(水) 11:44:33オーケー
マロクってくる
0221デフォルトの名無しさん
2006/04/05(水) 11:51:32ー^)ъ GJ!
0222デフォルトの名無しさん
2006/04/05(水) 12:02:04コンパイルをDLしたのですが、MS-DOS窓というのがどこにあるのかまったくわかりません。
C言語の初心者サイトなどを一応見てみたのですが書いていなくて、くだらない質問だとは思いますが教えてください。
0223デフォルトの名無しさん
2006/04/05(水) 12:07:03コマンドプロンプト。
0224デフォルトの名無しさん
2006/04/05(水) 12:12:33printf("%d");で中身を確認した所-128と言う値が出力されました
0x70で1120 0x01で10が出力されたのですが、なんでですか?
単純に変数の型と%dの形式があってないからそのような出力がされただけで
実際に変数の中身は代入された値がしまわれているのでしょうか?
0225デフォルトの名無しさん
2006/04/05(水) 12:17:080226デフォルトの名無しさん
2006/04/05(水) 12:22:33御回答ありがとうございます。
じゃあunsigned charにすれば問題ないですね
0227デフォルトの名無しさん
2006/04/05(水) 12:32:14教えていただいてありがとうございます。
cmdでいいならなんでDOS窓なんて言うんでしょうね・・・。ずっと探してましたよ・・・。
0228デフォルトの名無しさん
2006/04/05(水) 12:34:56プログラムの前に、コンピュータの一般的な基礎知識から勉強しろよ。
0229デフォルトの名無しさん
2006/04/05(水) 12:47:200230デフォルトの名無しさん
2006/04/05(水) 13:41:54ここはPG初心者歓迎であってPC初心者は受け付けてないのだぜ
とっとと帰るんだぜ
0231デフォルトの名無しさん
2006/04/05(水) 13:48:13嫁が言ってました。
0232デフォルトの名無しさん
2006/04/05(水) 13:59:48for(int i=0;i<20;i++){
hoge(i);
}
return;
}
iの寿命がfunc関数内ではなく、for内だけにする設定って、VC++6.0ではどうやるんですか?
0233デフォルトの名無しさん
2006/04/05(水) 14:02:080234デフォルトの名無しさん
2006/04/05(水) 14:04:310235デフォルトの名無しさん
2006/04/05(水) 14:04:45#define for if(0); else for
0236デフォルトの名無しさん
2006/04/05(水) 14:11:400237デフォルトの名無しさん
2006/04/05(水) 14:12:09VC6がそもそもおかしかった。
0238デフォルトの名無しさん
2006/04/05(水) 14:13:32そういう風に明確に規定されるようになったんじゃないかな。
0239デフォルトの名無しさん
2006/04/05(水) 15:17:44ドラフト無視して作っただけじゃないかな
0240デフォルトの名無しさん
2006/04/05(水) 15:24:12大量にコンパイルエラーになるコードがあるから標準ではOFFってだけじゃなかったか。
0241デフォルトの名無しさん
2006/04/05(水) 15:29:29http://msdn2.microsoft.com/ja-JP/library/84wcsx8x.aspx
Visual C++ 6 および 7.1 では /Zc:forScope オフがデフォルト
Visual C++ 8 では オンがデフォルトのようです。
0242デフォルトの名無しさん
2006/04/05(水) 15:45:190243デフォルトの名無しさん
2006/04/05(水) 15:56:48だから、VC7でオプション作って、互換性のためにデフォルトでオフにしたんとちゃうん?
0244デフォルトの名無しさん
2006/04/05(水) 16:05:430245デフォルトの名無しさん
2006/04/05(水) 16:41:330246232
2006/04/05(水) 16:59:250247デフォルトの名無しさん
2006/04/05(水) 17:04:110248デフォルトの名無しさん
2006/04/05(水) 17:28:08/Za
ただし、Windows.hでエラーが出るようになるが(w
0249デフォルトの名無しさん
2006/04/05(水) 18:48:290250デフォルトの名無しさん
2006/04/05(水) 22:31:35肝心のコントローラからの入力をどうやって処理したらいいかわかりません。
ウインドウメッセージで WM_DEVICECHANGE というのがあったので検知できるかと思ったのですが
コントローラのボタンを押しても wParam に何も入りません。
USBとかからの情報を扱えるウインドウメッセージは他にありませんか?
0251デフォルトの名無しさん
2006/04/05(水) 22:54:57USBとかは関係ない。
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_multimedia_input.asp
かDirectInputあたりを使え。
0252デフォルトの名無しさん
2006/04/06(木) 02:04:31派生クラスではprivate関数としてオーバライドできるって、
何かおかしくないですか?オーバライドする際、アクセス指定は
一致させる必要ないですよね?
そうすると基底クラスのポインタ経由で派生クラスのprivateな関数
呼び出せちまいますよね。継承自体がprivate継承なら基底のポインタに
派生のポインタ代入するとコンパイルエラーになるようですが。。。
(それともこれって標準規格では違うの?俺のコンパイラだけ?)
0253デフォルトの名無しさん
2006/04/06(木) 02:05:59実際にやってみてから書いてるの?
0254デフォルトの名無しさん
2006/04/06(木) 02:10:33その動作で規格どおり。そんな規格になってる理由は知らない。
0255デフォルトの名無しさん
2006/04/06(木) 02:14:22おかしい。
おかしいので仮想関数はpublicにすべきではない
ということになっている
0256デフォルトの名無しさん
2006/04/06(木) 02:17:120257デフォルトの名無しさん
2006/04/06(木) 02:26:535年間一冊も本を読んでいない>>256のような
上司あるいは同僚は本当にいるのだ
0258デフォルトの名無しさん
2006/04/06(木) 02:39:03NVI を否定してるんじゃない。
>>252 が NVI の根拠じゃないだろってこと。
0259デフォルトの名無しさん
2006/04/06(木) 03:42:40継承自体いい加減な機能なんだからほどほどにしとけw
0260デフォルトの名無しさん
2006/04/06(木) 09:16:09逆に考えてみろ。
基本クラスでpublic公開されてるものをオーバーライドする訳だから
派生でprivateする事の方がおかしい。
0261252
2006/04/06(木) 09:24:15そうですか・・・わかりました、ほどほどにしておきます。
0262デフォルトの名無しさん
2006/04/06(木) 11:12:04おかしいことをしてるのにコンパイルエラーも警告も出ないのはどうなんだってことでしょ
0263デフォルトの名無しさん
2006/04/06(木) 12:16:08コンパイラなんてそんなもんだよ
0264デフォルトの名無しさん
2006/04/06(木) 12:32:280265デフォルトの名無しさん
2006/04/06(木) 14:08:49そこはlintの範疇だろ
0266デフォルトの名無しさん
2006/04/06(木) 15:33:06ある人間が今までホームページでタダで公開していたエロ画像があったとしよう。
しかしそのホームページの管理者の考えが変わりエロ画像が有料化してプライベートになることはよくあることだ。
なにもおかしなことではない。
0267デフォルトの名無しさん
2006/04/06(木) 16:27:56その例えなら
アクセス方法によっては依然ただで見放題ってのが問題なわけで
そこを塞いでないのは何か意図した使い道があるのか?ってことではないかと
0268デフォルトの名無しさん
2006/04/06(木) 16:48:24ユーザーの良心を信じるってことじゃね?
できるのとやるのはちがうのではなかろーかと。
普通、virtualな関数のアクセスを変更したりしないと思われ。
0269デフォルトの名無しさん
2006/04/06(木) 16:58:02>普通、virtualな関数のアクセスを変更したりしないと思われ。
そういうプログラマのミスにエラー出すなり警告出すなりするのがコンパイラの仕事なのでは?
なんかこれを利用したテクニックがあったりするのかな?
0270デフォルトの名無しさん
2006/04/06(木) 21:06:53文法誤りや規格書でダメと規定されてる事にエラーや警告を出すのは
コンパイラの仕事だが、そうでないことにまで警告を出す義務はない
そこはLintの仕事
0271デフォルトの名無しさん
2006/04/06(木) 21:25:560272デフォルトの名無しさん
2006/04/06(木) 21:28:54>そんな規格になってる理由は知らない。
ようするにこれが知りたいのさ
0273デフォルトの名無しさん
2006/04/06(木) 22:13:22探すの面倒だけど。
0274デフォルトの名無しさん
2006/04/06(木) 22:20:32派生後のクラスでオーバーライドした関数にアクセスさせたくなかった
ダウンキャスト後のことまではしらね
以上
0275デフォルトの名無しさん
2006/04/06(木) 22:20:44Stroustrupに聞いてみたらいいんじゃね?幸いまだご存命中なんだし
0276デフォルトの名無しさん
2006/04/06(木) 22:51:10こんな↓感じでクラスの中に構造体を入れてみたんだが
問題ないですよね?
また、このD3DSPRITEVERTEX構造体は
「このクラスの関数内でしか、定義できない構造体である」
と言う認識で良いのでしょうか?
class HOGE{
//略
public:
struct D3DSPRITEVERTEX {
float x, y, z;
float rhw;
DWORD color;
float tu0, tv0;
enum { FVF = D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1 } ;
};
};
0277デフォルトの名無しさん
2006/04/06(木) 23:17:02>「このクラスの関数内でしか、定義できない構造体である」
の意味がわからんが、publicだからHOGE外でも
HOGE::D3DSPRITEVERTEX aaa;
と使うことが出来る。
0278デフォルトの名無しさん
2006/04/06(木) 23:22:03なるほど。
じゃあ、privateなら、完全に隠蔽できること?
0279デフォルトの名無しさん
2006/04/06(木) 23:24:420280デフォルトの名無しさん
2006/04/06(木) 23:26:20おお。ありが�d
0282デフォルトの名無しさん
2006/04/07(金) 00:34:37ソース修正したらコンパイルできたよー。
これって+の中に数字が入るの?
何のプログラム?
0283デフォルトの名無しさん
2006/04/07(金) 00:44:37char *a = new char(0xff);
char *a = new char [100];
これをドッキングさせたいんですが、どうやればいいですか?
引数付きコンストラクタしかないクラスを
大きさが変わる配列にしたいのにどうやってもエラーが… orz...
0284デフォルトの名無しさん
2006/04/07(金) 00:48:53無理。std::vectorやplacement newやstd::uninitialized_fillを使うべし。
0285デフォルトの名無しさん
2006/04/07(金) 00:51:00> 引数付きコンストラクタしかないクラスを大きさが変わる配列に
std::vector<boost::shared_ptr<Hoge> >
boost::ptr_vector<Hoge>
など
0286デフォルトの名無しさん
2006/04/07(金) 01:16:38aa[i].bb(); って感じで書いちゃってるから置換せずやりたかったんですが…
ピリオドをオーバーライドした方が簡単?
0287デフォルトの名無しさん
2006/04/07(金) 01:19:03>ピリオドをオーバーライド
>ピリオドをオーバーライド
>ピリオドをオーバーライド
>ピリオドをオーバーライド
0288デフォルトの名無しさん
2006/04/07(金) 01:22:43ごめんなさい、忘れてください…orz...
コンパイルせずに一気に書くなんてアフォな真似はやめよう…
0289デフォルトの名無しさん
2006/04/07(金) 20:22:50__gc class Data{
String* name;
};
main(){
Data* dat __gc[] = new Data* __gc[10]
dat[0]->name = "test";
}
だと「オブジェクト参照がインスタンスに設定されてない」と出ます。
どうすればできるのでしょうか?
0290デフォルトの名無しさん
2006/04/07(金) 20:23:44C++/CLI じゃだめ?
0291デフォルトの名無しさん
2006/04/07(金) 20:27:09当方、VC++ .NET 2003を使っておりますので・・・
managed では無理でしょうか?
0292デフォルトの名無しさん
2006/04/07(金) 21:34:18datはDataへのポインタの配列だから
各要素もnewでオブジェクトを作ってやらないといけないと思う。
たぶんこんな感じ。
Data* dat __gc[] = new Data* __gc[10]
dat[0] = new Data;
dat[0]->name = "test";
0293デフォルトの名無しさん
2006/04/07(金) 23:51:090294デフォルトの名無しさん
2006/04/07(金) 23:54:07標準入力から一行入力するイディオムはありますか?
0295デフォルトの名無しさん
2006/04/07(金) 23:55:590296デフォルトの名無しさん
2006/04/08(土) 00:28:150297デフォルトの名無しさん
2006/04/08(土) 02:32:59制限はない。オーバーしても知ったこっちゃないが。
0298デフォルトの名無しさん
2006/04/08(土) 03:02:230300デフォルトの名無しさん
2006/04/08(土) 12:55:06環境は XP、2005 です。
shared_ptr に、NULL のようなものを持たせるには、どのようにするのが一般的でしょうか。
以下のようなものを作りたいです。
shared_ptr<CHoge> F()
{
if (〜)
return NULL;
shared_ptr<CHoge> p(new CHoge);
return p;
}
return NULL;
の部分を、
return shared_ptr<CHoge>( reinterpret_cast<CHoge *>NULL );
とすれば正常には動作したのですが、もっと素直な書きかたがありそうです。
よろしくお願いします。
0301デフォルトの名無しさん
2006/04/08(土) 13:01:21boost/shared_ptr.hppより
shared_ptr::shared_ptr(): px(0), pn() {}
0302デフォルトの名無しさん
2006/04/08(土) 13:27:11コンパイラによって描き方が違うらしいのですが
ボーランドのBCC5.5の場合どのようにすればいいのですか?
あと、コンパイラごとにインラインアセンブラを描きたいのですが
なにを
#if defined
すればいいのでしょうか?
0303デフォルトの名無しさん
2006/04/08(土) 13:38:10asmで括れ。
BCC -> __BORLANDC__
VC ->_MSC_VER
GCC ->__GNUC__
0304デフォルトの名無しさん
2006/04/08(土) 13:40:49だとしたら
#if defined(_SH)
#pragma inline_asm(関数名)
#endif
とかあるでよ。
0306デフォルトの名無しさん
2006/04/08(土) 15:06:22オーバーしないように
数万バイト確保したchar配列に読む
…くらいは思い付きましたが
それって無駄な領域食い過ぎの気がして。
多分mallocやrealloc使うんだろうなぁ
…くらいは判るんですが
どうにも良いやり方が分からなくて相談しました。
うーん、とりあえず適当にやってみるか…
0307デフォルトの名無しさん
2006/04/08(土) 15:17:44数万バイト確保しても
数万バイトより大きい入力をつっこまれたら溢れる
まあ素直に
#include <stdio.h>
char buf[BUFSIZ]; /* BUFSIZで足りないようなら適宜変えるか設計を見直す */
fgets(buf, sizeof(buf), stdin);
で
0308デフォルトの名無しさん
2006/04/08(土) 15:18:16mallocで適当な大きさのバッファを確保して、
足りなくなるたびにk倍(普通は二倍)の大きさにreallocする、という手がある。
あるいは、固定長の文字列を要素とするリンクリストを作りながら読みこみ、
読み終わったところで全体を別の場所にコピーする、という方法もある。
0309デフォルトの名無しさん
2006/04/08(土) 16:02:41C言語ではint型サイズに、C++ではchar型サイズになるようですが、
サイズ自体が変わったのでしょうか?
それともC言語の場合は、sizeofが適用される前に、int型へ格上げ
されてるというような(あるかないかわかりませんが)、仕様の違いでしょうか?
0310デフォルトの名無しさん
2006/04/08(土) 16:06:58文字定数の型が変わった。
Cではint
C++ではchar
0311デフォルトの名無しさん
2006/04/08(土) 16:13:110312デフォルトの名無しさん
2006/04/08(土) 17:35:42C++では多重定義するとき、文字定数がcharでないと不便だから、上記の型の右辺値も存在することになった。
D&Eには、文字定数がintではcout << 'a';というコードが
画面にaの文字コードを出力することになってしまうので文字定数をchar型にした、という話が載っている。
0313デフォルトの名無しさん
2006/04/08(土) 17:46:550314デフォルトの名無しさん
2006/04/08(土) 17:51:00されるよ。格上げ以前の値を使うこともできるだけ。
0315デフォルトの名無しさん
2006/04/08(土) 17:53:55う〜ん…色々試してみます。ありがとうございます。
0316デフォルトの名無しさん
2006/04/09(日) 11:31:54basic_string<wchar_t> で与えられたファイル名のファイルをオープンしようと思います。
ファイルの操作に、boost::filesystem を利用しようとしたのですが、
boost::filesystem::path が Unicode に対応していないっぽいです。
wchar_t -> char に変換する方法を調べたのですが(std::locale、mbtowc など)、色々と複雑っぽいです。
どのようにするのが一般的でしょう?
よろしくお願いします。
0317デフォルトの名無しさん
2006/04/09(日) 11:55:39ググってすぐに見つかるここに書いてあるじゃねーか
0319デフォルトの名無しさん
2006/04/09(日) 23:07:46の????は、classとtypenameと、どっちが主流なんですか?
タイピングの楽さはclassだけど、意味的にはtypenameのような
感じですが・・・。
0320デフォルトの名無しさん
2006/04/09(日) 23:18:160321デフォルトの名無しさん
2006/04/09(日) 23:36:320322デフォルトの名無しさん
2006/04/09(日) 23:38:16禿げてるよ?
0323デフォルトの名無しさん
2006/04/10(月) 01:42:23下の、MessageBox(hDlg,DLL_buf,"Success!", MB_ICONWARNING);の部分と、終了時に
Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call.
This is usually a result of calling a function declared with one calling convention
with a function pointer declared with a different calling convention.
とエラーが出ます。
強行するとちゃんと動作するんですけど…いまいちどこら辺がマズいのかがわからないです。
DLL部分
LPTSTR WINAPI ReturnString(int i, LPTSTR str){
_stprintf(str, "%d", i);
lstrcmp(str, "が入力されました。");
return str;
}
読み込み側
typedef LPTSTR (*TFUNC)(int, LPTSTR);
〜中略
HINSTANCE hDLL;
TFUNC fncDLL01;
TCHAR DLL_buf[128];
if( !(hDLL = LoadLibrary("CE60_def.dll")) ){
MessageBox(hDlg,"ERROR!\nDLLが見つからない。","エラー", MB_ICONWARNING);
}else if( !(fncDLL01 = (TFUNC)GetProcAddress(hDLL, "ReturnString")) ){
FreeLibrary(hDLL);
MessageBox(hDlg,"ERROR!\n関数が見つからない。","エラー", MB_ICONWARNING);
}else{
fncDLL01(10,DLL_buf);
MessageBox(hDlg,DLL_buf,"Success!", MB_ICONWARNING);
FreeLibrary(hDLL);
以下略
0324323
2006/04/10(月) 01:53:13コンソールアプリケーションで同じ事やっても同じエラーが出ます。
0325デフォルトの名無しさん
2006/04/10(月) 02:04:57TFUNCを確認すること。
typeid(TFUNC).name()を試してみればいい。
正しい型は次のようになるはず
//マルチバイト
char * (__stdcall*)(int,char *)
//UnicodeVC7.1の場合
unsigned short * (__stdcall*)(int,unsigned short *)
エラーメッセージから察するに、__cedcl規約で呼び出していそうだが。
//試してみて気づいたんだが、VC7.1では、typeid(wchar_t).nameが、unsigned shortになるんだな。
0326デフォルトの名無しさん
2006/04/10(月) 02:17:37後そのコード、何のためにLPTSTRを使っているのか、さっぱりわからない。
MessageBoxの第三引数に、確実にマルチバイトを渡してしまっているから。
0327325-326
2006/04/10(月) 02:25:33/Zc::wchar_tを指定してなかったOrz
0328デフォルトの名無しさん
2006/04/10(月) 03:00:38なるほど…
確かに、WINAPI修飾子だと__stdcallの設定なのに、
TFUNCが__cedclになってます。
…
typedef LPTSTR (*TFUNC)(int, LPTSTR);
をどのように変更すれば、_stdcallにできるのですか?
LPTSTRを使っているのは特に何も考えていないです…
最初は普通にchar *使っていたんですが、
読んでいた本と助言でLPTSTRを使えといわれて、こちらを使っているだけです。
一応Unicodeになったときのことも考えておけとのことで(あんまりよくわかってないんですけれども)。
0329328
2006/04/10(月) 03:03:35こんな感じで大丈夫ですか?
0330325
2006/04/10(月) 03:14:10もしその本が、マルチバイト文字とワイド文字を考慮しろといいながら、
文字列を_TEXT()とか_T()マクロなど包んでいないなら、読む価値はない。
関数ポインタのtypedefはそれでいい。
あと、関数ポインタの宣言がややこしかったら、こんな方法もあるにはある。
typedef LPTSTR WINAPI FuncType(int, LPTSTR) ;
typedef FuncType *FuncPtr ;
0331デフォルトの名無しさん
2006/04/10(月) 21:16:01元の文字がそれぞれの文字コードに対応させてなければ意味がないんですね…
全然そんなこと考えてませんでしたil|i
typedefがどうなっているのか分かっていなかったので、助かりました。
ご教授して頂き、どうもありがとうございました。
0332デフォルトの名無しさん
2006/04/10(月) 22:00:20#ifndef _PROCESSMANAGER_H_
#define _PROCESSMANAGER_H_
#include <windows.h>
#include <tlhelp32.h>
#include <list>
class CProcessManager
{
private:
list<PROCESSENTRY32> m_List;
public:
HRESULT Update();
};
#endif
list<PROCESSENTRY32> m_List;の行で「error C2143: 構文エラー : ';' が '<' の前にありません。」が出る。
PROCESSENTRY32構造体をintに変更してやってみてもエラー。クラス内でlistは使えないの?
0333デフォルトの名無しさん
2006/04/10(月) 22:02:53using namespace std;してない。
0334デフォルトの名無しさん
2006/04/10(月) 22:41:11{
char *str ="abc";
printf("%s\n",str);
}
これってどこか問題有りですか?
0335デフォルトの名無しさん
2006/04/10(月) 22:44:10あまり誉められた書き方とは言えないが、
それをコンパイルして作られたプログラムは問題なく実行できる。
0336デフォルトの名無しさん
2006/04/10(月) 22:44:44問題ない。
0337デフォルトの名無しさん
2006/04/10(月) 23:01:57>>336
ありがとう。
main()
{
char *str;
str = "abc":
printf("%s\n",str);
}
これだと危険になるんですか?
0338デフォルトの名無しさん
2006/04/10(月) 23:04:18ほぼ確実に落ちる
0339デフォルトの名無しさん
2006/04/10(月) 23:06:230340デフォルトの名無しさん
2006/04/10(月) 23:14:34それも>>335。
0341338
2006/04/10(月) 23:47:490342デフォルトの名無しさん
2006/04/10(月) 23:50:10危険じゃないが、
main()
{
char str[4];
str = "abc":
printf("%s\n",str);
}
とか
main()
{
char str[] = "abc":
printf("%s\n",str);
}
の方がいいんじゃないかなぁ。
0343デフォルトの名無しさん
2006/04/10(月) 23:55:29落ち着け特に前半。
0344デフォルトの名無しさん
2006/04/10(月) 23:56:45main()
{
char str[4];
str = "abc":
printf("%s\n",str);
}
0345デフォルトの名無しさん
2006/04/10(月) 23:58:20セミコロンがコロンになっているのをスルーしているのはわざとなのか?
0346デフォルトの名無しさん
2006/04/11(火) 00:24:350347デフォルトの名無しさん
2006/04/11(火) 00:28:59{
const char *str = "abc";
printf("%s\n",str);
return 0;
}
0348デフォルトの名無しさん
2006/04/11(火) 00:45:290349デフォルトの名無しさん
2006/04/11(火) 00:47:16{
puts("abc");
return 0;
}
0350デフォルトの名無しさん
2006/04/11(火) 01:13:27ヘッダで using namespace するやつは腹を切って死ぬべきである。
0351337
2006/04/11(火) 07:14:03ありがとうございました。
0352デフォルトの名無しさん
2006/04/11(火) 10:32:560353デフォルトの名無しさん
2006/04/11(火) 11:10:31char str[4];
strcpy(str, "abc");
どっちでも、同じといっちゃ同じだが前者のほうがはるかに良い
0354デフォルトの名無しさん
2006/04/11(火) 11:17:46うん。
まああの例だと、わざわざコピーする意味もないけど。
0355デフォルトの名無しさん
2006/04/11(火) 13:52:470356デフォルトの名無しさん
2006/04/11(火) 14:01:510357デフォルトの名無しさん
2006/04/11(火) 14:04:06本物の基地外は決して自分を基地外とは思わないって知ってるか?
0358デフォルトの名無しさん
2006/04/11(火) 14:10:02ピンポイントで using mynamespace::myclass;
みたに爆撃するのもいいと思うよ。
0359デフォルトの名無しさん
2006/04/11(火) 14:17:03{
>>355
}
0360デフォルトの名無しさん
2006/04/11(火) 15:30:030361デフォルトの名無しさん
2006/04/11(火) 15:35:59{
namespace kitigai
{
>>355;
}
}
0362デフォルトの名無しさん
2006/04/11(火) 17:38:590363デフォルトの名無しさん
2006/04/11(火) 18:09:540364デフォルトの名無しさん
2006/04/11(火) 18:18:29宣言されている気がするのは俺だけ?
0365デフォルトの名無しさん
2006/04/11(火) 18:42:300366デフォルトの名無しさん
2006/04/11(火) 18:47:20<〜.h>をインクルードして、std名前空間の中で、using ::hoge;のようなことをしている。
0367デフォルトの名無しさん
2006/04/11(火) 19:06:00グローバルな sin() 関数が見えるのは規格違反?
>>366 みたいに using ::hoge; なんてやると、
グローバルにも hoge は見えてるんだよね・・・
0368デフォルトの名無しさん
2006/04/11(火) 23:19:29決めるいい方法は無いですかね。
もちろん、どんな順番でも可変個引数以外なら
問題ないんですけど、関数名と同じく迷ってしまいます。
何か、法則みたいなのがあるといいんですが。
0369デフォルトの名無しさん
2006/04/11(火) 23:27:200370デフォルトの名無しさん
2006/04/11(火) 23:28:35Winって言うから、__fastcall使うとして。
そうすると、レジスタ渡ししたいモノを先頭(だったかな)にまとめるといいかもな。
0371368
2006/04/11(火) 23:30:19ただ、環境がWindowsって意味です。
0372デフォルトの名無しさん
2006/04/11(火) 23:39:21俺はとりあえず次の2つを守っている。
入力の引数同士、出力の引数同士は混ぜない。
ハンドルなどのように、クラスだったら(呼んだ関数の先で)thisに相当するような引数は第1引数に持ってくる。
0373デフォルトの名無しさん
2006/04/11(火) 23:44:50たとえば学生番号と年齢を与えるようなときに、
どちらも整数だから void func(const int age, const int number);
なんてプロトタイプ宣言していると間違えても気づかないことが多い。
なので、 BOOST_STRONG_TYPEDEF (とそれを自分で改造したマクロ)で
紛らわしいものは型付けしてミスを防ぐようにしてる。
0374デフォルトの名無しさん
2006/04/11(火) 23:51:46Cのヘッダを非推奨にしたのはやりすぎだったと標準化委員会も反省しているようだ。
0375368
2006/04/11(火) 23:53:38ある程度、ライブラリ関数に似た用途のがあると
それに似せる事が出来て楽なんですけど。
例えば、ビットマップを透過して表示するユーザー関数なら、
BitBltをベースにして、その先画像、元画像の後に
マスク画像を同じような感じに続けています。
その教えていただいた方法も、ライブラリ関数の形に
何となく合致している部分がありますね。
一つ目にHDCとかが来ることが多いですし、
入力、出力ではないけど、先画像、元画像とまとまっていますし、
それによって、引数の型の並びの所々違う型が入る事で、
引数の識別するアクセントになりますし。
0376デフォルトの名無しさん
2006/04/11(火) 23:54:38buf1にbuf2をxサイズ分コピー memcpy(buf1, buf2, size)
処理の内容を言葉に置き換えればいい
0377368
2006/04/12(水) 00:09:24ありがとうございます。
引数が少ない場合はシンプルでいいと思うんですけど。
ただ、多い場合でも、迷った場合は、そのシンプルベースで
始めに決めてしまったやり方で行くのも手かもしれません。
0378355
2006/04/12(水) 02:14:19釣れた釣れた
やってみるもんだな
ヘッダで using namespaceするわけないじゃん
ば〜〜〜〜〜〜〜か
0379デフォルトの名無しさん
2006/04/12(水) 02:22:11え? やっちゃだめなのか? 何で?
0380デフォルトの名無しさん
2006/04/12(水) 02:23:090381デフォルトの名無しさん
2006/04/12(水) 02:24:10別のネームスペースを using するんなら有りだろうけどなぁ。
namespace NS1 {
using namespace OtherNS;
}
みたいにさ。
0382デフォルトの名無しさん
2006/04/12(水) 02:50:03やったからといって名前空間の利点がなくなる訳じゃないだろ。
0383デフォルトの名無しさん
2006/04/12(水) 03:08:36そのため、将来の変更やヘッダの組み合わせによっては曖昧な名前を生み出す可能性が有る。
それでも、 using namespace が原因だとわかったら削除すればいいんだが、
ヘッダでやられると問題が発生したときにユーザー側で回避する手段が無い。
しかも using namespace が本当に必要に迫られることは決して無い。
フルで修辞すればいいんだから。
確実な回避策があるのに、深刻な問題を起こす可能性をヘッダに埋める道理は無い。
0384315
2006/04/12(水) 04:37:56制限なし一行入力の質問をした者です。
バッファを2倍にしていく…を自分なりに考えたのですが
こんな感じで良いのでしょうか?
char *str;
char *tmp;
int strsize;
int tmpsize;
strsize = 1;
str = (char *)malloc(strsize); if(str==NULL) exit(1);
str[0] = '\0';
tmpsize = 8;
tmp = (char *)malloc(tmpsize); if(tmp==NULL) { free(str); exit(1); }
for(;;) {
char ch;
tmpsize = tmpsize * 2;
tmp = (char *)realloc(tmp, tmpsize); if(tmp==NULL) { free(tmp); free(str); exit(1); }
fgets(tmp, tmpsize, stdin); if(tmp==NULL) { free(tmp); free(str); exit(2); }
strsize = strlen(str) + tmpsize;
str = (char *)realloc(str, strsize); if(str==NULL) { free(tmp); free(str); exit(1); }
strcat(str, tmp);
ch = str[strlen(str)-1];
if(ch=='\0' || ch=='\n') break;
}
free(tmp);
printf("%s\n", str);
free(str);
0385デフォルトの名無しさん
2006/04/12(水) 07:47:49int strsize = 1,strpos=0;
char *str = NULL;
do{
char *tmp = (char *)realloc(str, strsize *= 2);
if(tmp==NULL) { free(str); exit(1); }
str = tmp;
if(fgets(str+strpos, strsize-strpos, stdin) == NULL)break;
strpos += strlen(str+strpos);
}while(str[strpos-1] != '\n');
puts(str);
free(str);
0386デフォルトの名無しさん
2006/04/12(水) 19:32:13floatについてはこのようなものはないのでしょうか?
0387デフォルトの名無しさん
2006/04/12(水) 20:09:08このとき、Bのfunc()の中でAのfunc()(オーバーライドされてないもの)を
呼び出したいのですが、どう書けばいいですか?
0388デフォルトの名無しさん
2006/04/12(水) 20:12:250389デフォルトの名無しさん
2006/04/12(水) 20:27:19うまくいきました。ありがとう。
0390384
2006/04/12(水) 21:32:50fgetsの第一引数に加算すると
文字列の途中から追加出来るのですね。
びっくりしました。感謝です。
という事は、*tmp使わなくても実装出来てしまう?
と思ったので、色々試してみます。
0391デフォルトの名無しさん
2006/04/13(木) 07:41:14以下のようなコードだとリンクエラーがでます。
全部同じファイルに記述するとコンパイル通るんだけど、なんででしょ?
コンパイラはVC++6.0です。以下ソース
// main.cpp ==============================//
#include "foo.h"
int main( void ){
foo<int> obj;
return 0;
}
// foo.cpp ===============================//
#include"foo.h"
template <class Type> foo<Type>::foo(){;}
// foo.h =================================//
template <class Type> class foo{
public:
foo<Type>();
};
0392デフォルトの名無しさん
2006/04/13(木) 07:52:250393デフォルトの名無しさん
2006/04/13(木) 07:54:33http://www.google.co.jp/search?q=template+%E3%83%AA%E3%83%B3%E3%82%AF%E3%82%A8%E3%83%A9%E3%83%BC+export
0394デフォルトの名無しさん
2006/04/13(木) 08:02:05テンプレートインスタンス=コードが生成されていないから。
main.cpp は int で特殊化された foo のインスタンスがリンクされることを期待している。
0395デフォルトの名無しさん
2006/04/13(木) 09:27:560396デフォルトの名無しさん
2006/04/13(木) 09:32:500397デフォルトの名無しさん
2006/04/13(木) 09:34:36まあ、翻訳単位が違っても、コンパイルできるようにするキーワードは、規格にはあるんだが。
実際、サポートしているコンパイラは少ない。
特にVC6でテンプレートなんてお察し
明示的にインスタンス化するという方法はある。
//=============foo.cpp==============
template class foo<int> ;
template class foo<short> ;
//以下、インスタンス化するすべての型について、明示的にインスタンス化していく。
実際、コピペの必要ない、文法上安全なマクロという気しかしないが。
インスタンス化できる型を制限したいときとかもいいのかな。
0398デフォルトの名無しさん
2006/04/13(木) 10:04:45>キーワードは、規格にはあるんだが。
あれ、そんなのあったんですか。
0399デフォルトの名無しさん
2006/04/13(木) 10:11:170400デフォルトの名無しさん
2006/04/13(木) 10:25:41extern って空目してて、
「なに extern とかほざいてんだこいつwww」
とか思ってた、スマソ
0401デフォルトの名無しさん
2006/04/13(木) 12:03:26SYSTEMTIME構造体の startTime という変数があり、
そこには何かの処理の開始日時がセットされています。
DWORD型の lateSecという変数があって、
そこには処理にかかる予想時間が秒を単位としてセットされています。
その場合の処理の終了日時を求めたいのですが、
どのようなやりかたがスマートでしょうか?
lateSecを日、時、分、秒の各単位にしてstartTimeの各メンバ変数に足すだけでは、
秒や分の部分が59を超えたり、時の部分が23を超えたりしてしまいます。
日の部分も、その月ではありえない日になってしまうかもしれません。
この問題を考えていたら、解決方法が全然見えなくなってしまいました。
簡単に言えば
void func(
OUT LPSYSTEMTIME lpEndDateTime, /* 終了予想日時 */
IN LPSYSTEMTIME lpStartDateTime, /* 開始日時 */
IN DWORD dwLateTime /* 処理予測時間[sec] */
);
のような関数をつくりたいということになります。
よろしくおながいします
0402デフォルトの名無しさん
2006/04/13(木) 12:17:062.FILETIMEに対して演算
3.FileTimeToSystemTimeでSYSTEMTIMEに戻す
0403デフォルトの名無しさん
2006/04/13(木) 12:31:16void func(
OUT LPSYSTEMTIME lpEndDateTime, /* 終了予想日時 */
IN LPSYSTEMTIME lpStartDateTime, /* 開始日時 */
IN DWORD dwLateTime /* 処理予測時間[sec] */
)
{
FILETIME ft;
SystemTimeToFileTime(lpStartDateTime, &ft);
unsigned __int64 et = (((unsigned __int64)ft.dwHighDateTime) << 32) + ft.dwLowDateTime;
et += (unsigned __int64)dwLateTime * 10 * 1000 * 1000;
ft.dwHighDateTime = (DWORD)(et >> 32);
ft.dwLowDateTime = (DWORD)(et & 0xFFFFFFFF);
FileTimeToSystemTime(&ft, lpEndDateTime);
}
0405デフォルトの名無しさん
2006/04/13(木) 14:55:50標準だとmktime()とlocaltime()じゃないかな。
値の範囲が正しくない場合 mktime() は正規化するって
規格で読んだ気がする。
0406デフォルトの名無しさん
2006/04/13(木) 15:45:43どうもありがとうございました。
これの動作確認ができました。
閏年の2/28や2/29に関しても、日をまたぐようにしてテストをして
みましたが問題ありませんでした。
どうもありがとうございました。
0407デフォルトの名無しさん
2006/04/13(木) 19:01:18__int64 ft=0;
SystemTimeToFileTime( (FILETIME*)&ft);
ft += dwLateTime * __int64(10*1000*1000);
(略)
でいいきもする。
0408デフォルトの名無しさん
2006/04/13(木) 19:23:5510ll * 1000 * 1000でいいと思う。
10llがだめなら10i64で。
0409デフォルトの名無しさん
2006/04/13(木) 20:21:130410デフォルトの名無しさん
2006/04/13(木) 20:23:10サフィックスのllとかi64はtypedefで解決できないからだめ。
0411デフォルトの名無しさん
2006/04/13(木) 22:33:240412デフォルトの名無しさん
2006/04/13(木) 23:47:590413デフォルトの名無しさん
2006/04/14(金) 02:37:46後ろから(下から上)検索させる所で躓きました。良い方法があれば教えてください。
現在、考えている方法としては・・・
1) .NET frameworkのRegexクラスにRightToLeftのオプションを付けて使用(ラッパーとなるDLLを作成?)
2) Boost.Regexや、IRegExp(VBScript)を用いて・・・
i) ヒットするまで後ろから前へ開始位置をずらしていく
ii) 文字列,パターンを反転させる
3) 諦めて前から後ろのみの検索とする
1の方法が最有力候補なのですが、.NET frameworkを使うことで
動作環境が狭まるなどの問題点がありまして・・・。
0414デフォルトの名無しさん
2006/04/14(金) 02:42:51その結果に対し、現在地点の直前に当たるものを結果とする。
0415デフォルトの名無しさん
2006/04/14(金) 03:13:45コピーが機能しなくなるんだが原因がわかる人いる?
0416デフォルトの名無しさん
2006/04/14(金) 03:23:16というか、もっと環境とか詳しく書かないと返答もらえにくいんじゃね?
0417デフォルトの名無しさん
2006/04/14(金) 03:30:350418デフォルトの名無しさん
2006/04/14(金) 03:32:02PS/PS2版はさすがにgccらしいけど。
0419デフォルトの名無しさん
2006/04/14(金) 03:35:280420デフォルトの名無しさん
2006/04/14(金) 07:27:39回答ありがとうございます。
検討してみます。
0421デフォルトの名無しさん
2006/04/14(金) 08:58:17全文はまずいのでは?
現在位置までのデータで列挙しないと。
0422デフォルトの名無しさん
2006/04/14(金) 11:54:03*(__int64 *)&ft += (__int64)dwLateTime * 10 * 1000 * 1000;
こうですか?わかりません><
0423デフォルトの名無しさん
2006/04/14(金) 14:38:28え? 414でいいのか?
414みたいなやり方じゃ遅くなるから413の質問になるんじゃないのか?
0424デフォルトの名無しさん
2006/04/14(金) 19:48:28WinMainで、ウィンドウの作成後にSetHWnd(HWND hWnd){s_hWnd = hWnd;};
を使ってウィンドウハンドルを獲得し、別のヘッダで宣言した
int MakeMessageWindow(LPCTSTR MessageText, LPCTSTR WindowText, UINT MessageForm)
{return(MessageBox(s_hWnd, MessageText, WindowText, MessageForm));};
でメッセージボックスを作るプログラムなのですが、
WinMain(WinMain.cpp)以外のヘッダ(B.h)で宣言した関数の中で
MakeMessageWindow()を呼び出すと、MessageBoxの引数hWndがNULLになってしまいます
値渡しなのでhWndは変わらないと思っていたのですが、
この場合なぜhWndがNULLになってしまうのでしょうか?
0425デフォルトの名無しさん
2006/04/14(金) 20:25:14s_hWndは何かのクラスメンバなの?
0426デフォルトの名無しさん
2006/04/14(金) 21:00:34MakeMessageWindowを宣言しているヘッダ(C.h)のクラスのprivateメンバです
0427デフォルトの名無しさん
2006/04/14(金) 21:09:140428デフォルトの名無しさん
2006/04/14(金) 21:09:580429デフォルトの名無しさん
2006/04/14(金) 21:20:48C.hにs_hWnd、MakeMessageWindow()、SetHWnd()が有ります
s_hWndはSetHWnd()を使って、WinMainのウィンドウ作成後にHWNDを値渡ししています
WinMain.cppとB.hからMakeMessageWindow()を呼び出そうとすると、
WinMain.cppから呼び出した場合はs_hWndに作成したウィンドウのHWNDが
入っていますが、B.hから呼び出した場合だとs_hWndにNULLが入ってしまいます
0430デフォルトの名無しさん
2006/04/14(金) 21:26:250431デフォルトの名無しさん
2006/04/14(金) 21:27:230432デフォルトの名無しさん
2006/04/14(金) 21:30:580433デフォルトの名無しさん
2006/04/14(金) 21:35:40s_hWnd, MakeMessageWindow(), SetHWnd()
は同じクラスに属しているの?
0434デフォルトの名無しさん
2006/04/14(金) 21:39:56同じクラスです
s_hWndはprivate、二つの関数の方はpublicで宣言しています
0435デフォルトの名無しさん
2006/04/14(金) 21:40:570436デフォルトの名無しさん
2006/04/14(金) 21:51:06s_hWndは値渡しですので変わらないと思います
その他の3つはそれぞれ、メッセージボックスに表示する文章、ウィンドウに表示される文章
作るメッセージボックスの形式(それぞれ、OKのみ、はい/いいえ)が変化しています
0437デフォルトの名無しさん
2006/04/14(金) 21:57:33class A
{
public:
void Set(int i) { value = i; }
private:
int value;
};
A a1, a2;
a1.Set(10);
a2.Set(30);
とした場合、a1.value は10のままなのは理解できてる?
0438デフォルトの名無しさん
2006/04/14(金) 22:07:08すいません、今知りました
この場合私の言っていたs_hWndはWinMain.cppに対してだけの物で、B.hで使用するにはB.h、
もしくはB.cppの中でSetHWndをする必要があるという事でよろしいでしょうか?
0439デフォルトの名無しさん
2006/04/14(金) 22:13:28WinMain.cppとB.hで同じインスタンスに対して操作したいなら
グローバル変数にするとか。
0440デフォルトの名無しさん
2006/04/14(金) 22:14:050441デフォルトの名無しさん
2006/04/14(金) 22:26:52グローバル変数だと大丈夫でしたか
皆様ありがとう御座いました。やってみます
0442デフォルトの名無しさん
2006/04/14(金) 22:34:38そうなんですよね。それで前述の通り、今、検討している内容の中で
.NET frameworkを用いるのが、動作としては一番好ましいのですが。
現在設定してある動作環境(Win98〜 or Win95 + IE4〜)に当てはまる
人の中で動作しない人が出るのは・・・という状況です。
0443デフォルトの名無しさん
2006/04/14(金) 22:41:33その前にC/C++の基礎からやり直した方がいいと思うぞ。
0444デフォルトの名無しさん
2006/04/15(土) 13:32:17これの違いがいまいちわからんのですが、runtime_errorとlogic_errorの
違いってだけなんでしょうか。
0445デフォルトの名無しさん
2006/04/15(土) 13:50:16C では assert していたところで代わりに例外使おうと思うんですが、
意味からすると assert の代わりは logic_error かその派生クラスを
投げるべきですよね。だけど果たしてこの例外が
runtime_error にふさわしいのか logic_error にふさわしいのか、
結構悩むケースもあります。
http://www.geocities.jp/ky_webid/cpp/library/027.html
http://www.02.246.ne.jp/~torutk/cxx/exception/stdexceptions.html
http://cppemb.blog17.fc2.com/blog-entry-6.html
関連スレ?(DAT落ち)
http://pc5.2ch.net/test/read.cgi/tech/1051690231/
0446デフォルトの名無しさん
2006/04/15(土) 16:06:29for( int i; i < 10; i++){
ofstream fout("sample" (ここに変数iの数字を入れたい) ".txt");
fout << "hoge\n";
fout.close();
}
0447デフォルトの名無しさん
2006/04/15(土) 16:22:260448デフォルトの名無しさん
2006/04/15(土) 16:24:32boost::lexical_cast <string> (i)
0450デフォルトの名無しさん
2006/04/15(土) 17:44:530452デフォルトの名無しさん
2006/04/15(土) 19:58:30今度HP-UXで動くソケット通信のプログラムを作ることになったのですが、
ソケット通信に使うライブラリとかってBSDと同じなのでしょうか?
環境によってライブラリの内部は違ってもインクルートするヘッダーとか
リンクするライブラリ名は同じで、プログラムの実装方法は一緒と考えてもいいでしょうか?
0453デフォルトの名無しさん
2006/04/15(土) 20:32:56Cマガジンが出してる奴か?
あれ結構まともな感じしたんだが。
0454デフォルトの名無しさん
2006/04/15(土) 20:53:05好きなもん嫁
0455デフォルトの名無しさん
2006/04/15(土) 21:02:00こんな奴が実装したプログラムなんて使いたくないな
0456デフォルトの名無しさん
2006/04/15(土) 21:11:210457デフォルトの名無しさん
2006/04/15(土) 21:15:55図書スレ池
0458デフォルトの名無しさん
2006/04/15(土) 21:45:54あれはどういうアルゴリズムで実装しているのでしょうか。
自分のやり方は、データの全マスを何回か調べて、
広げられる位置をチェックしていくやり方ですが、すごく遅いです。
環境は、C言語、BCC、9x系です。
0459デフォルトの名無しさん
2006/04/15(土) 21:52:29わからないならグダグダいわないで、わかりません、だろ?
0460デフォルトの名無しさん
2006/04/15(土) 21:56:43画像処理 その6
http://pc8.2ch.net/test/read.cgi/tech/1140510670/
こういうスレもあるが、その程度ならここでもいいか
ペイントがどうやってるかしらないけど、とりあえず全体を調べる必要はないね
画像処理だかはさっぱり知らないけど、俺が考えたやり方だと
クリックしたマスと、その上下左右のマスが同じ色かどうかを調べる
同じ色だったら、そのマスに対して上下左右のマスが同じかどうかを調べる
ってのを再帰的に繰り返して同じ色のマスだけ塗りつぶす
もちろん、一度調べたマスにはなんらかのフラグを立ててもう一度調べることが無いようにする
0461デフォルトの名無しさん
2006/04/15(土) 22:06:450462デフォルトの名無しさん
2006/04/15(土) 22:13:48int i=199;
std::ostringstream os;
os << i;
std::string s = os.str();
0463デフォルトの名無しさん
2006/04/15(土) 22:20:13>>448
0465デフォルトの名無しさん
2006/04/15(土) 23:01:03API呼んでるだけじゃね?
0466デフォルトの名無しさん
2006/04/15(土) 23:07:22少し前(一年くらい?)に買ったC++入門書を引っ張りだしてきました。
この本だと
#include <iostream.h>
と書かれているんですが、ネットの初心者向けサイトを見ると
#include <iostream>
using namespace std;
となってます。
これは本が古いからでしょうか?
それとも色んなやり方があってどっちでも良いんでしょうか?
0467デフォルトの名無しさん
2006/04/15(土) 23:13:260468466
2006/04/15(土) 23:29:22そんじゃ明日本屋に行ってみます。どうもです。
0469デフォルトの名無しさん
2006/04/15(土) 23:59:02「閉領域 フィル アルゴリズム」あたりでググってみろ。
0470458
2006/04/16(日) 02:12:37ひとつでもチェックしたマスがあるならそのマスをチェックするやり方でした。
調べる位置の順番は、クリックした位置を中心ではなく、
普通にxとyの2次元フォーで調べていきます。
始めは左上から右下、次は右下から左上に進めていきます。
図形が複雑な場合は、左上から、右下からを何回か行います。
その回りの位置を調べる関数へのオーバーヘッドが遅いのか、
左上から、右下からが1回ずつの場合でもかなり遅いです。
>>465
なるほど。APIを探してみます。
>>469
そのキーワードで良さそうな所を見つけられました。
「C言語 for アルゴリズム 塗りつぶし」
とかで見ていたんですけど、書籍ばっか出てきてダメでした。
0471458
2006/04/16(日) 02:26:44同じように全マスを順番にチェックするタイプです。
今度はカウンタが進む方向が4パターンあり、
左上から、左上から(x, yを逆にカウンタを進める)、
右下から、右下から(x, yを逆にカウンタを進める)です。
チェックした位置が見つかると(始めの位置は当然クリックした位置)、
別の色が現れるまで、カウンタを進める方向にチェックし続けます。
円とか長方形とかシンプルな図形を塗る場合、
カウンタを進める方向の1回目では、下方向に直線が引かれた形、
2回目では左下方向が塗られた形、3回目では、右下方向も塗られた形、
4回目で全部塗られた形になります。
この方法だと結構早いです。メモリが128Mで、画像のデータサイズ
(2次元ポインタ)は400×400なんですけど大丈夫です。
弱点は画像が複雑な場合です。
特に細長く斜め方向に伸びた図形だと、
チェック回数をかなり多くしないといけません。
0472デフォルトの名無しさん
2006/04/16(日) 07:25:25というかシードフィルでいいんじゃ
0473デフォルトの名無しさん
2006/04/16(日) 08:31:37一般的に水平線を埋める形で実装されている。
0474デフォルトの名無しさん
2006/04/16(日) 12:40:19とある書籍で、次のようなコードが使われていました。
extern void func()
{
// 関数の実装
}
私の理解では、externを関数に修飾した場合、ただ単に「外部のどこかで宣言されている」ことを明示しているだけに過ぎず、
本来は関数宣言にのみ使うべきものだと考えておりましたので、例のような関数定義への修飾は意図が分からず戸惑ってしまいます。
このように関数定義そのものにexternを修飾することに、どのような意味があるのでしょうか?
0475474
2006/04/16(日) 12:41:110476デフォルトの名無しさん
2006/04/16(日) 12:45:45関数宣言(定義も含む)に付けられたexternは無意味。
あえて言うと、staticでないことを明示している。
0477デフォルトの名無しさん
2006/04/16(日) 12:58:07関数宣言・定義に修飾がなされていないときは
規格に従ってextern修飾がなされていると判断される
明示することでわかりやすくなるから全く意味がないとは言えない
0478474
2006/04/16(日) 13:37:16素早い返答ありがとうございます。
非staticであることを明示する、というのは考えが及びませんでした。
モヤモヤが晴れ、スッキリ読み続けられそうです。
ありがとうございました。
0479デフォルトの名無しさん
2006/04/16(日) 13:40:05ttp://www.amazon.co.jp/exec/obidos/ASIN/4756116396/249-5821739-0535563
とりあえずこれでも読んでみたらいいんじゃないか?
面白いし、結構ためになる
0480デフォルトの名無しさん
2006/04/16(日) 15:44:42さらにWM_CREATEを捕まえた時に、-1を返す、としたら、ウインドウは生成されないけど、WM_DESTRORYが発生する事は無いから、
アプリは結局の所、PCの電源を切るとか低水準な事をしない限り終了しないって事?
0481デフォルトの名無しさん
2006/04/16(日) 16:07:43tempフォルダや自分自身のexeがあるフォルダに出力するには
どんなパスを入れればいいのでしょうか?
0482デフォルトの名無しさん
2006/04/16(日) 16:22:59きっとtempフォルダや自分自身のexeがあるフォルダだよ。
0483デフォルトの名無しさん
2006/04/16(日) 16:23:350484デフォルトの名無しさん
2006/04/16(日) 16:25:05別の方法でWM_DESTRORYを送れば終了する。
0485デフォルトの名無しさん
2006/04/16(日) 16:26:51それは「低水準な事」に含まれないのか?
0486デフォルトの名無しさん
2006/04/16(日) 16:29:25環境異存。
WindowsならGetModuleFileNameを使って自分自身のファイル名を取得可能。
tempフォルダはgetenvで環境変数から取得できる。
tmpfile関数を使った方が良い場合もある。
0487デフォルトの名無しさん
2006/04/16(日) 16:32:25boost 使うって言う手もある。
0488名無しさん
2006/04/16(日) 16:39:19g++ v3.2ではlibstdc++.5.soが、v3.4では .6.soが
リンクされますが、v3.4でも .5.soをリンクさせる方法は
ありますか?環境がばらばらなので、libstdc++について
古い環境に合わせたいのですが。よろしくお願いします。
0490デフォルトの名無しさん
2006/04/16(日) 21:35:06マトリクスのプログラムを作っています。
[A] * [x] = -[B] で[x]を求めるのですが
[B]の前にある-は、どう処理すればよいですか?
0491デフォルトの名無しさん
2006/04/16(日) 22:00:480492デフォルトの名無しさん
2006/04/16(日) 22:10:22レスありがとう。
[B]の全要素の符合を入れ替えれば
良いのでしょうか?
[0]、[-1]がイメージ出来ません。
0493デフォルトの名無しさん
2006/04/16(日) 22:13:410494デフォルトの名無しさん
2006/04/16(日) 22:14:30基本的なことくらいは本読んで勉強するかのどちらかにしろよ
0495デフォルトの名無しさん
2006/04/16(日) 22:24:180496デフォルトの名無しさん
2006/04/16(日) 22:25:34勉強します。
0497デフォルトの名無しさん
2006/04/16(日) 22:42:150498デフォルトの名無しさん
2006/04/16(日) 23:07:13そもそも文系がプログラミングしようというのが間違ってるじゃないだろうか?
0499デフォルトの名無しさん
2006/04/16(日) 23:10:45順番も考慮した方がいいんだけどな。
0500デフォルトの名無しさん
2006/04/17(月) 16:36:19世界を構築してるんだ
0501デフォルトの名無しさん
2006/04/17(月) 16:56:37理想郷を作ろうとしているのか!
凄いぞ!がむばれ!
0502デフォルトの名無しさん
2006/04/17(月) 18:41:04void lines<T, SEP, *STR1>::read2(istream& is){
...
};
class problem: public <problem, '2', "Error">{
...
};
class solution: public <solution, '3', "Error">{
...
};
このコードをコンパイルすると、
syntax error : '<' ← <problem, '2', "Error"> の <
と出てしまうのですが、何がいけないんでしょうか?
class problem: public lines<problem, '2', "Error">
としても
invalid template argument for 'STR1', constant expression expected
と出てしまいます。
テンプレートに関して授業でほとんど習っていないのに、いきなり課題で出されて困っています。
どなたか教えてください。
0503デフォルトの名無しさん
2006/04/17(月) 18:51:25templateを使うには当然後者のようにlinesを指定しないといけない。
でないと、どのテンプレートなのかコンパイラには分からない。
但し、後者のエラーメッセージを読めば分かる通りテンプレート引き数であるSTR1が間違っている。
0504デフォルトの名無しさん
2006/04/17(月) 19:35:45DefWindowProc呼んでるなら終了しね?
0505デフォルトの名無しさん
2006/04/17(月) 19:42:50解決しました。ありがとうございました(´∀`)
0506502
2006/04/18(火) 00:29:22どうやって各クラスのクラスポインタを宣言すればよいのでしょうか?
また、各クラスのインスタンスをnewを使って生成したいのですが、それもやり方がわかりませんorz
どなたか教えて下さい。
0507デフォルトの名無しさん
2006/04/18(火) 01:48:000508デフォルトの名無しさん
2006/04/18(火) 01:50:120509デフォルトの名無しさん
2006/04/18(火) 01:51:270510デフォルトの名無しさん
2006/04/18(火) 01:57:570511デフォルトの名無しさん
2006/04/18(火) 03:43:53ちょっとは自分で調べてから聞けよ。
0512デフォルトの名無しさん
2006/04/18(火) 10:33:30教えたことができるようになってんのはあたりまえだろ
教えてない部分はまともな本で読んで補え
って意味の課題なのわかんないのかね
0513デフォルトの名無しさん
2006/04/19(水) 00:22:060514デフォルトの名無しさん
2006/04/20(木) 06:49:07char <= short <= int <= long
であれば、いいのでしょうか?
すると、これも規格上いいのでしょうか?
char <= short <= int <= long = 1
0515デフォルトの名無しさん
2006/04/20(木) 07:02:016.3.1.1 Boolean, characters, and integers
1 Every integer type has an integer conversion rank defined as follows:
. No two signed integer types shall have the same rank, even if they hav e the same
representation.
. The rank of a signed integer type shall be greater than the rank of any signed integer
type with less precision.
. The rank of long long int shall be greater than the rank of long int, which
shall be greater than the rank of int, which shall be greater than the rank of short
int, which shall be greater than the rank of signed char.
. The rank of any unsigned integer type shall equal the rank of the corresponding
signed integer type, if any.
. The rank of any standard integer type shall be greater than the rank of any extended
integer type with the same width.
. The rank of char shall equal the rank of signed char and unsigned char.
. The rank of _Bool shall be less than the rank of all other standard integer types.
. The rank of any enumerated type shall equal the rank of the compatible integer type
(see 6.7.2.2).
. The rank of any extended signed integer type relative to another extended signed
integer type with the same precision is implementation-defined, but still subject to the
other rules for determining the integer conversion rank.
. For all integer types T1, T2, and T3, if T1 has greater rank than T2 and T2 has
greater rank than T3, then T1 has greater rank than T3.
0516デフォルトの名無しさん
2006/04/20(木) 07:03:100517デフォルトの名無しさん
2006/04/20(木) 07:13:40手元のK&R C第2版には
>ハードウェアに合わせて、適当なサイズを自由に選んでよいが、守るべき唯一の条件は、
>shortとintは少なくとも16ビット、longは少なくとも32ビット、shortはintより長くてはならず、
>intはlongより長くてはいけないということである。
「唯一」のくせにいくつか書かれているが、こういうことらしい。
C99でどうなってるかは知らん。
あと、charは1バイト(バイトが何ビットであるかも正確には機種依存ではあるが)。
0518デフォルトの名無しさん
2006/04/20(木) 07:22:34C99の規格票を眺めていると、引用すべき箇所が多くて貼らない方が
いいだろうが、long long int と unsigned long long intが増えただけで、
後は limits.h内の***_MIN〜***_MAXを少なくとも保持できる大きさ
でなければならない、と書いてある。基本的にはANSI-C89と同じようだ。
0519デフォルトの名無しさん
2006/04/20(木) 07:29:39ありがとうございます。
C99にint32_tなどがあるのは知っていたのですが、
ANSI Cなどは、何の規定もないのかと疑問に思ったもので。
boostに、SFINAEとsizeofのトリックを利用するため、char型と違うサイズの型を指定するのに、
こんな風なコードが書いてあったので。
typedef char yes_type;
struct no_type
{
char padding[8];
};
K&Rを読んでおくべきでした。
わざわざすみません。
0520デフォルトの名無しさん
2006/04/20(木) 19:18:25こんなソースを見たのですが、
この三連ピリオドはなんですか?
初めてみたんですが、意味を教えてください。
0521デフォルトの名無しさん
2006/04/20(木) 19:26:310522デフォルトの名無しさん
2006/04/20(木) 19:27:33see stdio.h.
0523デフォルトの名無しさん
2006/04/20(木) 19:27:50あった。サンクス。
0524デフォルトの名無しさん
2006/04/20(木) 19:28:24サンクス
0525デフォルトの名無しさん
2006/04/21(金) 16:29:10err1 = 0x1,
err2 = 0x2,
...
} HOGE;
として
HOGE a;
a |= e1;
というのをCではよく使ってたんだけど
C++でコンパイルすると
|=のところで演算子定義エラーになるんですが、
C++のenumでは代入しかつかえないんですか?
またenumを再定義してビット演算も使えるように
することってできますか?
0526デフォルトの名無しさん
2006/04/21(金) 16:45:50これを2つのヘッダファイルに分け、互いにインクルードするようにすると、
#ifndef #defineを使って多重インクルードを防止した場合は片方がインクルードされず、
これを使用しなかった場合は多重インクルードのループが発生してしまいます。
片方のヘッダのインクルード行の前に、クラスの仮宣言(?)を置くか、
2つのクラスをひとつのヘッダにまとめる事で解決できるのですが、好ましくない気がします。
ほかに効果的な解決方法はありませんでしょうか。
現在の状況:ほかのソースにc_dmanager.hをインクルードして使用
c_dmanager.h
#ifndef __C_DMANAGER_H__
#define __C_DMANAGER_H__
//ここに class C_DManager; と記述する事で、エラーは回避できる
#include "c_data.h"
class C_DManager{/*内部略*/};//このクラス内部でC_Dataにアクセス
#endif
c_data.h
#ifndef __C_DATA_H__
#define __C_DATA_H__
#include "c_dmanager.h"
class C_Data{/*内部略*/};//このクラスからC_DManagerにアクセス
#endif
0527デフォルトの名無しさん
2006/04/21(金) 16:54:12C++.NETとC++2005の主な違いはなんですか?
C言語で書かれたAPIのコードをコピーしても
C++2005で動作するもんでしょうか?
C++2005にはspy++は付属していますか?
よろしくお願いします。
0528デフォルトの名無しさん
2006/04/21(金) 16:55:30----- A.h -----
#ifndef __A_H__
#define __A_H__
class B;
class A {
};
#endif
----- B.h -----
#ifndef __B_H__
#define __B_H__
class A;
class B {
};
#endif
----- A.cpp -----
#include "A.h"
#include "B.h"
----- B.cpp -----
#include "B.h"
#include "A.h"
0529デフォルトの名無しさん
2006/04/21(金) 17:00:38C++.netのはC++ Managed拡張
C++2005はC++/CLI(ECMA-372)
>C言語で書かれたAPIのコードをコピーしても
>C++2005で動作するもんでしょうか?
基本的には動く。とゆうか動かなきゃ話にならん
>C++2005にはspy++は付属していますか?
付いてなきゃ話にry
0530デフォルトの名無しさん
2006/04/21(金) 17:29:51教えてくれてどうもサンクスです♪
0531526
2006/04/21(金) 17:34:04早レスありがとうございます。
規模の小さいクラスだったので、ヘッダで完結させていたのですが、
CPP側に処理を書いたほうがスッキリしそうなので試してみます。
0532デフォルトの名無しさん
2006/04/21(金) 17:44:25C(gcc 3.3.5)でもそれ通んないんだけど...
bitsetと組み合わせて以下のようなのはどう?
#include <iostream>
#include <bitset>
using namespace std;
namespace HOGE {enum {err1, err2, size};}
typedef bitset <HOGE::size> HOGE_SET;
int main ()
{
using namespace HOGE;
HOGE_SET a;
a.set (err1);
if (a.test (err1)) cout << "err1" << endl;
return 0;
}
0533デフォルトの名無しさん
2006/04/21(金) 17:49:470534デフォルトの名無しさん
2006/04/21(金) 19:03:07「列挙」型
0535デフォルトの名無しさん
2006/04/21(金) 19:05:03昔他スレで教えてもらった
0536デフォルトの名無しさん
2006/04/21(金) 21:33:39列挙型は整数型とは違うからそのままでは |= 演算子を使えない。
そもそも列挙型に対する | 演算子も整数型に格上げして演算されているので要注意。
だから自分で|演算子や|=演算子を定義すればよい。
inline HOGE operator |(HOGE l, HOGE r) throw()
{
return static_cast<HOGE>(l | r);
}
inline HOGE& operator |=(HOGE& l, HOGE r) throw()
{
l = l | r;
return l;
}
0537525
2006/04/22(土) 01:28:13>> 532
gcc 3.3.2では通ってました。ターゲットはarm-elfでしたけど、関係ないですよね…
今cygwinのgcc 3.4.4で試してみても通りました。
# ADSではtemplateつかえないみたいです…orz
>> 533, 525
普段はADSというarmの純正開発環境を使っていてarmのデバッガだと
HOGE a = err1;
a |= err2;
とかで
err1 | err2
と識別子情報を拾って表示してくれて見やすいので多用してました。
gdbだと拾ってくれないみたいですね。
Cでenumはintで実装されると思ってたんですけど
実装依存なんですかね?
規格とか持ってないんで判んないんですけど。
>> 536
// return static_cast<HOGE>(l | r); // コンパイル通らなかった
// return static_cast<HOGE>(static_cast<int>l | static_cast<int>r); // コンパイル通らなかった
return static_cast<HOGE>((int)l | (int)r);
なぜか↑のようにしないとコンパイル通りませんでしたけど、これでいけそうです。
enum自身にも演算子再定義できるとは知りませんでした。
0538デフォルトの名無しさん
2006/04/22(土) 01:40:58intでなくてenumを使ってるのはなぜですか?
0539525
2006/04/22(土) 01:43:43> 普段はADSというarmの純正開発環境を使っていてarmのデバッガだと
> 識別子情報を拾って表示してくれて見やすいので多用してました。
という理由です。
0540デフォルトの名無しさん
2006/04/22(土) 01:54:11const int ONE = 1;
という風に代替するんじゃダメなん?
0541540
2006/04/22(土) 01:55:440542デフォルトの名無しさん
2006/04/22(土) 03:00:380543デフォルトの名無しさん
2006/04/22(土) 03:06:48続々と新刊が発売されている最中です
0544デフォルトの名無しさん
2006/04/22(土) 03:09:390545デフォルトの名無しさん
2006/04/22(土) 03:14:021999年から結構経っていますがそんなもんです
0546デフォルトの名無しさん
2006/04/22(土) 03:54:04それ以前にC99に完全準拠したまともな処理系は数えるしかなく、
メジャーなベンダーメーカーはC99を捨てているのが現状です。
規格だけが先走り、現物が出てこない悲運のC99。
0547デフォルトの名無しさん
2006/04/22(土) 04:15:16> static_cast<HOGE>(l | r)
l, r が両方 enum HOGE だとして、これはコンパイルできないとおかしいぞ。
エラーメッセージなんて言われた?
> static_cast<HOGE>(static_cast<int>l | static_cast<int>r)
こっちは
static_cast<HOGE>(static_cast<int>(l) | static_cast<int>(r))
これで通るはず 〜_cast<T> には括弧が必須。
0548525
2006/04/22(土) 08:09:23> これで通るはず 〜_cast<T> には括弧が必須。
これでいけました。
> エラーメッセージなんて言われた?
すいません、これに関しては実行時のエラーでした。
↓こんなかんじ
GNU gdb 6.3.50_2004-12-28-cvs (cygwin-special)
...
(gdb) br main
Breakpoint 1 at 0x401075: file enumtest.cpp, line 23.
(gdb) run
Starting program: /cygdrive/c/nogu/test/enumtest.exe
Breakpoint 1, main () at enumtest.cpp:23
23 {
(gdb) n
24 HOGE a = err1;
(gdb) n
25 HOGE b = err2;
(gdb) n
26 a |= err2;
(gdb) n
Program received signal SIGSEGV, Segmentation fault.
0x004013fb in operator| (l=err1, r=err2) at enumtest.cpp:11
11 return static_cast<HOGE>(l | r); // SIGSEGV
(gdb)
0549デフォルトの名無しさん
2006/04/22(土) 08:14:02Sunはメジャーじゃないの?
0550デフォルトの名無しさん
2006/04/22(土) 09:11:42Z:\MyDocuments>bcc32 teat01.c
'bcc32' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
と出てコンパイルできません。どうしたらよいでしょうか?
0551デフォルトの名無しさん
2006/04/22(土) 09:16:33インストールした香具師に聞け。
それがあんた自身なら、ダウンロードした香具師に聞け。
それがあんた自身なら、ダウンロードしたサイト周辺を探せ。
0552デフォルトの名無しさん
2006/04/22(土) 09:24:170553550
2006/04/22(土) 09:32:26環境変数を自分で設定しないといけないんですね。
愛媛大学のメディアセンターのパソコンは今日開いていないので、
月曜日にやってみます。
0554デフォルトの名無しさん
2006/04/22(土) 09:42:110555デフォルトの名無しさん
2006/04/22(土) 12:03:30どの様に実装すればいいのでしょうか
0556デフォルトの名無しさん
2006/04/22(土) 13:12:54つ[fopen(), fseek(), fwrite(), fclose()]
0557デフォルトの名無しさん
2006/04/22(土) 13:29:120558デフォルトの名無しさん
2006/04/22(土) 13:30:240559デフォルトの名無しさん
2006/04/22(土) 14:01:10普遍の値として10という数字を使う際に
constと#defineとenumのメリットデメリットや使い方例などありますか?
0560デフォルトの名無しさん
2006/04/22(土) 14:06:51const int fuhen = 10;
enum {Fuhen = 10};
それが個数などを表す数値であるなら意味的には整数型を使うべき。
序列、番号付けの目的ならenumがいいだろう。
どちらの手段も使えないなら仕方なくマクロにしようか。
0561デフォルトの名無しさん
2006/04/22(土) 14:08:39言語で標準サポートされてるし
0562デフォルトの名無しさん
2006/04/22(土) 15:07:38いや、マクロやconstもサポートされていますが何か。
0563デフォルトの名無しさん
2006/04/22(土) 15:26:17constはわざわざ使う必要は無いと思った
0564デフォルトの名無しさん
2006/04/22(土) 15:36:07浮動小数点型の定数が欲しい時どうするんだ?
整数型の定数だけenumにして、その他はdefineかconstなんていう不統一なスタイルにするのか?
0565デフォルトの名無しさん
2006/04/22(土) 15:41:460566デフォルトの名無しさん
2006/04/22(土) 15:47:400567デフォルトの名無しさん
2006/04/22(土) 15:53:58使うべきかどうかは別として、最初に導入された理由が
「マクロよりもマシな記号定数が必要だったから」だしな。
使い方として完全に間違っているわけではないかと。
0568デフォルトの名無しさん
2006/04/22(土) 16:10:51printf
後者の方が10倍くらい出力速い気がする
0569デフォルトの名無しさん
2006/04/22(土) 16:19:01Cの方が速いのは当たり前
0570デフォルトの名無しさん
2006/04/22(土) 16:30:170571デフォルトの名無しさん
2006/04/22(土) 16:34:060572デフォルトの名無しさん
2006/04/22(土) 16:34:20webフォームとwebアプリケーションは違いますよね?
webフォームとは具体的になんですか?
0573デフォルトの名無しさん
2006/04/22(土) 16:52:28独り言
0574デフォルトの名無しさん
2006/04/22(土) 19:01:13なんとか、getch()を使える環境にしたのですが、うまくいきません。
コンパイルは普通に通り、実行ファイルも吐き出されます。
しかし、実行時にセグメンテーション違反が出ます。
どうすればいいでしょうか。
ご教授いただければうれしいです。
0575デフォルトの名無しさん
2006/04/22(土) 19:21:47getchar使うとか
0576デフォルトの名無しさん
2006/04/22(土) 19:23:52はい、そうするのが無難なのですが。
例えば、タイピングのゲームを作りたいと考えた時に、getcharでは実現できないと思うのです。
0577デフォルトの名無しさん
2006/04/22(土) 19:25:32普通に教えて下さい程度で十分だと思う
ここは教授するような高尚な知識を授ける程のレベルのスレでもない
0578デフォルトの名無しさん
2006/04/22(土) 19:29:43なら来るなよカス。
0579デフォルトの名無しさん
2006/04/22(土) 19:31:51curses使えばリアルタイムに取れる
0580デフォルトの名無しさん
2006/04/22(土) 19:34:42レスありがとうございます。
よければそれについて、詳しく教えてください。
有用な情報が載っているWebページなどでも結構です。
0581デフォルトの名無しさん
2006/04/22(土) 19:38:54元々「教授する」なんて言葉自体が誤用なんだから目鯨立てなさんな。
0582デフォルトの名無しさん
2006/04/22(土) 19:40:00man 3 curses
ttp://www.h7.dion.ne.jp/~matsu/feature/c-language/curses/basic.html
↑にサンプルコードやらなんやら
足りんかったら適当にぐぐれ
0583デフォルトの名無しさん
2006/04/22(土) 19:43:20してないとか
0584デフォルトの名無しさん
2006/04/22(土) 19:43:30ぐぐれ。そして挫折しろ。
0585577
2006/04/22(土) 20:13:33おならプー
0586デフォルトの名無しさん
2006/04/22(土) 20:52:12「教示」
です。
0587デフォルトの名無しさん
2006/04/22(土) 20:56:35きょうじゅ【教授】
(名)スル
児童・生徒に知識・技能を与え、そこからさらに知識への興味を呼び起こすこと。
専門的な学問・技芸を教えること。
「国文学を―する」「書道―」
0588デフォルトの名無しさん
2006/04/22(土) 20:58:19きょうじ 【教示】
(名)スル
〔「きょうし」とも〕おしえしめすこと。示教。
「御―を賜りたく」
実験・調査で、研究者の意図する行動を被験者にとらせるための指示
0589デフォルトの名無しさん
2006/04/22(土) 20:59:480590デフォルトの名無しさん
2006/04/22(土) 21:18:180591デフォルトの名無しさん
2006/04/22(土) 23:09:110592デフォルトの名無しさん
2006/04/22(土) 23:52:19putch()ってのもあるの?
GCC特有の関数?
0593デフォルトの名無しさん
2006/04/22(土) 23:59:38ヘッダファイルの名のとおりコンソール専用
0594デフォルトの名無しさん
2006/04/23(日) 02:21:49borland C++を導入して
BinにPATHを通しても
includeとlibを読み込んで
くれません。
こんなことで悩んでいるぽっくんは
バカ?
なんせプログラム組むのは
10年ぶりでWindowsは初めてなもので。
教えて偉い人。
0595デフォルトの名無しさん
2006/04/23(日) 02:24:460596デフォルトの名無しさん
2006/04/23(日) 02:28:350597デフォルトの名無しさん
2006/04/23(日) 02:28:390598デフォルトの名無しさん
2006/04/23(日) 02:34:25PATH通したんですけど、
ダメなんですよーーー(;_;
0599デフォルトの名無しさん
2006/04/23(日) 02:36:02bcc32.cfgとilink32.cfgファイルは
作りました。
どうやらそれを無視している
ようです。
0600デフォルトの名無しさん
2006/04/23(日) 02:46:20なんでダウンロード出来ない神!
0601デフォルトの名無しさん
2006/04/23(日) 03:16:530602デフォルトの名無しさん
2006/04/23(日) 03:20:14CPadっていうフリーのIDEだと環境変数自動で設定してくれる。
それだと駄目か?
0603デフォルトの名無しさん
2006/04/23(日) 03:36:38あるよ。
0604デフォルトの名無しさん
2006/04/23(日) 03:40:11どうしてもわかりません?????
0605デフォルトの名無しさん
2006/04/23(日) 04:19:31どうやらTeraPadの保存で
余計な拡張子がついていたようです
無事コンパイル出来ました。
お騒がせしました。
0606デフォルトの名無しさん
2006/04/23(日) 05:48:18こんどはリンカで
Illegal option -Gn
とかでてEXEファイルを生成
出来ない様です。
こまりました。
0607デフォルトの名無しさん
2006/04/23(日) 08:25:35翻訳サイトにその文章をかけてみな。たぶん正しくないオプション-Gnみたいな文章になると思うから。
ilink32.cfgに-Gnって書いてあったら消すといいと思うよ。
0608デフォルトの名無しさん
2006/04/23(日) 09:20:170609デフォルトの名無しさん
2006/04/23(日) 09:56:15何ていうヘッダで定義されてますか?
BCCに通るコードでも未定義エラーで弾かれちまいます。
0610デフォルトの名無しさん
2006/04/23(日) 10:03:38自分の環境だとmingwのctype.hとwctype.hにしかないな。
0611デフォルトの名無しさん
2006/04/23(日) 10:07:12手持ちの資料では見当たらないんだが。
0612デフォルトの名無しさん
2006/04/23(日) 11:04:09mingwのctype.h
0613デフォルトの名無しさん
2006/04/23(日) 12:31:32ilink32.cfgで、-Gの指定がありません。
なぜ-Gのエラーが出るのか判りません。。
0614デフォルトの名無しさん
2006/04/23(日) 12:36:52とりあえずEXEファイルは生成出来ました。
しかし実行すると、有効なwin32アプリケーション
ではありません。と出てエラーになってしまいます。
ただhello worldと出すだけのプログラムなんですけど。
0615デフォルトの名無しさん
2006/04/23(日) 12:45:03いい加減に汁。
コンパイラ/リンカの使い方位ググって調べろ。
ここは、ソフトの使い方を聞くスレじゃねぇ!
0616デフォルトの名無しさん
2006/04/23(日) 13:13:550617デフォルトの名無しさん
2006/04/23(日) 13:55:000618デフォルトの名無しさん
2006/04/23(日) 14:40:57ctype.hをインクルードしてますが、「isleadbyteへの参照が未定義」とエラーされました。意味がさっぱりっす。環境はcygwin。
引値はintらしいけど、BCCだとcharが通りました。これも訳わからんです。
0619デフォルトの名無しさん
2006/04/23(日) 14:44:41と
リンクするライブラリ
があっているか?
0620デフォルトの名無しさん
2006/04/23(日) 14:50:32cygwin でエラーメッセージに日本語でるの?
0621デフォルトの名無しさん
2006/04/23(日) 15:14:04いや、英語でした。
リンカも1 exit statusなるものを返してきてるらしいですが…。
>>619
<ctype.h>じゃ駄目ですか?
0622デフォルトの名無しさん
2006/04/23(日) 15:31:51やったこととエラーメッセージを「正確に」伝えろバカ。
0623デフォルトの名無しさん
2006/04/23(日) 15:33:29終了ステータスが0以外=何かエラーが発生した
つーかこんなのC言語以前のレベルだろうが、氏ね
0624デフォルトの名無しさん
2006/04/23(日) 16:49:41BCCでします。
0625デフォルトの名無しさん
2006/04/23(日) 17:08:360626デフォルトの名無しさん
2006/04/23(日) 17:16:320627デフォルトの名無しさん
2006/04/23(日) 20:18:54わざわざmingwだと言ってるのに。頭悪杉。
0628デフォルトの名無しさん
2006/04/23(日) 22:49:05試しに基底クラスで代入演算子をオーバーロードして、
その基底クラスから派生させたクラスを1つつくって
派生クラス同士で代入を行ったら、基底クラスでオーバーロードした
代入演算子が呼び出されているようなんですが・・・
これって継承されてるのと違うんですか?それとも意味が違う?
0629デフォルトの名無しさん
2006/04/24(月) 00:11:46>13.5.3 代入
>代入演算子は,1個の仮引数をもつ非静的メンバ関数として実装しなければならない。代入演算子が
>利用者によって宣言されていない(12.8参照)場合,コピー代入演算子operator=が,クラスごとに暗黙に宣言さ
>れるので,基底クラスの代入演算子は,常に派生クラスのコピー代入演算子によって隠ぺいされる。
0630628
2006/04/25(火) 02:25:17public:
A& operator =(const A& rhs){ cout << "A" << endl; return *this; }
};
class B : public A{
};
int main( void )
{
class B b1, b2;
b1 = b2;
}
これを実行すると
A
と表示されるのですが・・・おかしいですよね?
0631デフォルトの名無しさん
2006/04/25(火) 03:05:41「継承されません」というのは、派生クラスで自前で代入演算子を定義
した時、基底クラスの代入演算子が無視されてしまう事を言う。
今のケースではBのデフォルトの代入演算子が使われるので、継承とか
は関係無しに基底クラスの代入演算子も呼ばれる。
試しにBに代入演算子を定義してみな。自分でA::operator=()を呼び
出さないと呼び出されない。隠蔽されてしまうからだ。
規格のどの辺かな?§12.8、§13.5.3あたりだと思うんだが。
0632デフォルトの名無しさん
2006/04/25(火) 08:24:31その定義だと、全てのメンバ関数にあてはまってしまわない?
0633デフォルトの名無しさん
2006/04/25(火) 09:18:53暗黙に定義される B::operator=() は A::operator=() を呼び出す。
そうじゃないと困るだろ?べつにおかしくない。
0634デフォルトの名無しさん
2006/04/25(火) 09:19:57代入演算子は暗黙の宣言があるので必ず隠される。
他のメンバ関数はそうはならない。
0635デフォルトの名無しさん
2006/04/25(火) 09:29:27暗黙に定義されるB::operator=()は、Bに固有のメンバのみビットコピーした
後にA::operator=()を呼び出す、と。
確かにそういうバイナリ吐いてるな。
0636デフォルトの名無しさん
2006/04/25(火) 09:48:06ビットコピーではなく代入だよ。
0637デフォルトの名無しさん
2006/04/25(火) 09:54:08違う。
B のメンバはそれぞれに対して代入を行う( operator=() を呼び出す)。
また、順番は A::operator=() が最初でメンバは宣言順になる。
0638デフォルトの名無しさん
2006/04/25(火) 09:55:580639デフォルトの名無しさん
2006/04/25(火) 10:03:040640デフォルトの名無しさん
2006/04/25(火) 10:09:54代入演算子の動作だったような・・・・
0641デフォルトの名無しさん
2006/04/25(火) 10:09:56・メンバを先頭から順番に代入する。
・継承している場合は継承元が先。
たったこれだけだろ。
0642デフォルトの名無しさん
2006/04/25(火) 10:13:39自信が無いなら規格読めよ。
0643デフォルトの名無しさん
2006/04/25(火) 10:19:24class B : public A {
int* i;
};
のような状態で、iがnewされた領域を指していた場合、デフォルトの
B::operator=()じゃダメだろ。
0644デフォルトの名無しさん
2006/04/25(火) 10:30:53大抵ダメだろうねぇ。そのような場合、適切な代入オペレータを用意するのはクラス設計者の責任だろうけど。
0645デフォルトの名無しさん
2006/04/28(金) 12:45:44可能な限り高速に、エクセル形式のファイルを動的配列に格納したいです。
調べたところ、ODBCというものを使う、という手段を発見しましたが、下記サイトによるとタイムラグが発生するとのこと。
他に手段はありますか?
ttp://sato-si.at.webry.info/200503/article_11.html
0646645
2006/04/28(金) 12:51:35失礼しました。
0647645
2006/04/28(金) 12:54:21環境 : VC.NET2003, WinXP SP2, 標準STL
0648デフォルトの名無しさん
2006/04/28(金) 12:55:19自前でフォーマットを調べて読み込みルーチンを書く
ttp://www.wotsit.org/download.asp?f=excel
0649デフォルトの名無しさん
2006/04/28(金) 14:42:40wcharをfputsで出力するのはダメなんでしょうか?
環境はWinCE5.0です。
0650デフォルトの名無しさん
2006/04/28(金) 14:46:13fputws
0651デフォルトの名無しさん
2006/04/28(金) 17:05:43あああ!ありがとうございます。そんなものがあるなんて思ってませんでした。
0652デフォルトの名無しさん
2006/04/28(金) 22:52:53マイクロソフトの気分しだいで簡単に変更されちゃうのでは?
0653デフォルトの名無しさん
2006/04/28(金) 22:57:580654デフォルトの名無しさん
2006/04/28(金) 22:58:23次はxmlベースらしいから解析は楽そうだけど
0655ふーん
2006/04/28(金) 23:05:45【IT/政治】日本政府、「世界最高水準のセキュリティー」の次世代OS開発着手へ
:Winny被害に対応[06/04/29]
http://news19.2ch.net/test/read.cgi/newsplus/1146231538/l50
0656645
2006/04/29(土) 03:49:52ありがとうございました。
0657デフォルトの名無しさん
2006/04/29(土) 08:48:270658デフォルトの名無しさん
2006/04/29(土) 10:02:410659デフォルトの名無しさん
2006/04/29(土) 10:46:08する場合、宣言と定義にinline指定、宣言のみにinline指定、定義のみに
inline指定、いずれもinlineになると思っていいの?
0660デフォルトの名無しさん
2006/04/29(土) 11:26:59いいけど、定義だけにつけたときは
使う側が定義を取り込むように注意して配置しろよ。
0661デフォルトの名無しさん
2006/04/29(土) 17:07:150662デフォルトの名無しさん
2006/04/29(土) 17:51:450663デフォルトの名無しさん
2006/04/29(土) 17:55:170664デフォルトの名無しさん
2006/04/29(土) 18:56:17たとえばVC++にはプログラム全体の最適化というリンク時に行う最適化がある。
それどころかDLL内の関数すらインライン展開する機能もある
0665デフォルトの名無しさん
2006/04/29(土) 23:12:010666デフォルトの名無しさん
2006/04/29(土) 23:32:110667デフォルトの名無しさん
2006/04/29(土) 23:37:42お勧めのライブラリってある?
検索の仕方が悪いのかいまいちヒットしない。
0668デフォルトの名無しさん
2006/04/29(土) 23:46:41構造体の中身の配列に関しては、値を入れた配列要素から
1つづつ形成されていた。
配列オンリーなら宣言時というよりも、すでにstatic領域(静的領域)でできてるけど。
0669デフォルトの名無しさん
2006/04/30(日) 12:18:23どうやって調べてるの
0670デフォルトの名無しさん
2006/04/30(日) 12:23:37>構造体の中身の配列に関しては、値を入れた配列要素から
>1つづつ形成されていた。
どういう意味?構造体の配列にvectorでも使っているの?
0671デフォルトの名無しさん
2006/04/30(日) 18:16:26>>668誤り
構造体自体もアドレス確保されてるし、構造体の中に配列作ったとしても、
その配列も他変数同様確保されてるし、
static領域ではないし、
ただ、Cでやったんだけど、
Cの場合、C++と違って、「宣言は最初に持ってこないといけない(関数内の中間じゃ×)」
であって、例えば、
int a=1;
int b=2;
とやるも、先にaとbがまとめて確保されて、次にa=1となり次にb=2となる。
ここを誤った。
0672デフォルトの名無しさん
2006/04/30(日) 18:22:290673デフォルトの名無しさん
2006/04/30(日) 18:58:31新しい規格ではブロックの先頭じゃなくてもいいんじゃなかったっけ?
0674デフォルトの名無しさん
2006/04/30(日) 19:01:560675デフォルトの名無しさん
2006/04/30(日) 19:05:55int a=1;
は定義である
これが関数内に記述されているなら関数が実行されるときに
スタック上に領域が確保される かもしれない
0676デフォルトの名無しさん
2006/04/30(日) 19:07:430677デフォルトの名無しさん
2006/04/30(日) 19:14:26using namespace std;
char a[255];
void set(){
a="abc";
}
void main()
{
set();
cout <<a;
getchar();
}
どうすればいいんだYO
0678デフォルトの名無しさん
2006/04/30(日) 19:18:170679デフォルトの名無しさん
2006/04/30(日) 19:20:24ここで教えるわけがないけど、まあ、そのへん勉強しろと
0680デフォルトの名無しさん
2006/04/30(日) 19:24:26usingnamespacestd;
chara[255];
voidset(){
//a="abc";
if(strlen(a)>strlen("abc"))
strcpy(a,"abc");
}
void main()
{
set();
cout<<a;
getchar();
}
0681デフォルトの名無しさん
2006/04/30(日) 19:28:42ありがとう
ポインタを使う時はどうするの?
0682デフォルトの名無しさん
2006/04/30(日) 19:30:00聞く前に自分で書け馬鹿。
0683デフォルトの名無しさん
2006/04/30(日) 19:41:30馬鹿って言う奴が馬鹿なんだもんねー
0684デフォルトの名無しさん
2006/04/30(日) 20:05:55usingnamespacestd;
//chara[255];
staticchar*a="efg";
voidset(){
//a="abc";
if(strlen(a)>strlen("abc"))
strcpy(a,"abc");
}
void main()
{
set();
cout<<a;
getchar();
}
char*a;やchar*a="efg"だと、
strcpy(a,"abc");
とした瞬間に、元のaの値もアドレスもゴミとして放棄して、新しくアドレス確保してabc\0を入れてしまうんだよ。
で、ゴミがエラーとして出る。
こういう面からも安易に=は使えないよ、=はポインタ型変数で使うと参照を意味したりもする(もちろんアドレス変わる)('Д`)
0685デフォルトの名無しさん
2006/04/30(日) 20:08:58調べてもC++用のしか見つからないんです。
コンパイラはBCCです。
0686デフォルトの名無しさん
2006/04/30(日) 20:11:53Parsifal XML Parser
0687デフォルトの名無しさん
2006/04/30(日) 20:11:550688デフォルトの名無しさん
2006/04/30(日) 20:14:04どうもご親切に
0689デフォルトの名無しさん
2006/04/30(日) 20:24:03> char*a;やchar*a="efg"だと、
> strcpy(a,"abc");
> とした瞬間に、元のaの値もアドレスもゴミとして放棄して、新しくアドレス確保してabc\0を入れてしまうんだよ。
新しくアドレスを確保?
んなことせんがな
自分でstrcpyと同じ動作をする関数を実装してみると理解が深まると思われ
0690デフォルトの名無しさん
2006/04/30(日) 20:37:130692デフォルトの名無しさん
2006/04/30(日) 22:20:23"abc"を入れるアドレスを作り、"abc"を入れて、
strcpy(a,"abc");で、"abc"のアドレスをaが参照し(aと"abc"は同アドレス)、
aの元の値とアドレスはゴミとして残ってしまう。
でOKですか?
AccessViolationでるから、まんまでは確認できなかったですけれど。
0693デフォルトの名無しさん
2006/04/30(日) 22:32:01なんだか説明が下手でよく判らんが、理解できてなさそうだとは思う。
コードを提示して説明しなおして味噌。
0694デフォルトの名無しさん
2006/04/30(日) 22:47:16using namespace std;
char* b="efg";
void set(){
/*5:*/strcpy(b,"abc");
}
void main()
{
set();
cout<<b;
getchar();
}
ビルドは通りますが、実行時AccessViolationでます。
で、その訳ですが、5行目でabcのためのアドレス確保し、abc\0が入る
&aが"abc"と同アドレスを参照しようとするが、そのとき、efgとそのアドレスを切り離す(メモリ上に残骸が残る)>AccessViolation
0695訂正
2006/04/30(日) 22:48:54を
>&bが
0696デフォルトの名無しさん
2006/04/30(日) 22:54:15違います。
0697デフォルトの名無しさん
2006/04/30(日) 22:56:55"abc"のための領域なんぞ確保できていない。
char* b = "efg"は文字列リテラルへのポインタをbに代入しているに過ぎない。
で、文字列リテラルはconst、つまり変更不可能。
それをstrcpyで勝手に書き換えようとした。ゆえにAccessViolation
そもそもViolationで辞書引いたのか?
0698デフォルトの名無しさん
2006/04/30(日) 23:00:170699デフォルトの名無しさん
2006/04/30(日) 23:01:330700693
2006/04/30(日) 23:12:040701デフォルトの名無しさん
2006/04/30(日) 23:41:29ありがとうございます。
追うのはかなり厳しかったのですが、
strcpy内ステップインして、
abcをスタックにpushした後、
〜
この間分からなかったですが、
〜
mov dword ptr [edi],edx
(edx=00636261(\0cba))
で、abc\0をediレジスタに書き込むところでAccessViolation発生していました。
宣言が関数内外問わず同じでした
0702デフォルトの名無しさん
2006/04/30(日) 23:43:08が重要であって、それさえイメージ出来れば、
何も難しい事なんて無いはずなのになぁ…。
みんな、想像力が欠けてるのか?
0703デフォルトの名無しさん
2006/04/30(日) 23:45:20がわかってないといきなりデバッガで追っても意味わからんと思うけど・・
0704デフォルトの名無しさん
2006/04/30(日) 23:45:39そんなものを追う前に、Access Violation を英和辞書でひけ!
0705デフォルトの名無しさん
2006/05/01(月) 00:02:24ヒンシュクをかってたやつがいたな。
0706デフォルトの名無しさん
2006/05/01(月) 00:12:57あの、的はずれな値を見ていた香具師か?
0707デフォルトの名無しさん
2006/05/01(月) 00:24:00彼らはある日魔法の呪文が書かれた本を目にするとなぜかそれが全て読めて
南無南無唱えて敵を倒せるのだと思い込んでいるからなぁ。
0708デフォルトの名無しさん
2006/05/01(月) 00:38:25そろそろ「釣れたw」とか言って欲しいな。
>mov dword ptr [edi],edx
>(edx=00636261(\0cba))
>で、abc\0をediレジスタに書き込むところで
そのコードはabc\0をediレジスタに書き込んでいるのでは無い。
ediレジスタが指す メ モ リ にedxの内容を書き込んでいる。
0709デフォルトの名無しさん
2006/05/01(月) 00:49:33ポインタを理解できる人間か、理解できない人間かだ。
0710デフォルトの名無しさん
2006/05/01(月) 11:30:24JoS?
0711デフォルトの名無しさん
2006/05/01(月) 20:21:56errno==ENTER
ってどういうエラーを表しているのでしょうか?
手持ちの本には何も書いてなくて、検索してもあまりこれっというのがでてきませんでした。
よろしくお願いします。
0712デフォルトの名無しさん
2006/05/01(月) 20:22:29perror()
strerror()
0713711
2006/05/01(月) 20:32:48すみません、よくわかりません。
もう少しヒントをお願いできないでしょうか?
0714デフォルトの名無しさん
2006/05/01(月) 20:38:53errno = ENTER;
perror("");
とすると、エラーENTERの説明がstderrに出力されるはず。
0715デフォルトの名無しさん
2006/05/01(月) 20:41:50man errno
しかし、ENTERなんてあったか?
写し間違えてない?
0716711
2006/05/01(月) 20:47:48ごめんなさい。EINTRの間違いでした。
おさがわせしました。
0717デフォルトの名無しさん
2006/05/01(月) 23:07:01printf(""");
とかやったらエラーになるのですが。って当たり前か
0718デフォルトの名無しさん
2006/05/01(月) 23:07:49マニュアルを読むとか検索するとか汁
0719デフォルトの名無しさん
2006/05/01(月) 23:41:150720デフォルトの名無しさん
2006/05/01(月) 23:49:11ポインタを理解している人間と理解する気がない人間だ。
理解できないようなのは人間とは認め難い。
つーかネタもいいかげんにしてくれ。
基本的な文字列操作もできないCプログラマがどこにいる。
0721デフォルトの名無しさん
2006/05/02(火) 00:19:540722デフォルトの名無しさん
2006/05/02(火) 00:21:200723デフォルトの名無しさん
2006/05/02(火) 00:26:520724デフォルトの名無しさん
2006/05/02(火) 01:57:270725デフォルトの名無しさん
2006/05/02(火) 01:59:280726デフォルトの名無しさん
2006/05/02(火) 02:27:420727デフォルトの名無しさん
2006/05/02(火) 02:38:37c_str()で
0728デフォルトの名無しさん
2006/05/02(火) 10:47:560729デフォルトの名無しさん
2006/05/02(火) 10:49:020730デフォルトの名無しさん
2006/05/02(火) 10:49:42VisualStudioの話なら、該当スレへさようなら。
そうでないなら何を知りたいのか具体的にどうぞ。
0731デフォルトの名無しさん
2006/05/02(火) 21:59:59void sinfunc(double* x)
{
double y;
y=sin(*x);
*x = y*300;
}
という関数を使い、
WM_TIMERとWM_PAINTあたりを弄って、
初期値x=300;などで
この関数に通した後で
hBrush=CreateSolidBrush(RGB
((abs(abs(x-765) - 255) + (-1 * abs(-x + 765)) +255)/2,
(abs(abs(x -255) - 255) + (-1 * abs(-x + 255)) +255)/2,
(abs(abs(x -510) - 255)+ (-1 * abs(-x + 510)) +255)/2));
という関数を用い、正方形が様々な色に変わるプログラムを作ろうと
無謀にも思いついて作っておりますが、早速困っております
0732731
2006/05/02(火) 22:04:00{
HDC hdc; PAINTSTRUCT ps; HPEN hPen,hOldPen; HBRUSH hBrush,hOldBrush;
double x=900;//←これ追加しました
switch(msg)
{
case WM_CREATE:
{
SetTimer(hWnd,IDT_TIMER1,500,NULL);//←これ追加しました
break;
}
case WM_TIMER:
{
switch(wp)
{
case IDT_TIMER1:
{
sinfunc(&x);//←これ追加しましたが、これ1つで良いんですか?
InvalidateRect(hWnd,NULL,true);
break;
}
}
}
0733731
2006/05/02(火) 22:08:45{
hdc=BeginPaint(hWnd,&ps);
hPen=CreatePen(PS_SOLID,0,RGB(255,0,0));
hOldPen=(HPEN)SelectObject(hdc,hPen);
hBrush=CreateSolidBrush(RGB((abs(abs(x-765) - 255) + (-1 * abs(-x + 765)) +255)/2,
(abs(abs(x -255) - 255) + (-1 * abs(-x + 255)) +255)/2,
(abs(abs(x -510) - 255)+ (-1 * abs(-x + 510)) +255)/2));
hOldBrush=(HBRUSH)SelectObject(hdc,hBrush);
Rectangle(hdc,10,10,100,100);
DeleteObject(hBrush);
SelectObject(hdc,hOldPen);
SelectObject(hdc,hOldBrush);
EndPaint(hWnd,&ps);
break;
}
こんな感じで追加したのですが、1回sinfunc(&x);を呼び出しただけで止まってしまうのか
色が赤から緑に1回変わっただけで終わってしまいます。
#define IDT_TIMER1 100も行頭に追加しているのですが。
このように、他の関数で値を計算してからWM_TIMERに取り出して、その後
WM_PAINTに描画させる時に、>>732のように1回書くだけで良いのでしょうか?
ご指導お願いします
0734デフォルトの名無しさん
2006/05/02(火) 22:25:360735デフォルトの名無しさん
2006/05/02(火) 22:26:440736さげ
2006/05/02(火) 23:43:42コールバック来たら、
>double x=900;//
>sinfunc(&x);//
だから、2回目以降はx=900という動作だから、変わらず同じでしょう。
それと、タイマーオブジェクトはいくつも作れるから(タイマーが複数動く状態)、
WM_TIMER:を受けるタイミングがごちゃごちゃになってくるから動かすタイマーはひとつで充分。
0737731
2006/05/03(水) 00:48:14double x;
は、最初に宣言するようにして、
LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM wp,LPARAM lp)
{
HDC hdc; PAINTSTRUCT ps; HPEN hPen,hOldPen; HBRUSH hBrush,hOldBrush;
x=900;
で、
case IDT_TIMER1:
{
double* px
sinfunc(&x);//←これ追加しましたが、これ1つで良いんですか?
InvalidateRect(hWnd,NULL,true);
px =&x
x= *ps
break;
}
と書き直したら、それっぽく動くようにはなりましたが、
これで良いのでしょうか?
0738731
2006/05/03(水) 00:49:41>>1に>エスケープシーケンスやWin32APIなどの環境依存な物でもOK。
とありますが、私の質問はこのスレとはやはりずれるのでしょうか?
0739デフォルトの名無しさん
2006/05/03(水) 00:52:290740731
2006/05/03(水) 01:14:13x=900;は
case WM_CREATE:
{
・・・・・
x=900;
break;
}
と入れました。>>737の所ではありません。
これで自分が予測していた感じで動くようになりました。
皆さん、有難うございました。
0741デフォルトの名無しさん
2006/05/03(水) 01:16:32もしかして、ペイント構造体の値が色変わると動くから流用したのかな?
int blinkflag=0;
〜
case WM_PAINT:
if(flickflag==0){
x=900;
}
else{
x=300;blickflag=1;
}
以下ペイント
と自分ならすると思う。
0742デフォルトの名無しさん
2006/05/03(水) 01:20:12int (*p)[3] = a;
とできることをはじめて知った。
テキストには1次元の説明しかないからわからなかったよ。
0743訂正
2006/05/03(水) 01:20:30x=900;blickfrag++;
}
else{
x=300;blickflag--;
}
0744デフォルトの名無しさん
2006/05/03(水) 03:31:55void hoge(int(*)[3])云々と
どう見ても肛門です
0745デフォルトの名無しさん
2006/05/03(水) 07:49:29typedef int ArrayInt[3];とおけばその宣言はこう書き換えられる。
ArrayInt a[2];
ArrayInt *p = a;
0746731
2006/05/03(水) 17:22:20自分が長年作りたかったものが出来ました
皆様ありがとうございました。WinAPIの質問スレで無いところに
質問に押しかけてしまった事をお詫びします
0747デフォルトの名無しさん
2006/05/03(水) 23:11:210748デフォルトの名無しさん
2006/05/03(水) 23:31:340749デフォルトの名無しさん
2006/05/03(水) 23:39:340750デフォルトの名無しさん
2006/05/04(木) 08:33:59UNIX系の環境の場合はLANGに指定されているコードと考えていいでしょうか?
Windows環境の場合はShift-JISでしょうか?
0751デフォルトの名無しさん
2006/05/04(木) 08:46:240752デフォルトの名無しさん
2006/05/04(木) 09:42:50詳しく
0753デフォルトの名無しさん
2006/05/04(木) 09:59:380754デフォルトの名無しさん
2006/05/04(木) 10:01:48dump?
dmp?
0755デフォルトの名無しさん
2006/05/04(木) 10:04:020756デフォルトの名無しさん
2006/05/04(木) 10:44:37char buf[LENGTH_AS_YOU_WISH];
fgets(buf, sizeof(buf), fp);
fclose(fp);
for (int ch; * ch; ++ch) {
printf("%#02x ", * ch);
}
0757デフォルトの名無しさん
2006/05/04(木) 10:52:080758デフォルトの名無しさん
2006/05/04(木) 10:59:180759デフォルトの名無しさん
2006/05/04(木) 11:03:32まあそういわずにコンパイルしてみろ。
ちゃんと動くから。
何で動くかは自分で考えろ。
0760デフォルトの名無しさん
2006/05/04(木) 11:37:090761デフォルトの名無しさん
2006/05/04(木) 12:32:09○コンパイルエラーが発生するから。
×何で動くかは自分で考えろ。
○何でエラーが発生するかは自分で考えろ。
0762デフォルトの名無しさん
2006/05/04(木) 12:57:28動かねーぞ
てことで、Cで動く場合で手直しさせてもらったよ
#include<stdio.h>
#defineyourFile"ドライブ:/PATH"
#defineLENGTH_AS_YOU_WISH100//適宜な数字
voidmain(void){
intcch=0;
int*ch=&cch;
FILE*fp=fopen(yourFile,"r");
charbuf[LENGTH_AS_YOU_WISH];
fgets(buf,sizeof(buf),fp);
fclose(fp);
for(*ch=1;*ch;++ch){
printf("%#02x ", *ch);
}
}
0763デフォルトの名無しさん
2006/05/04(木) 13:28:59動かないし、何がやりたいか意味不明
0764デフォルトの名無しさん
2006/05/04(木) 13:39:14#include<stdio.h>
#defineyourFile"ドライブ:/PATH"
#defineLENGTH_AS_YOU_WISH100
voidmain(void){
intcch=1;
int*ch=&cch;
FILE*fp=fopen(yourFile,"r");
charbuf[LENGTH_AS_YOU_WISH];
fgets(buf,sizeof(buf),fp);
fclose(fp);
for(ch=&cch;*ch;++ch){
printf("%#02x ", *ch);
}
}
0765デフォルトの名無しさん
2006/05/04(木) 13:42:04ファイルが無きゃ動かない、これ当然
0766デフォルトの名無しさん
2006/05/04(木) 13:50:280767デフォルトの名無しさん
2006/05/04(木) 14:18:48本筋とは離れるが、トークン区切りにタブを使うのはどうかと思わないでもない。
>766
単純な推測すら出来ない馬鹿はいるみたいだけどね。
0768デフォルトの名無しさん
2006/05/04(木) 14:23:050769デフォルトの名無しさん
2006/05/04(木) 14:38:53誰か解説してくれ。
0770デフォルトの名無しさん
2006/05/04(木) 14:48:47++chを--chに直してやってみてよ(修正)。
一見、forループはbuffとは関係ないようだけど、
bufが&chのアドレスに対してどの位置に配置されるのかが分かれば、分かるよ。
あと、Cにはやっぱデバッガが必須かな。
0771デフォルトの名無しさん
2006/05/04(木) 14:52:01char cchとchar buf[]の位置関係を変なやり方で調べるプログラムだったのか
0772デフォルトの名無しさん
2006/05/04(木) 14:53:51--ならまだ理解できるが、上の奴らは自信満々なのはなんでだ?
あとbufの中身をダンプしたいだけなら、そんな書き方する奴は馬鹿としか思えないんだが。
0773デフォルトの名無しさん
2006/05/04(木) 14:58:480774デフォルトの名無しさん
2006/05/04(木) 14:59:40もっと具体的に範囲を絞ってほしいが、STLが例に挙がるんならBoostとか
0775デフォルトの名無しさん
2006/05/04(木) 15:03:33金
0776デフォルトの名無しさん
2006/05/04(木) 15:58:21>756を最低限訂正するとこんな感じ。
- for (int ch; * ch; ++ch) {
- printf("%#02x ", * ch);
+ for (int ch = 0; buf[ch]; ++ch) {
+ printf("%#02x ", buf[ch]);
>>759
決め付けはいかんぞ。
>>760
その意見も見当違いだ。
>>762>>764>>770
変に凝ろうとしてど壷にはまっている。
0777デフォルトの名無しさん
2006/05/04(木) 16:03:390778762=764=770
2006/05/04(木) 16:07:05ありがとうございました
0779デフォルトの名無しさん
2006/05/04(木) 17:20:35以下のプログラムがコンパイル出来ません。
どうすればよいでしょうか、教えてください。
-------------------------------------
#include <memory>
int main(void)
{
std::auto_ptr<int> p(new int);
*p = 10;
return 0;
}
-------------------------------------
0780デフォルトの名無しさん
2006/05/04(木) 17:28:330781デフォルトの名無しさん
2006/05/04(木) 17:29:490782デフォルトの名無しさん
2006/05/04(木) 17:52:21すいません、エラーメッセージを貼ります。
p.cppという名前で保存し、
Linux(open suse 10.0)でコンパイルしたときのメッセージです。
--------------------------------------------------
$ gcc p.cpp
/tmp/ccEClR2N.o: In function `main':
p.cpp:(.text+0x23): undefined reference to `operator new(unsigned int)'
/tmp/ccEClR2N.o: In function `std::auto_ptr<int>::~auto_ptr()':
p.cpp:(.gnu.linkonce.t._ZNSt8auto_ptrIiED1Ev[std::auto_ptr<int>::~auto_ptr()]+0x10): undefined reference to `operator delete(void*)'
/tmp/ccEClR2N.o:(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status
--------------------------------------------------
0783デフォルトの名無しさん
2006/05/04(木) 17:57:05c++用のライブラリがリンクされてないんじゃね?
0784デフォルトの名無しさん
2006/05/04(木) 17:58:500785デフォルトの名無しさん
2006/05/04(木) 18:14:09784>
g++にしたら解決しました。
皆様ありがとうございました。
0786VC坊
2006/05/04(木) 18:57:390787デフォルトの名無しさん
2006/05/04(木) 19:11:20│≡ 〜( ( ( ( 〜)
↓ ≡ ノノノノ ノ
0788デフォルトの名無しさん
2006/05/04(木) 21:39:27g++コマンドのマニュアルによると、
名称:
g++ - GNU プロジェクト C++ コンパイラ (v2.4)
解説:
Cコンパイラおよび C++ コンパイラは統合されました。
g++ は gcc に C++を解釈するようにするオプションを
つけてコールするスクリプトです。詳細は英語版のオン
ラインマニュアルおよび gcc(1) を参照して下さい。
と書いてありました。具体的にどういうオプションかは
g++の中身をざっとみてみましたが、わかりませんでした。
0789デフォルトの名無しさん
2006/05/04(木) 23:43:160790デフォルトの名無しさん
2006/05/04(木) 23:55:09main(i,c){for(;~(c=getchar());++i>16?puts(""),i=1:0)printf(" %02X",c);puts("");}
0791デフォルトの名無しさん
2006/05/05(金) 00:58:520792デフォルトの名無しさん
2006/05/05(金) 09:56:02newでの失敗の返り値って NULL でおk?
vc2005です。
0793デフォルトの名無しさん
2006/05/05(金) 10:19:290794デフォルトの名無しさん
2006/05/05(金) 10:37:30new なら bad_alloc 例外が投げられる。
0795デフォルトの名無しさん
2006/05/05(金) 11:52:50A11012
A12013
と続くファイルがあって、
FILE *p;
char a[1],b[2];
int c;
char e[1];
fscanf(p,"%1s%2s%3d",a,b,&c);
strcpy(e,a);
printf("%s\n",e);
fscanf(p,"%1s%2s%3d",a,b,&c);
printf("%s\n",e);
とやると、最初はAと表示されるけど、
二度目のprintfで出力されるのがAAになってしまうんだけど、どういう理由なんでしょうか。
0796デフォルトの名無しさん
2006/05/05(金) 11:58:49配列の範囲外アクセスで妙な事になっている。
終端の'\0'を保持できるように、
char a[2], b[3];
char e[2];
とすべし。
0797デフォルトの名無しさん
2006/05/05(金) 12:15:19void main (void)
{
struct hoge{
long a;
char* p;
};
struct hoge* abc;
long work[2];
abc = (hoge*)work;
abc->a = 10;
abc->p = "a";
cout << work[0] << '\n';
cout << (char*)work[1] << '\n';
}
このプログラムに、文法的に危険、又は致命的な部分はありますでしょうか?
work[1]にアドレス数値入れたりして危険な香りがぷんぷんするのですが、一応動いているので
問題なければ使用していこうと思っているのですが・・・
0798デフォルトの名無しさん
2006/05/05(金) 12:23:44何がしたいのかよー分からん。
環境によってはそれで動くだろうが、
どんな環境を想定してるか、
またはなぜ hoge が直接使えないのか、
そのあたりの説明が無いと何とも言えん。
それ以前にもいろいろ言いたい事もあるし・・・。
0799デフォルトの名無しさん
2006/05/05(金) 12:34:31ああそっか。またやっちゃったよこのミス……。
ありがとう。
0800デフォルトの名無しさん
2006/05/05(金) 12:39:57ええと、環境はwindowsxpを想定しています。
具体的に申しますと、グローバルな構造体のワークエリア(上記プログラムでlong work[2]にあたります)に
構造体(上記でabcにあたります)で数値又はポインタを出し入れしたいというのが目的です。
同型のグローバルな構造体がたくさんありまして、個別にワークエリアをlongから構造体に変えたりとかは
難しい状況なので、こう苦しい書き方をしているのですが・・・^^;
0801デフォルトの名無しさん
2006/05/05(金) 12:45:11意味がよく分からんが、
とりあえず cout のところで
abc を使ってアクセスしない理由が知りたい。
0802デフォルトの名無しさん
2006/05/05(金) 12:58:54上記プログラムは実際に使用するプログラムを簡略した書き方にしています。
ですので、上記プログラムですとabcを使ってアクセスしても構わないと思うのですが、
実際のプログラムですとworkの方でアクセスしたい、、という感じです。お手数かけます
0803デフォルトの名無しさん
2006/05/05(金) 13:25:51或いは捨てることが判っているコードだとか。
まぁ、今後もメンテナンスしていく必要があるならやめた方がいいとは思うけどね。
0804デフォルトの名無しさん
2006/05/05(金) 14:05:53「64bit環境対象外」&「CとC++のコーディングが混ざっててキモイ」等々
嫌な感じがしないではないが、今動けば良いと割り切ってしまえるのであればOK
0805デフォルトの名無しさん
2006/05/05(金) 14:14:53現在DXライブラリでゲーム作ってるんだけど、ちゃんと表示されないで困ってる・・・
もしかして256色しか対応してないのかな・・・
スレ違い?(´・ω・`)
0806デフォルトの名無しさん
2006/05/05(金) 14:16:450807デフォルトの名無しさん
2006/05/05(金) 14:19:29ぐぐれ。
>>805
聞きたいポイントがわからん。DXライブラリとやらがDirectXのことなら専用スレがある。
0808デフォルトの名無しさん
2006/05/05(金) 15:36:092002〜2004のC言語の参考書って今でも通用するのでしょうか?
やっぱり最新の2006年度版を買って勉強するべきでしょうか?
0809デフォルトの名無しさん
2006/05/05(金) 15:42:21言語について書かれてある本ならば問題ない
開発環境について書かれてあるならば
その内容は古くなってるかもわからんね
0810デフォルトの名無しさん
2006/05/05(金) 15:55:19「Visual C++入門」だとか、「C++ Builder入門」だとか、
ある特定の開発環境に限定した書籍で、良書を見たことがないのだが。
言語の解説はいまいち、開発環境の使い方の解説もいまいちといった、
中途半端な本ばかりだという印象がある。
0811デフォルトの名無しさん
2006/05/05(金) 15:58:34ありがとうございます。
まずは図書館で、言語についての本を借りてこようと思います。
0812デフォルトの名無しさん
2006/05/05(金) 16:03:320813デフォルトの名無しさん
2006/05/05(金) 16:26:37cout の方でも abc に相当するポインタを作って
使うわけにはいかないの?
0814デフォルトの名無しさん
2006/05/05(金) 18:04:23>>http://pc8.2ch.net/test/read.cgi/tech/1146323457/187
0815デフォルトの名無しさん
2006/05/05(金) 19:22:310816デフォルトの名無しさん
2006/05/05(金) 19:24:020817デフォルトの名無しさん
2006/05/05(金) 19:26:100818デフォルトの名無しさん
2006/05/05(金) 19:45:34環境依存しない完璧な手段はない。
例えばsize_tが4バイトの環境で2GB以下のファイルで、ファイルシステムがサイズに関して小細工しない場合に限り、>816でできるかもしれない。
0819デフォルトの名無しさん
2006/05/05(金) 20:40:27どうもご親切に。
0820デフォルトの名無しさん
2006/05/05(金) 20:41:230821デフォルトの名無しさん
2006/05/05(金) 20:54:200822デフォルトの名無しさん
2006/05/05(金) 21:11:000823デフォルトの名無しさん
2006/05/05(金) 21:45:37これってどうやってexe作るの?
[ビルド]→[newPgの発行]でひたすらOK押していったら、setup.exeってのが出来たんだけど
インストールしたりレジストリ弄ったりしちゃうんだけど…
ふっつーのVectorで配布してるようなの作る方法教えてー
0824823
2006/05/05(金) 21:46:440825デフォルトの名無しさん
2006/05/05(金) 21:50:14文字列から数字へがatoi以外知らないから、自分の場合ファイルに保管するけど、
例えば
char* a="あいうえお";
FILE *p;
p=fopen("ドライブ:/path","a");
fprintf(p,"%02X",a);
fclose(p);
わざわざファイルに保管しなくとも、文字列をヘキサなど数字で保管できる関数ややり方があれば便利だなと思うんだけど。
0826デフォルトの名無しさん
2006/05/05(金) 22:15:52memcpyなんぞいらん。fstreamからrdbuf()->sgetn()使え。
0827デフォルトの名無しさん
2006/05/05(金) 22:25:03ビデオの再生ボタンみたいなのを押すと幸せになれるよ
0828デフォルトの名無しさん
2006/05/05(金) 22:34:40ちょっとだけ幸せは得ましたが、自分だけの幸せで終わりそうです。
みんなが幸せになるにはどうすれば…?
0829825
2006/05/05(金) 23:37:38char* a="あいうえお";
unsigned int i=0;
FILE *p;
printf("%d",strlen(a)-1);
p=fopen("ドライブ:/パス","a");
for(i=0;i<strlen(a);i++){
fprintf(p,"%04x",a);a++;}
fclose(p);
です、ヘキサ保存。
0830デフォルトの名無しさん
2006/05/05(金) 23:43:010831825
2006/05/06(土) 00:00:35a++;ではなく、a=a+2;
0832デフォルトの名無しさん
2006/05/06(土) 00:17:34・上記DLLをロードするプログラム
って、両方ともコンパイラは同種にしないとだめですか?
それとも両者(DLL、プログラム)がANSI-C準拠のコードであれば問題なし?
0833デフォルトの名無しさん
2006/05/06(土) 00:38:56ありがとうございます。
0834デフォルトの名無しさん
2006/05/06(土) 00:43:49そもそもDLL自体、ANSI Cの規格ではない。
あとはわかるな?
0835832
2006/05/06(土) 01:42:15「あとはわかるな?」と言われても、どうとでも解釈できるような。
都合の良いように解釈すると、「コードの内容に関係なく、
MS固有仕様をサポートしているコンパイラであれば、組み合わせは何でもあり」ってことですか?
0836デフォルトの名無しさん
2006/05/06(土) 02:10:21うんにゃ、俺は別に>>834ではないが、そもそもdllやexeを
作るのはコンパイラじゃないってことはわかってるのか?
0837832/835
2006/05/06(土) 02:49:52すみません、よくわかってないです。
コンパイラで機械語に落とし込んでリンカで実行ファイルにする、ということを指していますか?
ちなみにやろうとしていることは、
リンカ機能を持つコンパイラAでDLL(hoge.dll)を作成後、
リンカ機能を持つコンパイラBでhoge.dllをロードするhoge.exeを作成しようということです。
これでhoge.exeを実行したら正常動作するのか、機械語レベルで誤動作するのか気になっています。
(でもDLLを提供しているサイトでは環境ごとにDLLファイルを分けてなかったような気がしてきました)
0838デフォルトの名無しさん
2006/05/06(土) 03:07:10>これでhoge.exeを実行したら正常動作するのか、機械語レベルで誤動作するのか気になっています。
だから、そこが根本的に間違っているんだ。
いいかね?
hoge.dllやhoge.exeが正常に(コンパイルエラーもリンクエラーもなく)作成できたなら
どんな動作結果が出ようとも、それは機械語レベルで「正常」に動作しているのだ。
そこでお前の思ったように動作しないとしたら、それはお前の作り方が間違って
いたからだ。
0839デフォルトの名無しさん
2006/05/06(土) 03:52:45DLLが公開する関数の、
・返値の型
・引数の数と型
・呼び出し規約
を正しく一致させて呼べば、違う言語からでも呼び出せる。
0840デフォルトの名無しさん
2006/05/06(土) 04:04:09それがわかるようなら>>832や>>835や>>837のようなレスが
付くはずがないんだがなあ。
0841デフォルトの名無しさん
2006/05/06(土) 04:16:05たとえばFILE*を渡してたりするとNG。
0842デフォルトの名無しさん
2006/05/06(土) 05:12:40そりゃいくらなんでも具体的過ぎでしょ?
おいらは日常的にMSVCRT.DLLとFILE*を
やりとりしとるよ?
0843デフォルトの名無しさん
2006/05/06(土) 05:54:51のファイルダンプのCのソース出して良い?
http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=27657
0844832/835/837
2006/05/06(土) 06:22:54無粋な質問をしてしまったようで、すみません。
そもそもDLL(実行ファイル)の概念をよく理解していなかったようで、
「CでつくったDLLはCで(かつ同じ環境で)つくったEXEからしか使えない」という認識を
持っていたのが間違いの原因でした。
>>841
>正しく設計してあることも前提だけどね。
>たとえばFILE*を渡してたりするとNG。
これがNGなのはなぜでしょうか。
「FILE*を渡すこと」が正しい設計でない、というのがよくわからないのですが、
引数や返却値はint,charなどの基本型でないとだめというわけではないですよね。
もしくは上記は「違う言語から呼び出す場合(呼び出し側がCでDLLがC以外の言語)」について
言及していますか?
0845デフォルトの名無しさん
2006/05/06(土) 06:58:450846デフォルトの名無しさん
2006/05/06(土) 08:18:060847デフォルトの名無しさん
2006/05/06(土) 09:29:180848デフォルトの名無しさん
2006/05/06(土) 09:54:02たとえ関数の引数の型があっていてもヘッダによってメモリレイアウトや実装が違うと
そこでNGになる
C言語はバイナリのレイアウトを規定していない
FILE構造体も当然そう
バイナリレベルでの互換性がないわけ
そのためにIDL等が存在するわけだ
0849デフォルトの名無しさん
2006/05/06(土) 13:57:10#include<string.h>
#include<stdlib.h>
void main(void){
char* a="abcde";
unsigned int i=0;
FILE *p;
p=fopen("ドライブ:/パス","a");
for(i=0;i<strlen(a);i++){
fprintf(p,"%04x",*a);a++;}
fclose(p);
}
だとうまくファイルにabcdeのHexコードが入るんだけど、
2Byte文字の"あいうえお"とか使うと例えば'あ'は82a0hなんだけど、
ffffff82ffffffa0とかおのおの4Byteに変更されてしまう。
何か82a0になるようなうまい方法ないかな。
0850デフォルトの名無しさん
2006/05/06(土) 13:58:120851デフォルトの名無しさん
2006/05/06(土) 14:06:15それだけだと 0082 00a0 になってダメなんじゃない?
0852デフォルトの名無しさん
2006/05/06(土) 14:19:43ありがとう、その通りでうまくいきました。
他部分も手直しして、これで1Byteでも2Byteでもうまくいきました。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void main(void){
unsigned char* a="abcde";//"あいうえお"でもOK
int i=0;
int b=strlen(a);
FILE *p;
p=fopen("c:/windows/デスクトップ/h.bin","a");
for(i=0;i<b;i++){
fprintf(p,"%02x",*a);a++;}
fclose(p);
}
ありがとう、聞いて良かったです。
0853デフォルトの名無しさん
2006/05/06(土) 14:55:54"abcde" は char の配列だし、 strlen() の引数も char* だから
a の型は char* のまま、 *a を (unsigned char)*a にするのが正解。
char const* にするとなお良し(C++なら必須)。
あとは、
main の戻り値は int にしとけ。
インデントする気が無いならソース貼るのに全角スペース混ぜるな。
0854デフォルトの名無しさん
2006/05/06(土) 15:38:530855デフォルトの名無しさん
2006/05/06(土) 15:39:57#include<stdio.h>
#include<string.h>
int main(void){
const char* a="abcde";//"あいうえお"でもOK
int i=0;
int b=strlen(a);
FILE *p;
p=fopen("c:/windows/デスクトップ/h.bin","a");
for(i=0;i<b;i++){
fprintf(p,"%02x",(unsignedchar)*a);a++;}
fclose(p);
return 0;
}
あと、ファイル読み込みのほうですが、参考になるが分かりませんが一応セットで・・
#include<stdio.h>
int main(void){
char b;
int i=0;
FILE *p;
p=fopen("c:/windows/デスクトップ/h.bin","r");
while(fscanf(p,"%02X",&b)!=-1){
printf("%c",b);}
fclose(p);
return 0;
}
FILE処理失敗した場合の場合分けが双方ないのですが、
何かのネタにでもしてもらえれば幸いです。
0856デフォルトの名無しさん
2006/05/06(土) 18:50:19そういうふうに1バイトずつデータを読み書きしたいのならgetc/putcがお勧め。
0857デフォルトの名無しさん
2006/05/06(土) 19:17:330858デフォルトの名無しさん
2006/05/06(土) 19:25:030859デフォルトの名無しさん
2006/05/06(土) 22:29:220860855
2006/05/07(日) 00:05:51#include<stdio.h>
int main(void){
char b=0;
FILE *p;
FILE *pcopy;
p=fopen("c:/windows/デスクトップ/internet.lnk","r");
pcopy=fopen("c:/windows/デスクトップ/internet2.lnk","w");
while((b=getc(p))!=-1){
printf("%c",b);
fprintf(pcopy,"%c",b);
}
fclose(p);
return0;
}
使い方は簡単です。適宜なディレクトリにInternetショートカットを作り、名前を
この例の場合Internetとしています。
そして、fopenのある行2つを適宜なディレクトリにして、実行すれば、ソース経由でコピペされたバイナリで新たにInternetショートカットができてるはずです。
もっと使えるものに改良してもらえればありがたいです。
0861デフォルトの名無しさん
2006/05/07(日) 00:20:470862デフォルトの名無しさん
2006/05/07(日) 00:30:31インターネットショートカットは拡張子urlだけど。
ちなみに拡張子lnkのショートカットはバイナリファイルだからバイナリモード使え。
0863デフォルトの名無しさん
2006/05/07(日) 00:31:52Cの基本としてbはintで定義しようね。
あと-1ではなくEOFとの比較に。
0864デフォルトの名無しさん
2006/05/07(日) 00:44:48return 0;の手前にfclose(pcopy);です。
0865デフォルトの名無しさん
2006/05/07(日) 00:45:260866デフォルトの名無しさん
2006/05/07(日) 01:25:01普通にPNGのソースじゃ駄目なの?
0867デフォルトの名無しさん
2006/05/07(日) 01:27:22バイナリモードにした方が…
0868デフォルトの名無しさん
2006/05/07(日) 02:15:550869デフォルトの名無しさん
2006/05/07(日) 17:12:19Dllに関する質問:
Dllの作成はdefファイルを使ってエクスポートしています。
defの抜粋fnSetColor@5
void HogeHoge::fnSetColor(void){
CColorDialog *col1Dlg= new CColorDialog;
col1Dlg->DoModaltheHogeHoge.();
theHogeHoge.m_Color= col1Dlg->GetColor();
if(col1Dlg != NULL)
delete col1Dlg;
}
呼び出し側:
typedefvoid(*fnSetColor)(void);
fnSetColor pfnSetColor= NULL;
pfnSetColor= (fnSetColor)GetProcAddress(hMod, "fnSetColor");
pfnSetColor();//ここでエラー:Run-Time Check Failure #0 〜
環境:WinXPHomeSP2+ VisualStudio2005です。よろしくお願いします。
0870デフォルトの名無しさん
2006/05/07(日) 17:25:410871デフォルトの名無しさん
2006/05/07(日) 17:35:340872デフォルトの名無しさん
2006/05/07(日) 18:29:44GetProcAddressがエラーで0を返し、それを呼び出そうとしたので、
ぬるぽと化しRun-Time Checkでガッされたという状態。
C++の関数名・変数名はコンパイラによって変形される。GetProcAddressが使うのもその変形された名前。
DEFファイルでどうにかすれば名前はどうにでもなるけど、
HogeHoge::fnSetColorが非メンバなら__thiscallだからアウト。
おとなしく、グローバル関数でラッピングしろ。
extern "C" void HogeHoge_fnSetColor(HogeHoge* p)
{
p->fnSetColor();
}
0873869
2006/05/07(日) 18:51:15GetProcAddressからは関数へのポインタが返ってきています。
#0は The value of ESP was not properly saved across a function call.
This is usually a result of calling a function declared
with one calling convention with a function pointer declared
with a different calling convention.
となっておりますので、
呼ばれる関数名と呼ぶときの関数名が違うのではないかと思うんですが?
0874デフォルトの名無しさん
2006/05/07(日) 18:56:52つーかメンバ関数の意味わかってなさそう。
0875デフォルトの名無しさん
2006/05/07(日) 19:43:440876デフォルトの名無しさん
2006/05/07(日) 19:47:27符号が変わる場合があるわけだが、その場合はどうするつもりかね?
0877デフォルトの名無しさん
2006/05/07(日) 19:56:42全て+なのでその点に関しては大丈夫です。
0878デフォルトの名無しさん
2006/05/07(日) 20:01:19じゃぁ assert(x >= 0) を入れながらコピーすればいい。
スピードが問題になる場合で、2つの配列の実体が同じでもいいのなら
キャストを使ってコピーを省くことも可能。
0879デフォルトの名無しさん
2006/05/07(日) 20:07:16(unsigned char)としただけではエラーになるのですが。
0880デフォルトの名無しさん
2006/05/07(日) 20:11:15char a[10];
unsigned char b[10];
b=(unsigned char)a;
みたいなことはできないので中身を一つづつコピーしましょう
0881デフォルトの名無しさん
2006/05/07(日) 20:14:07でできるわけだが。
0882デフォルトの名無しさん
2006/05/07(日) 20:15:10unsigned char* b;
b=(unsigned char *)a;
0883デフォルトの名無しさん
2006/05/07(日) 20:15:52本当にキャストをしたいのか?コピーでいいならコピーしとけ。
基本的に、キャストは最後の手段と考えるようであってほしいな。
char a[10];
unsigned char* const b = (unsigned char*)a;
C++ なら
unsigned char* const b = reinterpret_cast<unsigned char*>(a);
0884デフォルトの名無しさん
2006/05/07(日) 20:17:56じゃないの?
0885デフォルトの名無しさん
2006/05/07(日) 20:20:48>>882のでできました。
0886デフォルトの名無しさん
2006/05/07(日) 20:21:07何故constで受ける? 変更したいかもしれないじゃないか。
0887デフォルトの名無しさん
2006/05/07(日) 20:22:08意味はきちんと理解してから使おうね。
お姉さんとの約束だぞ。
0888デフォルトの名無しさん
2006/05/07(日) 20:22:490889デフォルトの名無しさん
2006/05/07(日) 20:25:31正直、これだけの話じゃ、constにすべかどうかさえわからない
0890デフォルトの名無しさん
2006/05/07(日) 20:44:090891デフォルトの名無しさん
2006/05/07(日) 21:19:03ファイルポジションをファイルの先頭に持ってくるにはどうしたら。
0892デフォルトの名無しさん
2006/05/07(日) 21:22:180893デフォルトの名無しさん
2006/05/07(日) 21:24:170894デフォルトの名無しさん
2006/05/07(日) 21:38:48rewind
0895デフォルトの名無しさん
2006/05/07(日) 21:42:01exit
0896デフォルトの名無しさん
2006/05/08(月) 00:29:360897デフォルトの名無しさん
2006/05/08(月) 00:35:20int のサイズが何バイトかは選べないよ。
0898デフォルトの名無しさん
2006/05/08(月) 00:40:310899デフォルトの名無しさん
2006/05/08(月) 00:44:08これは、ひとつのメモリ領域(バイト単位)に名前をつけてビット単位に振り分けるものです
ビットフィールドの作成は、構造体の生成とほぼ同じです
ビットフィールドで使われる方は、通常intまたはunsignedです(signedの場合は上位ビットが符合に使われます)
型 名前: サイズ;
型は説明したとおりです
名前にはメンバ名同様に、このビット領域の名前を指定します
サイズにはビット領域を指定します。3と指定すれば、この名前の領域に3ビット割り当てられます
このような特徴から、ビットフィールドは特定のビット数で確実に表現できる情報に用いられたりします
たとえば、boolean型の変数の作成などにはビットフィールドが有効です
1ビットの変数を生成しておけば、確実に0か1しか入りません
0900デフォルトの名無しさん
2006/05/08(月) 00:50:070901デフォルトの名無しさん
2006/05/08(月) 00:52:56> あまり見かけられませんが、構造体にはビットフィールドと呼ばれる技術があります
普通に見かけます。貴方が低能なだけです。
> ビットフィールドで使われる方は、通常intまたはunsignedです(signedの場合は上位ビットが符合に使われます)
方→型。unsignedという型はありません。
加えて言えば、何ビットが1バイトか定義されていないプログラミング言語で
1バイトの変数を決めうちで作るのは規格にそった方法では不可能です。
0902デフォルトの名無しさん
2006/05/08(月) 00:54:34C/C++ で1バイトのビット数って CHAR_BIT じゃないの?
0903デフォルトの名無しさん
2006/05/08(月) 00:58:470904デフォルトの名無しさん
2006/05/08(月) 01:10:36構造体変数はunsigned(通常は4バイト)の領域であるということに注意してください
先ほどのプログラムのビットフィールドは、そのうちの1ビットなのです
意味ねぇーーーーーーーーーメモリ節約したかたのに
0905デフォルトの名無しさん
2006/05/08(月) 01:13:43char 使えばいいじゃん。
0906デフォルトの名無しさん
2006/05/08(月) 01:16:170907デフォルトの名無しさん
2006/05/08(月) 01:18:460908デフォルトの名無しさん
2006/05/08(月) 01:22:23もっと色々できるのかなって。この辺がC/C++の限界という事ですか。
0909デフォルトの名無しさん
2006/05/08(月) 01:25:56違う。お前の望みが不合理なだけ。
0910デフォルトの名無しさん
2006/05/08(月) 01:31:00で、おk
0911デフォルトの名無しさん
2006/05/08(月) 02:22:52typedef char smallint_t;
0912デフォルトの名無しさん
2006/05/08(月) 02:25:23調子に乗って構造体メンバのintを>>910にしたら
逆にメモリ消費が増えるという?な事になったんだけど何故?
0913デフォルトの名無しさん
2006/05/08(月) 02:28:350〜255の正数値を格納したいだけなら、unsigned charを使ってください
一般的な環境なら1byte、8bitです
あなたが意図したとおりに使えるでしょう
0914デフォルトの名無しさん
2006/05/08(月) 02:33:45アラインメントとかパディングとか
0915デフォルトの名無しさん
2006/05/08(月) 02:34:22メモリ消費は何で測ってる?
手っ取り早くソース晒せ。
0916デフォルトの名無しさん
2006/05/08(月) 02:34:49また、完全に準拠していないとしても、大分部の機能をサポートしているでしょうか?
0917デフォルトの名無しさん
2006/05/08(月) 02:41:49タスクマネージャ。
ソースはintとstringがごっちゃ混ぜになってる構造体。
0919デフォルトの名無しさん
2006/05/08(月) 02:46:52#pragma pack(push,1)
とかいうのを見つけた。ありがとう。
0920デフォルトの名無しさん
2006/05/08(月) 02:47:40非MFCの利点とかあるんですか?
0921デフォルトの名無しさん
2006/05/08(月) 02:55:44・・・いや、MFC の DLL が不要。
0922デフォルトの名無しさん
2006/05/08(月) 03:03:330923デフォルトの名無しさん
2006/05/08(月) 03:11:09なるほど、DLL不要だからってことか
0924デフォルトの名無しさん
2006/05/08(月) 03:38:59MFCスタティックリンクすればどのみちDLL不要だが。
ファイルサイズ? そんなの気にしない
0925デフォルトの名無しさん
2006/05/08(月) 07:03:47準拠していない。ただ極一部の機能だけは(独自拡張扱いで)対応している。
構造体の最後のメンバに要素数を指定しない配列を置くこと
enumの最後におくカンマ
負の整数の除算の結果
(u)intptr_t
//単一行コメント
restrictの代わりに__restrict
後は/TpコンパイラオプションでC++由来の機能を使える。
inlineやどこでも変数宣言ができることなど。
0926デフォルトの名無しさん
2006/05/08(月) 07:10:02だいぶんぶってどういう入力のしかたしたんだwww
0927デフォルトの名無しさん
2006/05/08(月) 18:38:35long longが抜けている。
0928デフォルトの名無しさん
2006/05/08(月) 18:38:51少なそう
0929デフォルトの名無しさん
2006/05/08(月) 19:18:39「だいぶぶ」で「ん」が抜けただけだと思われ。
0930デフォルトの名無しさん
2006/05/08(月) 19:55:330931デフォルトの名無しさん
2006/05/08(月) 20:54:23関数のプロトタイプ宣言とは、どういうことでしょうか?
引数と、返り値の意味の説明も出来ればお願いします。
0932デフォルトの名無しさん
2006/05/08(月) 20:55:500933デフォルトの名無しさん
2006/05/08(月) 21:20:57ということだけを予め知らせるためのもの。>プロトタイプ
0934デフォルトの名無しさん
2006/05/08(月) 21:24:390935デフォルトの名無しさん
2006/05/08(月) 21:41:550936デフォルトの名無しさん
2006/05/08(月) 21:46:300937デフォルトの名無しさん
2006/05/08(月) 22:01:48date() で取得した日付を8文字(yyyymmdd)の数値に変換する方法って何かないですかね。
ヘルプとにらめっこしてみたんだけどそれらしいのが見つからない・・・
どなたか宜しくお願いします。
0938937
2006/05/08(月) 22:05:47どなたか知恵を・・・
0939デフォルトの名無しさん
2006/05/08(月) 22:06:29String.Format("yyyymmdd",date());
0940デフォルトの名無しさん
2006/05/08(月) 22:08:001 yyyyの値を文字列にする
2 年の文字列の前に"0"を四つ付ける
3 文字列の最後の4文字を取り出す
でいいんじゃね?mmddも同様に
0941デフォルトの名無しさん
2006/05/08(月) 22:09:360943デフォルトの名無しさん
2006/05/08(月) 22:55:18エラーが出るのですが、これって何とかならないのでしょうか?
0944デフォルトの名無しさん
2006/05/08(月) 22:55:490945デフォルトの名無しさん
2006/05/08(月) 23:23:290946デフォルトの名無しさん
2006/05/08(月) 23:26:550947デフォルトの名無しさん
2006/05/08(月) 23:48:58gcc もまだ。 http://gcc.gnu.org/c99status.html
0948デフォルトの名無しさん
2006/05/09(火) 00:08:50日本語でおk
0949デフォルトの名無しさん
2006/05/09(火) 00:18:54int 積, 数値;
SCANF("%d", &数値);
積=数値 * 数値 * 数値;
0950デフォルトの名無しさん
2006/05/09(火) 00:28:430951デフォルトの名無しさん
2006/05/09(火) 00:41:42main(){ puts("数値*数値*数値=積"); }
0952デフォルトの名無しさん
2006/05/09(火) 00:47:37それだと、SCANF関数とやらを使っていない
0953945
2006/05/09(火) 00:50:20もう明日から会社来なくていいよ
0954デフォルトの名無しさん
2006/05/09(火) 00:52:120955デフォルトの名無しさん
2006/05/09(火) 00:54:580956デフォルトの名無しさん
2006/05/09(火) 01:01:430957デフォルトの名無しさん
2006/05/09(火) 01:03:35宿題はこっち↓
C/C++の宿題を片付けます 64代目
http://pc8.2ch.net/test/read.cgi/tech/1146323457/
まぁその質問内容じゃ無理だろうけど。
0958デフォルトの名無しさん
2006/05/09(火) 01:03:53エスパーの登場キボンヌ。
0959デフォルトの名無しさん
2006/05/09(火) 01:14:320960デフォルトの名無しさん
2006/05/09(火) 01:39:29だからスレ違いの質問に構うなって。のうたりんか君は。
0961デフォルトの名無しさん
2006/05/09(火) 03:16:17仮引数で返却するようにしたいのですが、下記プログラムだとstringにNULLが返却されます。
malloc()で確保した領域は上位引数に返る際に解放されてしまうのでしょうか。
#include<stdio.h>
#include<stdlib.h>
void hoge(char *string);
int main(void)
{
char *string = NULL;
hoge(string);
printf("%s\n",string); /* nullが表示される */
return 0;
}
void hoge(char *string)
{
string = (char*)malloc(4);
string[0] = 'a';
string[1] = 'b';
string[2] = 'c';
string[3] = '\0';
return;
}
0963デフォルトの名無しさん
2006/05/09(火) 03:18:51何も返却されていない。
0964デフォルトの名無しさん
2006/05/09(火) 03:21:130965デフォルトの名無しさん
2006/05/09(火) 10:33:370966デフォルトの名無しさん
2006/05/09(火) 11:56:11char *string = NULL;
hoge(string); /* ここで渡しているのは NULL */
hoge(char *string)
{
string = (char*)malloc(4); /* ここで書き換えているのは hoge ローカルの string */
string[0] = 'a';
main の string を書き換えるなら、そのポインタを渡すべき。
char *string = NULL;
hoge(&string); /* ここで渡しているのは string へのポインタ */
hoge(char **string)
{
*string = (char*)malloc(4); /* ここで書き換えているのは main の string */
(*string)[0] = 'a';
0967デフォルトの名無しさん
2006/05/09(火) 12:51:18extern char *alloc_hoge();
extern char free_hoge(char *string);
int main(void)
{
char *string = alloc_hoge(); /* 確保 */
/*いろいろ処理*/
free_hoge(string); /* 後始末 */
}
char *alloc_hoge()
{
char *string = (char*)malloc(4);
/*いろいろ代入*/
return string;
}
char free_hoge(char *string)
{
free(string);
}
0968デフォルトの名無しさん
2006/05/09(火) 17:37:35_wsplitpath_s を使っても取得できません。
//////////////////////////////////////////////////////
WCHAR szPath[_MAX_PATH];
GetModuleFileName( NULL, szPath, sizeof(szPath));
// フルパスを分解
WCHAR szDir[_MAX_DIR];
WCHAR szDrive[_MAX_DRIVE];
WCHAR szFName[_MAX_FNAME];
WCHAR szExt[_MAX_EXT];
_wsplitpath_s(szPath,szDrive,szDir,szFName,szExt);
// フォルダ、ファイル名取得
WCHAR szFilePath[_MAX_PATH];
WCHAR szFileName[_MAX_PATH];
wcscpy_s(szFilePath,szDrive);
wcscat_s(szFilePath,szDir);
wcscpy_s(szFileName,szFName);
wcscat_s(szFileName,szExt);
////////////////////////////////////////////////
これを出力してみると、
フォルダの先頭の方の英語の部分までの階層は表示されますが、日本語の部分からは表示されません。
どうしたらよいか具体的に教えてください。
お願いします。
0969デフォルトの名無しさん
2006/05/09(火) 17:41:450970968
2006/05/09(火) 17:42:56出力は普通に
wprintf_s(szFilePath);
wprintf_s(szFileName);
としてるだけです。
デバッガでみるとちゃんと中身は入ってるみたいなんですけど、
出力されないです。。。
0971968
2006/05/09(火) 17:46:30早速ありがとうございます。
試してみましたが結果は変わりませんでした。。
0972デフォルトの名無しさん
2006/05/09(火) 17:48:40wprintf_s("%s", szFileName);
でどう?
0973968
2006/05/09(火) 17:55:58ありがとうございます。
それだとコンパイルエラーが出たので
wprintf_s(L"%s", szFilePath);
wprintf_s(L"%s", szFileName);
としてみました。
結果は、とりあえず出力されたという点では進展しましたが、
なんだか日本語のところは???????になってしまいました。
0974デフォルトの名無しさん
2006/05/09(火) 17:58:20で、何で表示されないんだろう・・・。
デバッガでは szFileName 内はちゃんとしてるんだよね?
0975968
2006/05/09(火) 18:01:20はい。
最終的にwprintf_sのところでは期待した内容になっております。
文字コードとかって関係ないですよね?
0976デフォルトの名無しさん
2006/05/09(火) 18:04:25wprintf_s(L"%s", L"表示");
wprintf_s(L"表示");
は表示されるのかな?
0977デフォルトの名無しさん
2006/05/09(火) 18:18:340978デフォルトの名無しさん
2006/05/09(火) 18:29:45setlocale(LC_CTYPE , "");
か。
いずれにせよwchar_t系のコンソール出力はコード変換されてから出力されるんで
デフォルトのCロケールから適切なロケールに変更されてないと日本語は出力できないってだけ。
0979968
2006/05/09(火) 18:38:16表示できませんでした・・・
のですが、
>>977の方に教えていただいた
setlocale( LC_ALL,L"japanese");
を試したらいけました!
皆さんありがとうございました。
0980デフォルトの名無しさん
2006/05/09(火) 19:10:19ついでに、Visual Studio 2005のデフォとかlocaleとか入ってないので萎える。
#include <tchar.h>
#include <clocale>
#include <cstdio>
#include <windows.h>
void _tmain(void){
_tsetlocale(LC_ALL, _T("jpn")); // これ忘れると、NT系とか日本語ダメだよね。
_tprintf(_T("ごるぁぁもまえら\n"));
}
0981デフォルトの名無しさん
2006/05/09(火) 20:53:45がわかるといわれたんだが、
real
user
sys
と3つも出てる。
すまんが、各項目の意味を教えてください。
もしくは、説明しているサイトを教えてください。
よろしくお願い致します。
0982デフォルトの名無しさん
2006/05/09(火) 21:09:50このへんかな?
ttp://docs.sun.com/app/docs/doc/817-0659/6mgeo5sa0?l=ja&a=view
0983デフォルトの名無しさん
2006/05/09(火) 21:18:13たとえば、もう一回関数を呼び出して、値を読み出したらどうなるんでしょうか?
0984デフォルトの名無しさん
2006/05/09(火) 21:21:390985デフォルトの名無しさん
2006/05/09(火) 21:23:570986デフォルトの名無しさん
2006/05/09(火) 21:32:190987デフォルトの名無しさん
2006/05/09(火) 21:43:52「試してみたら?」は危険かもな。
0988デフォルトの名無しさん
2006/05/09(火) 22:46:27for(i=3;i <= n; i++)
{
strcpy(rr,ss[i]);
}
って書いたらstrcpyの()の中でひっかかったんですけど、
何が悪いのでしょうか?
よろしくお願いします。
0989デフォルトの名無しさん
2006/05/09(火) 22:47:21頭が悪いんじゃね?
「ひっかかった」ってなんだよ?
0990デフォルトの名無しさん
2006/05/09(火) 22:48:02「ひっかかった」とは?
それから、rrとssの定義がないと何も言えない。
0991デフォルトの名無しさん
2006/05/09(火) 22:48:490992デフォルトの名無しさん
2006/05/09(火) 22:50:40バッファオーバランか
文字列リテラルの領域に書き込み
だと告げています
0993デフォルトの名無しさん
2006/05/09(火) 22:53:140994988
2006/05/09(火) 22:55:53#include <stdio.h>
#include <string.h>
int main(void)
{
int i,n;
char ss[80] , rr[80];
strcpy(rr,"aa");
gets(ss);
n = strlen(ss);
for(i=3;i <= n; i++)
{
strcpy(rr,ss[i]);
}
printf("%s\n",rr);
return 0;
}
0995988
2006/05/09(火) 22:56:33説明不足でスミマセンでした・・・
0996デフォルトの名無しさん
2006/05/09(火) 23:06:470997デフォルトの名無しさん
2006/05/09(火) 23:09:40【初心者歓迎】C/C++室 Ver.27【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1147183708/l50
0998デフォルトの名無しさん
2006/05/09(火) 23:11:04あとstrcpyのプロトタイプ宣言をよく読め
0999デフォルトの名無しさん
2006/05/09(火) 23:14:481000デフォルトの名無しさん
2006/05/09(火) 23:16:1010011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。