スレを勃てるまでもないC/C++の質問はここで 4
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2008/09/17(水) 15:41:48過去ログ
スレを勃てるまでもないC/C++の質問はここで
http://pc11.2ch.net/test/read.cgi/tech/1167476845/
スレを勃てるまでもないC/C++の質問はここで 2
http://pc11.2ch.net/test/read.cgi/tech/1178503366/
スレを勃てるまでもないC/C++の質問はここで 3
http://pc11.2ch.net/test/read.cgi/tech/1187521676/
0542デフォルトの名無しさん
2008/12/09(火) 20:15:130543デフォルトの名無しさん
2008/12/10(水) 02:06:45「是」は「はい」だ
「対」が「そう」に近い
0544デフォルトの名無しさん
2008/12/10(水) 02:46:18対か。謝謝。
0545デフォルトの名無しさん
2008/12/10(水) 08:30:11つまり、「「はい」ではなく「いいえ」だとしても」という意味だね。
0546デフォルトの名無しさん
2008/12/10(水) 09:24:260547デフォルトの名無しさん
2008/12/10(水) 09:36:53台詞からして、相良軍曹だな。
0548デフォルトの名無しさん
2008/12/10(水) 12:46:39scanf()は入力したものを受け取る関数だと思うのですが、
受け取れる箇所は1つだけなのでしょうか?
例:scanf("%d",&a)は10進数で受け取り、aに保存?すると思いますが
scanf("%d",&a,&b)のように複数に保存できるようにはできないでしょうか?
変な質問でスマソ、意味がわからなかったら軽くスルーしてください orz
0549デフォルトの名無しさん
2008/12/10(水) 12:48:08scanf("%d %d", &a, &b);
//コンマ区切り
scanf("%d,%d", &a, &b);
0550デフォルトの名無しさん
2008/12/10(水) 17:40:07b=a;
とするしか。
0551デフォルトの名無しさん
2008/12/10(水) 18:09:08馬鹿だな。
0552デフォルトの名無しさん
2008/12/10(水) 21:41:53下記画像のようにスペース部分に色つき矢印やらドットやらが表示されて消えなくなってしまいました。
どこかでキーボード押し違えたみたいで・・
この設定の解除の仕方を分かる方いたら教えてください><
↓
http://imepita.jp/20081210/770880
0553デフォルトの名無しさん
2008/12/10(水) 21:42:55#-------------------------------------- リンカ(GUI)
linkexe = $(linkopt) -Tpe -aa
#-------------------------------------- リンカ(CONSOLE)
linkcon = $(linkopt) -Tpe -ap
#-------------------------------------- リンカ(DLL)
linkdll = $(linkopt) -Tpd -aa
linkconとlinkdllのマクロが使用されている箇所が、
この行以下にはありません。
しかし、linkconとlinkdllの記載を削除すると、リンク時にエラーが出ます。
$(name)T.EXE: FOO1.OBJ $(sobj) $(name)T.RES
$(linkexe) @&&|
$(C0GUI) FOO1 $(sobj)
$(linkout)$.
!if $(UseBCC)
$&
$(DebugLib) NOEH32 IMPORT32 CW32
!endif
$&.RES
|
質問
�@リンクエラーでは、 $(linkexe) @&&| という部分に関係がしていると思われるのですが、
@&&| の意味が分かりません。この意味について教えて頂けませんでしょうか。
または参考になるサイトがあれば、そちらを教えて頂きたいです。
�A$(linkout)$.
$. の意味も分かりません。
0554デフォルトの名無しさん
2008/12/10(水) 21:46:49Make専用スレへどうぞ。
>>552
VisualStudio専用スレへどうぞ。
どちらもC/C++の質問ではありませんね。
0555552
2008/12/10(水) 22:31:10またよろしくお願いします。
0556553
2008/12/10(水) 22:32:45またよろしくお願いします。
0557なめ
2008/12/10(水) 22:39:29というフォーマットのファイルがあるとします。
これを、それぞれを文字列として、構造体に格納するとします。
構造体の例:
struct{
std::string a; // IDを格納
std::string b; // 名前を格納
std::string c; // 性別を格納
}_dataType;
各行には、上記の3つのレコードだけだとして、
区切り文字は、半角空白か、Tab('\t')
行末には空白文字は許容するけど、それは、構造体の「性別」を格納する変数には
含まない
てな条件で、データファイルを読み込む場合、
std::stringで、std::getline() を使う
char * で、fstream::getline()をつかう
char * で、fgets()を使う
その他
どれが一番楽なのか教えてほしいっす。できれば、切り分けするところのサンプルなんかも。。。
環境:gcc + cygwin
できれば、Linuxにも流用したいので、Win系のライブライは使いたくないです。
0558デフォルトの名無しさん
2008/12/10(水) 22:45:46http://pc11.2ch.net/test/read.cgi/tech/1226229627/57,60-61
0559デフォルトの名無しさん
2008/12/10(水) 22:51:07短絡的な意味で最も簡単なのはfscanfだろうね
0560デフォルトの名無しさん
2008/12/10(水) 22:55:56char tId[1000];
char tName[1000];
char tGener[1000];
fscanf(fp, "%999s%999s%999s", tId, tName, tGender);
fclose(fp);
_dataType foo = {tId, tName, tGender};
0561デフォルトの名無しさん
2008/12/10(水) 23:16:19え?
0562デフォルトの名無しさん
2008/12/11(木) 09:02:29そういう質問みたいだが。
>>548
>scanf("%d",&a,&b)のように複数に保存できるようにはできないでしょうか?
>>557
楽なのは stream I/O で >> 演算子。
>>560
無根拠に1000とか。
0563デフォルトの名無しさん
2008/12/11(木) 10:21:06としたいだけだろ。b)を全角で書くような奴の質問だぞ。
0564デフォルトの名無しさん
2008/12/11(木) 10:41:120565デフォルトの名無しさん
2008/12/11(木) 11:56:03if elseで場合わけしてっていうのならわかりますが
0566デフォルトの名無しさん
2008/12/11(木) 12:09:060567デフォルトの名無しさん
2008/12/11(木) 12:13:53判定: (true→true)∨(false→false)
0568デフォルトの名無しさん
2008/12/11(木) 12:18:57言いたいことがよくわからん。
複数のフラグをint型の変数に保存していて、その簡単な取り出し方法
ということなら (質問の意味は) わかるが。
0569デフォルトの名無しさん
2008/12/11(木) 12:19:38すいません
0570デフォルトの名無しさん
2008/12/11(木) 12:21:340571デフォルトの名無しさん
2008/12/11(木) 12:22:20else flag = true;
これを一発でかけないものかと思ったんです
0572デフォルトの名無しさん
2008/12/11(木) 12:33:140573デフォルトの名無しさん
2008/12/11(木) 12:40:45flagがtrue, 0以外の値を取るときはだめ
0574デフォルトの名無しさん
2008/12/11(木) 12:49:020575デフォルトの名無しさん
2008/12/11(木) 12:49:120576デフォルトの名無しさん
2008/12/11(木) 12:55:36真偽値が入った変数ならif(flag)で良いのに
0577デフォルトの名無しさん
2008/12/11(木) 13:42:55if や while の条件式には比較演算子がないといけない、と
思い込む人が多いね。
0578デフォルトの名無しさん
2008/12/11(木) 13:57:10そうしたほうがわかりやすいから、わざわざそうしてるよ
0579デフォルトの名無しさん
2008/12/11(木) 14:02:250580デフォルトの名無しさん
2008/12/11(木) 14:05:130581デフォルトの名無しさん
2008/12/11(木) 14:05:360582デフォルトの名無しさん
2008/12/11(木) 14:09:26実行コードに差は出ないからどっちでもいいじゃん
0583デフォルトの名無しさん
2008/12/11(木) 14:29:29話題を実行コードに限定して「差は出ない」とか、どんだけ勝手なんだ。
0584デフォルトの名無しさん
2008/12/11(木) 15:03:40使ってない変数を放置とか、変数名に適当に連番つけちゃうタイプでしょ。
どうせ実行コードには関係ないしーって。
0585デフォルトの名無しさん
2008/12/11(木) 15:48:09というより、初心者は条件式について誤解してるんだよな。
ifやwhileが条件式を要求してる=条件式を解釈してると思ってるみたいな。
・条件式は値を返す
・if、whileなどは値が真か偽かを見てるだけ
ということを理解出来たらそんな誤解しないんだけどね。
0586デフォルトの名無しさん
2008/12/11(木) 16:00:46if((hoge=func()) != 0)
条件式の中で代入すんなって言われそうだがw
0587582
2008/12/11(木) 16:03:11変数名はきちんとつけるよ
0588デフォルトの名無しさん
2008/12/11(木) 16:15:01hoge=func()がブール型でないなら、!= 0はありだと俺は思うよ。
ブール型なら、次のどっちかにするけど。
1.
hoge = func();
if (hoge)
2.
if (bool hoge = func())
0589デフォルトの名無しさん
2008/12/11(木) 16:48:09int i = 0; // iに0を代入
こんなコメント付けるタイプですね?
0590デフォルトの名無しさん
2008/12/11(木) 17:10:38いや、iを0で初期化、だよ。
0591デフォルトの名無しさん
2008/12/11(木) 17:33:280592デフォルトの名無しさん
2008/12/11(木) 18:19:38だからお前修正前のコードを#if 0で残しておくなって
0593デフォルトの名無しさん
2008/12/11(木) 18:36:20・戻したくなる時とかあるでしょ
・修正に至る経緯を知るためにも大切なんですよ
あたりかな。
0594デフォルトの名無しさん
2008/12/11(木) 18:40:230595デフォルトの名無しさん
2008/12/11(木) 18:53:13コンフリクト祭りになるんだけど、どうにかならない?
0596なめ ◆dHe9wXXwgk
2008/12/11(木) 21:44:46ありがとうございます。
fscanf で、delimiterが、'\t'とか扱えるんですか?また、複数の' 'を1つの区切りとして扱えましたっけ?
>>560
ありがとうございます。
[1000]の部分は、可変長(極端な話、65535 とか)にしたいですが、その場合この方法だと難しいですよね
>> 562
>楽なのは stream I/O で >> 演算子。
ありがとうございます。
速度の面でどうなんでしょうか?
あと、delimiterが、TABの場合は可能でしょうか?
0597デフォルトの名無しさん
2008/12/11(木) 21:48:190598デフォルトの名無しさん
2008/12/11(木) 22:12:51スレ違いながらもいい機会だと思ったのになー
vcprojファイル内の順番がぐちゃぐちゃにならない方法でもいいんだけど。
0599デフォルトの名無しさん
2008/12/11(木) 22:36:31double log2(double a,double b){
return log(b)/log(a);
}
とやるしかないんかのぉ。
0600デフォルトの名無しさん
2008/12/11(木) 23:07:08なんでプロジェクトファイルをみんなで弄るんだ?
つーか、Subversionスレに行けって。
>>599
ない。
>>596
1000が65536でも別に構わんと思うが。どっちみち、最大サイズの仮定なんだから。
0601デフォルトの名無しさん
2008/12/12(金) 08:12:13ユーザーが入力するのは52進数か62進数のパスワードです。このとき変数がオーバーフローしないようにすることを考えると、
いちいち52進数ないし62進数の最大値を求めてそれ以上上がらないように設定するしかないでしょうか?
(例えばある桁がAで左の桁がBでさらにその左の桁がCならその桁は上げることができない)
それともif文でif(変数 + 上昇量 > 2147483647)のようにif文の中だけでオーバーフローするようなことができるのでしょうか?
0602デフォルトの名無しさん
2008/12/12(金) 08:27:5752進数は「A〜Z,a〜z」、62進数は「0〜9,A〜Z,a〜z」ってことか?
> if文でif(変数 + 上昇量 > 2147483647)のようにif文の中だけで
> オーバーフローするようなことができるのでしょうか?
可能かどうかと言えばできる。
環境や言語は知らんが、WindowsでVC++(MFC)なら、CEdit派生クラスで
OnCharをオーバーライドかな。
それよりも問題は、入力途中の段階で52進数か62進数かを、どうやって
判断するのかだ?
それと52進数で「A」と入力した時と、62進数で「A」と入力した時では、
数値に変換した際に値が違うのか?
0603デフォルトの名無しさん
2008/12/12(金) 08:32:20解答ありがとうございます。
52進数か62進数と言ったのは単に自分が仕様をまだ決めてないだけです。
環境はSolaris コンパイラはcc or gccです。
0604601
2008/12/12(金) 09:41:27pass[1] * 62 * 62 * 62 * 62 * 62 * 62 * 62 * 62 +
pass[2] * 62 * 62 * 62 * 62 * 62 * 62 * 62 +
pass[3] * 62 * 62 * 62 * 62 * 62 * 62 +
pass[4] * 62 * 62 * 62 * 62 * 62 +
pass[5] * 62 * 62 * 62 * 62 +
pass[6] * 62 * 62 * 62 +
pass[7] * 62 * 62 +
pass[8] * 62 +
pass[9] > 2147483647) pass[now_i]--;
実際にプログラミングしてみたらこのコードがうまく動きませんでしたどうしたらいいでしょうか?
0605デフォルトの名無しさん
2008/12/12(金) 09:44:24お馬鹿さんや、62の9乗を計算してご覧。
高高6桁で桁溢れするわけだが。
0606601
2008/12/12(金) 09:46:03でもオーバーフローするif文も書けるんじゃなかったんですか?
0607601
2008/12/12(金) 09:50:20pass[10] = 60 のときでも if文がなぜか false になってしまいます。
if(pass[10] * 62 * 62 * 62 * 62 +
pass[11] * 62 * 62 * 62 +
pass[12] * 62 * 62 +
pass[13] * 62 +
pass[14] > 99999) pass[now_i]--;
0608デフォルトの名無しさん
2008/12/12(金) 10:08:1162^ 4= 14776336
62^ 9= 13537086546263552
62^ 13= 200028539268669788905472
0609デフォルトの名無しさん
2008/12/12(金) 10:12:39プロジェクトにファイルを追加するのが複数人いるってそんなに珍しいことか?
うちはロックするようにして回避してる。
>>607
うちではtrueになるよ。
0610デフォルトの名無しさん
2008/12/12(金) 10:53:05if((最大値-進数) < 前の桁までの合計値 ) && (新しい桁の数値 > (最大値-前の桁までの合計値))
{
//オーバーフロー処理
}
あってるかどうかは試してないから分からんが方向性はこんなんのはず
オーバーフローする直前のタイミングを捕まえて、本当にオーバーフローするかどうかを「オーバーフローさせないで」判定する
0611デフォルトの名無しさん
2008/12/12(金) 12:01:54なるほど!!!式変形すれば良かっただけでしたか。
その方針でプログラミングしてみます。
0612デフォルトの名無しさん
2008/12/12(金) 12:04:52あと、unsignedなら42億じゃないかと思う。
0613デフォルトの名無しさん
2008/12/12(金) 12:20:51うちの環境では unsigned u; と定義した変数が21億までしか持てませんでした
あとなぜかオーバーフローしたら負の値になりました。
0614613
2008/12/12(金) 12:28:28unsignedの最大値は42億かもしれません。
0615デフォルトの名無しさん
2008/12/12(金) 12:51:040616デフォルトの名無しさん
2008/12/12(金) 13:15:050617デフォルトの名無しさん
2008/12/12(金) 14:26:47約9.6桁。
0618デフォルトの名無しさん
2008/12/12(金) 14:32:32unsignedが負になるわけないだろ
どうみてもsigned longの値
0619デフォルトの名無しさん
2008/12/12(金) 15:01:480620デフォルトの名無しさん
2008/12/12(金) 18:58:41int NUM = 100; グローバル変数
int func(){
NUMを使う
}
とするのと
int func(int NUM){
}
int main(){
int NUM =100;
func(NUM);
}
では実行速度かわりますかね??funcを1000回ぐらい呼び出すんですが・・・
0621デフォルトの名無しさん
2008/12/12(金) 19:06:30って思ってるのであれば全く問題ない最適化の対象だからうまいことやってくれる
つか高々1000回かよwwwwwww
0622デフォルトの名無しさん
2008/12/12(金) 19:30:09余分な命令が実行されるので、実行速度は確実に変わる。
でも1000回なら誤差の範囲。
0623デフォルトの名無しさん
2008/12/12(金) 19:37:18嘘をいうな
ためしてみろよ
0624デフォルトの名無しさん
2008/12/12(金) 19:50:08前者
main:
pushl %ebp
movl %esp, %ebp
subl $8, %esp
andl $-16, %esp
movl $0, %eax
addl $15, %eax
addl $15, %eax
shrl $4, %eax
sall $4, %eax
subl %eax, %esp
call func
leave
ret
0625デフォルトの名無しさん
2008/12/12(金) 19:50:51後者
main:
pushl %ebp
movl %esp, %ebp
subl $8, %esp
andl $-16, %esp
movl $0, %eax
addl $15, %eax
addl $15, %eax
shrl $4, %eax
sall $4, %eax
subl %eax, %esp
movl $100, -4(%ebp)
pushl -4(%ebp)
call func
addl $4, %esp
leave
ret
0626デフォルトの名無しさん
2008/12/12(金) 19:52:05>>625
それがわかるんなら話は早いな
最適化かけてから見直せ
0627デフォルトの名無しさん
2008/12/12(金) 20:06:17前者
main:
pushl %ebp
movl %esp, %ebp
subl $8, %esp
andl $-16, %esp
subl $16, %esp
call func
leave
後者
main:
pushl %ebp
movl %esp, %ebp
subl $8, %esp
andl $-16, %esp
subl $28, %esp
pushl $100
call func
leave
ret
0629デフォルトの名無しさん
2008/12/12(金) 20:43:270630デフォルトの名無しさん
2008/12/12(金) 22:23:16おい、こら。自信満々に難癖つけといて、無言で逃亡か?
0631デフォルトの名無しさん
2008/12/12(金) 23:54:45今時のコンパイラなら、func()をインライン展開してしまうからイミディエイトプッシュのコストは消えるだろうね。
つーか、速度気にしてグローバル変数使う前に、func()にstaticつけておけよ。
0632デフォルトの名無しさん
2008/12/13(土) 00:31:14コンパイラが頑張っても、引数をレジスタに乗っけるコードは余計に必要。見苦しいぞ。
「私が未熟でした。ごめんなさい」くらい言えんのか。
static云々は>>620に言え。本当にstaticが不要なのかは>>620じゃなきゃわからん。
0633631
2008/12/13(土) 00:37:07見苦しいも何も、この話題に乗るのは>631が初めてだけど。
レジスタに乗せるコードは要るかなぁ。少なくとも、グローバル変数を取ってくるよりはコスト掛からないよ。
0634デフォルトの名無しさん
2008/12/13(土) 00:47:26グローバル変数だとマルチスレッドとか考慮して都度メモリにアクセスするコードを出すから、
頻繁にグローバル変数へアクセスするコードは遅いって聞いたことがある。
0635デフォルトの名無しさん
2008/12/13(土) 00:49:28グローバルから取ってくるのと同じコストはかかる。
0636デフォルトの名無しさん
2008/12/13(土) 08:19:04それはあるね。global 変数は volatile が付いているのと
同様に最適化されなくなる
>>620には関係ない話だけど
0637デフォルトの名無しさん
2008/12/13(土) 12:00:00volatileついてないグローバル変数の最適化を行わないコンパイラなんて聞いたことないな。
伝聞でなくソースだせ。
ついていない場合、最適化をできるとしている文書(あんたらの主張の逆)
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0205hj/CJAEGDEA.html
一方、変数が volatile として宣言されていない場合、コンパイラはその値を実装の外部で変更できない
ものと見なすことができます。 そのため、コンパイラは変数に対する最適化を実行できます。
0638デフォルトの名無しさん
2008/12/13(土) 14:18:110639デフォルトの名無しさん
2008/12/13(土) 14:46:240640デフォルトの名無しさん
2008/12/13(土) 23:29:00逆にこっちは、グローバル変数ではなくメンバ変数だけど、
いずれにせよ自動変数との差が出るという話。
http://www.emit.jp/prog/prog_opt0.html
0641デフォルトの名無しさん
2008/12/14(日) 00:30:442 for(int j = 0; j < nSize; j++) pBuffer[j] = i;
1はグローバル変数、2は自動変数
■ このスレッドは過去ログ倉庫に格納されています