[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 01/29 10:31 / Filesize : 249 KB / Number-of Response : 964
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

はきだめC/C++下級者の質問箱 2



1 名前:デフォルトの名無しさん [2006/08/22(火) 09:21:31 ]
はきだめのスレへようこそ

ここは、C/C++に挫折し、それにもかかわらず、C/C++やらなければならない者達がたむろするスレです。
なお、質問する人は回答はあまり期待しないでください。


前スレ:はきだめC/C++下級者の質問箱
pc8.2ch.net/test/read.cgi/tech/1124256027/

596 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 23:16:36 ]
Cカス
Cカス

うるさい人を黙らせる方法教えてください

なるべく合法的な方法がいいです

597 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 23:30:14 ]
RubyもPythonもphpもUnixも
全部Cで書かれてるんだぞ。
Cはすごいんだぞ。

598 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 23:35:23 ]
>>596
相手がしゃべった瞬間に大声を出すとか

599 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 07:11:07 ]
>>596
お前の耳を取ってしまえ

600 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 00:23:13 ]
C言語でC++の
テンプレート見たいに記述したいんだけど

どうしたらいいものじゃろうか?のぅ?

601 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 01:03:26 ]
プリプロセッサを駆使する。

602 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 20:52:15 ]
でどうやってかくの?

603 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 09:48:29 ]
## を駆使する

604 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 06:34:15 ]
C++にtemplateが実装されるまでの過程を知ってりゃ話は早いんだがな。
generic.h



605 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 22:49:30 ]
そうだ、cfrontを使おう(w

606 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 09:23:34 ]
template<typename T>T*hoge(T*t){return t;}
でNULLを受け取れるようにするにはどうすればいいんでしょう...

607 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 11:57:46 ]
(void*)NULLみたいに、型付きのNULLを渡す。
でないと、どの型のNULLがほしいか誰にも判らないじゃん。

608 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 13:28:57 ]
NULLに型など付けれません
ばかじゃねーのw

609 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 23:02:23 ]
>>606
hoge<int>(0)

610 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 00:18:25 ]
hashのkeyを

char key[32]で定義しmemcpyを
必要に応じて複数回コールする方法と


struct key_data{
_u32 data;
....
};

みたいな感じで構造体を定義して
_u8 *にキャストして使うのは
どっちが速い?それとも同じ?


611 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 03:44:57 ]
なんともいえない。
実測。

612 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 00:12:37 ]
>>608
いくらここが掃き溜めだと言っても限度が・・・

613 名前:デフォルトの名無しさん [2008/01/20(日) 21:00:38 ]
コンパイルしたときのエラーに

storage size of 's' isn't known

とでてきてしまいます。
これはどこを直せばいいんでしょうか?
storageって何ですか?

614 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 10:32:07 ]
>>613
辞書くらい引け。

恐らく、int s[]みたいな変数宣言でもしているんだろ。



615 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 12:37:58 ]

offsetof(s,m)マクロみたいなので
他クラスのprotectedメンバのオフセットを
取得したいんですがどうすればよいですか?



616 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 12:41:48 ]
>>615
それができたらprotectedの意味がないとは思わないかね?

617 名前:デフォルトの名無しさん [2008/01/22(火) 23:31:19 ]
コンパイルをした時に
converting to ‘int’ from ‘float’

って表示されたらどこが悪いんでしょうか?

618 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 23:39:07 ]
>>617
floatからintに暗黙の変換を行っている。
明示的にキャストを書けば警告は出ない。

619 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 23:44:05 ]
>>617
>って表示されたらどこが悪いんでしょうか?
頭……というのはさておき、floatからintではオーバフローが起きる恐れがあるので
気の利いたコンパイラは警告を出すってこと。
# 勿論、出さないようにもできる。

620 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 00:29:52 ]
>>618-619
お陰様で解決出来ました、ありがとうございます。


621 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 20:04:43 ]
C++のコンストラクタの中で例外発生させるのは駄目と聞いたのですが
ではnewもbad_alloc投げる可能性があるのでコンストラクタでnewしてはいけないのですか?

622 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 21:45:32 ]
コンストラクタで例外はまあない方がいいのは確かだが、
ダメというほどではない。
デストラクタは絶対あかんがね。

623 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 18:08:28 ]
クラスを作る側も使う側もきちんとリソースの管理ができていれば何の問題もない。

624 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 22:38:50 ]
コンストラクタでの例外については、人によって意見が違うが、
俺は積極的に例外が発生するようにしてる。

じゃないと、不正なオブジェクトが生成されてしまうから



625 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 23:02:43 ]
仮想コンストラクタとスマートポインタ使えば解決。

626 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 03:07:41 ]
Phidgetsというハードを制御したいのですが

~略
int servo_simple()
{

CPhidgetServoHandle servo = 0;

//create the accelerometer object

CPhidgetServo_create(&servo);

//open the LED for device connections

CPhidget_open((CPhidgetHandle)servo, 20489);

//Step 1: Position 10.00
printf("Move to position 10.00. Press any key to Continue\n");
getchar();

CPhidgetServo_setMotorPosition (servo, 1, 100.00);

return 0;
}

//int _tmain(int argc, _TCHAR* argv[])
int main(void)
{
servo_simple();
return 0;
}

627 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 03:08:03 ]
この文で、
getchar();
で入力を待たずにCPhidgetServo_setMotorPosition (servo, 1, 100.00);
を実行したいのですが、getchar();を消しただけでは駄目なのでしょうか?
ド素人な質問をしていると思うのですがどうかご教示下さいませ。

628 名前:626-627 mailto:sage [2008/02/12(火) 07:42:40 ]
自己解決しました。 getchar();で入力を待たずに実行すると、ハードを認識するのが追いつかずに実行されるようでした。

629 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 23:09:36 ]
クラスを普通に前宣言する時
class MyClass;

って書けばいいけど、例えば

class MyClass
{
public:
class Foge
{
};
};

みたいに MyClass の中にあるクラス Foge を
前宣言したい時はどうすればいいの?

630 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 01:39:33 ]
>>629
class MyClass
{
public:
class Foge;
};

class MyClass::Foge
{
};

MyClass の定義無しでの宣言はできない。だからネストされたクラスを
インターフェースに使うと MyClass を前方宣言で済ませるのが難しくなる。

631 名前:デフォルトの名無しさん [2008/02/20(水) 22:12:19 ]
一つのソケットに対して送信、受信が交互ではなくて、不定期に発生するような、
プログラムを作ってるんですけども、こういうのってどうするのが良いですか?
交互に通信がある場合ならselect→recv→sendとかで簡単なんですけども
送信が繰り返される場合もあるので悩んでいます。
どなたか教えてください

632 名前:デフォルトの名無しさん [2008/02/20(水) 22:58:08 ]
今マインスイーパーを作ってるんですが
それについての質問ってここでしてもいいんですか?

633 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 23:35:38 ]
>>631
sendリクエストをsignalで受ければいいような。
もし必要ならネットワークスレへどうぞ。

>>632
マインスイーパー程度ならここでもいいと思いますが、
GUIライブラリの使い方なら該当GUIライブラリスレへどうぞ。
マインスイーパースレも参考にどうぞ。

634 名前:デフォルトの名無しさん [2008/02/20(水) 23:51:14 ]
>>633
visualC++ 6.0を使って作ってるんですが
地雷の表示と踏んだ後のリセットがうまく出来ないんです

void CMine1View::DispMine()
{
CClientDC dc(this);
CBrush *oldBrush1,redBrush,*oldBrush2;
int iy,ix;
for(iy=2;iy<=Masu+1;iy++)
{
for(ix=2;ix<=Masu+1;ix++)
{
if(Mine_Position[iy][ix]==-1)
{
oldBrush1=(CBrush*)dc.SelectStockObject(WHITE_BRUSH);
dc.Rectangle(ix*Width,iy*Width,
ix*Width+Width,iy*Width+Width);
dc.SelectObject(oldBrush1);
redBrush.CreateSolidBrush(RGB(255,0,0));
oldBrush2=dc.SelectObject(&redBrush);
dc.Ellipse(ix*Width+5,iy*Width+Width+5,
ix*Width+Width-5,iy*Width+Width-5);
dc.SelectObject(oldBrush2);
redBrush.DeleteObject();
}
}
}
AfxMessageBox("地雷 踏みました!");
}



635 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 03:02:40 ]
>>631
selectが反応したときはrecvする
sendはいつでも何度でも好きなときに好きなだけ繰り返し呼んで良し
何か問題が?

636 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 03:13:07 ]
トランシーバーと同じ問題じゃないの?どうぞ

637 名前:デフォルトの名無しさん [2008/02/27(水) 01:03:33 ]
質問です。
VC使ってて、あるクラスの実体を複数のスレッド内で使ってるのですが、
これって問題あるのでしょうか?
スレッド毎に異なるデータを用意してるので、
クラスのメンバ変数への排他の問題はありませんが、
クラス内にDLLクラスをメンバに作っていて、
スレッド毎に同じDLLにアクセスしています。
こんな使い方って問題ありますか?




638 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 01:08:24 ]
DLLの提供する関数がリエントラントなら問題ないんじゃね

639 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 03:27:06 ]
クラスAがあり、クラスAを実体化した際、コンストラクタでクラスBを実体化したとします。
このとき、クラスBがクラスAのpublicな関数を呼び出すためには、
クラスBに対してクラスAの実体のポインタを渡し、そこからアクセスする以外に方法がありますか?
どのような方法があるでしょうか?


640 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 03:29:48 ]
>>639
ポインタじゃなくて参照使うとか、無理やり違う手段でっていうならグローバル変数とか、
いろいろありそうだよ。

641 名前:デフォルトの名無しさん [2008/03/03(月) 15:37:24 ]
>>639
あんま使ったこと無いけどクラスBにクラスAのメソッドをfriendで共有すれば?

642 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 17:35:21 ]
friendにしてもthisポインタ相当の何かは必要だろ。

643 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 19:14:59 ]
クラスCのstatic変数に突っ込んで、クラスCの静的メンバ関数から呼んでもらう。

644 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 12:27:18 ]
>>639
C#でいうdelegate?
d.hatena.ne.jp/wata_d/20060309/1141875648



645 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 21:19:25 ]
グローバル変数なんつー力技を除けば、
どうあっても this は渡す必要がある。
デリゲートだって内部的に this を渡している訳で。

friend は public メンバ呼ぶのには全く関係ないな。

646 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 23:27:30 ]
>>645
もちろん、何らかの方法でthisを渡す必要はあるだろう。
でも、>>639の場面で、class Bからclass Aのメソッドを直接呼び出すには、class Bがclass Aを知らないといけない。
delegateは、メンバ関数へのproxyとして働くことで、メソッドを定義しているclassを隠すことが出来る。
>>639の場面では、class Bはclass Aを知らなくても、class Aのメソッドを呼び出すことが出来るようになる。

647 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 23:59:25 ]
そもそも、コンストラクタ内で他のクラスにメンバ関数を呼ばせる事自体
結構危険な事だと思うけどね。

648 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 17:27:25 ]
コンストラクタで実体化しただけで、
コンストラクタで関数を呼ぶとは書いてないだろ

649 名前:デフォルトの名無しさん [2008/03/13(木) 19:06:50 ]
ja.wikipedia.org/wiki/Memset
何でstrcpy(s, NULL);は誤りなのですか?

650 名前:デフォルトの名無しさん [2008/03/13(木) 19:26:01 ]
>>649
NULLがchar*型じゃないから

651 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 19:44:01 ]
memsetは問題なく動くからまだいいけど、
普通は、s[0] = '\0';で十分だろ。せいぜいstrcpy(s, "");

652 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 23:19:50 ]
NULL を脱参照して死亡

653 名前:デフォルトの名無しさん [2008/03/24(月) 10:47:50 ]
ファイルを分割したときに変数を大域変数として定義して、
呼び出すためにはどうしたらいいでしょうか?

今ファイルがmain.cpp,hoge.h,hoge.cpp,hage.h,hage.cppとある時に,
全体でのメモリアクセスを調べるためにmain.cppでint型の大域変数を定義して,
hoge.cppとhage.cpp内で値をインクリメントできるようにしたいのですが・・・

654 名前:デフォルトの名無しさん mailto:sage [2008/03/24(月) 10:51:04 ]
どんな入門書にも書いてあるよ



655 名前:デフォルトの名無しさん [2008/03/24(月) 11:25:16 ]
main.cppで変数定義して、
hage.h,hoge.hでexturn宣言したらエラーが出るのですが、
やり方間違ってますか?

656 名前:デフォルトの名無しさん mailto:sage [2008/03/24(月) 11:26:37 ]
>>653
クラスにすることお勧め。

657 名前:デフォルトの名無しさん mailto:sage [2008/03/24(月) 13:36:42 ]
どうしてエラーをコピペしないのか。俺らをエスパーだと思ってるのか。

>>655
ソースも見ないで間違ってるかどうか判断できるわけがない。
ソース(その変数に関係するところ)とエラー(いっぱい出てたら始めの3個くらい)を張って。
改めて打つんじゃなくてコピペで。

>hage.h,hoge.hでexturn宣言したらエラーが出るのですが、
externの綴りが間違ってる。ここに書く時に間違えただけならいいんだけど。

658 名前:デフォルトの名無しさん mailto:sage [2008/03/24(月) 20:57:56 ]
エスパーしてもらいたいんじゃなくて
原因である可能性の高いものを列挙してもらいたいんじゃない?

んで、それを一通り試して、自己解決しました!って言うの(笑)

659 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 02:29:45 ]
>>655
やりかたがまちがっている。
.h ファイルはコンパイルする必要はないよ。

660 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 03:10:31 ]
>>653
[main.cpp]
#include <stdio.h>
void hoge_inc(void);
void hage_inc(void);
int count;
int main(int argc, char *argv[]) {
    count = 0;
    hoge_inc();
    printf("count = %d\n", count);
    hage_inc();
    printf("count = %d\n", count);
    return 0;
}
[hoge.cpp]
extern int count;
void hoge_inc(void) {
    count++;
}
[hage.cpp]
extern int count;
void hage_inc(void) {
    count++;
}

661 名前:デフォルトの名無しさん [2008/03/25(火) 11:28:05 ]
スレの内容見ながら直したら解決できました。
出てたエラーは
error LNK2001: 外部シンボル ""int mov_i" (?mov_i@@3HA)" は未解決です。
でファイルの依存関係が間違っていたのが原因でした。

>>656-660
有難うございました。

>>657
申し訳ないです・・・以後気をつけます

662 名前:デフォルトの名無しさん mailto:sage [2008/03/26(水) 04:03:10 ]
Windows 限定の話題で申し訳ないんですが、FARPROC 型というのが何なのかよくわからないので質問させてください。
MSDN の CallWindowProc の項目を見ると、FARPROC 型は

 typedef int (FAR WINAPI *FARPROC)();

と宣言されているらしいんですが、WINAPI は __stdcall だから良いとして、FAR というのは何なんでしょうか?
MinGW だと FAR は省略されてるので、付けても付けなくても同じな気がするんですが、
とすると FARPROC=ただの関数ポインタと考えちゃって構わないんですか?

663 名前:デフォルトの名無しさん mailto:sage [2008/03/26(水) 04:04:56 ]
16bitアドレッシング時代の残骸だろ。無視して医院で内科医。

664 名前:デフォルトの名無しさん mailto:sage [2008/03/26(水) 04:09:15 ]
>>663
ありがとうございます。なんかMS-DOS時代はFARとかNEARとか使ってたらしいのでそういうことなんですかね。
Windows だとこういうマクロとか typedef がやたらと多くて変な所でやたら苦労させられます(;´Д`)



665 名前:デフォルトの名無しさん mailto:sage [2008/03/26(水) 11:29:57 ]
どこかに#define FARと定義されているから、
プリプロセスが終われば消えてなくなる。

666 名前:デフォルトの名無しさん mailto:sage [2008/03/26(水) 19:20:32 ]
いい時代になったもんだ。

667 名前:デフォルトの名無しさん [2008/04/01(火) 23:30:29 ]
コンストラクタを定義しようと思っているのですが
ClassA();
ClassA(int nSize);
と定義して、実体を書く時に

ClassA::ClassA(){
this->ClassA(1);
}

と言う具合に書きたいんですが
error C2273: '関数形式のキャスト' : '->' 演算子の右側で使用できません。
となって出来ません。
何とか、良い方法はありませんでしょうか?
ClassA(int nSize=1);
もあるとは思うのですが、指定した場合、もう少し細かくコードを書きたいのです。


668 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 23:35:07 ]
ほかのコンストラクタを呼ぶことは今のところ不可能だから、
privateな初期化関数を作ってそれを呼ぶのが常套手段。

669 名前:デフォルトの名無しさん [2008/04/08(火) 18:49:12 ]
nanosleepの使用例はどこかにありませんか?

670 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 22:20:53 ]
>>669
ありますが、何か。

671 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 22:24:11 ]
nanosleepの使用例なんて腐るほどあるわよ。ネットは広大ね。

って少佐が言ってた

672 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 22:28:06 ]
あんなの、man引けば使い方なんて一発だろうに。

673 名前:デフォルトの名無しさん [2008/04/09(水) 04:07:45 ]
うちのman nanosleepには使用例は載っていないな〜〜

674 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 06:39:06 ]
手取り足取り教えて貰わないと書けないんですか?



675 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 07:04:28 ]
www.google.co.jp/codesearch

676 名前:デフォルトの名無しさん [2008/04/09(水) 08:05:20 ]
Visual C++でnanosleepに当たるものを教えてください

677 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 08:59:32 ]
Sleep()
指定する時間単位と精度の違いに注意。

678 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 13:21:59 ]
質問。
ttp://www.be-interactive.org/index.php?itemid=57
にあるアクションスクリプトをC++で書き直してみたいんだけど、
辞書データのクラス化と初期化をどうやったらいいのか
分からなくて困ってます。
typedef struct { int x,y; } POINT;
class Stroke { vector<POINT> points; };
class DictItem { vector<Stroke> strokes; };
class Dictionary { vector<DictItem> items; };
と定義してはみたものの、どうデータを流し込んで
やればいいんでしょうか?
もしくはもっと効率的なクラス定義の方法があれば
教えてください。

679 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 21:09:12 ]
std::map使えばいいんじゃね

680 名前:デフォルトの名無しさん [2008/04/10(木) 17:44:25 ]
ダイナミックライブラリとスタティックライブラリの使い分けについて教えてください

681 名前:デフォルトの名無しさん [2008/04/10(木) 21:40:05 ]
>>680
C/C++の質問ではありませんのでスレ違いです。

682 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 02:44:04 ]
ポインタで複数の配列の連続的に扱うことはできますか?

int *p
int A[3] , B[3], C[3];
(p+0) = A;
(p+3) = B;
(p+6) = C;



683 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 02:47:57 ]
できません

684 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 13:52:33 ]
そういうコンテナ/イテレータを書くのも勉強になりそうではあるな



685 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 02:20:38 ]
>>682
unionで配列の位置を一纏めに固定すれば可能

686 名前:回答者も下級なのか、このスレは mailto:sage [2008/04/17(木) 08:15:36 ]
>>685
ほほぉ、unionでですか。具体例をどうぞ。

687 名前:デフォルトの名無しさん [2008/04/18(金) 00:02:31 ]
VisualC++2008でfopen_sやfopenしてもファイルを読み込んでくれません。
パスはあってるし、DOS窓で実行ファイルと読み込みたいファイルのあるディレクトリに移動してから実行してもダメでした。

fopen_s(&fp, "a.txt","r")
fp=fopen("a.txt","r")
という書き方で間違ってないと思うのですが…

原因としてはどんなことが考えられるんでしょうか?


688 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 00:31:47 ]
もしかして:
a.txt.txt

689 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 22:58:27 ]
もしかして:
VisualC++2008 【Express Edition】

690 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 00:02:10 ]
>>682

int p[9];
int* A=p+0, *B=p+3, *C=p+6;
A[0]=(以下略

じゃだめなん?

691 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 00:25:14 ]
>>689
そうです

692 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 02:54:00 ]
>>686
union {
struct {
int A[3],B[3],C[3];
};
int D[9];
} Array;

int *p = &( Array.A[0] );

こんな風に

693 名前:デフォルトの名無しさん [2008/04/22(火) 11:59:19 ]
intじゃなかったら使えないな

694 名前:デフォルトの名無しさん [2008/04/22(火) 17:51:28 ]
10進数を2進数に変換する方法教えてください



695 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 17:57:29 ]
2で割って少数以下切捨て、その時の余りをならべる。を繰り返す。

696 名前:デフォルトの名無しさん [2008/04/22(火) 18:16:54 ]
以下を実行して
a:0x8049e80 0x8049e80 0x8049e80
A:0x8049e80 0x8049e80 0x8049e80
11 12 13
4 5 6
0 0 0
のようになることを期待していますが11 12 13が1 2 3のままです。どのようにしたらよいか教えていただけると幸いです。
struct data{
double x[3],p[3],q,rm;
};
class Func{
public:
void func1(struct data []);
};
class SubFunc{
public:
void subfunc1(struct data []);
};
続く

697 名前:デフォルトの名無しさん [2008/04/22(火) 18:17:29 ]
続きです
int main(void)
{
static data P[3];
Func FC;
FC.func1(P);
for(int i=0;i<3;i++){
cout << P[i].x[0] <<" "<< P[i].x[1] <<" "<< P[i].x[2] << endl;
}
return 0;
}
void Func::func1(struct data A[]){
SubFunc SFC;
SFC.subfunc1(A);
A[0].x[0]=1.0;
A[0].x[1]=2.0;
A[0].x[2]=3.0;
cout <<"A:"<< &A[0].x[0] <<" "<< &A[0].x[0] <<" "<< &A[0].x[0] << endl;
}
void SubFunc::subfunc1(struct data a[]){
a[0].x[0]=11.0;
a[0].x[1]=12.0;
a[0].x[2]=13.0;
cout <<"a:"<< &a[0].x[0] <<" "<< &a[0].x[0] <<" "<< &a[0].x[0] << endl;
a[1].x[0]=4.0;
a[1].x[1]=5.0;
a[1].x[2]=6.0;
}


698 名前:デフォルトの名無しさん [2008/04/22(火) 18:27:36 ]
char a[] = "100";

って書くと これどういう意味になるの?

699 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 18:29:01 ]
>>698
a[0]='1' a[1]='0' a[2]='0' a[3]='\0'

700 名前:デフォルトの名無しさん [2008/04/22(火) 18:34:43 ]
>>699
さんきゅ!

701 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 18:36:19 ]
>>696
SFC.subfunc1(A); 
A[0].x[0]=1.0; 
A[0].x[1]=2.0; 
A[0].x[2]=3.0; 

SFC.subfunc1()呼んで11 12 13入れても、その後上書きしてるじゃん



702 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 18:55:07 ]
>>701
おっしゃるとおりです。ありがとうございました。

703 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 01:03:54 ]
コンパイラとリンカのバージョンってどうやって調べるか分かりますか?
ちなみに、使っている環境(って言うのかな?)はCPad for Borland C++Compilerってやつです
あんまり難しい専門用語は分からないんで、初級者でもわかるように教えてくれるとうれしいです

704 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 01:07:11 ]
無料版の BCC のバージョンは 5.5 しか存在しない。



705 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 01:34:27 ]
>>704
それはリンカのこと?それともコンパイラのことですか?
超下級者だから全然わからん

706 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 01:35:44 ]
ちっとも保守される様子がないbccなんかそろそろやめて
mingwやvcのexpress editionにすればいいのに。

707 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 01:39:43 ]
-v

708 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 02:19:31 ]
>>704
修正版の5.5.1がある。

709 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 10:33:03 ]
>>694-695
整数は割っても少数にならないし、小数は扱いにくいから
↓のを繰り返す。

x % 2 //2進数の一桁目がこれででる。
x /= 2 //一桁目を取り出したらずらす。



710 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 10:47:35 ]
x & 1
x =>> 1

711 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 15:42:59 ]
1, 2, 4, 8, 16, 32, ... とビット数の数だけ論理和とればいいだけじゃん

712 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 15:57:14 ]

ごめん。
>>709はマイナスのとき使えな・・くもないか。


713 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 21:56:29 ]
まず10進数の定義からだな。


714 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 23:44:04 ]
定義厨もここまできたか



715 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 09:16:09 ]
パックドBCDかもしれんし、ASCZかもしれん。

716 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 17:33:03 ]
#include <stdio.h>
struct histgram{
int x;
int y[100];
};
void one(struct histgram *hist);
void two(struct histgram *hist);
int main (void){
struct histgram hist[1] ;
int z;
hist->x = 0;
for(z=0;z<100;z++){
hist->y[z]=0;
}
printf("before***%d***%d***%d***",hist->x,hist->y[0],hist->y[50]);
one(hist);
printf("before***%s***%s***%s***",hist->x,hist->y[0],hist->y[50]);
for(z=0;z<9999999999;z++);
return 0;
}
void one(struct histgram *hist)
{
two(hist);
}
void two(struct histgram *hist)
{
int z;
hist->x = 1;
for(z=0;z<100;z++){
hist->y[z]=1;}}
これで実行するとメモリのエラーが出るんですが、どうすれば解決するでしょうか

717 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 17:50:14 ]
>>716
2つめのprintfは、%sじゃなくて%dを使うべし。

718 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 19:50:09 ]
×for(z=0;z<9999999999;z++);
○getchar();

719 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 06:03:23 ]
それ以前に hist->x は hist[0].x じゃないのか?

720 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 06:44:04 ]
どっちでもいいんじゃね?

721 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 01:10:46 ]
ボーランドでコンパイルしたのですが、
E2293 linearEq5.c 4:)が必要
って出ます。
#include<stdio.h>
#include<math.h>
#define MAX_DATA 1000//データ点まで想定
void read_data(double x[],double y[],int &order ,int &data_number)// データファイルの読み込み
{
FILE* ifp;
char ifile[20];
printf("Input the file name of input data:");
scanf("%s",ifile);
printf("何次近似にしますか?:");
fscanf(ifp,"%d",&order);
printf("Input a data number:");
fscanf(ifp,"%d",&data_number);

if((ifp=fopen(ifile,"rt"))==NULL){
fprintf("Can't open input file \"%s\"\n",ifile);
}
途中までです。
一様、visualではこのエラー表示は出ません。
どうしたらいいか教えてください。

722 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 01:22:34 ]
>>721
Cには参照はありません。visualとやらでエラーが出なかったとすれば、C++としてコンパイルしたのでしょう。

723 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 03:47:57 ]
>>722
参照って何ですか?

724 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 09:34:34 ]
>>723
int &



725 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 12:32:59 ]
>>724
ありがとうございます

726 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 15:59:47 ]
”プロセスにマッピングされている”というのは具体的には
ヘッダのインポートセクションとかにアドレスが格納されている、という意味ですか?

727 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 16:06:35 ]
いいえ。

728 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 17:09:06 ]
ではどういう意味ですか?

729 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 17:17:01 ]
そのキーワードで検索すれば判る通り、状況によって意味することが違うので単純には答えられません。

730 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 01:25:27 ]
>>726
タグ打ってくれなきゃ元レスがわかんね


731 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 01:15:18 ]
c/c++ランタイムってもしかして
c/c++じゃなくてもプロセス起動時にロードされてる?

732 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 10:18:50 ]
そのプロセスのコードの一部がC/C++で書かれてるならロードされる場合もある。
.dllや.soなら他のプロセスが呼び出してるかもしれん。

733 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 13:26:56 ]
環境:vc2007
言語:c++

argcに間違ったパスを入れてしまいました。
そのあと何度動かしても、動かした瞬間にargcに間違ったパスが入り
プログラム'******'を開始できません。指定したファイルがみつかりません

というエラーが出ます。

どうやったら、このエラーは出なくなるでしょうか

734 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 14:13:51 ]
>>733
argcはコマンドライン引数の数。パスなど入らない。
プロジェクトのプロパティのデバッグの動作のコマンドに間違ったものが入ってるとそうなる。



735 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 14:53:16 ]
>>733
argv にも入れてみるとか……

736 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 07:33:05 ]
>>733
プロジェクトのデバッグのタブの引数の項と間違えて、実行するプログラムのパスを書き換えたんじゃないのか?とか言ってみる。

737 名前:733 mailto:sage [2008/05/25(日) 11:26:10 ]
解決しました。ありがとうございます。

738 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 19:04:50 ]
Visual Studio 2008 Express で VC++の勉強をはじめたばかりの超初心者です。

gcnewを用いてインスタンスを生成し、"->"を使用してメンバ関数を呼び出すと、メンバ関数からメンバ変数をアクセスできません。
ご回答のほど、よろしくお願いします。

739 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 22:46:16 ]
ref class A

740 名前:738 mailto:sage [2008/05/25(日) 23:42:33 ]
>>739
ref にしてるんですが、ref じゃだめってことですか?!

741 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 00:28:28 ]
C++/CLIではじめるならC++かC#のどちらかで始めたほうが楽じゃないかな。


742 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 23:28:52 ]
>>738
それだけじゃなんとも答えようがない。ここだとスレ違い気味だし、
コードを付けてこっちで聞きなおしてみたらいい。

C++/CLI part3
pc11.2ch.net/test/read.cgi/tech/1206447234/l50

743 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 15:58:07 ]
C/C++言語でプログラムを書いたら、
必ずC/C++ランタイムは使われていますか?

C/C++以外の言語で、C/C++ランタイムを使用している言語はありますか?

744 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 17:49:30 ]
まったく使わないこともできるな。




745 名前:743 mailto:sage [2008/05/29(木) 20:36:21 ]
C/C++で書いたプログラムはmain関数の前に
C/C++ランタイムのスタートアップルーチンが呼ばれるそうですが、
まったく使わない事も出来る、とはつまり
main関数の前にスタートアップルーチンを呼ばない事が出来るということでしょうか?

746 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 21:47:15 ]
空の同名のスタートアップルーチンを自作してリンクすればできるだろ

747 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 22:32:17 ]
>>745
フリースタンディング環境とか

748 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 22:51:56 ]
>>745
書ける。組み込みなんか自分で書いたりするゾ

749 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 00:18:16 ]
ファイルからN(定数)個のスペースで区切られた値を読み込むのに
while(fgets(str,512,fp)){
sscanf(str, "%d %d %d …, %d",
&input[0][ct], &input[1][ct], &input[2][ct], …, &input[N][ct]);
ct++;
}
とやっているのですが、Nを変数にしたい場合、どういう風にすればいいんでしょうか?



750 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 14:46:39 ]
>>749
C++ なら問題ない。

751 名前:デフォルトの名無しさん [2008/06/06(金) 01:24:08 ]
難しいね、C++って、、、、

752 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 17:22:05 ]
vector t;
をモジュールに引数として渡す方法を教えてください。もう3年も悩んでます。

753 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 18:57:23 ]
>>749
C++ならvectorでできる。C99なら可変長配列でそのままできる。C89だとmalloc()で確保するしかない。
入力自体は、いずれにしてもループで回すしかない。

754 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 18:58:00 ]
>>752
何をしたくて、3年間も何を無駄に調べたのか教えてください。



755 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 00:22:29 ]
>>752
多分調べればわかると思う。

756 名前:デフォルトの名無しさん [2008/06/07(土) 23:03:18 ]
なんで .cpp と .h に分けるの?
h に全部書いちゃいけないの?

(javaって1ファイルだよね?)

757 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 23:08:17 ]
コンパイル激遅でいいならやればw

758 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 23:23:32 ]
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6829.txt

データ対の大小比較を行った回数を計算し出力するプログラムなのですが
while(1){
count++
while(d[++i]<key)
count++;
count++
while(d[--j]>key
count++;
この部分は
これで合ってるのでしょうか?


759 名前:デフォルトの名無しさん [2008/06/08(日) 00:35:08 ]
>>757

遅くなるの?

それは知らなかった。

Boostってhppだよね?
あれ、遅いのに採用してるの?

760 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 00:38:27 ]
>>759
インクルードってどういうものか分かってる?
ファイルの中身を合成するものなんだよ?
全てのコードをヘッダファイルに書いて
main のある .cpp でそれを全部インクルードしたとすると、
それら全てのファイルの中身を合成したファイルを
毎回コンパイルすることになるんだぜ。
そのファイルの中の1カ所を変更しただけでな。

761 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 00:40:13 ]
>>759
boost 全部を一気に使う訳じゃないだろ。
まあ、boost 使うとそれなりにコンパイル遅くなるけど。
そのためのプリコンパイル済みヘッダファイルだな。

762 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 00:42:53 ]
>>760

ただの宣言をするものと思ってた。

>>761

確かに、一気には使わないね。


ありがとう。

763 名前:デフォルトの名無しさん [2008/06/08(日) 00:44:28 ]
質問です。
if(整数型)  ってやったときに
数字が0だと偽、符号が正だと真と聞いたのですが
ゼロ以下だとどっちになりますか?

764 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 00:45:25 ]
>>759
Boostの場合はテンプレート使っていてヘッダに書かざるを得ないという事情がある。
もちろん、ライブラリのリンクという面倒事を回避できるという点も影響を及ぼしているとは思う。
要LIBのものでも必要最低限しかLIBに入れていない。



765 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 01:02:37 ]
>>763
その説明はおかしい
0が偽で0以外が真

っていうかif(-1)とでもやって試せばどうかね

766 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 01:54:36 ]
自分で試してあやふやな結果を得るくらいならここで質問して確実な回答を求めます。

767 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 02:02:47 ]
規格票をおよみください

768 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 02:06:57 ]
規格以前の問題。
まともな C++ の本読め。

769 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 06:58:45 ]
まともなC++の本かどうかを判断するには知識が・・・

770 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 08:51:07 ]
卵が先か鶏が先か。

771 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 08:57:06 ]
代理出産だー

772 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 11:56:17 ]

本ならここで聞け

ttp://pc11.2ch.net/test/read.cgi/tech/1209441159/

773 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 14:08:28 ]
ここでの回答なら確実だと思ってるのかな。

774 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 14:09:44 ]
if(-1) (-1に限らず負の数)くらいを試せないのはちょっとしんどいな。
いくらでも試す方法はあるだろうに・・・



775 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 02:57:06 ]
C++だと環境に依存するコードが多くてバグるからCで書け
といわれたんですがC++特有で環境に著しく依存する物って何でしょう
仮想関数や継承の挙動が大きく変わるとは考えにくいんですが。

776 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 09:40:29 ]
>>775
言ったやつに聞いてくれよ。

777 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 11:43:49 ]
>>776
いったやつが理由を知らないんだよ。
知ったかぶりだよ。


778 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 12:31:53 ]
>>775
例外処理とか、標準ライブラリの実装とか、の話かな?

いずれにしても挙動が変わることはさすがにないでしょ。
もちろん規格に沿った範囲内の話で、未定義動作を利用した
コードなんかについては知ったこっちゃ無いけど。

779 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 13:07:23 ]
ども。やはりそんなものですよね…
上司が自信満々に断言するので突込んで聞けなかったんです

780 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 16:17:23 ]
vector<Hoge>::const_iterator iter = hoge.begin();
(*iter).name

で、なんでアスタリスクが必要なの?

781 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 16:41:34 ]
iter は const_iterator であって Hoge ではないから
iter.name という表記は const_iterator のメンバ name を参照しようとしているのであって、Hoge の name を見ているのではない
iter->name ならおk

782 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 16:48:02 ]
>>781

ポインタと同じように考えればいいのなか?

783 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 17:36:46 ]
>>782
うん

784 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 18:27:12 ]
>>783

アリガd



785 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 18:37:41 ]
イテレータはポインタを模したクラスのことだからな。

786 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 22:20:01 ]
いい野中

787 名前:デフォルトの名無しさん mailto:age [2008/06/09(月) 23:16:16 ]
配列の要素に-1を指定した時の挙動について教えてください

char a;
char b[10];

と宣言しておいて、b[-1]を指定したら、aを意味していることになりますか?

788 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 23:17:31 ]
なるはずがありません

789 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 23:17:37 ]
>>787
なりません。未定義動作になります。

790 名前:787 mailto:sage [2008/06/09(月) 23:26:09 ]
FreeType2という、フォントレンダラのソースを読んでいたら
配列の添字に-1を指定している箇所があり、気になって質問しました
このソフトはC言語で書かれています。
やはりこれはイレギュラーな使い方なんですね

791 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 23:36:26 ]
ほんとに配列として宣言されてた?
mallocで確保したアドレスに+1したものを配列として使ってたりしない?

792 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 02:07:48 ]
メンバ変数の場合は宣言順にメモリに置かれることが保証されてるので、
あとはアラインメントに関して処理系独自の定義が行われていれば
その処理系では保証されるね。

793 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 02:34:15 ]
>>792
されません。配列の添え字演算(ポインタ演算)で配列の範囲外にアクセスしたら未定義動作です。

794 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 02:43:51 ]
未定義動作を発生させるコードについて、ある処理系が特定の挙動を保証することがあっても構わない。



795 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 04:40:52 ]
[-1]だけではそれが間違ってるとは言い切れない。
char a[10], *p
p = a + 1;
とすれば
p[-1] == a[0]
であり、そこにアクセスするのは何の問題もない。

796 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 07:05:10 ]
enumは変数宣言出来るけど
enum変数自体 int型で特に特別な変数ではないし
他の変数で代用可能だから活用法が思いつかない

どういった活用法があるのですか?

797 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 07:25:06 ]
たしかに定数宣言+typedef程度の意味しかないけど、
C++なら多重定義できるのが便利と言えば便利、特にストリーム入出力。

これも主にC++のことだけど、クラス内で定数宣言するのにも使った。
static constのおかげでこの用途からは退き気味だけど。

798 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 11:13:14 ]
>>796
数値に特別な意味がない場合に、シンボル(名前)で記述できた方が判り易いことがしばしばあるから。
古いCだとdefineマクロしか選択肢がなかったのでデバッグ時に苦労したけれど、
enumならデバッガにシンボル情報をくれてやりさえすればシンボルのまま扱えるわけだ。

799 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 14:35:23 ]
>>796
信号機を作るときに
enum state {
 green = 0,
 yellow,
 red,
};
と状態を宣言しておけば便利ジャン。
黄色の次は紫に変わるようにしろ、と言われたときでもyellowの次の行にpurpleを足せばいい。
static constだとredの値も変更しなくちゃならない。

800 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 15:11:52 ]
つまり
if (yello)
とかしとけば数値を気にしないで便利

801 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 15:25:29 ]
>>799-800
そこは理解済みです、言われている通り
#defineやconstよりはるかに便利だと思います

>>796で質問したことをコードにすると

enum タグ名 {
名前1,名前2,・・・
} 変数宣言

とした場合、宣言した変数の活用方について教えて下さい、という意味です
説明が簡単過ぎてうまく伝わっていなくて申し訳ないです

stractならデータ管理が目的なので利用法が思いつくのですが
enumの方は使いどころがいまいちピンときません

802 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 15:29:34 ]
enumシンボルのことでなく、enum型変数ってことか?
>797とか。後は、例えばenum state conditionとか宣言しておけば
condition変数にはenum stateのシンボルしか入れない積りであることが明確になる。
コンパイラによっては、switch (condition)したときにシンボルの抜けがないかもチェックしてくれる。

803 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 01:07:53 ]
>>801
>>2-3

804 名前:デフォルトの名無しさん [2008/06/13(金) 21:40:38 ]
>>801
構造体の場合
typedef struct{
int a;
double b;
}HOGE;
みたいに変数宣言するんじゃなくHOGE型として宣言しといたほうが
typedefせずグローバルで変数宣言すると何かとふべんだから
typedefして使うところで変数宣言したほうが良い

enumなら下記みたいに宣言したりする。
typedef enum {FALSE = 0,TRUE = 1} BOOL;



805 名前:誰か一緒に考えてください [2008/06/13(金) 22:37:30 ]
もしプロトコルを開発するならどんなプロトコルにしますか??



806 名前:デフォルトの名無しさん [2008/06/13(金) 22:49:23 ]
>>805
漠然としすぎ

807 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 09:59:08 ]
>>805
>もしプロトコルを開発するならどんなプロトコルにしますか??
既存のプロトコルを利用できないか、再検討する。

808 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 16:32:10 ]
enum の話で考えたんだけど、
enum のすべてのメンバがそのスコープで有効になるのは勘弁してほしい。
メンバが多いと名前が衝突する可能性が高くなるし、
enum Style { None, A, B }; enum ExStyle { None, C, D };
みたいに同じ名前を使えないのは痛い。

仕方ないから、
namespace Style { enum Style { None, A, B }; } namespace ExStyle { enum ExStyle { None, C, D }; }
とか宣言して、
Style::Style style = Style::None; みたいに使ってる(非標準だけど VC++ は一応通してくれる)。

俺は本質的に enum の使い方を間違えてるんだろうか?
>>802 の言うように、特定の値しか入れない場合とかに使ってるんだが。

809 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 16:41:17 ]
>>808
class内に置く方法もあるぞ。


810 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 17:02:09 ]
>>809
なるほど。
class Style
{
public:
enum _Style { None, A, B };
private:
_Style value;

public:
Style() : value(None) { }
Style(_Style value) : value(value) { }
Style(const Style &style) : value(style.value) { }

bool operator ==(const Style &style) { return value == style.value; }
bool operator !=(const Style &style) { return value != style.value; }
operator int() { return (int)value; }
};
みたいにすれば Java, C# の列挙型と同じように扱えるわけか。switch にも入るし。
しかも #define とかうまく使えばこれを毎回書かなくても使い回せそうだ。
すばらしい一言アドバイスをありがとう。

・・・もしかして常識ですか?

811 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 19:48:18 ]
残念ながら

812 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 00:40:33 ]
あの、>>808ってどこが非標準なんですか?
名前空間と列挙型が同一の名前を持っていることでしょうか。

813 名前:808 mailto:sage [2008/06/16(月) 00:05:50 ]
>>812
VC++ では

>コンパイラの警告 (レベル 1) C4482
>エラー メッセージ
>非標準の拡張機能が使用されています: enum 'enum' が限定名で使用されます

>型の中の列挙型を参照するときは、列挙型の名前を指定する必要はありません。

だと。(型名)::(列挙子名) とするのは非標準らしい。

よく考えたら

#define enum_class(Type) \
class Type\
{\
private :\
int value;\
public :\
Type() : value(0) { }\
Type(int value) : value(value) { }\
operator int() const { return value; }\
operator int &() { return value; }\
enum Tag;\
};\
enum Type::Tag

とかすればほとんど C# ライクな列挙型もどきができるな。
これも非標準だし、列挙型みたいにする意義も薄れてるが。

814 名前:デフォルトの名無しさん [2008/06/16(月) 22:51:16 ]
C/C++のばかたれっ!!

あー すっきり!!

もやっとボール 100000000個くれ!!




815 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 03:53:38 ]
>>813
それは >808 の namespace を使った例に対して Style::Style::None とした場合の警告じゃないか?
Style::None なら最初の Style は namespace 名だから、その警告には該当しないだろ。

816 名前:デフォルトの名無しさん [2008/06/17(火) 11:02:38 ]
すまぬがちょいと質問。

下記のような構造体の中に構造体の中に構造体が入ってるような形にしてるんだが、
矢印の所でエラーで止まるんだ。
ちなみに「struct FGroup *fGroup」は空のまま。(初期化も何もせず)
ほんまに原因不明なんだぜ・・・
デバッグ出来ない環境だから、エラーの原因は不明なのよおおお

// h
struct FGroup {
char strKey[40];
};
struct AInfoGroup {
struct FGroup* srcfn[10];
};
struct MatchingResultGroup {
struct AInfoGroup* aig[6];
};

// cpp
struct MResultGroup *res;
〜中略 resに色々格納〜
struct AInfoGroup *aiGroup = res->aig[0];
for(int j = 0; j < 9; j++) {
  struct FGroup *fGroup = (*aiGroup).srcfn[j];
  if((*fGroup).strKey != NULL) {
    char tmp[40];
    strcpy(tmp, (*fGroup).strKey);  ←ココでエラー
  }
}

817 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 11:08:24 ]
>>816
エラーメッセージぐらい貼れ。
人に原因を調べて欲しいならソースを略すな。

↓これ見ただけでポインタをよく理解していないというのがわかる。
> if((*fGroup).strKey != NULL) {
入門サイトをよく読みなおしたほうがいいかもしれない。

818 名前:デフォルトの名無しさん [2008/06/17(火) 11:18:02 ]
エラーメッセージですか。

MinGW Developer Studio にてソース作成して
VC++にてDLL連携してしているので下記のようにしか表示されません。。。

ハンドルされていない例外はACMatch.exe(MSVCRT.DLL)にあります: 0xC0000005: Access Violation。
例外処理 (初回) は ACMatch.exe (MSVCRT.DLL) にあります: 0xC0000005: Access Violation。
プログラム 'ACMatch.exe' はコード 0 (0x0) で終了しました。

>if((*fGroup).strKey != NULL) {
これは策がもうなくて、ものは試しにでやってみたのを削除し忘れていました。。。

819 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 11:22:13 ]
>>816
>デバッグ出来ない環境だから、エラーの原因は不明なのよおおお
それでプログラミングしようってのが無謀。

820 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 12:03:38 ]
中略部分を晒すつもりが無いなら、終了。

821 名前:816 [2008/06/17(火) 12:53:33 ]
>>819
無謀なのは承知です。printfにてエラー発生箇所は分かるのですが
原因を特定する為のデバッグのみが出来ない状況ですので
それで納得し、何とかやっております。

>>820
記述通り「struct FGroup」はヘッダでの宣言のみにて
中略部分ではstruct FGroupへの格納どころか、
struct FGroupの要素のstrKeyが一切記述されていなかったので中略していました。
それでも晒した方がよろしいでしょうか?

822 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 12:59:16 ]
>>821
相談したいなら晒したほうがいい。

でも、 strKey に値が設定されて無いなら strcpy でぶっ飛ぶのはあたりまえ。

823 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 13:02:48 ]
>>815
ごめん、確かに (名前空間名)::(列挙子名) は問題ないわ
どっかで Style::Style::None みたいなことしたから警告でたんだろうな
>>808 そのものは非標準ではありませんでした。
(>>813 の「列挙型の前方宣言」は非標準のはず)

824 名前:816 mailto:sage [2008/06/17(火) 13:07:13 ]
C言語はjavaのように自分で初期化しなくても
初期化されいてるとどこかで読んだ記憶があったので、
strcpyにて複写しても大丈夫かと思ってたのですが、、、駄目だったのですか?



825 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 13:11:13 ]
>>824
記憶があるのならどこで読んだか思い出して内容を確認してくれ。
たぶん間違いだから、 Web 上の記事なら晒して欲しい。

C言語で自動初期化(ゼロ初期化)が入るのは非ローカル変数かローカルで static な変数のみ。

826 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 13:36:19 ]
printf分でデバッグウィンドウに情報出力とか可能ですか?



827 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 13:49:18 ]
OutputDebugString関数

828 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 00:49:36 ]
>>816
MResultGroupってMatchingResultGroupのtypedefか?
resに色々格納って言ってるけど、MResultGroupのインスタンスはちゃんと確保されてるのか?
fGroup自体が0(NULLはC++では使わない方が良い)だったりしないか?
今回のエラーには関係ないけど、j < 9 は合ってるのか?j < 10じゃねーか?

829 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 12:44:12 ]
数分前まではちゃんと動いてたのに、
急にこんなエラーを吐き出しました。
開発ソフト:BCC Developer
状況:コンパイラもデバッカもライブラリも誤字脱字共に無い、
エラーの内容:
> C:\borland\bcc55\Bin\make.exe -fDebug\dxtest.mak -B TARGET
MAKE Version 5.2 Copyright (c) 1987, 2000 Borland
bcc32 -W -3 -Od -w- -AT -pc -H- -k -b -v -y -L..\DxLib -DDEBUG -nDebug -I..\DxLib -c C:\puroguram\dxtest\test.cpp
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
c:\puroguram\dxtest\test.cpp:
bcc32 -W -3 -Od -w- -AT -pc -H- -k -b -v -y -L..\DxLib -DDEBUG -eDebug\dxtest.exe Debug\test.obj
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Fatal: Could not open Debug\dxtest.exe (program still running?)
** error 1 ** deleting Debug\dxtest.exe
Build End !! (Elapsed time 0:07.578)

書いた物:
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ;//ウィンドウモードに変更する関数
if( DxLib_Init() == -1 ) return -1;//初期化処理する関数
LoadGraphScreen( 0 , 0 , "char.png" , TRUE ) ;//画像を表示する関数
WaitKey() ;//何か入力があるまで待つ関数
DxLib_End() ;//終了処理をする関数
return 0 ;
}

830 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 12:52:11 ]
>>829
エラーメッセージをよく読め。アドバイスしてくれてるじゃないか。

831 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 13:19:50 ]
>>830
もう一度よく調べてくる

832 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 13:35:52 ]
program still running?
program still running?
program still running?
program still running?
program still running?

833 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 13:51:11 ]
program still running? 訳(プログラム・動かない・見出し)

って意味であってる?

834 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 13:53:05 ]
つまらん



835 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 14:02:45 ]
ちゃんと辞書を引こう

836 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 14:06:46 ]
program still running? (訳:あなたは気が付いていないけれど プログラムは静かに動き続けているだろう。 私にその健気なプログラムを殺してしまえというのか?)

837 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 17:27:22 ]
はい、もちろん幸福です、親愛なるコンピュータ。

838 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 17:51:51 ]
c++で

for(int n=0;n<1;n++)
func();
for(n=0;n<1;n++)
func();

みたいなfor()の括弧内での変数の宣言のスコープって括弧内とそのforループ内に限定されますよね。
これって昔のバージョンだとforのブロック内でも有効だったりしました?(下のforでも有効だった?)

839 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 18:09:24 ]
>>838
C++ の仕様決定以前に先走り実装されたコンパイラはそうなってたりする。
MS VC++ 6.0 とか。

840 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 18:13:03 ]
C++でC#同様にインテリセンスを働かせる方法ってないですか?
いちいちALT→押すのが面倒です。

841 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 19:44:33 ]
何を使ってるかわからんもん

842 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 20:20:19 ]
プリコンパイル済みヘッダを複数指定することは出来ますか?

843 名前:デフォルトの名無しさん [2008/07/16(水) 15:14:24 ]
#ifdef XXX


#endif
で囲まれた部分がコンパイルされたかをコンパイル時に簡単に知る方法を教えてください


844 名前:デフォルトの名無しさん mailto:sage [2008/07/16(水) 15:15:06 ]
>>843
#ifdefと#endifの間に#errorと書く



845 名前:デフォルトの名無しさん mailto:sage [2008/07/16(水) 15:23:22 ]
>>843
XXX_defined とか XXX_undefined ってグローバル変数を定義しておいて
オブジェクの中に該当シンボルが存在するか否かを調べる
もしくは
コンパイラにアセンブラソース吐かして眺めてみる
もしくは
出来上がったオブジェクトファイルの逆アセンブルリストを眺める


846 名前:デフォルトの名無しさん mailto:sage [2008/07/16(水) 15:24:08 ]
>>845 すまんコンパイル時っての見てなかった。忘れてくれ


847 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 07:56:37 ]
#errorだとそこでコンパイルが終了してしまうかも。
実害のない警告が出るようにしておけばいい。たとえば
#ifdef XXX
#define XXX_DEFINED 0
#define XXX_DEFINED 1
...
#endif

848 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 08:45:39 ]
うわー、意味ねーw

849 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 16:42:29 ]
std::tr1::unordered_mapを使わないといけないんですが現在の環境(gcc3)には入っていません。
これはどのライブラリに入っていますか?

850 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 16:49:10 ]
>>849
STLport かな?

851 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 17:27:51 ]
>>850
STLportにありました。ありがとうございます。

852 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 17:30:06 ]
>>849
std::map じゃなくて unordered_map を「使わないといけない」状況って、どんなの?

853 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 17:47:57 ]
>>852
ビルドしようとしたソフトがunordered_mapを使っていたからですよ。

854 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 18:42:45 ]
vc++のデバッグの仕方が分からないんだけど
c#のconsole.writelineみたいにvcのデバッガに出力する方法ってないの?
outputdebugstring()とかやっても出てこないんだけど。



855 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 20:52:35 ]
>>854
出てるよ、見てるとこが違うだけだ

856 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 08:24:23 ]
>>854
MFCを使ってるならTRACEマクロ
ATLを使ってるならATLTRACEマクロ
WIN32APIだけならOutputDebugStringをじかに使う。
C++・CLIならC#と同じのが使える。

857 名前:デフォルトの名無しさん [2008/07/24(木) 17:21:59 ]
最近勉強始めた初心者です。すっげー初歩の質問で悪いんですけど、
関数の宣言のとこで、引き値とか戻り値とかそれ自体の説明は
分かるんですけど、その使い分けの所がいまいちピンとこなくて。

例えばint main(void)とintとかその辺自体は分かるんですけど、
返り値が無いならvoidとかの説明で、じゃあなんで
このときはvoid使わないんだとか、自分が一からプログラム組むと仮定して考えた場合、
その辺の区分けと言うか、使い分けが明瞭に納得がいかなくて。
いろんな解説読み漁ったんですけど、はっきり分かんなくて。

858 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 17:57:48 ]
>>857
引数は渡すもの、戻り値は返すもの。
渡すパラメータがなければ引数はvoid、返す結果がなければ戻り値はvoid、両方何もなければ両方void。

自分で1からプログラムを組む場合、関数がどのようなパラメータを取ってどのような結果を返すかは、自分の都合と独断と偏見で勝手に決める。
例えば・・・ファイルに文字列を書き込む関数を作ることにしたとすると、その関数にはたぶんファイル名と書き込む文字列を指定する必要があるだろう。
ファイル名が固定なら、書き込む文字列だけ指定すればいいかもしれない。
結果は特に何も要らないかもしれないし、書き込みに成功したか失敗したか知りたいかもしれない。
それは自分が (別の人が使う関数なら、その人が) どういった機能を必要としているかによって決める。

フルバージョンならたぶんこんな感じ
int write_text_to_file(const char *filename, const char *text);
成功/失敗といった結果は別に要らないと思ったなら、戻り値はvoidにして
void write_text_to_file(const char *filename, const char *text);
ファイル名は固定なので特に指定する必要はないと考えるなら、その部分は削って
void write_text_to_file(const char *text);
実は文字列も固定なんだ、って場合は、何も指定するものがないので
void write_text_to_file(void);

859 名前:デフォルトの名無しさん mailto:sage [2008/07/26(土) 01:22:48 ]
自分は引数voidの関数は滅多に作らないな。
グローバル変数使えば引数で渡さなくてもいいけど、
何をする関数なのかわかりにくくなるし。

860 名前:デフォルトの名無しさん mailto:sage [2008/07/26(土) 02:23:01 ]
渡す情報が要らないからvoidなんですよ。

861 名前:デフォルトの名無しさん mailto:sage [2008/07/26(土) 08:54:19 ]
そうそう、time()なんて愚の骨頂ですよ。

862 名前:デフォルトの名無しさん mailto:sage [2008/07/26(土) 09:38:10 ]
渡すものがなかったら、かわいい君に寄せる想いを僕調の曲にして渡せばいいじゃない。


863 名前:デフォルトの名無しさん mailto:sage [2008/07/26(土) 11:15:13 ]
>>862
華麗にスルーされる訳ですね。わかります。

864 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 12:19:58 ]
cin を使った入力ってメモリからあふれる位いっぱい入力した場合
バッファアンダーランとかになったりするの?



865 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 12:47:37 ]
なりません。そもそも、バッファアンダーランなんて現象自体、データストレージに関するものです。

866 名前:デフォルトの名無しさん [2008/08/03(日) 13:30:11 ]
Access Violationが出ているのですが、
 これはそのプロセスが確保していないメモリ空間から読み込もうと
したときに出るのですが?

867 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 13:38:36 ]
確保してない領域に書き込もうとしたときも出るし
確保されてても読み取り専用領域に書き込もうとしたときも出る

868 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 17:05:21 ]
>>866
そんなもん、環境によって違います。そもそも出ない環境だってたくさんあります。

869 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 17:07:36 ]
いつのまにかスタック領域がプログラムやデータを侵蝕して暴走を引き起こしていたあの頃を思い出します。
comファイルって、プログラムと同一セグメント内にスタック領域を確保するから、
プログラムとデータが大きいとすぐに侵蝕しちゃうんだよね。

870 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 10:51:08 ]
gccを使いたいんだけど、どれをインストールすればいいの?
日本語バージョンてないの?

871 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 10:58:38 ]
>>870
Linuxならデフォルトで入ってる
WindowsならMinGWをインストールする
Macなら知らない

872 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 10:59:39 ]
BSD/Solarisなどの*nix系なら標準で入ってる可能性が高い。

873 名前:870 mailto:sage [2008/08/04(月) 11:04:59 ]
レスどうもです。
OSを書き忘れてましたが、WinXPです。
GCCにはいろいろ亜種があるということかな?
どれが標準てこともないの?

874 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 11:13:40 ]
>>873
MinGWはあくまでgccを簡単にインストールするためのパッケージ。
gccであることに変わりはない。
gccのバージョン違いはたくさんあるね。3.4とか4.1とか。



875 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 11:18:14 ]
>>873
擬似Unix環境ごとインストールするならcygwinという選択もある。

876 名前:870 mailto:sage [2008/08/04(月) 11:38:46 ]
重ね重ね、どうもです。
MSYSなるものもありますね。
プログラミング目的ならMinGWとMSYSでいいのかな。

877 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 11:50:12 ]
これでMinGWとMSYSで作るものが単純なテキスト処理だったり数値処理だったりしたら大笑いだな。

878 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 13:13:21 ]
MSYSって日本語表示できないんだけど、どうにかならない?

879 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 16:36:01 ]
rxvt の引数を変えて、日本語フォントにすればいいのでは

880 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 20:48:53 ]
>>879
さんくす、やってみるよ。

881 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 21:21:24 ]
経過報告
MSゴシックだとうまく表示されなかった。
ぐぐってみてTerminal-14にしてみたけど、やっぱりうまく表示されなかた。

試したコマンド: ls /c/winnt
MSYS 1.0.10
rxvt 2.7.2

export LANG=ja_JP.Shift_jis とかやってもダメだった。
どうも根本的に何かを間違えてるのかなあ。
ま、いっか。

882 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 22:27:35 ]
>>881
-fn "MS ゴシック"-12

ls --show-control-chars /c/winnt

確認したら、LF改行コードのファイル~/.profile に
alias ls='ls --show-control-chars' を追加しておく

883 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 12:56:29 ]
>>882
ありがとう。
でも、俺の環境じゃ
ls --show-control-chars /c/winnt だと半角カナ混じりで化けた。

こんな具合いに: "ほげほげ.txt" → "・ル・ー・・ル・ー・.txt"

御協力感謝。


884 名前:デフォルトの名無しさん mailto:sage [2008/08/06(水) 01:47:00 ]
rxvt使わないで、コマンドプロンプト上でmsys使うと良いよ。
cygtermみたいなのがmsysにあるともっといいんだけど。



885 名前:デフォルトの名無しさん mailto:sage [2008/08/06(水) 02:30:38 ]
OS:Windows、コンパイラー:VC2005です。
CPUのクロック数を変化させる、もっとも簡単なコードを教えてください。

886 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 00:18:33 ]
int main(void){ while(1) {} }

対応CPUならこれでクロック上がる

887 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 00:59:32 ]
>>886
そうか、その手があったか!

888 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 09:27:45 ]
感動した

889 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 09:33:46 ]
クロックが上がるっつーか、CPUが音を上げそうだな。

890 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 12:49:00 ]
最近のだとスレッドで何本かまわさないとね

891 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 12:53:51 ]
最近のは他のコアが休んでるときはクロックあがるんだぜ

892 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 00:58:43 ]
なるほど!コロンブスのたまごですね。
クロックダウンのコード聞いたのですが・・・

893 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 03:01:06 ]
#include <stdio.h>
void main(void) { char i[256]; FILE* fp=fopen("C:\con\con","rb"); fread(&i, 1, 256, fp); fclose(fp); }

対応OSならこれでクロック下がる

894 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 21:27:50 ]
C++で
char* を バイト配列に変換するにはどうすればよいのでしょうか。
ちなみにchar*の中身は日本語文字列です。



895 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 21:44:54 ]
char*の中身はすでにバイト配列です
変換する必要はありません

896 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 22:46:39 ]
>>895
char配列とbyte配列はちがうような、、、

897 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 22:52:54 ]
charは1バイトの整数
charの配列は1バイト整数の配列すなわちバイト配列
何が違うというのか

898 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 22:54:40 ]
byteなんて型はないから
大概charをtypedefしたものなんじゃない?

899 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 23:12:14 ]
一応言っておくが、もしC#やJavaからやってきたというのなら、
それらの言語のcharに相当するC++の型はwchar_tだ。
wchar_t配列と(それらの言語でのバイト配列に相当する)char配列との変換には
mbstowcs, wcstombs関数がまあまあ手軽に使える。
もちろんwchar_tの入出力で間に変換が噛まされるのはC++でも同じだ。

900 名前:デフォルトの名無しさん [2008/08/13(水) 23:56:04 ]
C言語のマクロについて質問です、詳しい方助言ください。

__mulk(4) と記述することで、
"movl 4(%ebx),%eax \n"
という文字列( " "も含む)を吐き出すマクロを作りたいのですが、
次のように考えた結果これはうまくいきませんでした。

#define LTR(STR) #STR
#define COMMA ,

#define __mulk(A) LTR(movl A ## (%ebx) ## COMMA ## %%eax \n)

カンマをそのまま書いてしまうとマクロ__mulkが2つの引数を持っていると解釈されてしまうようです。

この回避方法はあるのでしょうか?環境はLinux,gcc 4.3.1です。

901 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 00:10:54 ]
#define __mulk(A) "movl " #A "(%ebx),%eax \n"

902 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 01:19:16 ]
>>901
なるほど・・・すばらしい。
どうもありがとうございました。

903 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 11:49:38 ]
プログラム実行時に引数を何も入力しなかった場合に、デフォルト引数を使いたいのですが、
どうもnullが入ってしまっていて、デフォルト引数が使えません。

どうすれば、デフォルト引数を使えるようになるか、教えていただけませんでしょうか。。。

int main (int argc,char *argv[])
{

  abc(argv[1]);
・・・・・


void abc(char *str = "STRING")
{

・・・

904 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 11:59:59 ]
>>903
これではだめ?
if (argc >= 2)
  abc(argv[1]);
else
  abc();




905 名前:903 mailto:sage [2008/08/14(木) 12:07:56 ]
>>904

早速の回答ありがとうございます。
すいません。書くのを忘れてました。。。
main文は他の誰かが書くとかで、できたら関数(abc)の中で処理したいのですがいい方法ありませんでしょうか。

906 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 12:15:52 ]
void abc(char *str)
{
if (str == NULL) str = "STRING";
...
}

907 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 12:17:48 ]
デフォルト引数にこだわる意味がわからん

908 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 12:26:00 ]
標準C/C++に準拠したコンパイラなら argv[argc] == NULL だから>>906で大丈夫だな

909 名前:903 mailto:sage [2008/08/14(木) 13:05:15 ]
>>906,908

無事できました!ありがとうございます。

>>907

C++のデフォルト引数が便利そうだったので、使ってみたかっただけでした。。。すいません


910 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 13:09:08 ]
デフォルト引数は、NULLのとき代わりに、という意味ではないよ
引数を渡さなかったときに使われるもの
argv[1]を渡せばargv[1]が渡る

911 名前:903 mailto:sage [2008/08/14(木) 13:12:19 ]
なるほど、、そういう意味だったのですね
いろいろとありがとうございました。

912 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 15:09:44 ]
コンストラクタやコピーコンストラクタでメモリの確保に失敗したら
どうすればいいですか?例外をなげたほうがいいのか、
成功か失敗のフラグをクラス内部でもつのか、作成及び複製専用の
関数を用意したほうがいいのかよくわかりません。
できれば、コンストラクタで失敗したならそのインスタンスは無効であることを
戻り値で返せればいいんですが無理ですよね。

913 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 15:44:26 ]
自分で投げなくてもnewに失敗したら勝手にstd::bad_alloc投げると思うけど

914 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 16:34:20 ]
unicodeって文字コード統一する目的で作られたんでしょ?
なんでいくつも形式が存在するの?



915 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 16:36:32 ]
>>914
1文字に4バイトも食うからそりゃ敬遠するでしょ

916 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 16:40:55 ]
>>914
キャラクタセットとエンコーディングは区別しろよ

917 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 17:37:50 ]
UnicodeとUTF-8の違いは?
pc11.2ch.net/test/read.cgi/tech/1177930957/

918 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 02:44:25 ]
if(A&&B&&C){...}

if(A){
 if(B){
  if(C){...}
 }
}

これだったらどっちが高速なのですか?

919 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 02:47:05 ]
なんでそんなに高速性を気にする?

920 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 02:48:39 ]
完全に興味本位です。


921 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 02:59:55 ]
>>918
生成されるコードを見るしかない。
コンパイラによって違うかもしれない。

だが多分ショートサーキットを考慮すれば同じコードを吐くだろう。

922 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 03:11:44 ]
なるほど。
ありがとうございます。非常に勉強になりました。

923 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 08:19:33 ]
コンテナに入れたデータを一定の時間間隔で処理するために
コールバッククラスのインスタンスでイテレータを保持するようにしたんだけど、
これってどう思う?

for (Hoge::iterator i = hoge.begin(); i != hoge.end(); ++i)
みたいな、その場のループで使い捨てする用途しか今まで見たことがなくて、ちょっと不安。

要素が増えも減りもしないことが分かっている場合は、ポインタと同じ感覚でいいのかな?

924 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 09:20:29 ]
>>923
どういうときにイテレータが無効になるかをきちんと把握して、
(ちなみにこれはコンテナの種類によって異なる)
自分も他人もそういうコードを書かないという確信があるならそれでいいんじゃない?

普通にコンテナのポインタなり参照なりを保持させればいいと思うけど、
それじゃ無理なわけ?



925 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 19:49:44 ]
>>924
コンテナの要素をどこまで処理したか覚えておきたいんだ。
wavのストリーム再生をイメージしてもらえれば近いかな。
コンテナのポインタなり参照なりを保持するとして、どうすればいいのか分からないです。

926 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 20:47:48 ]
>>925
コンテナの中身が書き換わらないならイテレータは無効にならない

927 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 01:09:12 ]
>>926
じゃぁ今回はイテレータ保持のままでいいか。どうもありがとう。
もっと色んなソース読んでみないとなぁ。自分のしていることが一般的なのか分からなくて不安。

928 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 01:02:11 ]
Cのif文について質問です

if(a>0xffffffff){ 命令; }

とするとコンパイラが 条件が常に真 と警告を吐きますが
普通に動作します

また  -1(0xffffffff) を -2(0xfffffffe) に変えるとその警告は無くなります

変数 a はunsigned int型です

なぜこの警告は出るのでしょうか。

929 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 01:42:01 ]
>>928 条件が常に真だからだよ。

930 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 01:49:46 ]
>>929
でも普通にその条件式が動作するのは何でなんだぜ?

931 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 01:54:36 ]
>>930
常に真だから

932 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 01:54:52 ]
>>930
条件式の結果が真であることは誤動作じゃないだろ。

933 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 01:54:53 ]
>>1読まなかった俺を許してくれ

934 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 01:56:45 ]
常に偽という気がする。
>>928
おまえんとこのunsigned intの範囲が0から0xffffffffなんだろう。
a>0xffffffffという条件はaがどんな値でも成り立たない。
だからのその命令;は絶対に実行されない。
だったら初めからifなんて書くなよ無駄だからというのがその警告だ。

0xfffffffeにすると、aが0xffffffffの場合だけそこが実行されるという
意味のあるif文が出来上がるので、警告にならない。

あと、0xffffffffは-1ではない、4294967295だ。0xfffffffeも同様に4294967294。



935 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 01:58:41 ]
>>934
ガチですまん
俺ホント馬鹿
吊ってくる

936 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 02:03:01 ]
無駄だからというより、なんか間違っていないかって注意を促す意味合いのほうがおっきい気がしてきた。

937 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 02:22:25 ]
>>934
ばーか。コンパイラが「常に真」と言ってるんだよ。なにが「常に偽という気がする」だよ。

938 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 02:28:18 ]
>>937
いやだってa>0xffffffffが常に偽になる場合は容易に思い付いたけど、
常に真になる状態は考え付かなかったから。
常に真でも偽でも同じメッセージを使い回しているだけだろうと思うことにした。

939 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 02:33:03 ]
sizeof(unsigned int)よりもsizeof(unsigned long int)の方が大きい環境なら、常に真になるんだけどね。

940 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 03:03:50 ]
なかなか面白いジョークだな

941 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 04:21:35 ]
>>928 とりあえずコンパイラとバージョン教えて。試してみたいから。

942 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 07:40:50 ]
フォントが小さいので 常に夏 に見えて仕方ない
イヤなスレだなぁ・・・と思ったらイヤなのは俺だった

943 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 16:17:34 ]
VCなんですが、例外処理 (初回) は test2.exe にあります:
0xC0000005: Access Violation。とでます。
ループの回数を減らせば通るのですが、ループ数を減らさずに
実行するにはどうすればよいでしょうか?
iのループは60、jのループは1500程度です。

for(i=0; i < font->Tnum; i++){
// 1ブロックのフォント収録数
fontnum = font->Block[i].End - font->Block[i].Start;
fputs("const char data[] = {\r\n\t", fp);
for(j = 0; j < fontnum * 24; j++){ // 1ブロックのフォント分繰り返す */
dt = *p++;
fputs("0x", fp);
sprintf(tmp, "%02x", dt);
tmp[2] = 0;
fputs(tmp, fp);
fputs(", ", fp);
ct++;
if(ct == 8){ // 改行
fputs("\r\n\t", fp);
ct = 0;
}
}
fputs("}\r\n\t", fp);
}

944 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 16:58:13 ]
>>943
デバッグすればいいよ・・・・・・・・・・・・・・・・・・



945 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 22:30:00 ]
ソース生成しているのか。くだらんなぁ。それはさておき、こりゃ酷い。
--
fputs("0x", fp);
sprintf(tmp, "%02x", dt);
tmp[2] = 0;
fputs(tmp, fp);
fputs(", ", fp);
--
fprintf(fp, "0x%02x, ", dt)で事が足りるだろうに。処で、tmpはどう宣言されているんだ?

946 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 13:01:48 ]
c++使ってるといちいち型変換がめんどくさいんだけど
一番簡単な方法はboostの変換ライブラリ使う事?
他にいい方法があれば教えてください。

947 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 14:53:32 ]
sendmessageでwm_copydataが送れないんですけど、
何かプロジェクトの設定とかが必要だったりします?
他のメッセージは送れるんですがこれはデータのコピーとかやってるのでその辺でこけてるのかなあと。

948 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 15:25:26 ]
GetLastErrorで原因調べた?

949 名前:947 mailto:sage [2008/08/29(金) 15:25:28 ]
sendmessageなのにスレッドループで捕まえようとしてました
解決しました


950 名前:デフォルトの名無しさん [2008/08/30(土) 07:51:33 ]
オブジェクトのメソッドの呼び出し規約ってどうなるんですか?


951 名前:デフォルトの名無しさん [2008/08/31(日) 12:07:46 ]
>>950
とりあえずぐぐろう

952 名前:デフォルトの名無しさん mailto:sage [2008/08/31(日) 12:18:42 ]
>>945
>>943ほどの低レベルなコードを書く奴ならどうせchar*tmp;と宣言していると予想

953 名前:デフォルトの名無しさん [2008/09/01(月) 08:01:13 ]
printfなどでの書式指定で、たとえば0.123の場合、
最初の0をつけずに、.123の様になるようにするには
どのように指定したらよいのでしょうか

954 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 08:41:46 ]
"%.3f"



955 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 10:23:10 ]
文字列を入力するときの例は、配列を使うものしか見たこと無いのですが、 
文字列を入力する場合は、常に配列を使わなければならないのでしょうか。 

たとえば、宣言は、 char st[100]; とかの例を見たりしますが、 
char st; だけじゃ不都合があるのでしょうか。文字が一文字しか入らないとか。。。 
 


956 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 11:15:33 ]
文字列 = 文字の配列
と思えばとりあえずなんとかなる

957 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 11:53:00 ]
>>955
Cには文字列形がないので、文字型の配列などに格納する必要がある。
文字型変数であるchar stには、当然ながら一文字しか入らない。

958 名前:デフォルトの名無しさん [2008/09/01(月) 21:53:28 ]
どなたかこの低脳野郎に知恵を授けてください・・・。実はいまC言語を学んでいるのですが
C言語はソフト開発が出来るのでしょうか?(窓の杜にあるようなやつ)
回答お願いします。

959 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 21:57:30 ]
低脳にもほどがある

960 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 22:11:12 ]
>>958
アインシュタインは紙と鉛筆で相対性理論を完成させたかもしれないが、俺にはできない。
たしかに偉大な先人達はCで作ったソフトを窓の杜に投稿したかもしれないが、
その軌跡を今の私たちが無理してなぞる必要は無いと思わないか。

ということで、もっと楽ちんな言語使おうぜ。
C++とか。

961 名前:デフォルトの名無しさん [2008/09/01(月) 22:48:25 ]
>>960
ありがとうございます。偉大な人とはいえ結局は人ですからがんばって見ます。


962 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 23:27:03 ]
がんばって何を見るというのだろう……

963 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 23:52:14 ]
そりゃあ、おい、青少年ががんばって見るといえばアレしかないだろ。
まぁ俺からのアドバイスとしては薄目にしても効果はないということだ。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<249KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef