はきだめC/C++下級者 ..
[2ch|▼Menu]
849:デフォルトの名無しさん
08/07/20 16:42:29
std::tr1::unordered_mapを使わないといけないんですが現在の環境(gcc3)には入っていません。
これはどのライブラリに入っていますか?

850:デフォルトの名無しさん
08/07/20 16:49:10
>>849
STLport かな?

851:デフォルトの名無しさん
08/07/20 17:27:51
>>850
STLportにありました。ありがとうございます。

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

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

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

855:デフォルトの名無しさん
08/07/23 20:52:35
>>854
出てるよ、見てるとこが違うだけだ

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

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

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

858:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/07/26 01:22:48
自分は引数voidの関数は滅多に作らないな。
グローバル変数使えば引数で渡さなくてもいいけど、
何をする関数なのかわかりにくくなるし。

860:デフォルトの名無しさん
08/07/26 02:23:01
渡す情報が要らないからvoidなんですよ。

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

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


863:デフォルトの名無しさん
08/07/26 11:15:13
>>862
華麗にスルーされる訳ですね。わかります。

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

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

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

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

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

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

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

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

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

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

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

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

876:870
08/08/04 11:38:46
重ね重ね、どうもです。
MSYSなるものもありますね。
プログラミング目的ならMinGWとMSYSでいいのかな。

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

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

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

880:デフォルトの名無しさん
08/08/04 20:48:53
>>879
さんくす、やってみるよ。

881:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/08/04 22:27:35
>>881
-fn "MS ゴシック"-12

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

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

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

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

御協力感謝。


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

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

886:デフォルトの名無しさん
08/08/08 00:18:33
int main(void){ while(1) {} }

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

887:デフォルトの名無しさん
08/08/08 00:59:32
>>886
そうか、その手があったか!

888:デフォルトの名無しさん
08/08/08 09:27:45
感動した

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

890:デフォルトの名無しさん
08/08/08 12:49:00
最近のだとスレッドで何本かまわさないとね

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

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

893:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/08/13 21:27:50
C++で
char* を バイト配列に変換するにはどうすればよいのでしょうか。
ちなみにchar*の中身は日本語文字列です。

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

896:デフォルトの名無しさん
08/08/13 22:46:39
>>895
char配列とbyte配列はちがうような、、、

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

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

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

900:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/08/14 00:10:54
#define __mulk(A) "movl " #A "(%ebx),%eax \n"

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

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

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

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

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


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

・・・

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


905:903
08/08/14 12:07:56
>>904

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

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

907:デフォルトの名無しさん
08/08/14 12:17:48
デフォルト引数にこだわる意味がわからん

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

909:903
08/08/14 13:05:15
>>906,908

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

>>907

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


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

911:903
08/08/14 13:12:19
なるほど、、そういう意味だったのですね
いろいろとありがとうございました。

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

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

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

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

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

917:デフォルトの名無しさん
08/08/14 17:37:50
UnicodeとUTF-8の違いは?
スレリンク(tech板)

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

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

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

919:デフォルトの名無しさん
08/08/15 02:47:05
なんでそんなに高速性を気にする?

920:デフォルトの名無しさん
08/08/15 02:48:39
完全に興味本位です。


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

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

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

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

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

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

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

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

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

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

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

928:デフォルトの名無しさん
08/08/26 01:02:11
Cのif文について質問です

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

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

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

変数 a はunsigned int型です

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

929:デフォルトの名無しさん
08/08/26 01:42:01
>>928 条件が常に真だからだよ。

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

931:デフォルトの名無しさん
08/08/26 01:54:36
>>930
常に真だから

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

933:デフォルトの名無しさん
08/08/26 01:54:53
>>1読まなかった俺を許してくれ

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

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

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

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

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

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

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

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

940:デフォルトの名無しさん
08/08/26 03:03:50
なかなか面白いジョークだな

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

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

943:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/08/27 16:58:13
>>943
デバッグすればいいよ・・・・・・・・・・・・・・・・・・

945:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/08/29 13:01:48
c++使ってるといちいち型変換がめんどくさいんだけど
一番簡単な方法はboostの変換ライブラリ使う事?
他にいい方法があれば教えてください。

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

948:デフォルトの名無しさん
08/08/29 15:25:26
GetLastErrorで原因調べた?

949:947
08/08/29 15:25:28
sendmessageなのにスレッドループで捕まえようとしてました
解決しました


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


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

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

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

954:デフォルトの名無しさん
08/09/01 08:41:46
"%.3f"

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

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


956:デフォルトの名無しさん
08/09/01 11:15:33
文字列 = 文字の配列
と思えばとりあえずなんとかなる

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

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

959:デフォルトの名無しさん
08/09/01 21:57:30
低脳にもほどがある

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

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

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


962:デフォルトの名無しさん
08/09/01 23:27:03
がんばって何を見るというのだろう……

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


最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4765日前に更新/249 KB
担当:undef