C言語なら俺に聞け(入門編)Part 68
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2010/08/23(月) 13:08:40★前スレ
C言語なら俺に聞け(入門編)Part 67
http://hibari.2ch.net/test/read.cgi/tech/1278759538/
★過去スレ
http://makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
★初心者、初級者の方は他の質問スレのほうが良いかもしれません。
例えば
【初心者歓迎】C/C++室 Ver.73【環境依存OK】
http://hibari.2ch.net/test/read.cgi/tech/1274395127/
とか
★教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 137代目
http://pc12.2ch.net/test/read.cgi/tech/1276810079/
★C++言語については避けてください。C++対応明記スレへどうぞ
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
# 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
# サイズが大きい場合は宿題スレのアップローダ等を利用してください
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
0002デフォルトの名無しさん
2010/08/23(月) 13:30:170003デフォルトの名無しさん
2010/08/23(月) 13:31:380004デフォルトの名無しさん
2010/08/23(月) 13:36:24int main(void) {
int a=3 , b=6;
swap( int , a , b );
return 0;
}
0005デフォルトの名無しさん
2010/08/23(月) 13:52:340006デフォルトの名無しさん
2010/08/23(月) 14:12:55buf[0] = time[index*2];\
buf[1] = time[index*2+1];\
buf[2] = '\0';
この前処理の「\」は何を意味しているんでしょうか?
どなたかご助言お願いします。
0007デフォルトの名無しさん
2010/08/23(月) 14:16:15#defineマクロは改行までだから、複数行に分けて書くには\が行末に必要
0008デフォルトの名無しさん
2010/08/23(月) 14:19:40見やすくするために「¥」を使ってたんですね。
すばやいご助言どうもありがとうございました。
0009デフォルトの名無しさん
2010/08/23(月) 15:50:44#define swap(a, b) (a = a - b, b = a + b, a = b - a)
このくらい直ぐに思いついて欲しいけどね
0010デフォルトの名無しさん
2010/08/23(月) 15:51:31ださい
0011デフォルトの名無しさん
2010/08/23(月) 16:01:130012デフォルトの名無しさん
2010/08/23(月) 16:02:55でたよ、主観でしかものが言えない理解力の無いバカ
お前の顔の方がもっとダサいからw
そしてお前の書くコードは幼稚そのもの
他者批判しか出来ない奴ほど、実は大勢から批判される対象となるくらい
程度の低いバカ、なのは国会の野党を見ても分かることw
0013デフォルトの名無しさん
2010/08/23(月) 16:02:57xor技法と同じ臭いがする
0014デフォルトの名無しさん
2010/08/23(月) 16:03:33「何が」ダサいのか、答えてみ。コードの意味も理解できない池沼w
0015デフォルトの名無しさん
2010/08/23(月) 16:04:31稚拙な感想しか言えないんですね、自分の技能も証明できない癖に
他者を上から目線で評価する卑怯者ってwwwwww
0016デフォルトの名無しさん
2010/08/23(月) 16:06:090017デフォルトの名無しさん
2010/08/23(月) 16:06:15別にあれが格好良いなんて思わないがお前がダサいと思った理由が分からん。
それじゃどんなスタイルが良いんだ???
どの道、コードなんて文字列の見た目じゃない、効率の良い手法、スタイルが重要。
お前みたいな見た目ばかりに気を取られて、内容が薄い冗長なコードこそ
無駄でダッセーからw
0018デフォルトの名無しさん
2010/08/23(月) 16:07:170019デフォルトの名無しさん
2010/08/23(月) 16:07:36主観?
マクロで型を引数として与えるなんて、まともなプログラマなら敬遠するよ。
>>9 の方が全然スマートじゃん。
それがわからないって、センス無さすぎだよ、君!
0020デフォルトの名無しさん
2010/08/23(月) 16:09:59ttp://www.bohyoh.com/CandCPP/FAQ/FAQ00008.html
ttp://www.bohyoh.com/index.html
そんなこと言えるお前は、誇れるよなカッコイイスタイルのコードが記述された
売れてる本を出版しているんだろうな?別にBohYohを賛美するつもりは無いが
匿名でこそこそ意見するお前みたいな屑が嫌いなだけ。実力も無い癖に
齧った程度の知識で偉そうにしやがって。プログラミングは
ファッションスタイルを審査する分野じゃねーの。効率の良い流れが重要。
それから纏まって見易い、他人が理解しやすいコードも。
0021デフォルトの名無しさん
2010/08/23(月) 16:10:270022デフォルトの名無しさん
2010/08/23(月) 16:10:350023デフォルトの名無しさん
2010/08/23(月) 16:11:14鏡を見ろよ?お前の面の方が100万倍ダッセーし
コードも稚拙だろうからw
0024デフォルトの名無しさん
2010/08/23(月) 16:11:40オーバーフローの恐れがある
浮動小数点数型なら誤差評価もめんどい
同様の理由で乗除算を使う方法も却下
0025デフォルトの名無しさん
2010/08/23(月) 16:12:44マクロの意味も理解できない厨房必死だなw
で、どこがダサいの?お前の意見を言ってごらん。
どうせ言ったことに対して、相手に理解されなくて
自分こそが批判され孤立するのが怖いんだろ?w
所詮、原則匿名の無責任な発言を平気でする
2ちゃんねらーだもんな、お前もw
0026本日の一番稚拙で最低な発言
2010/08/23(月) 16:14:15>>4
ださい < プッ
お前はマクロスでも見てろ、カッコイイロボットに乗っているよなw
0027デフォルトの名無しさん
2010/08/23(月) 16:14:25より問題が多い方選んどいてスマート云々センス云々
君ただの馬鹿じゃん
0028デフォルトの名無しさん
2010/08/23(月) 16:16:03お前はファッションチェックをするピーコかっ!?
コードはファッションじゃねーのw
お前の理解力のなさはおすぎもビックリだぜ。
もうレス番真っ赤w
0029デフォルトの名無しさん
2010/08/23(月) 16:17:29別にお前が使わなくても良いから。変数ごとに逐一
入れ替え用の関数でも書いて、長ったらしいコードにしてろやw
0030デフォルトの名無しさん
2010/08/23(月) 16:17:470031デフォルトの名無しさん
2010/08/23(月) 16:19:200032デフォルトの名無しさん
2010/08/23(月) 16:21:11このマクロさえ使いこなせば、変数名や型が違っていても
共有できる利便性があるのに、それが理解できないとは・・・
もはやこいつには何を言っても無駄でしょうね。
態々、その時々でswap用の変数を宣言し、変数名ごとに
サブルーチンを記入したら?それこそマンドクセッしダッセ。
0033デフォルトの名無しさん
2010/08/23(月) 16:24:32ダサいと言うならお前が思うかっこいいスタイルで記述してよ?
お前が書いたものの方が冗長で効率も良く無くダサいだろうけどw
で、例のマクロの何がダサいんだよ?お前みたいなブサメンに
ダッセーとか言われたら、イケメソのBohYoh先生も報われないわ。
失礼だろがー。そこまで言うならまずお前が名乗れよ?
今後は、ダサいと言ったお前は必ずそれ以上のコードを書いて意見をすること。
それが出来ないで匿名で陰口叩くだけの雑魚は黙ってろよ。
0034デフォルトの名無しさん
2010/08/23(月) 16:27:15ここまで集中攻撃を受けているんだ、それをダサいと言った
お前がどんなコードを書くか示してくれないか?
もちろん、誰が見てもお前の方がカッコ(・∀・)イイんだろうな?
ダサかったらプゲラッチョしちゃうよ?
1度だけチャンスをやる。あれと同じかそれ以上に効率の良い動作をする
お前がダサくないと思うマクロを書いてみろ。
書かなかったらお前の負けなw
0035デフォルトの名無しさん
2010/08/23(月) 16:28:53どうしました?マクロでここまで叩かれて降参して
マグロになっちゃいましたか?ん?w
ダサいとかダサくないとかじゃないんだよ、コードの意味も
可搬性、汎用性も理解できない青二才の戯けが!
0036デフォルトの名無しさん
2010/08/23(月) 16:34:12>ダッセーとか言われたら、イケメソのBohYoh先生も報われないわ。
ださいに加えて、きもい
0037デフォルトの名無しさん
2010/08/23(月) 16:36:27理解力の無い物事を適切に判断できない、偏った価値観を持った
未熟者って言動からして幼稚だよな。だから余計な一言で
周りから批判、非難されて干されて2ちゃんなんかで匿名で
こそこそ活動するようになったんだろ。そういう下衆って責任感が無いから
2ちゃんでも言うことが無責任。あのマクロがダサいとかカッコイイとか
どうでも良いわ。バラせば所詮、半角英数文字だしw
まさか、自分が好きな文字列なら良いの?例えば
#define dasai( type , x , y ) do{ }while(0) とか?w
もちろんこれでも入れ替えは可能ですよ?コードの中で例えばint型の変数a,bなら
dasai( int , a , b ); と書いてごらん。別にマクロではswapという文字列でなくても構わないんだよ。
ただ、マクロで定義した文字列を用いれば良いんだし。
0038デフォルトの名無しさん
2010/08/23(月) 16:39:55>>10 さんに見習って
#define dasai( type , x , y ) do{ type t=x; x=y; y=t; }while(0)
でコードの中では dasai ( 変数の型 , 入れ替える対象の型の変数名1 , 変数名2 );
といった形で書きますか。別に俺はそれでも良いよ。動作は同じだからw
0039デフォルトの名無しさん
2010/08/23(月) 16:43:14do-while() で囲むというのはよくきくが、その前に、
http://www.bohyoh.com/CandCPP/FAQ/FAQ00008.html
の人はマクロ引数の展開先を () でくるむことはしないんですかね?
#define swap(type, x, y) do {type t; t=x; x=y; y=t; } while (0)
よりも
#define swap(type, x, y) do {type t; t=(x); (x)=(y);(y)=t; } while (0)
のほうをよくみかけるのだが?
柴田望洋氏はきらいではないのであけれども、int main() の件といい、この FAQ 集はつっこみどころが残っているようですね。
0040デフォルトの名無しさん
2010/08/23(月) 16:48:50>>10 お前の幼稚なクソァーコードの方が邪道でダサいんだよ!
0041デフォルトの名無しさん
2010/08/23(月) 16:49:58ダサいのはむしろお前の方。
0042デフォルトの名無しさん
2010/08/23(月) 16:50:08いやまて、swapだぞ
なにを渡す気だよwwww
0043デフォルトの名無しさん
2010/08/23(月) 16:51:42#define swap(pa, pb) ( *(pa) ^= *(pb), *(pb) ^= *(pa), *(pa) ^= *(pb) )
↑を流行らせようとして失敗したんですね?分かりますw
0044デフォルトの名無しさん
2010/08/23(月) 16:51:550045デフォルトの名無しさん
2010/08/23(月) 16:52:36杓子定規で内容考えずに教わった通りにやろうとしてる人、多いよねw
0046デフォルトの名無しさん
2010/08/23(月) 16:52:38さらに権威のある C FAQ では
http://www.kouno.jp/home/c_faq/c10.html#3
>一番の万能の解決方法は、マクロを使うことを考えないことだ。ただ し型を渡すために第三の引数を渡すのが面倒でないなら話は別だ。
0047デフォルトの名無しさん
2010/08/23(月) 16:53:20#define swap(pa, pb) ( *(pa) ^= *(pb), *(pb) ^= *(pa), *(pa) ^= *(pb) )
ですよね。コード・覚えていますか?
0048デフォルトの名無しさん
2010/08/23(月) 17:02:420049デフォルトの名無しさん
2010/08/23(月) 17:04:21細かいこと言い始めると、
いろいろ破綻するケースが出てきちゃうので、その辺で妥協するしかないんじゃないかね
副作用が複数起こってる時点で、おそらく既に本来あるべき挙動ではない
型を得るtypeof的なものと、
衝突しない識別名を返す(Lispのgensym的な)ものがあれば
もうちょっと堅牢なswapマクロも書けるかも、とは思う
まあそういう小手先の話よりは、インライン関数があればねw
0050デフォルトの名無しさん
2010/08/23(月) 17:12:370051デフォルトの名無しさん
2010/08/23(月) 17:21:43#include <stdlib.h>
#include <string.h>
typedef unsigned char uc;
typedef struct tagC { uc c[4]; int b; } C;
static int str2utf8(C* d, uc* s) {
uc h=*s;
if((h&0x80)==0){d->b=1; memcpy((void*)d->c,(void*)s,d->b);}
else {
if((h&0x40)==0){return 1;}
else {
if((h&0x20)==0){d->b=2; memcpy((void*)d->c,(void*)s,d->b);}
else {
if((h&0x10)==0){d->b=3; memcpy((void*)d->c,(void*)s,d->b);}
else {d->b=4; memcpy((void*)d->c,(void*)s,d->b);}
}
}
}
return d->b;
}
static void put_utf8(C* a){int i=a->b; uc* p=a->c; while(i-->0){putchar(*p++);}}
static void str2utf8s(C* d, uc* s){do{s+=str2utf8(d++,s);}while(*s!='\0');}
static void put_utf8s(C* a){while(*a->c!='\0'){put_utf8(a++);}}
static int len_utf8s(C* a){int i=0;while(*a->c!='\0'){a++; i++;} return i;}
static void rev_utf8s(C* d, C* s, int l){int i=len_utf8s(s); i=(i>l)?l:i; s+=i-1; while(i-->0){*d++=*s--;}; str2utf8s(d,"のん♪(^_^/\0");}
void main(){
char s[0xFFFF]; printf("文字列を入力してくださいのん。(100文字以内のん)\n"); scanf("%s",s);
C u[0xFFFF]; str2utf8s(u,s); C iu[0xFFFF]; rev_utf8s(iu, u, 100); put_utf8s(iu); printf("\n");
}
005251
2010/08/23(月) 17:23:13だめだ〜… どうしても語尾に「のん」って付いちゃうバグが取れないのん… Σ(・_・アっ!!
文字列を入力してくださいのん。(100文字以内のん)
aiueokakikukeko
okekukikakoeuiaのん♪(^_^/
文字列を入力してくださいのん。(100文字以内のん)
あいうえおかきくけこ
こけくきかおえういあのん♪(^_^/
文字列を入力してくださいのん。(100文字以内のん)
☆まいんちゃん☆lovelove萌へぇ〜〜♪
♪〜〜ぇへ萌evolevol☆んゃちんいま☆のん♪(^_^/
ちなみにプラットフォームはウブンチュ10.04なのん… Σ(・_・アーーっ!! だからかっ!?
005351
2010/08/23(月) 17:29:09自己解決しましたのん♪
おさがわせしたでござるのんのん(=⌒▽⌒=) ニャハハハ♪
0054デフォルトの名無しさん
2010/08/23(月) 17:37:40そうですね。
それにしても、たしかにインラインがあるといいのですけどね。C で問答無用にインラインにしてくれる処理系ありませんかね。
0055デフォルトの名無しさん
2010/08/23(月) 17:37:57お前の主観がこの世の全てに通じる訳でもないだろJK
0056デフォルトの名無しさん
2010/08/23(月) 17:41:19java にも c# にも #define はない。c++ でもお利口さんはつかわない。
0057デフォルトの名無しさん
2010/08/23(月) 17:49:15けど、今時ほとんどの環境で使えるわけだし、
使える環境なら使えばいいよ。
そういう環境でもマクロでごちょごちょするのは問題あるよ。
このスレに居るような望月を神だと思ってる人は
C++でもスワップが必要なら例のマクロ使うんだろうな。
指導しても有名な先生が書いてるとか言って聞かないんだよねw
0058デフォルトの名無しさん
2010/08/23(月) 17:51:37そして a[i] と a[j] の交換で i==j のケース発覚⇒はまりに陥る と
0059デフォルトの名無しさん
2010/08/23(月) 17:52:55defineマクロしか使えないことが一番ダサいw
0060デフォルトの名無しさん
2010/08/23(月) 18:08:10今調べてみると、C99 なら問答無用でインラインにしてくれるんですね。
それにしても、彼は、規格まで引用して説明したというのに、全然きかないんですよね。
0061デフォルトの名無しさん
2010/08/23(月) 18:14:58そんな存在だよ
0062デフォルトの名無しさん
2010/08/23(月) 18:28:37プログラミングの腕も低い未熟者
0063デフォルトの名無しさん
2010/08/23(月) 18:39:09自己紹介かw
0065デフォルトの名無しさん
2010/08/23(月) 18:55:37このコードはとっくに、数年前にこの板、多分このスレで使われてたよ。
今さら過ぎて知らない奴は無知だろw
0066デフォルトの名無しさん
2010/08/23(月) 18:58:41ttp://mimizun.com/log/2ch/tech/pc11.2ch.net/tech/kako/1233/12339/1233962622.dat
そう古くないログでさえ用いられているのに、今さら過ぎて話しにならん。
頼むから知ったか無知の夏厨は少し黙っていてくれないか?
>>10 とか >>9 とか、無駄にスレが伸びるからうぜぇ
0067デフォルトの名無しさん
2010/08/23(月) 19:00:00というか C FAQ で述べられ済みですが。http://www.kouno.jp/home/c_faq/c10.html#4
0068デフォルトの名無しさん
2010/08/23(月) 19:00:23駄目だこいつ。本書くだけで実務レベルのプログラムとか書けないんだろうな。
教祖が使えない奴だから、当然信者もそれ以下だわな。
0069デフォルトの名無しさん
2010/08/23(月) 19:03:10お前がスレを伸ばしてる張本人だろう。
sageることも知らないお馬鹿さんよ。
0070デフォルトの名無しさん
2010/08/23(月) 19:25:24#include <stdlib.h>
#include <string.h>
// a と b をいれかえる(どっちも同じサイズと仮定する)
// sz には a または b のサイズをかく(どっちも同じサイズという前提)
void nandemo_swap(void* a, void* b, const int sz) {
char t[sz];
memcpy((void*)t, a, sz);
memcpy(a, b, sz);
memcpy(b, (void*)t, sz);
}
void main() {
// 数字の入れ替え
int a=1; int b=2; printf("%d, %d\n",a,b);
nandemo_swap(&a, &b, sizeof(int)); printf("%d, %d\n",a,b);
//文字列の入れ替え(ただし、どっちも4文字)
char c[]="ABCD"; char d[]="EFGH"; printf("%s, %s\n",c,d);
nandemo_swap(c, d, sizeof(char)*(4+1)); printf("%s, %s\n",c,d);
// 任意の構造体の入れ替え
typedef struct tagA { char x; int y; float z; } A;
A e={'1',2,3}; A f={'4',5,6}; printf("[%c, %d, %f], [%c, %d, %f]\n", e.x, e.y, e.z, f.x, f.y, f.z);
nandemo_swap(&e, &f, sizeof(A)); printf("[%c, %d, %f], [%c, %d, %f]\n", e.x, e.y, e.z, f.x, f.y, f.z);
}
007170
2010/08/23(月) 19:27:16あんまり A はイントで、Bはチャーで…みたいなことって珍しくて、ふつうはAもBもイントならイントだし、ちゃーならちゃーなことがおおいようなきがするー。
ので、
じゃぁ、スワップ関数に、交換するデータのサイズを渡してあげれば、具体的に char か? int か? なんてのは無関係でバッファーを定義できるんじゃないかな?って思った。
だから、バッファーが別に char でも int でもなんでもよくて、ただ純粋にバッファーに何バイト必要なのか?って情報さえあれば、型なんてどうでもいいんじゃないかな?って思った。
どんな型でもスワップできる ”何でもスワップ()”を試しに書いてみました。なんか思ったふうに動いてよかった。
1, 2
2, 1
ABCD, EFGH
EFGH, ABCD
[1, 2, 3.000000], [4, 5, 6.000000]
[4, 5, 6.000000], [1, 2, 3.000000]
0072デフォルトの名無しさん
2010/08/23(月) 19:35:120073デフォルトの名無しさん
2010/08/23(月) 19:36:41無意味では?
0074デフォルトの名無しさん
2010/08/23(月) 22:02:510075デフォルトの名無しさん
2010/08/23(月) 22:09:120076デフォルトの名無しさん
2010/08/23(月) 22:10:270077デフォルトの名無しさん
2010/08/23(月) 22:38:54=と;で限られてる部分を()で閉じる必要は全く無いと思うが。
()が必要だと思うなら、>>39の場合に()がないと動作がおかしくなる場合を教えてくれないか?
0078デフォルトの名無しさん
2010/08/23(月) 22:41:15マクロにはつけておいたほうがいいから統一してるんじゃね?
0079デフォルトの名無しさん
2010/08/23(月) 22:56:54char a[10], b[20];
swap(char[30], a, b);
とかで typedef が必要、なぜ? マクロですからとか、聴いてて耳腐る
0080デフォルトの名無しさん
2010/08/23(月) 23:12:500081デフォルトの名無しさん
2010/08/23(月) 23:25:38/' ! ━━┓┃┃
-‐'―ニ二二二二ニ>ヽ、 ┃ ━━━━━━━━
ァ /,,ィ=-;;,,, , ,,_ ト-、 ) ┃ ┃┃┃
' Y ー==j 〈,,二,゙ ! ) 。 ┛
ゝ. {、 - ,. ヾ "^ } } ゚ 。
) ,. ‘-,,' ≦ 三
ゞ, ∧ヾ ゝ'゚ ≦ 三 ゚。 ゚
'=-/ ヽ゚ 。≧ 三 ==-
/ |ヽ \-ァ, ≧=- 。
! \ イレ,、 >三 。゚ ・ ゚
| >≦`Vヾ ヾ ≧
〉 ,く 。゚ /。・イハ 、、 `ミ 。 ゚ 。 ・
0082デフォルトの名無しさん
2010/08/23(月) 23:36:44代入演算子より優先度が低いのはコンマ演算子しかないから、() は必要ないでしょうね。
0083デフォルトの名無しさん
2010/08/23(月) 23:49:07仕方がないよ。動作がおかしいならまだしも、単なる個人的な疑問に過ぎません。
なぜ〜にしないの?そうしたければどうぞ。
お前がそう思うんならそうなんだろう、お前ん中ではな。
ttp://blog.livedoor.jp/goldennews/imgs2/0910/g1001001.jpg
PC、プログラムの中ではそうではないとしても。
0084デフォルトの名無しさん
2010/08/23(月) 23:57:23場違いな感想文はよそでやんな
0085デフォルトの名無しさん
2010/08/23(月) 23:58:10よかったね、いずれの日にか自分の脳みそを使って反論できるようになりましょうね。
0086デフォルトの名無しさん
2010/08/24(火) 00:32:29#include <stdio.h>
void s(char* a, char* b){char t=*a; *a=*b; *b=t;}
void p(char* a, char* b){printf("%s\n%s\n\n",a,b);}
void main(void) {
char a[100]="aiueo1234";
char b[100]="ABCDE5678";
p(a,b);
int i=5; char *ap=a, *bp=b;
while(i-->0){s(ap++, bp++);}
p(a,b);
}
// 結果
aiueo1234
ABCDE5678
ABCDE1234
aiueo5678
0087デフォルトの名無しさん
2010/08/24(火) 00:34:54#include <stdio.h>
#define swap(type, x, y) do {type t; t=x; x=y; y=t; } while (0);
void p(char* a, char* b){printf("%s\n%s\n\n",a,b);}
void main(void) {
char a[100]="aiueo1234";
char b[100]="ABCDE5678";
p(a,b);
int i=5; char *ap=a, *bp=b;
while(i-->0){swap(char, *(ap++), *(bp++));}
p(a,b);
}
//結果
aiueo1234
ABCDE5678
aAuCoE2648
AaCuEo6284
0088デフォルトの名無しさん
2010/08/24(火) 00:36:580089デフォルトの名無しさん
2010/08/24(火) 00:38:22それは副作用がある引数をマクロに渡したためにおこること。
マクロに渡す引数に問題があるためであり、マクロの書きようで解決できる問題ではない。
0090デフォルトの名無しさん
2010/08/24(火) 00:55:10だから関数にしろという話ではないの?
0091デフォルトの名無しさん
2010/08/24(火) 00:58:30#include <stdio.h>
#define _swap(type, _x, _y) do {type* x=_x; type* y=_y; type t; t=*x; *x=*y; *y=t; } while (0);
void p(char* a, char* b){printf("%s\n%s\n\n",a,b);}
void main(void) {
char a[100]="aiueo1234";
char b[100]="ABCDE5678";
p(a,b);
int i=5; char *ap=a, *bp=b;
while(i-->0){_swap(char, ap++, bp++);}
p(a,b);
}
// 結果
aiueo1234
ABCDE5678
ABCDE1234
aiueo5678
0092デフォルトの名無しさん
2010/08/24(火) 01:10:06type が char なのに実際は char * を扱っているのが気に食わん。
0093デフォルトの名無しさん
2010/08/24(火) 01:33:08なるほど、マクロに渡す引数が一回しか評価されないようにマクロを組むとは可能なんですね。使いにくいのではありますが。
前言は撤回します。
0094デフォルトの名無しさん
2010/08/24(火) 01:41:31試してないし、当然規格違反だけど。
#define swap(a, b) \
do { typedef struct { char buf[sizeof(a)]; } T; T t; \
t = *(T *)&(a), (a) = (b), *(T *)&(b) = t; \
} while (0)
0095デフォルトの名無しさん
2010/08/24(火) 01:43:24#include <stdio.h>
typedef union tagV{char c; int i; long l; float f; double d;} V;
#define _swap(_x, _y, _sz) do {V* x=(V*)_x; V* y=(V*)_y; V t; int sz=_sz; int i=0;\
while(i<sz){*(((char*)&t)+i)=*(((char*)x)+i); \
*(((char*)x)+i)=*(((char*)y)+i); *(((char*)y)+i)=*(((char*)&t)+i); i++;} } while (0);
void p(long* a, long* b, int sz){
int i;
i=sz; while(i-->0){ printf("%ld ",*a++); } printf("\n");
i=sz; while(i-->0){ printf("%ld ",*b++); } printf("\n\n");
}
void main(void) {
long a[100]={0,1,2,3,4,5,6,7,8,9};
long b[100]={9,8,7,6,5,4,3,2,1,0};
p(a,b,10);
int i=5; long *ap=a, *bp=b;
while(i-->0){_swap(ap++, bp++, sizeof(long));}
p(a,b,10);
}
//結果
0 1 2 3 4 5 6 7 8 9
9 8 7 6 5 4 3 2 1 0
9 8 7 6 5 5 6 7 8 9
0 1 2 3 4 4 3 2 1 0
0096デフォルトの名無しさん
2010/08/24(火) 11:51:290097デフォルトの名無しさん
2010/08/24(火) 12:29:140098デフォルトの名無しさん
2010/08/24(火) 12:32:520099デフォルトの名無しさん
2010/08/24(火) 13:44:21#define swap(a, b) \
do { typedef struct { char buf[sizeof(a)]; } T; T t; \
t = *(T *)&(a); *(T*)&(a) = *(T*)&(b); *(T *)&(b) = t; \
} while (0)
素直に memcpy 使えって言いたいけど
付き合ってやるとこうかな
# インライン持ってるコンパイラでも拒否されそう
0100デフォルトの名無しさん
2010/08/24(火) 13:54:190101デフォルトの名無しさん
2010/08/24(火) 14:40:140102デフォルトの名無しさん
2010/08/24(火) 15:29:210103デフォルトの名無しさん
2010/08/24(火) 15:44:19#include <string>
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int main(int argc, char* argv[])
{
string fileString;
vector<string> vec;
char line[15000];
int count = 1;
ifstream ifs;
ifs.open("test.csv", ios::in); // 読み取り専用で開く
while( !ifs.eof() ){
ifs.getline(line, sizeof(line));
printf("[%03d] %s\n", count, line);
count++;
}
ifs.close();
return 0;
}
実行すると、コマンドプロンプトにtest,csvが出力されます。
これをテキストなどに出力したい場合はどうすれば良いですか?
0104デフォルトの名無しさん
2010/08/24(火) 15:55:04実行時にリダイレクトするとかprintfをfprintfにするとか
ofstream使うのはC++だし、C++の質問は場所移した方がいいかも
0105デフォルトの名無しさん
2010/08/24(火) 16:34:340106デフォルトの名無しさん
2010/08/24(火) 18:41:48ただしストリームは継承で出来ているのでif文で簡単に切り分け出来るけど
0107デフォルトの名無しさん
2010/08/24(火) 19:06:350108デフォルトの名無しさん
2010/08/24(火) 19:07:16C99 では inline 関数にすればいいので、もう知らなくてもいいことです。#define は時代遅れ。
0109デフォルトの名無しさん
2010/08/24(火) 19:29:25inline無しのけっこうでかい関数もinline展開されてたな。
いまどきのコンパイラならマクロとかinlineとか無しで、
普通に関数を書いとけばいいんじゃないか?
0110デフォルトの名無しさん
2010/08/24(火) 19:39:00でたーーー、何かと 厨 と呼ぶバカw
碌に知りもしないのに否定的な意見しかしない 厨 の法がうぜぇんだよ!
ねぇ、XORスワップちゃんw
お前はビット演算子厨って命名してやる
0111デフォルトの名無しさん
2010/08/24(火) 19:40:26今さら過ぎる・・・知らなかった癖に、自分のXORスワップが優秀でかっこいいと
思っているんだろうか?XORを用いたのがかっこいいと思っていれば良いだろ
欠陥スワップw
0112デフォルトの名無しさん
2010/08/24(火) 19:45:12生 同 .じ . /´ | (ゝ___) い
.し 士 .レ .__/'r-┴<ゝi,,ノ ro、 は、
.な で .ベ ∠ゝ (ゝ.//` ./`| }⌒j
.い し .ル } ⌒ /`ヽ、_∠l,ノ ・ヽ´
.! ! か の / ´..:.} >、、___, .r、 ソ、`\
/ ..:.:.} / |∨ ` ̄
/ ..:.:./ | 丶
/ _、 ..:.:.:.{ .{.:.:. \
{ ..:Y .ゝ、 {.:.:.:.:. ヽ
|、 ..:/ 丿 .:〉 >.- ⌒ . ヽ
/ {. ..:./ ソ ..:./ .( ..:.:.:` ..:}
./..:.:}.:.:./ ヘ、 ..:./ .\ ..:.:r_,ノ、.:.:}
./..:.:/|.:/ {.:./ X.:.:}.} X X
/..:.:/ .}.:| }:/ .Y丶ヽ Y.:Y
. __/.:/ { } 《.〈、 _,,__>.:》丶 Y.:\
/.:.:.:.:.::/ !.:.:ゝ ゝ.:. ̄ヾ ´:.:.:.:.:.:.:.:.:ヾゝ \.: ̄>
0113デフォルトの名無しさん
2010/08/24(火) 19:54:250114デフォルトの名無しさん
2010/08/24(火) 20:02:24上で誰かが言ってるように簡単な関数はコンパイラの最適化に頼れよ
それともマクロ厨は最適化を切ってるのか?
0115デフォルトの名無しさん
2010/08/24(火) 20:10:200116デフォルトの名無しさん
2010/08/24(火) 20:11:460117デフォルトの名無しさん
2010/08/24(火) 20:21:58元ネタを知らないのはわかったから・・・
0118デフォルトの名無しさん
2010/08/24(火) 20:24:420119デフォルトの名無しさん
2010/08/24(火) 20:29:26どうしたの?
0120デフォルトの名無しさん
2010/08/24(火) 20:47:13自分の説が補強されたのをいいことに、かさにかかって罵倒しまくっている、例のいつもの彼ですよ。でも自分の脳みそで考えたことはこれぽっちも書けないようですね。
0121デフォルトの名無しさん
2010/08/24(火) 22:06:110122デフォルトの名無しさん
2010/08/24(火) 22:58:28たしかに xor スワップなんて使うほうがどうかしているのは事実なんですが、あなたは xor スワップのどこに問題かあるかわかっていますか?
0123デフォルトの名無しさん
2010/08/24(火) 23:01:12type をいちいち指定しなければならないのが糞ですねえ。swap マクロなんかやめたほうがいいでしょうね。
0124デフォルトの名無しさん
2010/08/25(水) 01:53:130125デフォルトの名無しさん
2010/08/25(水) 01:54:56本当に馬鹿なだけなんだ
0126デフォルトの名無しさん
2010/08/25(水) 02:20:350127デフォルトの名無しさん
2010/08/25(水) 09:45:00っNGワード
0128デフォルトの名無しさん
2010/08/25(水) 10:50:450129デフォルトの名無しさん
2010/08/25(水) 11:19:05XORスワップがかっこいい人ですね?分かります
0130デフォルトの名無しさん
2010/08/25(水) 11:27:29今さらそれ自体に問題があるだの、ダサいだの、学習能力なさ杉w
まぁそんな意見をした奴は明らかに初心者だってバレバレだからw
0131デフォルトの名無しさん
2010/08/25(水) 11:28:520132デフォルトの名無しさん
2010/08/25(水) 11:48:260133デフォルトの名無しさん
2010/08/25(水) 12:00:59時代遅れだし、実務では使えな奴の発想なんだよ
0134デフォルトの名無しさん
2010/08/25(水) 12:02:490135デフォルトの名無しさん
2010/08/25(水) 12:06:13エクスクルーシブオアー
0136デフォルトの名無しさん
2010/08/25(水) 12:14:35型を渡すことで完璧なマクロで実現できる(多数の本を書いた教授が考案)
だから他の方法を使うのは馬鹿、インラインもアホのすること
>>134
俺はエックスオーアールって読んでるぜ
0137デフォルトの名無しさん
2010/08/25(水) 12:18:58>>87 をみればマクロで完璧とはいえないようですよ。 >>91 のようなマクロならOKですが、これって使いやすいと思いますか?
0138デフォルトの名無しさん
2010/08/25(水) 12:23:58こういう汚いコードは読む気にならないね
大学の教授の方が信用できるだろ
ttp://www.bohyoh.com/CandCPP/FAQ/FAQ00008.html
これを読んで、出直してこい!
0139デフォルトの名無しさん
2010/08/25(水) 13:09:180140デフォルトの名無しさん
2010/08/25(水) 13:11:03頭が石化したぼけ老人の典型だな
典型つーより劣化コピーか
石化する前に活躍した老人なら功績があるだけマシだが
石化した状態で誕生した若造にはとりえが何もない
0141デフォルトの名無しさん
2010/08/25(水) 13:36:01私もこの教授の本持ってるけど、凄いためになるよ
教授が結論出してるんだから、それに従えばいいんだよね
もうこの話題は不毛だから辞めた方いいよ
0142デフォルトの名無しさん
2010/08/25(水) 13:36:59了解、この話題は以下禁止にしようぜ!
0143デフォルトの名無しさん
2010/08/25(水) 13:50:11って何をしているのでしょうか?
s.weightの値をどうかするんだとは思いますがよく分かりません
0144デフォルトの名無しさん
2010/08/25(水) 13:56:09help読まずに他人が書いたライブラリ使おうなんて無茶
0145デフォルトの名無しさん
2010/08/25(水) 14:13:000146デフォルトの名無しさん
2010/08/25(水) 14:13:430147デフォルトの名無しさん
2010/08/25(水) 14:54:56printf("%.15g", s.weight);
で出力したのと同じ文字列が得られる
0148デフォルトの名無しさん
2010/08/25(水) 14:55:39// #define swap(a,b) do{int t=a; a=b; b=t;}while(0)
#define swap(a,b) ({int t=a; a=b; b=t;})
void main()
{
int a=1;
int b=2;
printf("%d, %d\n",a,b);
if (a==1)
swap(a,b);
else
printf("else");
printf("%d, %d\n",a,b);
}
// こレでよくne?
0149デフォルトの名無しさん
2010/08/25(水) 14:56:480150デフォルトの名無しさん
2010/08/25(水) 15:00:46わざとやってんのかwwwwww
0151デフォルトの名無しさん
2010/08/25(水) 15:10:12auto変数に参照を渡しても参照と類推されないのは仕様なのでしょうか?
具体的には
std::vector<hoge>& gethogeList(void);
のような関数があり、
auto hogeList = getHogeList();
std::for_each(hogeList.begin(),hogeList.end(),[](hoge& h)->void
{
hに対する処理
});
というふうにしても、もとのgethogeListで返すリストのhの値は更新されていませんでした。
さっぱりわからずはまってたのですが、hogeListにマウスカーソルを載せた時に
インテリセンスで型がstd::vector<hoge>と類推されていたことがわかり
autoをやめて、
std::vector<hoge>& hogeList = getHogeList();
とかくとちゃんと動きました。
これは自分がautoの仕様を勘違いしてたんでしょうか?
0152デフォルトの名無しさん
2010/08/25(水) 15:10:14それc言語のつもり?
0153デフォルトの名無しさん
2010/08/25(水) 15:12:53すいません、今更見ました・・・
上は見なかったことにしてください。
0154デフォルトの名無しさん
2010/08/25(水) 18:13:01>swap(type,x,y) do{ }while(0);
最後のセミコロンはつけてはいけない。というか、それが肝心かなめの重要な要素。
ちゃんと理解しているのか?
http://www.kouno.jp/home/c_faq/c10.html#4
0155デフォルトの名無しさん
2010/08/25(水) 18:43:23昔はそれしか方法がなかったけど、
今は別の方法があるんだからそっちの方が良いって話でしょ。
携帯使わず、ポケベル使ってたら、だっせーってこと。
0156デフォルトの名無しさん
2010/08/25(水) 18:48:14結果的に展開されるマクロだの結果的に展開されるかどうかわからないインラインだのばかばかしい
0157デフォルトの名無しさん
2010/08/25(水) 18:50:55「くらいなら」ってどんな基準?
0158デフォルトの名無しさん
2010/08/25(水) 19:03:430159デフォルトの名無しさん
2010/08/25(水) 19:08:210160デフォルトの名無しさん
2010/08/25(水) 19:09:140161デフォルトの名無しさん
2010/08/25(水) 19:10:490162デフォルトの名無しさん
2010/08/25(水) 19:11:520163デフォルトの名無しさん
2010/08/25(水) 19:16:07ポケベルも携帯もいらんって発想だな
買っても相手がいないってから、毒づいてるんだよね
君の容姿とか性格が浮かぶわwwww
0164デフォルトの名無しさん
2010/08/25(水) 19:17:37売ってんの?今
そんなもん買ったって相手いないわな
0165デフォルトの名無しさん
2010/08/25(水) 19:19:54おまえさんが「その場で書く」という凶行に出るスレッショルドを聞いてるんだよ
返答義務はないがリアルでその発言すると気にする人いると思うよ
0166デフォルトの名無しさん
2010/08/25(水) 19:22:01こちらはお前がキモイと思うくらいなもんだが?
0167デフォルトの名無しさん
2010/08/25(水) 19:26:10JKとベル友になりたいわ
まだかろうじて売ってるらしいけど
エリアも関東の一部のみとかかなり狭くなってるようだな
0168デフォルトの名無しさん
2010/08/25(水) 19:29:55返答義務はないが技術的に話せないなら出てってくんな、板違いだよ
0169デフォルトの名無しさん
2010/08/25(水) 19:31:070170デフォルトの名無しさん
2010/08/25(水) 19:32:59俺の見解じゃなく、おまえさんの見解を聞いてるんだよ
0171デフォルトの名無しさん
2010/08/25(水) 19:34:320172デフォルトの名無しさん
2010/08/25(水) 19:36:56俺がどうするかによって、おまえさんの見解が変わるようならくだらねえな
0173デフォルトの名無しさん
2010/08/25(水) 19:38:51超キモい
0174デフォルトの名無しさん
2010/08/25(水) 19:40:21もうええわ
0175デフォルトの名無しさん
2010/08/25(水) 19:41:48君が発狂してるからこうなったんだ
0176デフォルトの名無しさん
2010/08/25(水) 19:45:29XORのお前が一番キモイw
0177デフォルトの名無しさん
2010/08/25(水) 19:46:250178デフォルトの名無しさん
2010/08/25(水) 19:47:200179デフォルトの名無しさん
2010/08/25(水) 19:47:29繰り返すからこっちもだんだんむかつくんだぞ
0180デフォルトの名無しさん
2010/08/25(水) 19:48:590181デフォルトの名無しさん
2010/08/25(水) 19:51:320182デフォルトの名無しさん
2010/08/25(水) 19:56:38すまんな、無視しちゃって
だけどな、XORの話をもりあげたいのかもしれないが、お笑いにはタイミングってものがあってな
中途半端な的外れだと面白く無いんだ
0183デフォルトの名無しさん
2010/08/25(水) 20:06:16いや、どんどん発狂させるべきだ。彼もひところに比べるとだいぶ疲れてきたようで、かつての長文攻撃が出なくなってきた。陥落は近い。
0184デフォルトの名無しさん
2010/08/25(水) 20:08:59結婚でも申し込むの?
0185デフォルトの名無しさん
2010/08/25(水) 20:13:580186デフォルトの名無しさん
2010/08/25(水) 21:25:130187デフォルトの名無しさん
2010/08/25(水) 21:38:580188デフォルトの名無しさん
2010/08/25(水) 21:41:10俺の主張を聞けー
0189デフォルトの名無しさん
2010/08/25(水) 22:18:00glibc or gcc or linux ?
0190デフォルトの名無しさん
2010/08/25(水) 22:18:27コンパイラの作者
0191デフォルトの名無しさん
2010/08/25(水) 22:19:210192デフォルトの名無しさん
2010/08/25(水) 22:21:080194デフォルトの名無しさん
2010/08/25(水) 22:58:590195デフォルトの名無しさん
2010/08/26(木) 00:41:450196デフォルトの名無しさん
2010/08/26(木) 01:14:27そんなことを気にしていちいち書き込むお前も十分意味不明で詰まらん、無駄なレスだから。
0197デフォルトの名無しさん
2010/08/26(木) 01:15:18日本語でおk。意味不明。まともに日本語が使えない奴って
やはり・・・いや、はっきり指摘した方が良い。池沼乙。
0198デフォルトの名無しさん
2010/08/26(木) 01:17:43目欄なんて他人に通じない、独自の単語を使っているのはお前くらいだよ。
お前こそつまらねぇ。このスレに何しにきてんの?
>>10でダサいとか言っちゃった池沼でしょ?wwwwww
欠陥糞スワップがカッコイイって思うくらいだから、仕方ないか・・・
0199デフォルトの名無しさん
2010/08/26(木) 01:22:41おまい臭い、臭うぞ?厨だろ?
0200デフォルトの名無しさん
2010/08/26(木) 04:35:27ここまでわかりやすい自演は久しぶり見た
0201デフォルトの名無しさん
2010/08/26(木) 06:52:430202デフォルトの名無しさん
2010/08/26(木) 10:20:000203デフォルトの名無しさん
2010/08/26(木) 11:44:120204デフォルトの名無しさん
2010/08/26(木) 12:57:58メランコリー氏ね
0205デフォルトの名無しさん
2010/08/26(木) 13:56:330206デフォルトの名無しさん
2010/08/26(木) 13:58:52ソースファイルにa.cppとaaa.cppの二つが入っているとします。
ヘッダーファイルにb.hとbbb.hの二つが入っているとします。
a.cppには
#include "b.h"
c_data sa; //c_dataはb.hに入っているクラス
string line;
sa.reader(line);がプログラムに打ち込まれているとします。
b.hには
struct c_data{
void reader(省略);
}
が打ち込まれているとします。
aaa.cppには
#include "b.h"
#include "bbb.h"
void c_data::reader(省略){
boost::tokenizer< abcde > tok( 省略 );
が打ち込まれているとします。
bbb.hには
class abcde{
}
のプログラムが打ち込まれているとします。
どのファイルにも実際はもっとプログラムが書かれていますが大事な部分だけ載せました。
この場合ってどれも連携して実行できますか?
初心者なんで間違っているかもしれませんが、a.cppのsa.reader(line);の所で
しっかりとaaa.cppのvoid reader(省略);が読み込まれますか?
0207デフォルトの名無しさん
2010/08/26(木) 14:01:480208デフォルトの名無しさん
2010/08/26(木) 14:05:44質問する場所を間違えている
出て行け
0209デフォルトの名無しさん
2010/08/26(木) 14:13:11>が読み込まれますか?
この意味がわからん。
0210デフォルトの名無しさん
2010/08/26(木) 18:49:10もうしわけないが、いってることがよくわからない。
0211デフォルトの名無しさん
2010/08/26(木) 19:20:55結局なんだかよく分からない
0212デフォルトの名無しさん
2010/08/26(木) 19:26:480213デフォルトの名無しさん
2010/08/26(木) 21:01:460214デフォルトの名無しさん
2010/08/26(木) 21:15:230215デフォルトの名無しさん
2010/08/26(木) 21:18:540216デフォルトの名無しさん
2010/08/26(木) 21:37:52termの使い方がめちゃくちゃなので、エスパーして答えてみる。
なお、C++の話なので、そもそもすれ違いだけど、、。
ちゃんとリンクしてあげれば、a.cppのsa.readerをコールすると、aaa.cppで定義した
sa.readerが呼ばれる。
0217デフォルトの名無しさん
2010/08/27(金) 01:23:29#includeについて学んでから質問し直してください。
0218デフォルトの名無しさん
2010/08/27(金) 04:50:15#include <stdio.h>
void 他のソースファイル上からも使える関数(void) { printf("A");}
static void aaa.c上だけで使える関数(voud){printf("B");} // このソース上だけで使うので staticにしておく(これで他のソースから呼べなくなって安全)
void aaa.hに名前を書かないけど、staticをつけない関数(void){printf("C");} // aaa.cには名前を書かないのに、staticをつけずに書いてしまう。あぶない
// ---------- aaa.h ----------
#ifndef __AAA_H__
#define __AAA_H__
extern void 他のソースファイル上からも使える関数(void) ; // 名前や引数をメモしておくと、aaa.c以外から呼び出して使うときにも、名前とか引数が分かって使いやすい。
#endif //__AAA_H__
// ----------- main.c ----------
#include "aaa.h"
void main() {
他のソースファイル上からも使える関数 ( ); // これはOK
aaa.c上だけで使える関数 ( ); // これはリンクエラー
aaa.hに名前を書かないけど、staticをつけない関数( ); // たしか、これがOKになっちゃう記憶。(staticを付けてないから、ヘッダに名前無くても呼べてしまう。こまる)
}
0219デフォルトの名無しさん
2010/08/27(金) 05:42:42無秩序に使うのは確かに見づらくなって良くないと思いますが、他の制御文と同じ用を為すように使えば避難されるいわれは無いと思うのですが。
0220デフォルトの名無しさん
2010/08/27(金) 05:50:45使うなというのが経験則であるので、それに反論する明確な根拠とかはないよ
だから試しにgoto使いまくってみて後悔してみればいいんじゃないかな
あとはまぁ、エラー処理に関しては使ってもいいんじゃないか派も存在する
0221デフォルトの名無しさん
2010/08/27(金) 06:05:53システムの規模が大きくなったり人が増えてくると何がなにやら分からなくなってくるから
0222デフォルトの名無しさん
2010/08/27(金) 06:06:27goto は昔からの大論争で、
「少なくとも濫用はよくないらしい。使うとしても必要最小限がよい」
という辺りまでコンセンサスができている
じゃあどの程度まで使っていいのか、あるいは完全に禁止すべきなのかは
何とも言えない所
事実、大半の局面で goto は不要。必要ない部分に goto を適用すれば、
人間にとってもコンパイラにとっても読み取りづらいコードができる
誰も嬉しくない
0223デフォルトの名無しさん
2010/08/27(金) 08:18:060224デフォルトの名無しさん
2010/08/27(金) 09:26:55本来は、C++はともかく、Cではgoto文はスマートなコードを書くための一つの手段。
だけど、
>他の制御文と同じ用を為すように使えば
なら、他の制御文使え。こういう用途でgoto文を使うのが一番愚か。
こういう馬鹿がいるから、goto文を使うのが悪いと一律で言われるんだよ。
0225デフォルトの名無しさん
2010/08/27(金) 09:46:44その先に待っているのが、どのような自体だったとしても、自分がよけりゃーいいんじゃね?
他人に見せるソースならその限りじゃないけど、どうせ自分だけでしか見ないんだろ?
0226デフォルトの名無しさん
2010/08/27(金) 10:21:420227デフォルトの名無しさん
2010/08/27(金) 10:44:26BASICでも使わないよ。
on error goto なら使うけど
0228デフォルトの名無しさん
2010/08/27(金) 10:55:30そうだね
他の制御文だって機械語の分岐命令でできているわけで
ちなみに、この問題には安定した理論が古くに完成しており
今頃「論争」している奴はかなり痛い勉強不足
「それはそれ」でまた別な理論を構築しようとしている人は別として
0229デフォルトの名無しさん
2010/08/27(金) 12:09:28goto は分岐命令でなく、ジャンプ
こういう馬鹿がいるから話がややこしくなる
0230デフォルトの名無しさん
2010/08/27(金) 13:20:040231デフォルトの名無しさん
2010/08/27(金) 13:37:12>>230
malloc 複数回は?
break のような隠れ goto や
exit のような goto 以上のワルを使うだろ
0232デフォルトの名無しさん
2010/08/27(金) 13:57:36>break のような隠れ goto や
>exit のような goto 以上のワルを使うだろ
だから、他の手段があるのに goto を使うなという話だよ。
本当に理解力ないな。
0233デフォルトの名無しさん
2010/08/27(金) 13:59:34理解力って…
隠れ goto つってんのに
0234デフォルトの名無しさん
2010/08/27(金) 14:09:03>malloc 複数回は?
goto など使わない。
>break のような隠れ goto や
break はループを一段抜ける機能しかない。
goto と同等だと思うのが間違い。
>exit のような goto 以上のワルを使うだろ
exit はプログラムを終了する場合に限定されてるし、そもそも goto では実現できない。
goto と同等だと思うところが馬鹿。
0235デフォルトの名無しさん
2010/08/27(金) 14:15:301段であろうがループを途中で抜けるのは GO TO 有害説が否定するパターンだよ
段数にこだわる症状はジーオーティーオーという綴りに対する過敏反応の典型で
本質がわかってない証拠
goto 以上のワルを goto で実現できるわけないだろ
馬鹿をそのままお返しする
0236デフォルトの名無しさん
2010/08/27(金) 14:26:04>GO TO 有害説が否定するパターンだよ
これはお前が勝手に想定してるだけだろ。
goto を否定する人の一部の人がそう考える話であって、
ここで goto を否定した人に勝手に当てはめるな。
break や exit は否定していない。goto が駄目だとしか言ってないだろ。
「goto を使わず他で代用できるときには goto を使うな」だよ。
goto 使わず、break を使えという意味だとどうしてわからないんだ?
>goto 以上のワルを goto で実現できるわけないだろ
exit が悪いというのはお前の主観だろ。
そもそも goto と関係ない機能なら、exit の話をするな。
0237デフォルトの名無しさん
2010/08/27(金) 14:29:54一段のループを抜けるのにbreak使わずgotoで書いても同等?
流石にこれはないよw
0238デフォルトの名無しさん
2010/08/27(金) 14:30:25> これはお前が勝手に想定してるだけだろ。
いーや違う
おまえが知らないだけだ
> break や exit は否定していない。
これこそおまえが勝手に想定しているだけ
> 「goto を使わず他で代用できるときには goto を使うな」だよ。
ここでいう「他」とは何かを知らないことに
おまえが持つ欠陥が集約されそうに見受ける
> exit が悪いというのはお前の主観だろ。
客観なんだが exit の話はしちゃいけないんだよな
0239デフォルトの名無しさん
2010/08/27(金) 14:31:02同じだってば
0240デフォルトの名無しさん
2010/08/27(金) 14:31:21>malloc 複数回は?
これでgoto使うのは君が低能なプログラマだからだよw
0241デフォルトの名無しさん
2010/08/27(金) 14:36:22わけの分からんことを言うな!
俺自身が、
「goto を使わず他で代用できるときには goto を使うな」
と言ってるだから、知るとか知らないとかないだろ。これが全てだ。
それをお前が勝手に break や exit を否定して思い込んでるだけだろ。
だから勝手な想定すんな!と言ってるんだよ。
どこまで理解力ないの?
0242デフォルトの名無しさん
2010/08/27(金) 14:37:48だっておまえ break を使うんだろ?
低脳とか自虐ショーはおもしろすぎるからやめれ
0243デフォルトの名無しさん
2010/08/27(金) 14:38:54動作が同じだけで、ソースの可読性が全然違う。
だから goto を使うなという話。
君は動けばいいと思ってるのか?
それなら話しても無駄だわ。
0244デフォルトの名無しさん
2010/08/27(金) 14:39:56> 俺自身が、
> 「goto を使わず他で代用できるときには goto を使うな」
> と言ってるだから、知るとか知らないとかないだろ。これが全てだ。
ははは、確かにそうだね
「俺」が言ってることに「俺」が知らないことは含まれないだろうな
0245デフォルトの名無しさん
2010/08/27(金) 14:40:23どう違うの?
0246デフォルトの名無しさん
2010/08/27(金) 14:42:49だから break と goto が同じだと思うのが低能なの。
お前が勝手にそう思ってるだけ。
けど、お前はそういうコード書いてるんだよね?
そりゃ前には理解できない話だなwwwwwwwwwwwww
0247デフォルトの名無しさん
2010/08/27(金) 14:44:44同じネタじゃつまらん
笑いを取りたければ新ネタを出せ、よそで
0248デフォルトの名無しさん
2010/08/27(金) 14:56:240249デフォルトの名無しさん
2010/08/27(金) 18:58:23ゆえに、読む人にそういう使い方してるんじゃないか?という疑念を与える。
使うなとは言わんがコメント必須である。
0250デフォルトの名無しさん
2010/08/27(金) 19:13:10longjump じゃないんだからw
0251デフォルトの名無しさん
2010/08/27(金) 19:32:49gotoは実質禁止されてるだろ馬鹿だなあ
0252デフォルトの名無しさん
2010/08/27(金) 19:38:340253デフォルトの名無しさん
2010/08/27(金) 20:53:29static void print_int(int a) {
if(a<0){a=-a; putchar('-');} int s[0x20]; int* p=s; int l=0; do{ *p++=a%10+'0'; a/=10; l++; }while(a!=0);
p--; while(l-->0){putchar(*p--);}
}
static void print_double(double d) { // IEEE754の64bitで決め打ち
char s[0x20]; char* p=s; int e=15, n, j; if(d<0.0){*p++ = '-'; d = -d;} //else{p++ = '+';}
long long q=(( *((long long*)&d)>>52 )&0x7FF) - 1023; double o=5e-15, b=10, ib=0.1;
int l=0; while(d>=b){d*=ib; l++;}l++; j=0; while(j<l&&j<e){ n=(int)(d+o); *p++=n+'0'; d=(d-n)*b; o*=b; j++;}
while(j<l){*p++='0';j++;} if(d!=0&&q<52){ *p++='.'; while(d<1){d*=b; o*=b; *p++='0';}
o=(q>=0)?o:5e-15; while(j>0&&d>o){n=(int)(d+o); *p++=n+'0'; d=(d-n)*b; o*=b; }
} *p=0; p=s; while(*p!=0){putchar(*p++);}
}
void vpp_de_printf(char* s, void** a) {
while (*s!=0) {
if (*s=='%') {
s++; switch(*s++){
case 'd': print_int( *((int*)(*a++)) ); break;
case 'f': print_double( *((double*)(*a++)) ); break;
case 's': {char* p=(char*)(*a++); while(*p!=0){putchar(*p++);}} break;
default: return;
}
}
else if(*s=='\\'){s++; switch(*s++){case 'n': putchar('\n'); break; case 't': putchar('\t'); break;}} putchar(*s++);
}
}
void main() {
int i=-123; double d=-3.14159265358979; char s[]="aiueo";
vpp_de_printf( "vpp_de_printf\n\tint\t= [%d]\n\tdouble\t= [%f]\n\tstr\t= [%s]\n\n", (void*[]){&i, &d, &(s[0]), 0} );
}
0254253
2010/08/27(金) 20:54:42って思いついたので簡単なおもちゃ書いてじっけんしてみた。
引数を (フォーマット文字列、ボイドポインタの配列)って形式で受け取ります。(対応は %d %f %s のみ)
vpp_de_printf( "%d %f %s", (void*[]){&i, &d, &(s[0]), 0} );
「ぜったい通らないだろうな」と思いつつ、試しに
関数の引数を書くところに f( (void*[]){} )って宣言と代入をまるごと書いたら
コンパイルが通ってしまったんで驚きました(笑)(gcc4.5.1)
ただ、この方式で可変長引数すると、各データにアドレス固定の実体が無いといけないので、
引数に直接3とかの定数を直接指定することができないので、そこが不便だと思いました。
vpp_de_printf( "%d %f %s", (void*[]){ &((const int)3), &d, &(s[0]), 0} ); //これエラー(通りそうなのに
0255デフォルトの名無しさん
2010/08/27(金) 22:28:23その引き数の渡し方はgcc拡張だからご用心。
それはさて、整数定数を渡すのなら環境依存を承知でキャストしちゃえばいいじゃん。
void * foo = (void *) 3;
0256デフォルトの名無しさん
2010/08/28(土) 13:57:32test[0]=a;
for(b=0;b<10;b++){
test[1]=b;
for(c=0;c<10;c++){
test[2]=c;
for…
のようなforループを簡素化する方法はないでしょうか?
0257デフォルトの名無しさん
2010/08/28(土) 14:01:22test[i] = 9;
}
0258デフォルトの名無しさん
2010/08/28(土) 14:04:130259デフォルトの名無しさん
2010/08/28(土) 14:27:55質問を簡略化したつもりなんだろうが
それだとどういうループのこと言ってんのか訳がわからない
0260デフォルトの名無しさん
2010/08/28(土) 14:31:45// ---------- built_in_variable.h ----------
typedef union BuiltInVariable {
char c; int i; long l; long long ll; float f; double d;
unsigned char uc; unsigned int ui; unsigned long ul; unsigned long long ull;
void* vp; char* cp; int* ip; long* lp; long long* llp; float* fp; double* dp;
unsigned char* ucp; unsigned int* uip; unsigned long* ulp; unsigned long long* ullp;
} BIV;
// ---------- END ----------
void biv_de_printf(char* s, union BuiltInVariable* a) {
while (*s!=0) {
if (*s=='%') {
s++; switch(*s++){
case 'd': print_int(a->i); a++; break;
case 'f': print_double(a->d); a++; break;
case 's': {char* p=(char*)(a->cp); a++; while(*p!=0){putchar(*p++);}} break;
default: return;
}
}
else if(*s=='\\'){s++; switch(*s++){case 'n': putchar('\n'); break; case 't': putchar('\t'); break;}} putchar(*s++);
}
}
void main() {
int i=-123; double d=-3.14159265358979; char s[]="aiueo";
biv_de_printf( "vpp_de_printf\n\tint\t= [%d]\n\tdouble\t= [%f]\n\tstr\t= [%s]\n\n", (BIV[]){(BIV)3, (BIV)d, (BIV)s, 0} );
}
// こうすれば定数の3も引数として直接渡せるようになるけど、これだと使用時の記法がグチャグチョで難解すぎ。(手軽にしようとして、逆に複雑化してる)
0261デフォルトの名無しさん
2010/08/28(土) 16:22:350262256
2010/08/28(土) 16:39:22ttp://codepad.org/eByt7bdH
入門書を読みながら効率無視で数独の全パターンを書き出す物を作ろうと思ったのですが
上記のところまで書いたところでforの部分を簡素化する方法があるのではないかと思いお聞きしました。
0263デフォルトの名無しさん
2010/08/28(土) 16:44:29見た目なら関数作ればいけると思うけど、速度ってのは無理なんじゃね。
0264デフォルトの名無しさん
2010/08/28(土) 17:59:57全部で何パターンあるか知ってるのか?
ループ以前にそのやり方(総当り)じゃ丸1ヶ月動かしても終わらないよ
0265デフォルトの名無しさん
2010/08/28(土) 18:08:06特に環境をいじらなくてもstdio.hを使うときは
#include <stdio.h>
で済むのに対し、外部のライブラリをこのように利用するにはどうすればいいのでしょうか?
0266デフォルトの名無しさん
2010/08/28(土) 18:13:41プログラム自体の簡素化はできない
悪いことは言わないから、ちゃんとアルゴリズムを考えてからまた作った方がいい
0267デフォルトの名無しさん
2010/08/28(土) 18:22:04#include "hoge.h"
0268256
2010/08/28(土) 18:27:01『アルゴリズムの絵本』を買ってきたのでこれを読みながら考え直してみます
有難うございました
0269デフォルトの名無しさん
2010/08/28(土) 18:30:39速度が遅いのは効率無視と書いているのだからいいんだよね?
問題は見た目の話(ネストが深くなりすぎる)だけなら、その方法だけ知りたいと
言わないとココの人バカだから通じないみたいだよ。
0270256
2010/08/28(土) 18:34:55一年間無休で動かしている機体があるのでそれを使って計算しようと思ったのですが
コードを書いてるうちに何が何だかわからなくなってきたので簡素化の方法を聞かせていただきました
とりあえずアルゴリズムについて学んでみることにします
0271デフォルトの名無しさん
2010/08/28(土) 18:47:04だから「ない」と>>266が答えてるだろ
0273デフォルトの名無しさん
2010/08/28(土) 18:57:07再帰でやってみろよ低脳w
0274デフォルトの名無しさん
2010/08/28(土) 19:24:360275269
2010/08/28(土) 19:38:48>>274 その説明で分かる人はあんなコード書かないだろ
みんな冷たすぎだから動かしてなくて間違ってるかもしれんコードで良ければ置いとくよ。
#include <stdio.h>
void sub(int nest, int sudocu[][9]){
int i, m, n, x, y;
if (nest>3*9) {
if(sudocu[0][0]+sudocu[0][1]+sudocu[0][2]+sudocu[0][3]+sudocu[0][4]+sudocu[0][5]+sudocu[0][6]+sudocu[0][7]+sudocu[0][8]==45)
if(sudocu[1][0]+sudocu[1][1]+sudocu[1][2]+sudocu[1][3]+sudocu[1][4]+sudocu[1][5]+sudocu[1][6]+sudocu[1][7]+sudocu[1][8]==45)
if(sudocu[2][0]+sudocu[2][1]+sudocu[2][2]+sudocu[2][3]+sudocu[2][4]+sudocu[2][5]+sudocu[2][6]+sudocu[2][7]+sudocu[2][8]==45)
if(sudocu[0][0]+sudocu[0][1]+sudocu[0][2]+sudocu[1][0]+sudocu[1][1]+sudocu[1][2]+sudocu[2][0]+sudocu[2][1]+sudocu[2][2]==45)
if(sudocu[0][3]+sudocu[0][4]+sudocu[0][5]+sudocu[1][3]+sudocu[1][4]+sudocu[1][5]+sudocu[2][3]+sudocu[2][4]+sudocu[2][5]==45)
if(sudocu[0][6]+sudocu[0][7]+sudocu[0][8]+sudocu[1][6]+sudocu[1][7]+sudocu[1][8]+sudocu[2][6]+sudocu[2][7]+sudocu[2][8]==44){
printf("\n");
for(n=0;n<3;n++){
printf("\n");
for(m=0;m<9;m++) printf("%d",sudocu[n][m]);
}
}
} else {
y = nest / 9; x = nest % 9;
for(i=1;i<10;i++){
sudocu[y][x] = i;
sub(nest + 1, sudocu);
}
}
}
int main(){
int sudocu[9][9]={};
sub(0,sudocu);
return 0;
}
0276デフォルトの名無しさん
2010/08/28(土) 19:40:26いい加減すぎるだろw
0277デフォルトの名無しさん
2010/08/28(土) 20:00:08横行が9マスで、中の数字はそれぞれ1〜9の数字。しかも同じ数字が重複してはならない。
縦列が9マスで、中の数字はそれぞれ1〜9の数字。しかも同じ数字が重複してはならない。
全体のマス9x9を、3x3のグループごとに3x3で並んでる状態で、各グループ内で使われる数字は1〜9の数字。しかも同じ数字が重複してはならない。
1 2 3
4 5 6 3x3のグループ
7 8 9
A B C
D E F 3x3のグループが3x3
G H I
この、グループで1〜9つかわないと、って条件が、やっかいだなぁ〜って思いますた(w
0278デフォルトの名無しさん
2010/08/28(土) 20:11:36ぐるぷA ぐるぷB ぐるぷC
1 2 3 4 5 6 7 8 9 行A:1〜9を順番にかく
4 5 6 7 8 9 1 2 3 行B:行Aの数字を、グルプB、C、Aの順序にならべる
7 8 9 1 2 3 4 5 6 行C:行Aの数字を、グルプC、A、Bの順序にならべる
2 3 4 5 6 7 8 9 1 行D:行Aの数字を、1個ずらした順序でかく(2〜9、1の順番)
5 6 7 8 9 1 2 3 4 行E:行Dの数字を、グルプB、C、Aの順序にならべる
8 9 1 2 3 4 5 6 7 行F:行Dの数字を、グルプC、A、Bの順序にならべる
3 4 5 6 7 8 9 1 2 行G:行Aの数字を、2個ずらした順序でかく(3〜9、1、2の順番)
6 7 8 9 1 2 3 4 5 行H:行Gの数字を、グルプB、C、Aの順序にならべる
9 1 2 3 4 5 6 7 8 行I:行Gの数字を、グルプC、A、Bの順序にならべる
感性♪(^_^/
0279デフォルトの名無しさん
2010/08/28(土) 22:43:210280デフォルトの名無しさん
2010/08/28(土) 23:00:120281デフォルトの名無しさん
2010/08/28(土) 23:02:27決めたから絞って
0282デフォルトの名無しさん
2010/08/28(土) 23:03:310283265
2010/08/29(日) 00:25:08宣言くらいはわかりますけど、どのようにして環境を整えればいいのかが聞きたいんです
プロジェクトに関連ファイルを全部ぶち込まないとダメなんでしょうか?
0284デフォルトの名無しさん
2010/08/29(日) 00:26:47アプリの使い方は該当アプリのスレへどうぞ。
0285デフォルトの名無しさん
2010/08/29(日) 00:27:540286265
2010/08/29(日) 10:37:02ヘッダファイルを読み出すプログラムと同じディレクトリにヘッダファイルを置けば使えるんでしょうか?
0287デフォルトの名無しさん
2010/08/29(日) 10:42:41死ね
0288265
2010/08/29(日) 11:11:17答えてやれよwwwwwwwww
0289デフォルトの名無しさん
2010/08/29(日) 11:29:27外部ライブラリを使うにはlibファイルをリンクしないと使えない。
libファイルをリンクするのは環境によって方法が違う。
VisualStudioならプロジェクトのプロパティで、リンカの入力設定に追加の依存ファイルとしてlibファイルを記述する。
gccなんかを使う場合はオプション-Lでlibファイルのディレクトリを指定し、オプション-lでライブラリを指定する。
libファイルがリンクできるようになれば、ライブラリと一緒に配布されているヘッダファイルが使えるようになる。
ヘッダファイルはコピーして自分のプロジェクトディレクトリに入れて置くのが手っ取り早い。
後は>>267が書いているように#includeすれば外部ライブラリの機能が利用できるようになる。
>>288 釣られてやったぞ、感謝しろ。
0290デフォルトの名無しさん
2010/08/29(日) 12:02:210291デフォルトの名無しさん
2010/08/29(日) 12:52:24んですよね?
0292デフォルトの名無しさん
2010/08/29(日) 12:57:07でも普通はヘッダもライブラリもプロジェクトにコピーしたりしないけどな。
0293デフォルトの名無しさん
2010/08/29(日) 12:58:190294デフォルトの名無しさん
2010/08/29(日) 13:00:250295デフォルトの名無しさん
2010/08/29(日) 13:07:190296デフォルトの名無しさん
2010/08/29(日) 13:47:39とりあえず、ヘッダファイルと、ライブラリは別。
コンパイルのためにヘッダファイルが必要で、(正確にはプリプロセスのために必要)
リンク時にライブラリが必要になる。
コンパイラはインクルードパスから、該当するヘッダファイルを探す。指定のやりかたは
コンパイラによる。gccなら-Iオプションでインクルードパスを指定する。
ライブラリの場合は-Lオプションで指定するけど、静的リンク、動的リンクでも変わる。
0297デフォルトの名無しさん
2010/08/29(日) 17:10:260298デフォルトの名無しさん
2010/08/29(日) 17:17:080299デフォルトの名無しさん
2010/08/29(日) 17:19:02初心者に、最初のCをやれって勧めるおっさんがおおいけどマにうけないようにな。
0300デフォルトの名無しさん
2010/08/29(日) 17:57:19あります。
taskkillやシャットダウンや閉じるボタン(X)の割り込みを
検知するにはXXXは何を入れたらよいのでしょうか
よろしくお願いします。
0301デフォルトの名無しさん
2010/08/29(日) 18:02:09UNIX系独特のもんかと思ってた。ちなみにUNIXならSIGKILLでよかったよな。
0302デフォルトの名無しさん
2010/08/29(日) 18:20:44いつまでもプログラム言語がどういうものかっていう根本的な
問題は解決できないよね。
最初のころは、C#やJavaでパズルやってりゃいいけど。
0303デフォルトの名無しさん
2010/08/29(日) 18:23:370304デフォルトの名無しさん
2010/08/29(日) 18:24:50そういうお勉強ならアセンブラでいいんじゃね?
0305デフォルトの名無しさん
2010/08/29(日) 18:28:24あるマシン上でコンパイルしたバイナリファイルって違うCPUが乗ってるマシンでも動くんですか?(OSは同じとします)
例えばアラインメントはCPUごとに違うことがあるらしいんで、アロケーターを書いてるときとかに
遅くなったり動かなくなったりするんじゃないかなとすごい不安なんですが・・・
0306デフォルトの名無しさん
2010/08/29(日) 18:34:28遅くなったりとかはどこに移動してもあるだろ
0307デフォルトの名無しさん
2010/08/29(日) 18:35:27CPUが互換性あれば動くし、互換性なかったら動かないってしかいいようがない。
0308デフォルトの名無しさん
2010/08/29(日) 18:48:22回答ありがとうございます。VC++2005 CLRだと
'SIGKILL' : 定義されていない識別子です。
とおこられました。
0309301
2010/08/29(日) 18:50:170310デフォルトの名無しさん
2010/08/29(日) 19:00:48なにかよい方法ないものでしょうか
アドバイスをお願いします。
0311デフォルトの名無しさん
2010/08/29(日) 19:01:55Windowsのsignal()ではSIGINTすらサポートされない。
何がしたいのか知らんが↓で聞け。
Win32API質問箱 Build89
http://hibari.2ch.net/test/read.cgi/tech/1282403810/
0312デフォルトの名無しさん
2010/08/29(日) 19:35:30その心配は仮に PC を2台持ってても解決できないよ
ひたすら互換互換であたかも CPU が違わないように見せかけてあるからね
秋月や CQ あたりのマイコンキットを「2台目」として使ってみれば
CPU が違うと何が起きるのかをガン見できる(数千円の授業料は格安)
OS は同じとします、とあるが CPU が違えば同じ OS は動かないのが基本だよ
ベンダが同じとか流れをくむとかで近縁であることをアピールするために
似た名前を名乗る OS ならあるけどね
どーしてもハード関係はイヤというなら(おすすめはしないが)、
LSI-C86 のように PC の 16bit モード用のコンパイラを使ってみたり
VC++ の 64bit 版を使ってみる手もある
たいして違わなくて拍子抜けするだろうけどね
0314デフォルトの名無しさん
2010/08/29(日) 21:28:38x86も深く知ってるとは思えないが、x86限定にしとくのが吉
0315デフォルトの名無しさん
2010/08/29(日) 22:33:350316Perl忍者 ◆M5ZWRnXOj6
2010/08/30(月) 08:02:14特別だと思ってるから 典型的という言葉を使って 相手の個性を踏みにじる
0317デフォルトの名無しさん
2010/08/30(月) 10:34:340318デフォルトの名無しさん
2010/08/30(月) 11:06:010319デフォルトの名無しさん
2010/08/30(月) 12:01:140320デフォルトの名無しさん
2010/08/30(月) 12:08:49スルーしないといけない
詳しくは短絡評価でぐぐれ
0321デフォルトの名無しさん
2010/08/30(月) 12:15:17ありがとうございます
if(p && p->x == 1) { ・・・
とかは安全ということですね
0322デフォルトの名無しさん
2010/08/30(月) 13:56:10なるほど
0323デフォルトの名無しさん
2010/08/30(月) 14:12:59for(boost::tokenizer<escaped_list_separator_sjis >::iterator p=tok.begin(); p!=tok.end();++p){
cout << *p + "\t";
}
cout << endl;
これを出力すると
a e d
q d r
r u t
になります
これをタブ区切りでtsvファイルに出力したいのですがどうすればよいでしょうか?
0324デフォルトの名無しさん
2010/08/30(月) 14:18:58cでないソースを張っての質問はご遠慮願います。
0325デフォルトの名無しさん
2010/08/30(月) 14:22:43おめーがうるせーよw
0326デフォルトの名無しさん
2010/08/30(月) 14:32:56申し訳ありませんでした。
0327デフォルトの名無しさん
2010/08/30(月) 14:34:10これマルチだろ!ボケがー
0328デフォルトの名無しさん
2010/08/30(月) 18:26:09っていうかスレ違い。
0329デフォルトの名無しさん
2010/08/30(月) 18:34:20確信犯を相手に(キリッとかかっこわるいから・・・
0330デフォルトの名無しさん
2010/08/30(月) 21:15:290331デフォルトの名無しさん
2010/08/30(月) 22:40:52�A#define TEST (unsigned char)0xA5
上記の�@と�Aでコンパイル結果(HEX)に違いはあるのでしょうか?
0332デフォルトの名無しさん
2010/08/30(月) 22:55:390333デフォルトの名無しさん
2010/08/30(月) 22:56:11あえてさらに#defineを使うって変なことすると違いはある
でも普通はないだろう
0334デフォルトの名無しさん
2010/08/30(月) 22:56:280335デフォルトの名無しさん
2010/08/30(月) 23:01:160336デフォルトの名無しさん
2010/08/30(月) 23:05:340337デフォルトの名無しさん
2010/08/31(火) 20:36:58#define N 3
void fanc(Vector x, double (*f[N])(Vector), double (*f_[N][N])(Vector))
上記関数の引数のNを省略する書き方はありますでしょうか。
void fanc(Vector x, double (*(*f))(Vector), double (*f_[N][N])(Vector))
第2引数は上記のように書けたのですが
第3引数を(*(*(*f_)))(Vector)と書くとmainの呼び出し側でうまくいかないようで、
コンパイルエラーでポインタのタイプが違うとなります。
mainでは以下のように関数fancを呼びます。
Vector x;
double (*f[N])(Vector x) = {f1, f2};
double (*f_[N][N])(Vector x) = {
{f1_x1, f1_x2},
{f2_x1, f2_x2}
};
fanc(x, f, f_);
0338デフォルトの名無しさん
2010/08/31(火) 23:36:23第2引数は、(*f[N]) (*f[]) (**f)のどれも同じ。(*(*f))でもいいけど括弧が冗長。
第3引数は、(*f_[N][N]) (*f_[][N]) (*(*f_)[N])のどれも同じだけど、これ以上のNは省略できない。
あと関数(function)ならfuncな
0339デフォルトの名無しさん
2010/09/01(水) 00:54:33ありがとうございます。
第3引数についてですが、
double (***f_)(Vector))
としてもこの段階でコンパイルエラーが出ないので、
もしかしてmainでのこの関数を呼び出し方を変えれば
正しく動作したりしますか?
関数名は、本当はNewton_methodで
長くなってしまうので省略したのですが間違えてしまいました;
0340デフォルトの名無しさん
2010/09/01(水) 07:12:34だったらmainではこうだね。
double (*f1[N])(Vector x) = {f1_x1, f1_x2};
double (*f2[N])(Vector x) = {f2_x1, f2_x2};
double (**f_[N])(Vector x) = {f1, f2};
func(x, f, f_);
0341デフォルトの名無しさん
2010/09/01(水) 07:49:24できました!ありがとうございます!!
#define N 2
double (*f1[N])(Vector x) = {f1_x1, f1_x2};
double (*f2[N])(Vector x) = {f2_x1, f2_x2};
double (**f_[N])(Vector x) = {f1, f2};
コンパイラに怒られるので仕様でできないとは思うのですが、
Nをローカル変数nで置き換えられないでしょうか?
0342デフォルトの名無しさん
2010/09/01(水) 20:55:40Cでは配列宣言時の要素数は定数式でなければならない。
よってローカル変数nに置き換えることはできない。
C++ならconstを付ければOK.
0343デフォルトの名無しさん
2010/09/01(水) 21:55:03C99ならできるよ
>>342
嘘教えんなクズ野郎
0344デフォルトの名無しさん
2010/09/01(水) 21:58:21scanf("%d",&a);
こうすると,aの値は十進数ですが、aを11hu2のように文字を混ぜて使いたいのですが、
()の中は何を入力すればいいのでしょうか?
0345デフォルトの名無しさん
2010/09/01(水) 21:59:22char s[256];
scanf("%s", s);
0346デフォルトの名無しさん
2010/09/01(水) 22:00:180347デフォルトの名無しさん
2010/09/01(水) 22:04:42専門学校のテキストとかことごとくscanf()だから。
0348デフォルトの名無しさん
2010/09/01(水) 22:14:01ファイル構造体へのポインタと char 配列と string.h を
hello world の次にいっぺんに出して残れる人は2種類しかいないんだよ
・「呪文」の暗記が得意な人 →教わったことしかできない木偶の坊
・質問なんかしない人 →初心者にカウントされない
石をたたいて信号を拾うことから始める人たちには
明らかに初心者を卒業してるのに scanf ってつおい?な人もいるね
いずれにせよ互いに「あっちの世界」を知らないわけだが
0349デフォルトの名無しさん
2010/09/01(水) 22:29:34なんか深遠な理由があってscanf()教えてるわけじゃない。
0350デフォルトの名無しさん
2010/09/01(水) 22:39:15wiki見ないで箇条書きしてみな
0351デフォルトの名無しさん
2010/09/01(水) 22:44:41ほかの入力関数とくらべて挙動がどくとくて初心者はだいたい引っかかる。
挙動に精通しても実践でつかうことはほとんどない。
おぼえるだけ時間の無駄。
0352デフォルトの名無しさん
2010/09/01(水) 22:46:56「呪文」が苦手な人といっても「呪文」が一切ダメな人とはまた違うね
深遠な理由って
暗記でなく独自に考察したことがある人なら
入力に関する色んな問題に気付いているはずなんだが
>>350
printf の逆と言われたときに、無理だろって直感できるかどうかは大事だね
0353デフォルトの名無しさん
2010/09/01(水) 23:01:52fgets()を呪文的に覚えるより、学習でいい点があるってこと?
「stdinはあとで説明するから、とりあえず書きなさい」って言われると
混乱して進めなくなるようなのは、&d とかもダメだろ。
0354デフォルトの名無しさん
2010/09/01(水) 23:08:33fgets だけで %d の代わりはできないだろうがよ
ctrl+d またはエラーまで繰り返す while 文にどれだけの要素が出てくると思う・・・てか知らないのか?
0355デフォルトの名無しさん
2010/09/01(水) 23:21:36atoi()使えばよくね?
二行目が意味不明。
無限ループってscanf()のほうだろ?
0356デフォルトの名無しさん
2010/09/01(水) 23:24:230357デフォルトの名無しさん
2010/09/01(水) 23:27:350358デフォルトの名無しさん
2010/09/01(水) 23:45:090359デフォルトの名無しさん
2010/09/02(木) 02:10:540360デフォルトの名無しさん
2010/09/02(木) 02:44:320361デフォルトの名無しさん
2010/09/02(木) 12:41:31第八章の問4の解答に以下の代入式の解釈の仕方(優先順位・結合規則)がわからないので
教えてください。
(対象の式) *str++ = *p;
(変数str、p共に文字列を格納するchar型のポインタ変数)
特に、左辺「*str++」の解釈がイミフというかよくわかりません。
自分で()つけたりして検証してみたりして得た解釈としては、
1.優先順位は++と*は同じ。なので、結合規則で評価順位が決まる。結合規則は、両方とも右から左である。
2.結合規則により、まずstr++が評価される。これにより、インクリメントの対象が*strではなく、strになる。
3.次に*strが評価される。これにより、代入される対象が*strになる。
(ただし、代入演算子の対象が何故*strになるかという疑問もある)
4.*pの値が*strの指すアドレスに代入される
5.インクリメントの対象が*strでなくstrなので、str+1されてstrの指す「アドレスが」インクリメントされる
6.よって、上の式は分解して書くと以下のように書き直せると考えられる
*str = *p;
str += 1;
と、なると思うのですがこれでおkでしょうか?
ソースを全部載せていいか迷ったので、わからん部分だけ取り出しました。
問題なければうpりますが・・・。
0362デフォルトの名無しさん
2010/09/02(木) 14:24:09OKだよ
0363デフォルトの名無しさん
2010/09/02(木) 14:26:54違うぞ?
0364361
2010/09/02(木) 17:19:10解答ありがとうございます、
解釈了解です!
>> 1.優先順位は++と*は同じ。
>違うぞ?
すみません、見直してみたら前置のインクリメント演算子(つまり、++str)と勘違いでした。
後置、つまりstr++なら間接参照の*より++の方が優先順位は上でした。
なので、解釈そのものは大きく変わらないけど
結合規則による理由ではなく優先順位によるもの、ということになりそうですね。
0365デフォルトの名無しさん
2010/09/02(木) 17:33:22下のページにルチンの公式を使って C で円周率を計算するプログラムが載って
るんですが、この中の足し算の関数 Add() の処理の一部がわかりません。
http://mailsrv.nara-edu.ac.jp/~asait/c_program/sample0/pi.htm
Add() のコメントの 「以下桁上がりの操作」ってとこで、j = i - 1 ってなっ
てるのはなんででしょう?これだと、i が 0 のときに j が -1 になっちゃう
気がするんですが、これで合ってるんでしょうか?
0366デフォルトの名無しさん
2010/09/02(木) 17:50:26整数部(つまり 配列index が 0 の値)が桁上がりするような演算を想定していない
演算パッケージなんじゃないの?
0367デフォルトの名無しさん
2010/09/02(木) 20:25:30変数の要素にしたいのですが何か方法はありませんか?
0368デフォルトの名無しさん
2010/09/02(木) 21:16:24と次のコードは等価
do{
char c,*q;
c=*p;
q=str;
str++;
*q=c;
}while(0);
0369デフォルトの名無しさん
2010/09/02(木) 21:31:400370デフォルトの名無しさん
2010/09/02(木) 21:33:57入門編にふさわしいかどうか微妙だけど… 副作用完了点の話で
str++ の位置は q = str; 以降であって 必ずしも *q = c; より前じゃないんでは?
0371デフォルトの名無しさん
2010/09/03(金) 09:39:49#include <stdio.h>
int main(int a){
int b;
for(b=1;b<=a;b++){
printf("hello world! %d\n",b);
}
return 0;
}
0372デフォルトの名無しさん
2010/09/03(金) 09:45:42どううまくいかないのさ
0373デフォルトの名無しさん
2010/09/03(金) 09:46:09int main(int a){
ふざけんな
0374デフォルトの名無しさん
2010/09/03(金) 09:47:01等価なわけがない
str は w_char* の可能性もあるよ
他にも色々。。。
まぁたまたま同じ結果になることがあると言った程度だろうね
0375デフォルトの名無しさん
2010/09/03(金) 09:47:50#include <stdio.h>
int main(int a, char ** c){
int b;
a = atoi(c[0]);
for(b=1;b<=a;b++){
printf("hello world! %d\n",b);
}
return 0;
}
これでなんとか
0376デフォルトの名無しさん
2010/09/03(金) 09:58:14>a = atoi(c[0]);
これは
if (a) a = atoi(c[0]);
でしょ。
0377デフォルトの名無しさん
2010/09/03(金) 10:27:12a が 0 なんて事は無いよ、第一引数には実行系のパスが入るからね
直すなら
if( a > 2 ) a = atoi( c[1] );
else a = 0;
かな
0378デフォルトの名無しさん
2010/09/03(金) 10:28:10if( a > 1 ) だ
0379デフォルトの名無しさん
2010/09/03(金) 10:36:50なら
if (--a) a = atoi(c[0]);
だね
0380デフォルトの名無しさん
2010/09/03(金) 11:41:370381デフォルトの名無しさん
2010/09/03(金) 12:18:14なら
if (--a) a = atoi(*++c);
だね
0382デフォルトの名無しさん
2010/09/04(土) 08:09:490383デフォルトの名無しさん
2010/09/04(土) 12:11:46>猫でもわかるC言語プログラミング第二版
プログラミングを始めた時に読んだ本がこれっだったが
普通に難しいと思ったな〜
だから、違う本の方がいいかも
0384デフォルトの名無しさん
2010/09/04(土) 19:40:47まあ猫に限らないけど
0385253
2010/09/04(土) 19:46:02いや、C言語ハカセ(笑)ならわかるんだろうけど…www
でも、個人的に *x++ って書き方だけは、よみずらいけど好き。 個人的にはすごく読みやすいので。
strcpyみたいな動きするときは、たぶんこれで書かれるケースが多いと思う。慣れると読みやすい♪
(カーニハン・アンド・リッチーのC言語の本だと「これ読みずらいよね〜 でも慣れると読みやすいよ♪」みたいな紹介のされ方してた記憶〜)
だって、
for(i=0;i100;i++){ a[i] = b[i]; }
とかするとき
i=100; while(i-->0){ *a++ = *b++; }
って簡単に書けたら簡単だし〜ラク… って、2つ見比べてみたら、あんまり簡単になってないね…w(orz
やっぱ簡単に誰でも読めるような感じに簡単に書くのがいちばんだと思う〜。だって半年後の自分って、ほとんど他人じゃないですかwww
あんまり、かっこいい、難しいっ”ぽい”(笑)書き方ばっかしてると、たぶん、未来の自分がしんどいとおもうwww
0386デフォルトの名無しさん
2010/09/04(土) 20:03:120387デフォルトの名無しさん
2010/09/04(土) 21:01:38fgets(buf, 256, FP);
よくbufとかで、配列を宣言している人がいますが
この配列の長さは、ファイルの読み書きの時間に影響するんですか?
0388デフォルトの名無しさん
2010/09/04(土) 21:04:46という当然のことを除けば用意するバッファ量は影響しない
0389デフォルトの名無しさん
2010/09/04(土) 21:09:58DOSの時代のころ、setvbufでバッファのサイズを大きくしたら
かなり読み込みが速くなったけど、windows98くらいのころに同じような
実験をしたら、ぜんぜんかわらなかった。
今の時代OSレベルでバッファリングしてるから、数十キロ程度、まとめて
読み書きしてもあんまりかわないみたい。
setvbuf()で設定したバッファサイズって数十キロ程度だから、数メガ
数十メガ単位ならちがうかもしれんけど、いまIOを速くしようと思うなら
メモリマップドIOとか、非同期IOとか、バッファを広げる以外の
方法を考えたほうがいいだろうね。
0390デフォルトの名無しさん
2010/09/04(土) 21:21:12>>387の疑問は、bufのサイズって大きいとなにかデメリットあるの?
ってことじゃないかと思う。そうなら、デメリットはファイルアクセスの時間というより
メモリがムダに確保されること、とか。
0391デフォルトの名無しさん
2010/09/04(土) 21:23:12誰か突っ込めよw
> 非同期IOとか、
ボトルネックの解消にはつながりにくいね
0392デフォルトの名無しさん
2010/09/04(土) 21:28:37> fgetsのbufと、setvbufは直接関係しない
ようは、ちょっとずつ読み込むか、がばっと読み込むかでどうちがうかって質問でしょ。
バッファのサイズでどうちがってくるかって一般化して答えてもぜんぜん問題ない。
0393デフォルトの名無しさん
2010/09/04(土) 21:30:49いつでも通用するってわけじゃないけど、問題の質によってはゆうこうな方法。
こういう方法も検討したらいいってアドバイス。
0394デフォルトの名無しさん
2010/09/04(土) 21:34:55> bufのサイズって大きいとなにかデメリットあるの?
たとえばデータのサイズが100バイト単位だったら、100バイト
ごとに読み込むのが素直でコードが書きやすいよな。
setvbuf()とか使わないで自前で大きなバッファをとってバッファリング
して、読み込み速度に差がなかったら、コードが複雑になるので、
それがデメリット。
0395387
2010/09/04(土) 23:56:11これは、メモリを大量に使うだけであって
全然バッファリングと関係ないんだね
お前ら、ありがとうよ
0396デフォルトの名無しさん
2010/09/05(日) 01:17:44一番良い結果を出せるのは自作テキストな気がする。
よほどやる気の無い奴以外は、自分で本を買って家でも勉強するんだよ。
良い本を与えてしまうと、その本だけど済ませようとする奴がたくさん出てくる。
0397デフォルトの名無しさん
2010/09/05(日) 01:18:060398デフォルトの名無しさん
2010/09/05(日) 05:54:19ファイルIOを早くしたいなら、セクタサイズとかセクタ境界を意識する必要はあるけどな。
とくにリムーバブルメディアへの書き込みなんかだと影響が大きい。
0399デフォルトの名無しさん
2010/09/05(日) 07:49:270400デフォルトの名無しさん
2010/09/05(日) 16:46:56read() 内部でのコストは大して変わらんけど read() のコール回数は減るわけだから
0401デフォルトの名無しさん
2010/09/06(月) 09:29:46通常の配列は
int array[2][2]={{10,11},{21,22}};
のように宣言時に初期化できるのですが、構造体だと上手くいきません。
検索して調べてみましたが、構造体のメンバの多次元配列の初期化方法はわかりませんでした。
下記のソースはループで初期化していますが、宣言時に初期化する方法を知りたいです。
よろしくお願いします。
#include<stdio.h>
#define XN 3
#define YN 3
typedef struct{
int bord[XN][YN];
}CONS;
void main(void){
CONS data;
int x,y;
for(y=0; y<YN; y++){
for(x=0; x<XN; x++){
printf("%2d",data.bord[x][y] = 0);
}
printf("\n");
}
return;
}
0402デフォルトの名無しさん
2010/09/06(月) 09:38:11typedef struct{
int bord[3][3];
}CONS;
CONS data = {
{
{0,0,0}, {0,0,0}, {0,0,0}
}
};
ところで最初に構造体変数のビットを全部ゼロに初期化するなら
data = {0,}; ({{0,}}かも)にするか、
あるいはmemsetとか使う手もあるよ。
0403401
2010/09/06(月) 10:32:54任意の数値で初期化したかったので助かります。長レス失礼しました。
#include<stdio.h>
typedef struct{
int bord[3][3];
}CONS;
void main(void){
CONS data={
{
{0,0,0},
{0,0,0},
{0,0,0}
}
};
int x,y;
for(y=0; y<3; y++){
for(x=0; x<3; x++){
printf("[%d]",data.bord[x][y]);
}
printf("\n");
}
return;
}
0404デフォルトの名無しさん
2010/09/06(月) 10:42:52でも通る。
data = {{0,0,0},{0,0,0},{0,0,0}};
だと通らない。
0405デフォルトの名無しさん
2010/09/06(月) 11:18:500406デフォルトの名無しさん
2010/09/06(月) 11:20:25括弧が足りない
0407デフォルトの名無しさん
2010/09/06(月) 11:29:23data = {0};
でいいって書いてあるだろ。
0408デフォルトの名無しさん
2010/09/06(月) 11:44:450409デフォルトの名無しさん
2010/09/06(月) 11:50:42書いてない
0410デフォルトの名無しさん
2010/09/06(月) 13:10:00>>401の通常の配列の初期化を見れば、0初期化だけを知りたいわけじゃないと思うのが普通。
0411デフォルトの名無しさん
2010/09/06(月) 13:34:29うざい
0412デフォルトの名無しさん
2010/09/06(月) 17:42:13C++ならどんだけ伸びるんだか
0413デフォルトの名無しさん
2010/09/06(月) 21:53:14EOFが-1など・・・
0414デフォルトの名無しさん
2010/09/06(月) 22:49:04ヘッダーで定義されているけど規格ではないと思う
0415デフォルトの名無しさん
2010/09/06(月) 23:04:140416デフォルトの名無しさん
2010/09/06(月) 23:20:07−1でなければならないわけじゃないみたい
他の規格は知らない
0417デフォルトの名無しさん
2010/09/06(月) 23:34:31Cリファレンスマニュアル P390
「伝統的処理系において-1であるが、
規格Cはint型の負の整数定数式であることを要求しているだけである」
※ 規格CってのはC89のこと
もちろん、値が具体的に定められている定数マクロもある
例えばC99のtrueマクロは1
0418デフォルトの名無しさん
2010/09/07(火) 14:48:23共有ヘッダファイル内で
int hoge[]={
2, 4, 6, 8, 10, 11, 13
}
のように値を決めた配列を定義したいのですが、
そうするとコンパイル時に二重定義だとエラーが帰ってきます。
ヘッダファイル内で"extern int hoge[];"として値をソースファイルで定義すればエラーは消えますが、
そうすると配列の値を各ソース内でそれぞれ定義しなければならず、あまり意味がありません。
ヘッダファイルの中で値を確定させる方法はないものでしょうか?
0419デフォルトの名無しさん
2010/09/07(火) 14:53:272, 4, 6, 8, 10, 11, 13
}
にすれば?
変更する代物ならヘッダには宣言だけ書いて
定義は別にする方法を取る必要がある
0420デフォルトの名無しさん
2010/09/07(火) 14:55:15static int hoge[]={
2, 4, 6, 8, 10, 11, 13
}
にすれば?
ソースファイル間で共有して変更する代物ならヘッダには宣言だけ書いて
定義は別にする方法を取る必要がある
0421デフォルトの名無しさん
2010/09/07(火) 15:00:48static つけちゃダメだろ
0422デフォルトの名無しさん
2010/09/07(火) 15:05:11#if 使いなよ
0423デフォルトの名無しさん
2010/09/07(火) 15:16:26>そうすると配列の値を各ソース内でそれぞれ定義しなければならず、あまり意味がありません。
意味がないですか?
0424デフォルトの名無しさん
2010/09/07(火) 15:36:40>ヘッダファイル内で"extern int hoge[];"として値をソースファイルで定義
普通そうやる。
>そうすると配列の値を各ソース内でそれぞれ定義しなければならず、あまり意味がありません。
定義は一箇所だけ。ソースそれぞれでやったらヘッダでやるのと同じ。
#include "foo.h"ってのは、この1行をfoo.hの中身で置き換えるだけだよ。
0425418
2010/09/07(火) 15:47:10この大域配列は実際にはもっとサイズ大きくて、プログラム内では値は書き変えませんが
実験の為自分で値を色々変えながらコンパイルし直すのです
その度に全ソースの値書きなおしになり、ひとつのソースファイルで修正忘れ、などを防ぐために
ヘッダファイル内で一括で定義できないかと思ったのですが。
#if使うのはいいかもしれないです。
0426デフォルトの名無しさん
2010/09/07(火) 15:51:26実質的にコンパイラが解釈するのは
ただ一回
このトリックを使うんじゃ?
0427デフォルトの名無しさん
2010/09/07(火) 16:09:53グローバル変数なんだし実体としての器はプログラムで唯一だと思うけど?
(static 変数なら、ファイル毎に実体は個別になるから、そういう話になるけどね)
ヘッダは extern int hoge[];
グローバル変数の本体(任意の 1ファイル: 仮にA.c)に
int hoge[] = { ...................... };
これだと実体の修正は A.c のみだよ
0428デフォルトの名無しさん
2010/09/07(火) 16:19:59お前は黙れ低能
0429デフォルトの名無しさん
2010/09/07(火) 16:26:000430デフォルトの名無しさん
2010/09/07(火) 16:29:05>>427さんありがとうございます
確かにその通りなのですが、実行ファイルも複数作っているのです
つまり同じ大域配列を利用した、複数の実行プログラムがあり、
それぞれで値を定義しなければいけないとこういう訳です
0431デフォルトの名無しさん
2010/09/07(火) 16:31:240432デフォルトの名無しさん
2010/09/07(火) 16:43:35だったらファイルでしょ
0433432
2010/09/07(火) 16:44:140434デフォルトの名無しさん
2010/09/07(火) 16:45:48複数の異なるプログラムで共通の値の集団を取り扱いたい
+プログラム内部では値を書き換えずに定数的に使う と
俺は定数の定義をファイルから読み込んで埋める って機構を考えるかな
実行ファイル内にリテラルが埋め込まれている必要性があるなら別だけどね。
簡易な方法としては >>431 のように 変数用のソースを唯一にしてしまう。
A.exe - A.c + その他(
B.exe - A.c + その他
C.exe - A.c + その他
A.c は同じソースを指すように make なりプロジェクトなりを構築する
cmn/A.c
cmn/ProgA/A.exe に関係するソース(A.c 以外)
cmn/ProgB/B.exe に関係するソース(A.c 以外)
cmn/ProgC/C.exe に関係するソース(A.c 以外)
こういう管理の仕方
0435デフォルトの名無しさん
2010/09/07(火) 16:49:010436デフォルトの名無しさん
2010/09/07(火) 16:52:22変数用のソースを作ればいいというのは思いつきませんでした
それは名案かも。ありがとうございます
丁寧な回答ありがとうございます
0437デフォルトの名無しさん
2010/09/07(火) 18:02:35違うか。
0438デフォルトの名無しさん
2010/09/07(火) 18:08:200439デフォルトの名無しさん
2010/09/07(火) 18:19:33・int 型配列の 0〜3番目の要素(乱数で決定)に値を代入
・int 型配列の各要素に乱数(0〜3) を代入
1度登場した値を2度以上使ってよいのか?
・代入操作をする・しないの決定をランダムに行う
日本語難しいぞー
0440デフォルトの名無しさん
2010/09/07(火) 18:28:31int a = rand() % 3;
0441デフォルトの名無しさん
2010/09/07(火) 18:29:16int a = rand() % 4;
だ、失礼!
0442デフォルトの名無しさん
2010/09/07(火) 18:41:04http://www.kouno.jp/home/c_faq/c13.html#16
0443デフォルトの名無しさん
2010/09/07(火) 18:41:490444デフォルトの名無しさん
2010/09/07(火) 18:45:030445デフォルトの名無しさん
2010/09/07(火) 18:59:08議論してるとそのうち完全な乱数でない云々とかに発展しそうな気がするw
0446デフォルトの名無しさん
2010/09/07(火) 19:03:280447デフォルトの名無しさん
2010/09/07(火) 19:30:190448デフォルトの名無しさん
2010/09/07(火) 19:35:250449デフォルトの名無しさん
2010/09/07(火) 19:37:020450デフォルトの名無しさん
2010/09/07(火) 19:52:15どっかのゲームは自作乱数ルーチン作って自爆してたしな。
素直に%でいいな。
0451デフォルトの名無しさん
2010/09/07(火) 20:50:55その、今の rand() とは、いったいどんなアルゴリズムを使っているのですかね?
0452デフォルトの名無しさん
2010/09/07(火) 20:52:37すなおに使うとなきますよ。
http://www.kouno.jp/home/c_faq/c13.html#16
0453デフォルトの名無しさん
2010/09/07(火) 20:56:48アルゴリズム解法で メルセンヌツイスタ や
ホワイトノイズ→AD変換からというデバイス由来という手法が
実在しているのは知っている
標準関数である rand() の現在の実装がどうなんてるのか知らない
>>443 C99 だと実装推奨の手法が規定されてる?
0454デフォルトの名無しさん
2010/09/07(火) 21:00:57いやそれ、80年代に書かれたやつでしょ。
下位ビットの周期が極端に短い処理系なんて90年代の前半ごろには
絶滅してる。
qsort()はデキがわるいことがあるから気をつけろみたいなアドバイス
する人はすっかり見なくなったのに、rand()のほうはいまだにそう
言う人が多いのってなんでだろうね。
0455デフォルトの名無しさん
2010/09/07(火) 21:04:14VisualStuio2010のrand()みてみたら線形合同法。
下位ビットでも周期が数万だから、ゲームとか初心者が
練習に使う分には十分だね。
0456デフォルトの名無しさん
2010/09/07(火) 21:12:57VSだとある程度切り捨ててたはずだけど
0457デフォルトの名無しさん
2010/09/07(火) 21:18:42内部は32ビットで計算して、上位16ビットを乱数として返してるね。
だから下位ビットではない。
ま、その16ビットからさらに上位ビットを使えば周期は長くなるけど、
rand()ですむような用途なら%Nでもほとんど大丈夫でしょ。
0458デフォルトの名無しさん
2010/09/07(火) 21:46:13下位ビットの周期性の話ではないが、
実験で gcc の rand() を使ったことがあったが結構偏りがあったので、wichmann-hill を代替に使用したことがある。
rand() を信用しないほうがよいのでは。線形合同法ならばなおさら。
0459デフォルトの名無しさん
2010/09/07(火) 21:48:07下位16ビットを捨ててるから十分って説明なら問題ないです
0460デフォルトの名無しさん
2010/09/07(火) 21:53:42qsortは遅いだけでソートされるけど、
ランダムを期待して周期的だと致命的だからじゃね?
ちなみに90年代後半のFreeBSD2.2.xのgccは、rand()%4すると
1、2、3、4が繰り返されるクソrand()だった。
時期が引っ掛かっただけて、大筋否定する気ないけど、
知識として知っておくのは悪くないと思うね。
地雷に当たって知らんと死ねる。
0461デフォルトの名無しさん
2010/09/07(火) 21:54:15rand()の下位をとるか上位をとるかって話なら、
そんなん気にしないでrand()%Nで十分でしょって話。
rand()が使えないような用途なら、上位から取るとかって話じゃ
なくて使わないって話になる。
当たり前だけど。
0462デフォルトの名無しさん
2010/09/07(火) 21:56:27Solarisでもそんな話し合ったな。
unix系はしょうがねえな。
0463デフォルトの名無しさん
2010/09/07(火) 22:01:01度数分布とれば偏りは見つかりそうだけど
周期性があるかどうかの検証もいやらしいな
サンプル数を多くとって、自己相関算出してみるぐらいなのかね?
0464デフォルトの名無しさん
2010/09/07(火) 22:09:02おk?
そして、実行ファイルを解凍みたいな処理をすると、オブジェクトファイルを取り出す事が出きるのですか?
0465デフォルトの名無しさん
2010/09/07(火) 22:14:17出来るかも
0466デフォルトの名無しさん
2010/09/07(火) 22:17:390467デフォルトの名無しさん
2010/09/07(火) 22:36:13ポインタください。どうもみつからなくて。
0468デフォルトの名無しさん
2010/09/07(火) 23:01:32rand()%2
をぐるぐる回したら
0101010101010101010
ってなりました。これはダメな処理系ですか?
0469デフォルトの名無しさん
2010/09/07(火) 23:51:07速度優先・大量のデータを吐くための rand() だったということで。
0470デフォルトの名無しさん
2010/09/08(水) 00:26:53gcc -O2 なら通るのですが、-O3以上では Error: symbol `_sse_memcpy128_L1' is already defined となります。
インラインアセンブラでのラベルのバッティングを防止する良い記法を教えてください。(gccなら方言でもかまいません)
0471デフォルトの名無しさん
2010/09/08(水) 00:53:07(中略)
loop 1b
にするのかな
0472デフォルトの名無しさん
2010/09/08(水) 01:54:24マトモな擬似乱数が欲しければrand()なぞ使うな、ということじゃないかな。
>470
インラインじゃなきゃダメなの?
sse_memcpy128.sを別に作ってgccに食わせてもいい気がするんだけど。
0473デフォルトの名無しさん
2010/09/08(水) 12:32:200474デフォルトの名無しさん
2010/09/08(水) 12:33:370475デフォルトの名無しさん
2010/09/08(水) 12:35:230476デフォルトの名無しさん
2010/09/08(水) 12:43:440477デフォルトの名無しさん
2010/09/08(水) 12:45:130478デフォルトの名無しさん
2010/09/08(水) 12:46:11メルセンヌツイスタおすすめ
0479デフォルトの名無しさん
2010/09/08(水) 12:50:080480デフォルトの名無しさん
2010/09/08(水) 12:51:57ケチつけたい奴を黙らせることは不可能なので
使う者にとって気の済むものを作って使えばいい
0481デフォルトの名無しさん
2010/09/08(水) 17:13:31問題なく動かせたプログラムの構造体
#define NUM_OF_NODE 100
struct node_data {
int x;
int y;
int neighbor[NUM_OF_NODE];
};
に、二次元配列のメンバ
int neighbor_2hop[NUM_OF_NODE][NUM_OF_NODE];
を新しく付け加えて(その他何も変えず)、とりあえずコンパイルして実行したらエラー終了…
一次元配列のメンバ int nbr_2h[NUM_OF_NODE]; だと付け加える前の結果と変わらないのに。
二次元はダメってどういうことなんでしょう/(^o^)\
グーグル先生に聞いてもいまいち何が悪いのかわからんちん
0482デフォルトの名無しさん
2010/09/08(水) 17:15:550483デフォルトの名無しさん
2010/09/08(水) 17:16:200484デフォルトの名無しさん
2010/09/08(水) 17:16:48mallocで確保するかグローバル変数にしたらいいんじゃね
0485デフォルトの名無しさん
2010/09/08(水) 17:20:250486デフォルトの名無しさん
2010/09/08(水) 17:21:07いくつか理由は考えられるが、みんなが言ってるサイズの可能性は高いかな。
16ビットのコンパイラか、この構造体の大きな配列をローカル変数で取ってるとか無い?
0487デフォルトの名無しさん
2010/09/08(水) 17:21:25>>484
短絡的な思考しかできない奴
0488デフォルトの名無しさん
2010/09/08(水) 17:24:04お前俺が正解だったら土下座な?
0489デフォルトの名無しさん
2010/09/08(水) 17:26:10回答の意味すらまともに理解できないレベルなのですみません。
エラー内容はよくわからず。
とりあえずmallocで確保するの試してみます。
>>486
ローカル変数で取ってました
0490デフォルトの名無しさん
2010/09/08(水) 17:30:20LSI-C86試食版とか
0491デフォルトの名無しさん
2010/09/08(水) 17:32:52分かる奴には分かる……かもしれない
0492デフォルトの名無しさん
2010/09/08(水) 17:35:53学校のPCに入ってたvs2008使ってます
>>491
言い方がまずかったよう。途中で停止するだけでエラーメッセージは無です
0493デフォルトの名無しさん
2010/09/08(水) 17:38:55ありがちw
0494デフォルトの名無しさん
2010/09/08(水) 17:44:16プリコンパイルヘッダの対象になってた とか?
うまく依存関係手繰れてなくて、再コンパイルが必要なソースのコンパイルがなされていない可能性
リビルドしてみて
0495デフォルトの名無しさん
2010/09/08(水) 17:46:54「C/C++の場合いきなりの初心者はIDE使うな」
0496デフォルトの名無しさん
2010/09/08(水) 17:48:03>>492
再現性100%なら、デバッガをつかって問題がおきてる箇所を
特定するのは難しくないと思うけど。
0497デフォルトの名無しさん
2010/09/08(水) 17:51:22ググるまえにステップ実行でもしてみようぜ
0498デフォルトの名無しさん
2010/09/08(水) 17:51:53使ったことなかったものでorz
宣言したら確保してくれるのに、mallocって何に使うんだろうレベルでした。生きててすみません。
お騒がせしました。回答ありがとうございました。
0499デフォルトの名無しさん
2010/09/08(水) 17:52:06C/C++の場合は言えてるがJavaとかC#とかだったら
IDEから入ったほうがいいと思う。C/C++は例外的に
IDEと相性が悪い
0501デフォルトの名無しさん
2010/09/08(水) 17:57:01大きな配列でも取ってたのかな
0502デフォルトの名無しさん
2010/09/08(水) 17:59:12変数定義の段階でスタックあふれるのも リンカの設定次第だからコンパイル時には分からないのか…
スタックオーバー落ちって何らかのヒント出さなかったっけ? (VS2008 環境)
0504デフォルトの名無しさん
2010/09/08(水) 18:05:07ほんと短絡思考しかできない奴だな
0505デフォルトの名無しさん
2010/09/08(水) 18:18:17試しにスタックあふれのコード実行したらデバッグなら
0xC00000FD: Stack overflow
で止まったけど、デバッグ無しだと停止しました、のダイアログだけだな・・・
0506デフォルトの名無しさん
2010/09/08(水) 18:21:120507デフォルトの名無しさん
2010/09/08(水) 18:23:08念の為言うけど、mallocしたらfreeは忘れないようにね
↓以下NT系なら解放いらない〜とかめんどいからRAIIに〜とか禁止
0508デフォルトの名無しさん
2010/09/08(水) 18:43:05そこに変数だけで1KB以上の領域を使おうと思う方がどうかしてる
スタックはオート変数のみに徹底しておけ
ただでさえ関数呼び出しのたびに消費されるんだから
0509デフォルトの名無しさん
2010/09/08(水) 18:50:54こちらへどうぞ
http://hibari.2ch.net/test/read.cgi/tech/1179424842/
0510デフォルトの名無しさん
2010/09/08(水) 18:56:394kbのオート変数とか普通に使うよね
0511デフォルトの名無しさん
2010/09/08(水) 18:57:34そこがおまえの巣か
出てくんなよド低脳w
0512デフォルトの名無しさん
2010/09/08(水) 18:59:120513デフォルトの名無しさん
2010/09/08(水) 20:17:47特定のホストにPingを打ち、正常なら処理を終了
以上なら数分後に再度Pingというプログラムが欲しいのですが、どう実装していいのかわかりません。
Linuxのコードはあるようですが、Windowsでどうしたらいいか、教えてください。
0514デフォルトの名無しさん
2010/09/08(水) 20:23:490515デフォルトの名無しさん
2010/09/08(水) 20:30:52node_dataの配列作ってんだろ
0516デフォルトの名無しさん
2010/09/08(水) 20:43:48while (system("ping -n 1 127.0.0.1") != 0) {
Sleep(60000);
}
0517デフォルトの名無しさん
2010/09/09(木) 02:21:19先ずは何「以上」なのか説明してもらおうか。
0518デフォルトの名無しさん
2010/09/09(木) 05:55:05参考になりそうなffmpegを使ったオープンソースのメディアプレイヤーってある?
できるだけシンプルな奴がいいんだけど。。
0519デフォルトの名無しさん
2010/09/09(木) 09:23:530520デフォルトの名無しさん
2010/09/09(木) 16:56:41MinGWをC:\MinGWに再インストールして(mingw-get-inst-20100831.exe)
C:\MinGW\bin\test.cに※のソースを書いて
gcc test.c
でコンパイルしたところ
gcc: CreateProcess: No such file or directory
と出てコンパイル出来ませんでした
再インストールする前は
Info: resolving __fmode by linking to __imp___fmode (auto-import)
Info: resolving __fpreset by linking to __imp___fpreset (auto-import)
と出てコンパイル出来ませんでした(その下にも色々出ましたが)
最初の一回だけはコンパイル出来たのですが、どんな原因が考えられますか?
OSはWindows 7です
※のソース↓
#include <stdio.h>
int main(void){
printf("HELLO WORLD\n");
return 0;
}
0521デフォルトの名無しさん
2010/09/09(木) 17:01:59でググるといろいろわかるみたいだぞ。
binにソースを置いてるようじゃ、この先も苦労しそうだな。
0522デフォルトの名無しさん
2010/09/09(木) 17:09:00カレントディレクトリとか聞いたことないか?
諦めてVC++でも入れろカス
0523デフォルトの名無しさん
2010/09/09(木) 17:45:17binにソースを置いたのは、binでコンパイルして成功したら環境変数を設定しようと思ってたからです
ググッたんですけど、あんまりわかりませんでした・・・
>>522
もちろん、C:\MinGW\で実行しましたよ
今までbcc32でコンパイルしてたので、やり方が同じなら間違わないと思います
VC++、試してみます
0524デフォルトの名無しさん
2010/09/09(木) 17:48:260525デフォルトの名無しさん
2010/09/09(木) 17:49:47やっぱ間違ってんじゃねーかwwwwwww
0526デフォルトの名無しさん
2010/09/09(木) 17:52:20それらの環境がおかしいPATH通ってないかファイル名が違うと
CreateProcess: No such file or directory
が出るみたいよ。まあ他も試せるならそっち使った方がいいな
0527デフォルトの名無しさん
2010/09/09(木) 18:04:08gcc内部で CreateProcess 使ってて(fork の代用?) その段での呼び出しエラーを報告してるのか
0528デフォルトの名無しさん
2010/09/09(木) 18:37:03ソースをMinGW\binに置いてカレントがMinGWなら
gcc bin\test.c
だろ
0529デフォルトの名無しさん
2010/09/09(木) 18:44:26>>528
ごめんなさい、c:\mingw\binでgcc test.cです
0530デフォルトの名無しさん
2010/09/09(木) 18:50:482つの OS の癖を同時に憶えるのは過負荷だよ
これは cygwin でも基本同じこと
どうしても gcc にこだわるなら Linux 専用機を用意した方がいい
VM でなく実機で
0531デフォルトの名無しさん
2010/09/09(木) 18:59:480532デフォルトの名無しさん
2010/09/09(木) 19:13:57どこに躓く要素があんだよ
0533デフォルトの名無しさん
2010/09/09(木) 19:41:22MinGW?
0534デフォルトの名無しさん
2010/09/09(木) 21:06:490535デフォルトの名無しさん
2010/09/10(金) 03:04:33コード上の文字列が読めるんだけど、見えなくする方法ないの?
0536デフォルトの名無しさん
2010/09/10(金) 03:21:25見るな
覗くな
暗号化
気にするな
0537デフォルトの名無しさん
2010/09/10(金) 03:40:17zipexe とか upx とかなら頭をひねらなくても大丈夫w
0538デフォルトの名無しさん
2010/09/10(金) 04:43:000539デフォルトの名無しさん
2010/09/10(金) 05:51:130540デフォルトの名無しさん
2010/09/10(金) 06:06:54以下がwarningで
tes.c: In function ‘main’:
tes.c:16: warning: passing argument 1 of ‘sorting’ from incompatible pointer type
tes.c: In function ‘sorting’:
tes.c:30: warning: passing argument 1 of ‘strcmp’ makes pointer from integer without a cast
tes.c:30: warning: passing argument 2 of ‘strcmp’ makes pointer from integer without a cast
tes.c:31: warning: passing argument 1 of ‘swap’ makes pointer from integer without a cast
tes.c:31: warning: passing argument 2 of ‘swap’ makes pointer from integer without a cast
ここからが私が作成したプログラミングです。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void sorting(char wd[10][4]);
void swap(char *x,char *y);
main(){
FILE *fp;
char *s1,*s2,*s3;
s1=(char *)malloc(10);
fp=fopen("word.dat","r");
while(fgets(s2,10,fp)!=NULL){
sorting(&s2);
strcpy(s1,s2);
}
free(s1);
fclose(fp);
printf("%s \n",s1);
}
0541デフォルトの名無しさん
2010/09/10(金) 06:08:58先ほどの続きとなります。
void sorting(char wd[10][4]){
int i;
for(i=0;i<10;i++){
if(strcmp(wd[i][4],wd[i+1][4])<0)
swap(wd[i][4],wd[i+1][4]);
}
}
void swap(char *x,char *y){
char *tmp;
strcpy(tmp,x);
strcpy(x,y);
strcpy(y,tmp);
}
以上です。警告文の解決策ともし間違っている部分があればご指摘お願い致します。
0542デフォルトの名無しさん
2010/09/10(金) 06:16:110543デフォルトの名無しさん
2010/09/10(金) 06:37:42>10個の3文字英単語をアルファベット順に並び変える
これはどういうことがしたいの?
bad cow ank def don...
これ↑を、
1:ank bad cow def don...
こうしたいのか、
2:abd cow akn def dno...
こうしたいのか、どっち?
0544デフォルトの名無しさん
2010/09/10(金) 06:40:46設計ですか・・・
>>543
1のほうです
0545デフォルトの名無しさん
2010/09/10(金) 06:59:211度に色々なことをやろうとせずに、単純化して1つずつやっていった方がいいよ。
とりあえず、3文字の単語じゃなく、1文字だけのをソートしてみたら?
0546540-541
2010/09/10(金) 07:13:14ポインタも配列も正しく扱えてないですか・・・
1文字ずつですか・・・上でやってみましたが結果は同じでした・・・
どこがおかしいか全く見当もつきません・・・
0547540-541
2010/09/10(金) 07:23:52tes.c:30: warning: passing argument 2 of ‘strcmp’ makes pointer from integer without a cast
tes.c:31: warning: passing argument 1 of ‘swap’ makes pointer from integer without a cast
tes.c:31: warning: passing argument 2 of ‘swap’ makes pointer from integer without a cast
の警告文は自己解決しました。
if(strcmp(&wd[i],wd[i+1]))
swap(&wd[i],&wd[i+1])
で解決しました。
0548540-541
2010/09/10(金) 07:26:050549540-541
2010/09/10(金) 07:37:570550デフォルトの名無しさん
2010/09/10(金) 07:42:06malloc使わんとダメなの?
全部配列にしたら?
0551デフォルトの名無しさん
2010/09/10(金) 07:47:17>>547の修正後の話
・char *s2にfgetsで10バイト読み込んでるけどメモリ確保していない
・sortting関数で受け取ってるwdは[10][4]の40バイトなのに渡されてるのは10バイトのデータ
・データコピーによる交換かポインタのポインタで交換かによって違ってくるけど、
>>547のswap(&wd[i]〜はポインタのポインタで交換しようとしてる
0552デフォルトの名無しさん
2010/09/10(金) 07:55:52http://u8.getuploader.com/vipprog/download/658/tes.c
こんな感じですかね・・・これでセグメンテーション違反ですが・・・
0553デフォルトの名無しさん
2010/09/10(金) 07:59:03なにに s1[10]にアクセスしてんだよ死ね
0554デフォルトの名無しさん
2010/09/10(金) 08:06:10すみません・・・・。
0555デフォルトの名無しさん
2010/09/10(金) 08:17:40生きててすみません。でも、真理にたどり着いてから死にたい。
0556デフォルトの名無しさん
2010/09/10(金) 08:25:41本当に一度初心者用の教本からやり直した方がいいんじゃないかってぐらい
あちこちおかしい
確保してないただの未初期化のポインタに書き込もうとしたり
配列を渡すときもめちゃくちゃだし
0557デフォルトの名無しさん
2010/09/10(金) 08:31:08こいうことでいいのか?
0558デフォルトの名無しさん
2010/09/10(金) 08:40:21そういうことであってます・・・。お手数掛けて申し訳ありません。
再度、参考書等を読み直して1から自分で作ってみようと思います。
ぐちゃぐちゃなプログラムをお見せして申し訳ありませんでした。
また、質問に回答してくださった方々、ありがとうございました。
精進します・・・。
0559デフォルトの名無しさん
2010/09/10(金) 08:42:500560デフォルトの名無しさん
2010/09/10(金) 08:46:54失敗しているってことは、実践しているってことなんだからね
頑張って
0561デフォルトの名無しさん
2010/09/10(金) 13:03:120562デフォルトの名無しさん
2010/09/10(金) 13:14:180563デフォルトの名無しさん
2010/09/10(金) 13:21:440564デフォルトの名無しさん
2010/09/10(金) 16:43:180565デフォルトの名無しさん
2010/09/10(金) 17:12:370566デフォルトの名無しさん
2010/09/10(金) 18:16:210567デフォルトの名無しさん
2010/09/10(金) 18:18:030568デフォルトの名無しさん
2010/09/10(金) 21:30:28自国語の読みをしてるよ。
日本人ならローマ字読みでワーニングだろ。
英語に近いほうがかっこいいとか、植民地根性すぎる。
0569デフォルトの名無しさん
2010/09/10(金) 21:46:030571デフォルトの名無しさん
2010/09/10(金) 21:58:25なんで「警告」って言わないの? もう占領軍はいないんだよ。
0572デフォルトの名無しさん
2010/09/10(金) 22:06:37warningも日本語の一部として取り入れられたんじゃないか?
0573デフォルトの名無しさん
2010/09/10(金) 22:10:01mainはメインなのにmailはメールとか、それ以外のカタカナは
ぜんぜん不統一なんだろ。
0574デフォルトの名無しさん
2010/09/10(金) 22:10:260575デフォルトの名無しさん
2010/09/10(金) 22:20:00けど多くは他の国の読み由来のなのかもしれない
ウィルスとか
0576デフォルトの名無しさん
2010/09/10(金) 22:28:440577デフォルトの名無しさん
2010/09/10(金) 23:00:27でも、メイラーと書く割にはつい、メールと書いている事実。
某所で「チェインメイル」「鎖帷子か?」の遣り取りが頻発した所為かも知らん。
0578デフォルトの名無しさん
2010/09/10(金) 23:22:50コードの質とは全然関係ない
0579デフォルトの名無しさん
2010/09/10(金) 23:40:500580デフォルトの名無しさん
2010/09/10(金) 23:42:580581デフォルトの名無しさん
2010/09/10(金) 23:43:010582デフォルトの名無しさん
2010/09/10(金) 23:45:300583デフォルトの名無しさん
2010/09/11(土) 00:01:560584デフォルトの名無しさん
2010/09/11(土) 00:02:11低【そう】ってどういうこと?
断言できない奴こそどこを見てものを言ってるのか疑問だぜ
0585デフォルトの名無しさん
2010/09/11(土) 00:06:410586デフォルトの名無しさん
2010/09/11(土) 00:11:07「低そう」とか言って断言できないって、観察力無さ杉。
ってことか。
なるほど。
0587デフォルトの名無しさん
2010/09/11(土) 00:20:32断言できない方が観察力低いとは言い切れないだろう
サンプル数がいくら多くてもたった1つの例外を見つけてしまうと断言できなくなってしまうわけだから
0588デフォルトの名無しさん
2010/09/11(土) 00:47:21ご愛敬ってとこでいいかな
>>586
なるほど、ワーニングという発音を見てものを言っているのか、よくわかった
>>587
まあどんなに周りがよくてもたった1つのバグで評価は最低にされちまったりするが
「高い観察力」を持つといいながら具体的な指摘/対策をしない(できない)奴はダウトだろ
0589デフォルトの名無しさん
2010/09/11(土) 00:56:280590デフォルトの名無しさん
2010/09/11(土) 01:09:34【固体】識別番号とおっしゃるごにょごにょとか色々いるわけで
海千山千相手のお仕事で言葉尻に留意するのはともかく、過敏反応で墓穴を掘ったらそいつら以上の赤っ恥を晒すことになる
0591デフォルトの名無しさん
2010/09/11(土) 01:25:280592デフォルトの名無しさん
2010/09/11(土) 01:43:42dogなら「いぬ」「〜けん」というのと同じ。言語が違えば違う音になるし、単語同士が1対1に対応するわけでもない。
0593デフォルトの名無しさん
2010/09/11(土) 01:50:50ページングとスワッピングか‥‥。調べてみるとはっきりとは区別してなかったな。勉強になった。
0594デフォルトの名無しさん
2010/09/11(土) 01:52:11でも、めーんてなんす、も昔は恥ずかしかったけれども、最近はそうでもなくなったなあ。
0595デフォルトの名無しさん
2010/09/11(土) 01:56:51彡川川川三三三ミ〜
プーン 川|川\ /|〜
‖|‖ ◎---◎|〜
川川‖ 3 ヽ〜 / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
川川 ∴)〆(∴)〜 < ウォーニング
川川 〜 /〜 |
川川‖ 〜 /‖〜 \______________
川川川川 (⌒)川‖〜 ヴィシッ!
//::::::::|-、 ,-/::::::ノ ~.レ-r┐
/ /:::::::::::| /:::::ノ__ | .| ト、
| /:::::::::::::::| 〈 ̄ `-Lλ_レ′
0596デフォルトの名無しさん
2010/09/11(土) 02:13:270597デフォルトの名無しさん
2010/09/11(土) 03:23:12どの程度プログラム書ければ良いんだ…ワカンネ…
募集かけてるくせに、そういうことをあまり記載してないのってどうなの…
0598デフォルトの名無しさん
2010/09/11(土) 03:30:4310チーム(T1,T2,...,T8)でトーナメントを行う
時の勝敗樹状図をすべて書き出すプログラム
0599デフォルトの名無しさん
2010/09/11(土) 03:32:110600デフォルトの名無しさん
2010/09/11(土) 03:38:26{
if(i>i-1)
{
}
oh...ごめんなさい、バイトすら無理ですた
0601デフォルトの名無しさん
2010/09/11(土) 03:45:300602デフォルトの名無しさん
2010/09/11(土) 03:56:44先ず「勝敗樹状図」と「すべて」の定義を聞くことが正解だろうな。
理解できずに(そもそも十分な情報が与えられていない要求に対して)いきなりプログラムを書き始めるのは明らかに間違い。
0603デフォルトの名無しさん
2010/09/11(土) 04:00:150604デフォルトの名無しさん
2010/09/11(土) 04:32:590605デフォルトの名無しさん
2010/09/11(土) 04:45:33起こりえる、試合のセットを列挙するって
方針はどう?
1位T1 2位T2 3位T3 4位T4
(T1,T4) (T2 T3) (T1 T2) (T3 T4)
0606デフォルトの名無しさん
2010/09/11(土) 05:01:40終わってるなこのスレ
0607デフォルトの名無しさん
2010/09/11(土) 05:21:04扱いたいものですな。完全な理解と完璧な要求定義がないと
何も書けないというのはプログラマじゃなくて単なるコード屋
という誹謗も耳にすることがあります。
0608デフォルトの名無しさん
2010/09/11(土) 07:09:430609デフォルトの名無しさん
2010/09/11(土) 07:33:46どうすれば良いですか?
javaとかのsetbメソッドみたいにしたいです
void a() {
static int b;
}
0610デフォルトの名無しさん
2010/09/11(土) 08:27:22全く保証がないが、static変数はデータ領域に配置されてるので
他のデータ領域にある変数のアドレスがえられるならそれをずらせばアクセス出来るよ
0611デフォルトの名無しさん
2010/09/11(土) 08:38:180612デフォルトの名無しさん
2010/09/11(土) 08:45:08変数は構造体にまとめて
その構造体名_set_変数名の関数用意するとかすればいいんじゃないの?
よりクラスっぽくするキモいテクニックもあったような気がするけど
つか関数に置いた変数にアクセサってひょっとしてJavaじゃなくてjavascriptだったりするのか?
0613デフォルトの名無しさん
2010/09/11(土) 09:05:030614デフォルトの名無しさん
2010/09/11(土) 10:51:33データ構造は配列。
アルゴリズムはリニアサーチ。
この二つだけ知っていれば業界は渡っていける。
0615デフォルトの名無しさん
2010/09/11(土) 10:53:360616デフォルトの名無しさん
2010/09/11(土) 11:05:160617デフォルトの名無しさん
2010/09/11(土) 11:05:48SQLがわかり、少しはかけること
HTMLも少しは出来ること
一般教養試験(SPI)で行う程度の数学が出来ること
あとは面接での心理検査で適正を見る
こんなところか?
0618デフォルトの名無しさん
2010/09/11(土) 11:06:48某漫画みたいなすごい偏ったトーナメントもありだと微妙に面倒だよね
この辺はっきりさせないと問題として不十分でしょ
0619デフォルトの名無しさん
2010/09/11(土) 11:10:530620デフォルトの名無しさん
2010/09/11(土) 11:13:31なんだか信用したくない件
0621デフォルトの名無しさん
2010/09/11(土) 11:37:51CGIで使うかもしれないぞ
0622デフォルトの名無しさん
2010/09/11(土) 11:45:000623デフォルトの名無しさん
2010/09/11(土) 16:53:380624デフォルトの名無しさん
2010/09/11(土) 20:45:26もしも、各チームの強さが(チーム1=最強、2=かなり強い、3=まあまぁ強い、4弱い)って関係だったらどうだろうなぁ〜って考えると、
トーナメント表の組み合わせが
”チーム1対チーム2、 チーム3対チーム4”だとすると、チーム2は初戦でチーム1に必ず負けるので、チーム2はかなり強いのに最終順位はチーム3よりも下になってしまう。
(優勝・チーム1、 準優勝・チーム3、 銅メダル・チーム2、 まけ・チーム4)
トーナメント表の組み合わせが
”チーム1対チーム3、 チーム2対チーム4”だとすると、チーム2は初戦を制して準優勝できる。
(優勝・チーム1、 準優勝・チーム2、 銅メダル・チーム3、 まけ・チーム4)
とすると、必ずしもチームの強さと、トーナメンート表でのポヂショーンの良さとが、かならずしも一致しない所がおもしろいなぁ〜〜っておもいました。
各チームの強さ関係の、全ての組み合わせが4の階乗で24とおりかもしれないとしたら、
それらの強さ関係の各場合毎に、トーナメントでの全ての組み合わせも24とおりだとすると、ありうる組み合わせは24x24なので、すごいいっぱいひょうじしなくちゃいけなくてたいへんだとおもった。
(でも、かさなってるのもあったら、ちょっとはヘルのかもしれないなぁ〜っておもったけど、かさなるのだろうか〜はて??わかんない)
それはさておき
10チームもあったら、すごいいっぱいでけいさんがたいへんだぁ〜うわ〜〜ん(・_;/ってなるとおもった。ぱそこーんが
0625デフォルトの名無しさん
2010/09/11(土) 21:28:260626デフォルトの名無しさん
2010/09/11(土) 21:38:570627デフォルトの名無しさん
2010/09/11(土) 21:43:580628デフォルトの名無しさん
2010/09/11(土) 21:47:520629デフォルトの名無しさん
2010/09/11(土) 23:01:09プロセスなんて無視
0630デフォルトの名無しさん
2010/09/11(土) 23:49:06コンソール画面のみを使って遊べるゲームのアイディアを下さいm(__)m
たとえば
・じゃんけん
・hi&row
・タイピングゲーム
みたいなものです
0631デフォルトの名無しさん
2010/09/11(土) 23:51:080632デフォルトの名無しさん
2010/09/11(土) 23:55:25・暗算ゲーム
・Hangman(単語当てゲーム)
0633デフォルトの名無しさん
2010/09/12(日) 00:07:13ありがとうございます!
参考にさせていただきます
他の方も是非よろしくお願いしますm(__)m
0634デフォルトの名無しさん
2010/09/12(日) 00:29:35ハイ-ローならこの前私が作ったな
カードを表す配列の中身を何回もランダムに入れ替えることでシャッフル
これを順番に出して、高いか低いか当てさせる
一人でやるからあんまり面白く無いが・・・
0635デフォルトの名無しさん
2010/09/12(日) 00:34:54sp<IMediaPlayer> mPlayer;
のsp<>は何を意味しているのでしょうか?
0636デフォルトの名無しさん
2010/09/12(日) 00:37:01NetHackライクなのは時間もかかって楽しめるぞ。
http://ja.wikipedia.org/wiki/NetHack
とりあえずフィールド上でキャラクタを移動できるようになれば上出来。
気が向いたらどんどん進めてもよし。
0637デフォルトの名無しさん
2010/09/12(日) 00:38:07それはCではなく、C++。
"C++ テンプレート"でググってみなされ。
0638デフォルトの名無しさん
2010/09/12(日) 13:54:36コンソール制御がありなら、nethackまで行かなくても
ターン制インベーダぐらいでそれなりに面白かった。
敵が横移動しなくて、出て来る位置がランダム。
あとはスレッドまで入れて、テトリスとか作れる。
どこら辺までが簡単なゲームなんだろ。
テトリスなんかはルールは簡単だけど、
実装はレベルがちょっと上がる。
0639デフォルトの名無しさん
2010/09/12(日) 14:04:47エスケープシーケンスを使ったキャラクターベースで。
PC-9801、AT互換機、TOWNS、なぜかDOS互換OSの動いていた汎用機なんかで動作確認した。
0640デフォルトの名無しさん
2010/09/12(日) 14:11:23ローカルってオチじゃねえだろうな
0641デフォルトの名無しさん
2010/09/12(日) 14:22:080642デフォルトの名無しさん
2010/09/12(日) 14:33:040643デフォルトの名無しさん
2010/09/12(日) 14:33:43# 公然の秘密でも立場上あまりしゃべれないのでここまで
0644デフォルトの名無しさん
2010/09/12(日) 15:42:51どんなクソ設計したんだ?w
0645デフォルトの名無しさん
2010/09/12(日) 16:35:10時々いるんだよな、何でもかんでもすぐ別スレッド立てようとする奴。
0646デフォルトの名無しさん
2010/09/12(日) 16:35:321ヶ月もしていて配列?なんて突っ込まないでくださいね?
Visual Studio 2010 Expressを使ってます。
配列について質問なんですが、
main関数より上で宣言した(グローバル変数?)配列の値を変えたいです。
#include<stdio.h>
int a[2]={0,1};
int main(){
a[2]={2,1};
return 0;
}
こんな感じ?に書いたのですが【Error:]式が必要です】と言われます。
配列の値の変更はどのようにしたらいいのでしょうか?
配列の中の値を変えたいのですが・・・
日本語読みづらいですがおねがいします。
0647デフォルトの名無しさん
2010/09/12(日) 16:43:28{
a[0] = 2;
a[1] = 1;
return 0;
}
0648デフォルトの名無しさん
2010/09/12(日) 16:50:55ははは・・・まさか・・・ね?
1個1個入れていかないといけなかったのか?!
ありがとうございました。
初心者なのにご教授いただき光栄です
0649デフォルトの名無しさん
2010/09/12(日) 16:56:00別に配列もってて、それコピーしてもいい。
0650デフォルトの名無しさん
2010/09/12(日) 17:00:560651デフォルトの名無しさん
2010/09/12(日) 17:02:21main関数の中に書いてる
a[2]
ってのは、配列aの2番目(1から数え始めるなら3番目)を指してるんだ
だから、そこに{2,1}なんて値を入れることは出来ない
そもそも
int a[2]=ry;
で宣言しててa[2]が無いから
普通の整数を入れても何らかののエラーもしくは不具合が出るだろうけどね
これなら配列aを丸ごと書き換えられるけど・・・あんまり意味は無いかな
#include <stdio.h>
int a[2]={0,1};
int main(void){
int b[2]={2,3};
*a=*b;
printf("%d,%d\n",a[0],a[1]);
return 0;
}
Cを初めて一年くらいの私には、これしか思いつかない
0652デフォルトの名無しさん
2010/09/12(日) 17:11:24ありがとうございます!
なるほど。。。そういう事だったのか・・・
int b[2]={2,3};
*a=*b;
勉強させていただきます^^
0653デフォルトの名無しさん
2010/09/12(日) 17:12:34なんぞこれ
0654デフォルトの名無しさん
2010/09/12(日) 17:19:03構造体と間違るてんじゃねのか?
0655デフォルトの名無しさん
2010/09/12(日) 17:39:420656651
2010/09/12(日) 17:53:02使ってるのはBorland C++
0657デフォルトの名無しさん
2010/09/12(日) 18:01:56a[0] は b[0] の値になっても a[1] は b[1] の値にならない
元質問者の >>646 は配列の一括代入を意図してた
0658デフォルトの名無しさん
2010/09/12(日) 18:14:380659651
2010/09/12(日) 18:30:17ありがとう
0660デフォルトの名無しさん
2010/09/12(日) 18:42:40滞りなく動く(青バックやコア吐き、鼻から悪魔)
意図したとおりに動く
という保証にはならない
0661デフォルトの名無しさん
2010/09/12(日) 20:15:220662651
2010/09/12(日) 20:16:30実を言うとどうでもいい・・・
0663デフォルトの名無しさん
2010/09/12(日) 21:00:10これはたしかGCC拡張であったとおもいますよ。
これはたしか、両方の配列のサイズが同じであるのが前提条件だったような記憶。ボーランードのコンパーラーでも動くんだったんですね。しらなかったです。
0664デフォルトの名無しさん
2010/09/12(日) 21:12:11C99 だかの初期化ではなく、代入時にも { } でまとめられるほうの拡張?
*a = *b ただし、共に配列で型と大きさが同じ場合には一括代入するほう?
0665デフォルトの名無しさん
2010/09/12(日) 21:29:020666デフォルトの名無しさん
2010/09/12(日) 21:36:53* を付けたら既存の文法でも意味が付いちまーからな。
int a[2]={0,1};
int b[2]={2,3};
a = b;
こういう表記になるはずだろ。
0667デフォルトの名無しさん
2010/09/12(日) 21:38:00こんな感じで宣言した、グローバル変数はどうすれば初期化できますか?
0668デフォルトの名無しさん
2010/09/12(日) 21:44:120669667
2010/09/12(日) 21:47:51static File f;
オブジェクト指向言語だとprivateだけど、いまいちわからないからグローバル変数って書いてみた
とにかく、自動で初期化できればokなんです
0670デフォルトの名無しさん
2010/09/12(日) 22:00:00いずれにしても静的変数だから、何もしなくても全メンバに0が設定されることは、標準Cでは保証されている。
初期値を与えたいなら、初期化子を与えればよい。
こんなやつ
static File f={0, 1.0, "hoge"};
0672デフォルトの名無しさん
2010/09/12(日) 22:33:06こいつ最高にアホ
0673デフォルトの名無しさん
2010/09/12(日) 22:38:05static何を意味するですか?
でどれに掛かるんですか?
fなら File static f; ってできるんですか?
0675デフォルトの名無しさん
2010/09/12(日) 23:00:530676デフォルトの名無しさん
2010/09/12(日) 23:05:34詳しい説明を求めても、説明できたためしがないんで本人も説明できないんでしょう。
0677デフォルトの名無しさん
2010/09/12(日) 23:07:11staticが付いたらグローバル変数じゃないっておかしいだろーが
0678デフォルトの名無しさん
2010/09/12(日) 23:11:020679デフォルトの名無しさん
2010/09/12(日) 23:13:16Cのイヤなところなんだけど、staticは使う場所によって2通りの意味がある。
すべての関数定義の外で使用すれば、内部リンケージを意味する。
そのファイルの外から直接アクセスできなくなる。
プログラムがそのファイルだけからなるのであれば、staticがついても
グローバル変数と呼んでもいいかもしれない。
なおauto変数ではないので、静的変数である。
複文で宣言されている変数に、staticをつけると静的変数となる。
0680デフォルトの名無しさん
2010/09/12(日) 23:15:51いや、素直にみとめろよwwwww
0681デフォルトの名無しさん
2010/09/12(日) 23:42:01本来グローバルと呼ばれていたものは「ユニバーサル」とでも呼ぶべきだな。
0682デフォルトの名無しさん
2010/09/12(日) 23:46:142通りってことでもないだろ。
単にスコープの違いってだけの話だよ。
まあ、読み方の問題だな。
0683デフォルトの名無しさん
2010/09/12(日) 23:52:32{
static bool flag = false;
if(!flag){
flag = true;
do_something();
}
}
int main(void)
0684デフォルトの名無しさん
2010/09/12(日) 23:55:25だな。
基本は外に書くタイプの方だ。
それをスコープ区切るために内側に書くというだけのことだ。
0685デフォルトの名無しさん
2010/09/13(月) 00:05:27static int val = 0;
printf("%d\n", val++);
}
この結果がどうなると思ってるの
0686デフォルトの名無しさん
2010/09/13(月) 00:08:480687685
2010/09/13(月) 00:10:430688デフォルトの名無しさん
2010/09/13(月) 00:17:10hoge.hに全部書いて、hoge.cはhoge.hのみをincludeすべき?
巷のコード見てるとhoge.cとhoge.hで同じヘッダincludeしてたりもするんだけど、
その辺の切り分けってどうすればよいの?
0689デフォルトの名無しさん
2010/09/13(月) 00:21:030690デフォルトの名無しさん
2010/09/13(月) 00:23:27A:
func(){
for(int i=0; i<10; i++){
static int val = 0;
printf("%d\n",val++);
}
}
B:
static int val = 0;
func(){
for(int i=0; i<10; i++){
printf("%d\n",val++);
}
}
スコープしか変わらんだろ。
0691デフォルトの名無しさん
2010/09/13(月) 00:26:430692デフォルトの名無しさん
2010/09/13(月) 00:32:420693デフォルトの名無しさん
2010/09/13(月) 00:38:46その二通りを示せばいいのに。
0694デフォルトの名無しさん
2010/09/13(月) 00:42:45/ \ /\ キリッ
. / (ー) (ー)\ <「staticの意味が2通りある」
/ ⌒(__人__)⌒ \
| |r┬-| |
\ `ー’´ /
ノ \
/´ ヽ
| l \
ヽ -一””””~~``’ー?、 -一”””’ー-、.
ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒))
____
/_ノ ヽ、_\
ミ ミ ミ o゚((●)) ((●))゚o ミ ミ ミ <だっておwww
/⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\ /⌒)⌒)⌒)
| / / / |r┬-| | (⌒)/ / / //
| :::::::::::(⌒) | | | / ゝ :::::::::::/
| ノ | | | \ / ) /
ヽ / `ー’´ ヽ / /
| | l||l 从人 l||l l||l 从人 l||l バンバン
ヽ -一””””~~``’ー?、 -一”””’ー-、
ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒))
0695デフォルトの名無しさん
2010/09/13(月) 00:44:41・複文で宣言されている変数に、staticをつけると静的変数となる
static の有無で意味が変わるじゃん。既に書いてるのに。
0696デフォルトの名無しさん
2010/09/13(月) 00:54:40staticの有無の話はしてないし。
0697デフォルトの名無しさん
2010/09/13(月) 01:00:08それが使用された場面によって導かれる結果が変わっていくというだけのこと
髭の言ってた決まりが1つでないことが気持ち悪いという点には同意だな
あとは3つであろうが4つであろうが本質的には変わらない
0698デフォルトの名無しさん
2010/09/13(月) 01:05:160699デフォルトの名無しさん
2010/09/13(月) 01:10:53int *a; と書いてあるのを見て、
*a が int 型である、と読むのか、
a が int* 型である、と読むかの違いみたいなものなんだよ。
ただ基準としてる観点が違ってるだけであって、
どちらが正しいとか間違ってるとか、そういうんじゃないんだよ。
0700デフォルトの名無しさん
2010/09/13(月) 01:13:16それは前者が正しいだろ。
C++ 厨は何故か後者の読み方して書式までキモく変形させるけどな。
0701デフォルトの名無しさん
2010/09/13(月) 01:18:44君は十分に頑張ったよwww
もう楽になってもいいんだよwww
0702デフォルトの名無しさん
2010/09/13(月) 01:23:53関数定義の外であろうと内であろうと、staticを付けた変数は内部リンケージを持つ。
複文で宣言されていようとなかろうと、staticを付けた変数は静的変数となる。
故に、staticを付けた変数は、内部リンケージを持ち、静的変数となる。意味は一つ。
0703デフォルトの名無しさん
2010/09/13(月) 01:25:560704デフォルトの名無しさん
2010/09/13(月) 01:46:360705デフォルトの名無しさん
2010/09/13(月) 01:52:500706デフォルトの名無しさん
2010/09/13(月) 02:19:02それはどうだろ。
他に言いよう無いんじゃね?
静的な記憶域がうんたら的な表現の違いはあるかもだが。
0707デフォルトの名無しさん
2010/09/13(月) 02:27:00×内部リンケージを持つ
↓
○リンカーに知らされない
0708デフォルトの名無しさん
2010/09/13(月) 04:36:44グローバルスコープ(関数外)の関数か変数
→関数や変数は内部リンケージとなる(=ファイルスコープ)
ローカルスコープ(関数内)の変数のみ
→静的変数となる(リンケージは無関係)
C言語の曖昧さの1つだよ
0709デフォルトの名無しさん
2010/09/13(月) 07:13:31int *&a; は *&a が int 型である!!
0710デフォルトの名無しさん
2010/09/13(月) 07:30:13静的変数になるって・・・
よくわかってないのに説明すんな
0711デフォルトの名無しさん
2010/09/13(月) 07:47:28最近のコンソール画面は昔のように80文字x25行の制限があるわけじゃない。
モニターさえ広ければ640x240のVGA解像度ぐらいの文字数にする事も出来る。
流麗なグラフィックを売りにするようなゲームは流石に無理だと思うけど、
シューティングだろうが、アクションだろうが、アドベンチャーだろうが
RPGだろうが大抵のゲームは作れるはずだ。
色数の制限は厳しいが高速なハードウェアなら、文字の色を短時間で
切り替える事により疑似フルカラー表示したり、GPGPUを使って3DCG
を表示することだって出来るだろう。
唯一問題があるとしたら文章の表示ぐらいだ。アプリケーション側で
フォントデータを持つにしても、解像度が低いので漢字の表示は
あきらめるしかないかもしれない。
0712デフォルトの名無しさん
2010/09/13(月) 07:50:370713デフォルトの名無しさん
2010/09/13(月) 08:32:32それ、スレ違いですから。
>>708
ローカル変数にstaticをつけた場合も内部リンケージであることには違いはないでしょ。
0714デフォルトの名無しさん
2010/09/13(月) 08:41:25static キーワードはファイルスコープと静的の2つの意味を持つ
・関数外:元々静的なのでファイルスコープの機能しか評価されない
・関数内:元々ファイルスコープ(もっと狭いけど)なので静的機能しか評価されない
別に曖昧だとは思わないな、まぁ暗黒面とは呼ばれているけど
0715デフォルトの名無しさん
2010/09/13(月) 08:53:37どうした低脳w
お前の誤った知識を晒してみるか?
>>714
1つのキーワードに複数の意味を持たせることが曖昧そのもの
基本ファイルスコープにして外部リンケージのみ別のキーワードを用いる等対処法があったはずだ
もちろんC設計当時の話だから今さらだけどな
0716デフォルトの名無しさん
2010/09/13(月) 09:03:49違うっつってんだろーが
リンケージという言葉はグローバルスコープに存在するオブジェクトに対してしか使わないんだよ
局所変数にリンケージなんて存在しないの何故ならリンクする必要がないから
0717デフォルトの名無しさん
2010/09/13(月) 10:15:450718デフォルトの名無しさん
2010/09/13(月) 10:35:48にするようにって言ってるね。
Cなら仕組み的には1つ、意味的には2つあるってのを
ちゃんと理解しないといけないのが入門的には難しい気がする。
0719デフォルトの名無しさん
2010/09/13(月) 10:42:31従来のC言語の仕様でも困るほどのことはない。
困るというのは単にプログラマとして未熟なだけだよ。
0720デフォルトの名無しさん
2010/09/13(月) 10:52:49someFunc() {
Type val; // ローカル変数
static Type val; // ローカル静的変数
}
Type val; // グローバル変数
static Type val; // ファイルスコープ静的変数
extern Type val; // 外部のグローバル変数(定義ではexternは無意味)
Type func(...); // グローバル関数(宣言においては外部リンケージ)
static Type func(...); // 静的関数
extern Type func(...); // 外部のグローバル関数(定義ではexternは無意味)
んでもって、ややこしいのは関数外で無修飾で外部リンケージを持つ点だから、
無修飾ではファイルスコープしか持たないことにして
外部リンケージを持たせるためのglobalみたいなキーワードを用意したとする。
関数内変数は同じことだから省略して、
Type val; // ファイルスコープ変数
static Type val; // 静的なファイルスコープ変数(前者との区別はどうしようw)
global Type val; // 外部リンケージを持つ所謂グローバル変数
global static Type val; // グローバルで静的な変数(これも意味がよく判らんw)
結局のところ、「静的」とは何かが巧く定義できてないのが諸悪の根源かw
0721デフォルトの名無しさん
2010/09/13(月) 10:57:53グローバルスコープにあるオブジェクトは無条件で静的領域に確保されるよ
0722デフォルトの名無しさん
2010/09/13(月) 11:05:23それだったら話は簡単だ。
staticは関数内部用に限定して、関数外部用にlocalというキーワードに置き換え。
現在省略している外部リンケージ用にglobalというキーワードを追加。
折りを見てlocalを省略化に。
これで世の中平和になるw
0723デフォルトの名無しさん
2010/09/13(月) 11:09:36うん
だからC言語の設計時にそうしてればね、って話よ
0724デフォルトの名無しさん
2010/09/13(月) 11:10:42extern のことを書くなよ。今の仕様で語っても無意味。
けど無意味化された理由ぐらい考えろよ。そんなんで色々考えても無駄。
>んでもって、ややこしいのは関数外で無修飾で外部リンケージを持つ点だから、
これは当然のこと。何の問題もない。
>無修飾ではファイルスコープしか持たないことにして
こんなふざけた仕様はありえない。
0725デフォルトの名無しさん
2010/09/13(月) 11:11:51酷過ぎる、、、昔の extern の方がよほどマシだわ
0726デフォルトの名無しさん
2010/09/13(月) 11:16:09static Type func(...); // 静的関数
これらをいちいち静的と呼ぶ必要あんのか?
動的なのがあるというなら区別する価値はあるが。
0727デフォルトの名無しさん
2010/09/13(月) 11:21:21ない
autoの局所変数以外(関数、大域/static変数、定数)は無条件で静的
つーかそもそもメモリモデルとスコープは別物
0728デフォルトの名無しさん
2010/09/13(月) 11:22:490729デフォルトの名無しさん
2010/09/13(月) 11:23:43その別物の要素をstaticという1つのキーワードで扱ってるから混乱を招く
0730デフォルトの名無しさん
2010/09/13(月) 11:28:12お前マクロ厨だろw
0731デフォルトの名無しさん
2010/09/13(月) 11:28:23どう混乱してるんだ?
グローバルな時点で、静的か動的かを意識する必要はないんだから、それでいいだろ。
それともグローバルな動的変数が必要ってことか?
余計に意味がわかんねーよ。
0732デフォルトの名無しさん
2010/09/13(月) 11:30:10具体的にどう変えれば良いかを提示すればいいのに
0733デフォルトの名無しさん
2010/09/13(月) 11:34:06それをデリファレンスするときのアスタリスクに、
入門当時の俺は混乱させられた。
別の役割をひとつの記号が担ってる、
の思考に行き着くまで時間がかかった。
今では宣言時の type *p を、*pがtypeとなる、
の案も受け入れられる。
0734デフォルトの名無しさん
2010/09/13(月) 11:35:04頭わりーなさっきから言ってんだろw
どうして内部リンケージと静的局所変数を同じstaticという単語で修飾するんだよ?
理由を言ってみろよ
0735デフォルトの名無しさん
2010/09/13(月) 11:36:44別の言語がいいよって言いたいのか
0736デフォルトの名無しさん
2010/09/13(月) 11:41:51それで事足りるからだろ。
それで足りない事例があるのか?
どっちが頭悪いんだか。
0737デフォルトの名無しさん
2010/09/13(月) 11:44:040738デフォルトの名無しさん
2010/09/13(月) 11:45:24なるほど、言い得て妙だ。
0739デフォルトの名無しさん
2010/09/13(月) 11:49:330740デフォルトの名無しさん
2010/09/13(月) 11:50:19予想通りだが全く理由になってないw
同じ言葉を使う合理的な理由を説明しろよ
>>737
そう
誰が考えても違う意味なら違う言葉を使うのが合理的と考える
それを怠った故に誤解を生じたのはこのスレが証明している
現に区別の付いてないヤツがちらほら見受けられる
0741デフォルトの名無しさん
2010/09/13(月) 11:54:15> それを怠った故に誤解を生じたのはこのスレが証明している
C++になって無名namespaceが出てきたってこともあるな。
# マ板でおじゃばさまってコテがこの件で失態晒してたなw
0742デフォルトの名無しさん
2010/09/13(月) 12:01:52>予想通りだが全く理由になってないw
>同じ言葉を使う合理的な理由を説明しろよ
は?
static の効用はキーワードは有りと無しで変わる。
その効用が必要であれば付けるし、必要なければ付けない。
それで困ることがあったけではない。
→困る事例を挙げてない
それを二つの機能したいという発想だろ。
二つのキーワードってことは4通りになるってことだよ。
その仕様の説明もなしに、そっちが良いとかいう方がおかしい。
→具体的な仕様は出せない
妄想と言われてもしかたないね
0743デフォルトの名無しさん
2010/09/13(月) 12:08:41更にexternの有り無しも組み合わせて示してほしいな。
それをやろうとすればそれが愚かなことだと気付く。
0744デフォルトの名無しさん
2010/09/13(月) 12:11:13その効用が場所によって変わるから現に初心者が混乱してるっつってんだろーが
いい加減にしろよお前日本語読めないのか?
それと最初に言ったけどこれは「今さら」な話だ
オレが今困ってるわけじゃないしどうこうしようとも思ってない
ただお前のような輩が理由無くC言語の孕む問題点を擁護するのが気に食わん
完全無欠な言語じゃないんだから問題点を挙げておくのは初心者のためになるだろう
0745デフォルトの名無しさん
2010/09/13(月) 12:17:34なんでそんなに熱くなってんだよw
0746デフォルトの名無しさん
2010/09/13(月) 12:18:30だから、どう変えるかも示さないで、そっちの方が良いとか言うのがおかしい、
と言ってるんだよ?混乱がなくなるというのは君の妄想だろ。
初心者はポインタで混乱するから、ポインタなんかなくせっていうのと大してかわらんよ。
0747デフォルトの名無しさん
2010/09/13(月) 12:28:15お前は同じ言葉を使った理由を説明できるのか?
>>746
「そっちの方」ってなんだよw
オレはただ現状の曖昧な点を挙げてるだけだっつーのに
staticなくせなんて一言も言ってないし
お前が勝手に代替案求めてるだけじゃねーか
まあとりあえず代替案は>>722ということでいいよ
まず>>722の問題点を挙げろ
0748デフォルトの名無しさん
2010/09/13(月) 12:30:040749デフォルトの名無しさん
2010/09/13(月) 12:31:070750デフォルトの名無しさん
2010/09/13(月) 12:32:400751デフォルトの名無しさん
2010/09/13(月) 12:39:50まず変数に対しても関数に対しても
staticの指定は「こいつの存在をリンカに知らせない」という意味があって
さらに変数の場合は、静的生存期間を持つ、という整理が必要かと
変数の可視性と生存期間は明らかに別概念ではあるんだが、
その辺の指定を柔軟に操作できる言語はほとんど無い
たぶん実装上の都合もあろうし、実用上は特に誰も嬉しくないんだろう
0752デフォルトの名無しさん
2010/09/13(月) 12:48:59最初から完璧な設計なんて無理じゃね?
0753デフォルトの名無しさん
2010/09/13(月) 12:49:040754デフォルトの名無しさん
2010/09/13(月) 13:15:15C発明当時(1970年代前半)の処理系に与える影響が
どの程度のものなのかは興味がある
字句解析器の負担が大きくなるのかなあ?
ちゅーか当時のコンピュータ事情がまるで想像できない
DFAやNFAは発明されていたけど、KMP法やBM法が無いってさ……
0755デフォルトの名無しさん
2010/09/13(月) 13:32:340756デフォルトの名無しさん
2010/09/13(月) 13:33:30言ってるね
0757デフォルトの名無しさん
2010/09/13(月) 15:02:490758デフォルトの名無しさん
2010/09/13(月) 15:02:55>staticは関数内部用に限定して、関数外部用にlocalというキーワードに置き換え。
>現在省略している外部リンケージ用にglobalというキーワードを追加。
>折りを見てlocalを省略化に。
>これで世の中平和になるw
関数宣言で修飾子がついてないときに、現状の static が付いた状態に仕様変更するということだね。
それで global は必要に応じて付けろってことか。
C言語においては、関数や変数は隠蔽しない限り公開が原則なんだよ。言語思想。
それを変えるという話だから、もはやキーワードの問題じゃないだろ。
これで混乱が解消されるというなら、それは思想の問題だよ。
次に、関数の外で、変数を定義したときにはどうすんだよ?
global と static の有り無しで4通りあるだろ。
global な変数の初期化はどうすんの?
関数もプロトタイプ宣言はどうすんの?
0759デフォルトの名無しさん
2010/09/13(月) 15:14:07現状でも extern は省略できるだけで、その機能自体は生きてる。
この辺を理解しているのか非常に怪しい。
0760デフォルトの名無しさん
2010/09/13(月) 15:40:58int a; と static int a; ではスコープ以外にも違いがある。
前者は extern int a; という意味で、変数の実体の宣言ではない。
どこかで定義されている変数を使用しますということで、
関数のプロトタイプ宣言と同じ。
仮に int a = 3; と書けばその時点で実体の定義が行われたことになる。
後者は常に変数の実体定義。= 以降があってもなくても同じ。
従って static とは別に global や local のキーワードが必要というなら、
上記の違いを示す為の新たなキーワードを用意してそれと併用する必要がでてくる。
global や local はスコープの制御だというんだからね。
extern は関数宣言に対しては機能が一致しないので、
static が駄目だと言うんだから駄目ということになるだろうし。
0761デフォルトの名無しさん
2010/09/13(月) 15:46:22int a;
static int b;
func(){
static int c; // b をスコープ限定しただけ。根本的には同じ。
auto int d;
int e; // d の省略であり、結果として表記は a と同じだが根本的に違う。
extern int f;
}
書く位置はスコープの問題でしかなく、
static の意味が変わるわけではない。
0762デフォルトの名無しさん
2010/09/13(月) 15:50:25そんな真面目に反論されても困るわ。
論理的な人は周りから嫌われるから気をつけた方がいいよw
0763デフォルトの名無しさん
2010/09/13(月) 15:54:31自分はこうしたい、という仕様を書いてるの?
0764デフォルトの名無しさん
2010/09/13(月) 15:54:47それの何が省略されてんの?
0765デフォルトの名無しさん
2010/09/13(月) 15:57:00混乱の回避を目的として、
global とか local を導入するのが愚かな発想というこということでしょうね。
0766デフォルトの名無しさん
2010/09/13(月) 16:01:33staticやexternを組み合わせて使わないといけないということ?
externとか意味分かんないし、よけいややこしくなるよ。初心者的には絶対そうだよ。
0767デフォルトの名無しさん
2010/09/13(月) 16:06:15どんなときに使うわけ?
extern int hoge;
で定義しといて1つだけ宣言で
int hoge = 123;
とどう違うの?
0768デフォルトの名無しさん
2010/09/13(月) 16:24:150769デフォルトの名無しさん
2010/09/13(月) 16:38:25static付けるとそのソース内でしか参照出来ない。
無しだと、他のソースでも参照出来る、
んで他のソースでextern付けて参照する。
0770デフォルトの名無しさん
2010/09/13(月) 16:41:36//main.c
extern global void hoge(); //グローバル
global int aaa; //グローバル
int bbb; //ファイル
int main(void) //ファイル
{
int bbb = 456;
int ccc; //ローカル
static int ddd; //ローカル
hoge();
return 0;
}
//sub.c
extern global int aaa; //グローバル
void fuga(void) //ファイル
{
}
global void hoge(void) //グローバル
{
aaa = 123;
fuga(void);
}
みたいになるが、別に問題ないんじゃね?
むしろ表に出すものがglobalで明示されるからセキュリティは向上するね。
0771デフォルトの名無しさん
2010/09/13(月) 16:48:401. スコープがファイルに制限される
2. 初期値の有無を問わずプログラム開始時に領域が確保される
ということだけど、とりあえず1.はおいといて、
2.の目的のみでstatic付けることってあるの?どんなケース?
0772デフォルトの名無しさん
2010/09/13(月) 16:54:570773デフォルトの名無しさん
2010/09/13(月) 16:55:32記憶違いなら悪いが、既定がexternなだけで、
省略したらexternな訳じゃ無かったと思う。
0774デフォルトの名無しさん
2010/09/13(月) 17:02:210775デフォルトの名無しさん
2010/09/13(月) 17:08:100777デフォルトの名無しさん
2010/09/13(月) 17:42:41変と言ってる奴は、ソイツの読み方が変なんだよ。
読み方が変なままで通したいなら C++ に行けばいい。
あれはその変な奴らが寄り集まって考えた書式だからな。
0778デフォルトの名無しさん
2010/09/13(月) 17:44:50っていう指定だな
0779デフォルトの名無しさん
2010/09/13(月) 18:10:13static void func(void);
0780デフォルトの名無しさん
2010/09/13(月) 18:27:56#define global
#define extern
の2行を先頭に加えれば、おまえさんの望みどおりの動作になるぜwww
例えが悪すぎんだよ
>むしろ表に出すものがglobalで明示されるからセキュリティは向上するね。
発想が、アホすぎるw
0781デフォルトの名無しさん
2010/09/13(月) 18:29:090782デフォルトの名無しさん
2010/09/13(月) 18:30:13現行で問題があるという奴は、そもそも現行の仕様すら理解できてない。
それに尽きる
0783デフォルトの名無しさん
2010/09/13(月) 18:33:09ここで言われているような global や local を導入したら、
もっとヘンテコリンな仕様になるぞ
0784デフォルトの名無しさん
2010/09/13(月) 18:33:15プログラムを複数のcソースで記述するときに効いてきます。
0785デフォルトの名無しさん
2010/09/13(月) 18:35:04確かに現行の仕様で困ることはないですからね。
0786デフォルトの名無しさん
2010/09/13(月) 18:36:170787デフォルトの名無しさん
2010/09/13(月) 18:39:41int val; // public
static void func(void); // private
extern void func(void); // public
0788デフォルトの名無しさん
2010/09/13(月) 18:47:47あれにはローカルスコープなんて意味は無いし、静的って意味でも少し違うよな
0789デフォルトの名無しさん
2010/09/13(月) 18:53:170790デフォルトの名無しさん
2010/09/13(月) 18:59:53>静的って意味でも少し違うよな
元の言葉の意味で考えるからおかしくなるだけだろ。
こんなこと言い出したら、キーワードの多くが元の英単語の意味からは逸脱してるわ。
static は言語で採用されたキーワードなんだから、
その意味はその言語で規定された物で十分なんだよ。
0791デフォルトの名無しさん
2010/09/13(月) 19:02:33プロタイプをstaticにする意味がわからん
0792デフォルトの名無しさん
2010/09/13(月) 19:05:090793デフォルトの名無しさん
2010/09/13(月) 19:21:23現状のCだとプロタイプの場合は extern 、static ともに何の意味ないね。
昔のCだと extern には意味があった。static にはなかった。
その前はプロトタイプ宣言自体ができなかったw
0794デフォルトの名無しさん
2010/09/13(月) 19:25:06これ何が言いたのか全くわからん。
多分なんか勘違いしてるんだろうけど。
0795デフォルトの名無しさん
2010/09/13(月) 19:31:59static void func_a(void);
//extern void func_a(void);
=== a.c ===
#include "a.h"
static void func_a(void)
{
}
/*
extern void func_a(void)
{
}
*/
=== main.c ===
#include "a.h"
int main(void)
{
func_a();
return 0;
}
0796デフォルトの名無しさん
2010/09/13(月) 19:35:55kwsk
0797デフォルトの名無しさん
2010/09/13(月) 19:37:35>=== a.h ===
>static void func_a(void);
プロトタイプを static にする意味がわからん。
0798デフォルトの名無しさん
2010/09/13(月) 19:47:570799デフォルトの名無しさん
2010/09/13(月) 19:48:21何が言いたいかわからんのに答えようがない
とりあえず extern は他所で定義されているという意味で、
public / private とは意味が違う。
他所というの同一ファイル内である場合もある。
つまり static で宣言された変数も extern により参照できる。
0800デフォルトの名無しさん
2010/09/13(月) 19:49:02→他所というのは同一ファイル内である場合もある。
0801デフォルトの名無しさん
2010/09/13(月) 19:54:34extern int val;
=== a.c ===
static int val = 100;
=== main.c ===
#include "a.h"
int main(void)
{
printf("%d\n", val);
return 0;
}
>つまり static で宣言された変数も extern により参照できる
0802デフォルトの名無しさん
2010/09/13(月) 19:57:22プロトタイプと実体は揃えた方がwarningが正しく機能するのでは?
0803デフォルトの名無しさん
2010/09/13(月) 19:58:00違う物なんだから、単純に置き換えれるわけがない。
どしても置き換えるのであれば、足りない部分を表現する別の概念(キーワード)も用意して、
それと組み合わせることが必要になるんだよ。
static は sitaic だし、extern は extern であって、全然違う概念。
他の概念に置き換える前に、現状の static や extern を理解すればいいのに。
0804デフォルトの名無しさん
2010/09/13(月) 20:01:27>>795が実行できると思ってんの?
0805デフォルトの名無しさん
2010/09/13(月) 20:08:55何が言いたのかわからんのよ。それでエラーになるって言いたいの?
「同一ファイル」と書いてあるでしょ。例えば、
=== main.c ===
extern int val;
int main(void)
{
printf("%d\n", val);
return 0;
}
static int val = 100
という書き方は正規なの。もちろん最初の extern を外せばエラーになるよ。
extern とはそういう意味。この部分を勘違いしてる人が多いんだよ。
0806デフォルトの名無しさん
2010/09/13(月) 20:09:380807デフォルトの名無しさん
2010/09/13(月) 20:11:29誰へのレスかわからんが、当然ビルドエラーでしょ。
0808デフォルトの名無しさん
2010/09/13(月) 20:14:03extern は private な変数に対しても使えるってことだよ
extern == public というおかしな考えは通用しないという実例
0809デフォルトの名無しさん
2010/09/13(月) 20:14:04extern int val;の記述に何の意味があるの
0810デフォルトの名無しさん
2010/09/13(月) 20:17:36後方で宣言されているから、それより前で参照する場合は extern 宣言する必要がある。
この場合 extern を付けないとエラーになる。
0811デフォルトの名無しさん
2010/09/13(月) 20:22:320812デフォルトの名無しさん
2010/09/13(月) 20:24:020813デフォルトの名無しさん
2010/09/13(月) 20:28:57スコープが変化することはない。
スコープに影響を与えるのは static 宣言の機能であり、
static 宣言されるとそのファイル内に制限される。
(もちろん他の機能もある)
extern と static は別の概念だから、global/local のように対になるものでないし、
そもそも extern や static を global/local という概念で考えようとするのが無意味。
このスレで global/local、public/private を持ち出した奴はこの辺のことが理解できていない。
0814デフォルトの名無しさん
2010/09/13(月) 20:34:13extern void func(void); // public
0815デフォルトの名無しさん
2010/09/13(月) 20:36:390816デフォルトの名無しさん
2010/09/13(月) 20:38:08せっかくだから俺も揚げ足を取ると
extern int X = 10;
のように定義と宣言をまとめて行えるよね?
exern付いてるよね?他所じゃないよね?
0817デフォルトの名無しさん
2010/09/13(月) 20:39:210818デフォルトの名無しさん
2010/09/13(月) 20:40:21>>814の迷走っぷりが少しだけ心配。
0819デフォルトの名無しさん
2010/09/13(月) 20:47:140820デフォルトの名無しさん
2010/09/13(月) 20:48:13やっぱり知識の限界ギリギリの会話してるとアドレナリンが出るんだろうなww
0821デフォルトの名無しさん
2010/09/13(月) 20:55:260822デフォルトの名無しさん
2010/09/13(月) 20:57:50cソースファイルの中で、一番外側の場所で変数を作ると、大域変数って言って、どこからでも読み書きできる変数になると思ってます。 個人的に。
#include <stdio.h>
char a = 'A';
void main() { putchar(a); }
a は、このcソースファイルのどこからでも読み書きできてべんり。
ほかのcソースファイルからも a を読めるよ。その時は、
「aは他のソースファイルで作ってあるよ」ってのをコンパイラに伝えるために、a を読み書きしたいcソースファイルの中に extern char a; って
書けば、ほかのcソースファイルからも a を読み書きできるようになるみたい。 よくヘッダーファイルにこれをまとめて書いてるの見かけるよね。 extern ... っていっぱい。
でも、もしも a がもともと、 static char a = 'A'; って風に static として宣言されてたら、
「この a は、ここのcソースファイルでは大域変数として使いたい〜〜 でも、他のcソースファイルからは読めないようにしたい〜〜」って意味で書いてます。ボクの場合。
これなら、たとえ、他のcソースファイルに extern char a; とか書いても、他のソースファイルからは a を読めないと思うんです〜〜。 たぶん。
>>805の場合は、変に難しくしないで素直に
static int val = 100;
void main() { printf("%d\n", val); }
って最初に作るようにすればいいんじゃないかなぁ〜…って個人的におもいました。 なま言ってごめんなさい(^_^/ぺこり
ソースファイル中での大域変数の、有効範囲を、細かく調整しないと上手く動かないのであれば、それは、たぶん、根本的に、モジュール分けとかの設計に問題があるような気が〜〜(・_;ぐすん
0823デフォルトの名無しさん
2010/09/13(月) 21:04:27>昔のCだと extern には意味があった。static にはなかった。
extern が省略不可だったのか?なんか記憶にないけど
>>816
>extern int X = 10;
それできたっけ?複数のソースで異なる値が代入されたらどうなるんだ?
0824デフォルトの名無しさん
2010/09/13(月) 21:09:18しかし、なんでここまで盛り上がっておきながら、K&Rが出てこないのだろう。
K&R付録A 参照マニュアルの該当箇所をあげておく。規格書持っている人はよろしく。
A8.1
略
static指定子は宣言されたオブジェクトに静的な記憶クラスを与えるためのもので、
関数の内側でも外側でも使ってよい。関数の中では、この指定子でメモリが割り当てられ、
定義の役目が果たされる。外側についてはA11.2
でA11.2をみると
略
識別子に対する最初の外部宣言は、static指定子が使われていれば内部リンケージを、
そうでなければ外部リンケージをその識別子に与える。
0825デフォルトの名無しさん
2010/09/13(月) 21:15:40関数の外部で定義でない変数の宣言において。
staticが指定された場合、内部結合。
externが指定された場合、それ以前に、可視である同一の識別子が、
内部結合として宣言されている場合、内部結合。
そうでないなら外部結合。
どちらも指定されない場合、外部結合だったか無結合だったか忘れた。
関数の宣言において。
指定されない場合はexternと同様。
他については変数宣言と同様。
変数の外部定義において。
細かいこたぁ忘れた。
externが指定された場合、外部結合だったような。
関数の定義は、もう見てねーよ!!
で外部結合と内部結合がカチあったら未定義。
長すぎた。
0826デフォルトの名無しさん
2010/09/13(月) 21:16:40/* OKで内部結合 */
static int i;
extern int i;
/* NG */
extern int i;
static int i;
/* NG */
static int i;
int i;
/* NG */
static int i;
extern int i = 0;
のはずだが自信無い。
フォローよろしく。
PC起動んのめんどい。
0827デフォルトの名無しさん
2010/09/13(月) 21:18:18今までこの視点は無かったけど、そういう見方をすれば、確かに矛盾してないね。
そっか、外部宣言が基本で、スコープを区切っているだけか。
ローカル変数を静的変数にするために、staticをつけると思ってたよ。
K&Rの書き方もそうだったし。
何で今まで気がつかなかったんだろう。
0828デフォルトの名無しさん
2010/09/13(月) 21:24:42void foo() {
int a, b;
{
int i,j; /* この中だけ i,j を使う */
/*.....*/
}
{
int c,d; /* この中だけ c,d を使う */
/*.....*/
}
}
意味があるなら関数化で小分けしちゃうけど、意味の切りわけが見つからない時は
迷ってしまうわ (小分けの関数名付けにも…)
0829デフォルトの名無しさん
2010/09/13(月) 21:26:04気味悪くねぇし普通にそれはする。
0830デフォルトの名無しさん
2010/09/13(月) 21:29:17宣言と定義を同時にしてるだけだぞ?
自ずと分かるだろ?
多重定義で怒られるに決まってんだろ
0831デフォルトの名無しさん
2010/09/13(月) 21:30:48if () や for() , do などのブロックが来て当然の部位では当たり前の事象
(とういうか、それすら禁じられると辛い
そういう文にからまず
唐突に1段スコープを深くして変数宣言から という例は気味悪がられるね (俺の周囲の話
0832デフォルトの名無しさん
2010/09/13(月) 21:37:03100% 純粋にただの拒否反応だからな
0833デフォルトの名無しさん
2010/09/13(月) 21:37:36printf("%d ",i);
}
これだけはキモすぎて許せない。マジキモすぎる。
0834デフォルトの名無しさん
2010/09/13(月) 21:40:34for(int j=0;j<10;++j)
if(i==0)
{
printf("100\n");
}
これもやめて
0835デフォルトの名無しさん
2010/09/13(月) 21:40:350836デフォルトの名無しさん
2010/09/13(月) 21:42:22をつついても「キモすぎて許せない」と言うほどの理由は出てこない予感。
たいした理由もねぇのにうだうだ言う奴。
0837デフォルトの名無しさん
2010/09/13(月) 21:46:38=== a.c ===
int a;
=== b.c ===
int a;
は、両方を extern int a; にするのとも違うし、
両方を int a = 0; にするのとも違う。(どちらもリンク時にエラー)
0838デフォルトの名無しさん
2010/09/13(月) 21:55:45両方intなら名前が被る
0839デフォルトの名無しさん
2010/09/13(月) 22:02:47だと思うんだが、C Commonてなんぞ?
0840デフォルトの名無しさん
2010/09/13(月) 22:07:07K&Rに「staticは複数の機能があるよ」って書いてあるじゃん
どう読んだら関数内部と外部で同じ機能に見えるんだ?
0841デフォルトの名無しさん
2010/09/13(月) 22:07:29個人的には、それを避けるために、基本的に大域変数や関数はstaticで宣言するようにしてます。
それの良い解決方法になる記法があるならぜひ知りたいです。
0842デフォルトの名無しさん
2010/09/13(月) 22:16:17ソースファイルの一番外側で変数を作ると、大域変数ってのになって、どこからでも読み書きできます。
これは、どこからでも読み書きできるってことは、ずっと生きてるってことだと思います。
関数の中のstatic 変数は、関数が終わって、もう一回関数呼んだときも、前の状態を保持してて、これは、ずっと生きてたってことだと思います。
どっちも、ずっと生きてるけど、関数の中でstatic int aとしたら、それは関数以下でしか読めなくて、一方、関数の外でstatic int aとしたら、それは外以下でしか読めなくて、
けっきょく、どちらも、読める権限の位置が違うだけで、ずっと生きてる点では同じなので、似てるように見える、同じに見える、って意味での”同じ”って言ってるんだろうなぁ〜・・・って思いました。レスよんで。ボクは。個人的に。
もしちがってたらごめんなさい(ぺこり
0844デフォルトの名無しさん
2010/09/13(月) 22:19:48括弧の外に書いてんのに何故かスコープが括弧の中。
>>835
{int i;
for (i=0; i<n; i++) {
printf("%d ",i);
}}
0845デフォルトの名無しさん
2010/09/13(月) 22:22:440846デフォルトの名無しさん
2010/09/13(月) 22:22:51読解力が足りてねえな。
もっと熟読してみろよ。
0847デフォルトの名無しさん
2010/09/13(月) 22:24:02そんなこと書いていない。うそつくな。
0848デフォルトの名無しさん
2010/09/13(月) 22:25:29while ((ch = getchar()) != EOF) {
}
とか、ループの中でしかchを使わなかったら、スコープを中だけに限定したい。
0849デフォルトの名無しさん
2010/09/13(月) 22:27:160850デフォルトの名無しさん
2010/09/13(月) 22:29:38スレ違い? Cも最近の規格じゃ書けるのか?
C++でもfor() {}とwhile() {}の時しか書けないんじゃねえの?
カッコの中で変数宣言できる例なんてあるか?
0851デフォルトの名無しさん
2010/09/13(月) 22:31:450852デフォルトの名無しさん
2010/09/13(月) 22:32:56あれの仮引数のスコープはどうすべきなんだよ。
0853デフォルトの名無しさん
2010/09/13(月) 23:11:39後始末をしたいときに、変数をtryの外に出さなきゃならないのも
なんかとかならんのかね。
あのたりはスコープ共通でいいんじゃね?
0854デフォルトの名無しさん
2010/09/13(月) 23:51:08extern int a;
は実態の宣言ではなくリンクみたいなもんだろ
そこに代入できたっけ?って話だ
extern int a = 10;
が可能なら、別ソースで
extern int a = 11;
って書いても多重定義にはならないだろ、実態は別に一個あるだけなんだから
0855デフォルトの名無しさん
2010/09/13(月) 23:52:040856デフォルトの名無しさん
2010/09/13(月) 23:52:51利点あるの?
0857デフォルトの名無しさん
2010/09/13(月) 23:57:29無いね
0858デフォルトの名無しさん
2010/09/14(火) 00:09:33たいして変わんないだろ 代入 ⊃ 初期化
>>856
複数のソースからプログラムを生成する時にグローバル変数が必要なら必須だ
グローバル変数を使わないなら必要ないけど、仕事でグローバル変数を使わないのは見た事無いな
0859デフォルトの名無しさん
2010/09/14(火) 00:12:330860デフォルトの名無しさん
2010/09/14(火) 00:13:260861デフォルトの名無しさん
2010/09/14(火) 00:13:420862デフォルトの名無しさん
2010/09/14(火) 00:16:27なんか困るか?
0863デフォルトの名無しさん
2010/09/14(火) 00:21:05extern int a;
としないと、aがないぽってエラー・警告でるの?
0864デフォルトの名無しさん
2010/09/14(火) 00:28:51定数みたいなモンは普通にグローバルで使うよ
構造体にまとめたりはするけどインスタンスはグローバルである事が多いな
main() で定義/生成してポインタを引きずり回せば使わなくても良いんだけど、
ほとんどの関数に引数が1つ増えるのは嫌だからね
0865デフォルトの名無しさん
2010/09/14(火) 00:31:050866デフォルトの名無しさん
2010/09/14(火) 00:32:500867デフォルトの名無しさん
2010/09/14(火) 00:36:560868デフォルトの名無しさん
2010/09/14(火) 05:19:28現場を知らない奴はグローバル=悪みたいに考えがちだけど
0869デフォルトの名無しさん
2010/09/14(火) 06:12:31>>751
> まず変数に対しても関数に対しても
> staticの指定は「こいつの存在をリンカに知らせない」という意味があって
リンカは static 変数/関数の存在を知ってるよ。
実装の一例だけど、プログラムの実行時 static 変数は BSS に配置しなきゃいけないし、
static 関数は実行可能領域に配置しなきゃいけない。
それを行うのが OS で、それを指示するのがコンパイラ、それを伝えるのがリンカ。
だから、リンカは static 変数/関数の存在を知っていなければいけない。
ついでに関数内 static 変数だけど、これも BSS に配置しなきゃいけないので、リンカ
はこれを処理して OS に伝える。
つまり、関数内 static 変数はグローバル static 変数同様、内部リンケージを持つ。
まとめると、static の付いた変数は、そのスコープにかかわらず内部リンケージを持ち、
かつ BSS に配置される (静的変数となる)。
「かつ」 の前後で区切るなら 「static の意味は 2 種類ある」 と言えなくもないけど、書く
場所によって意味が変わる、という事は無い。
まあ実際のところ、内部リンケージって言うけど、実はユニークになるであろう複雑な
リンケージ名がコンパイラによって割り当てるだけで、リンカにとっては外部リンケージ
と内部リンケージの差はない。
0870デフォルトの名無しさん
2010/09/14(火) 07:26:08無リンケージだよ。
0871デフォルトの名無しさん
2010/09/14(火) 07:27:270872デフォルトの名無しさん
2010/09/14(火) 08:26:240873デフォルトの名無しさん
2010/09/14(火) 09:10:51自分にとって都合の良いものに変えてしまえ、みたいなモノポリーかっけぇ〜
0874デフォルトの名無しさん
2010/09/14(火) 12:11:32なければ作る
それだけのこと
どうやったら政治家が出てくるの?
0875デフォルトの名無しさん
2010/09/14(火) 12:19:48OS がない環境もあるわけだが
0876デフォルトの名無しさん
2010/09/14(火) 12:21:110877デフォルトの名無しさん
2010/09/14(火) 12:24:02こうですか?、わかりません><
0878デフォルトの名無しさん
2010/09/14(火) 12:41:57ごっ、ごぉおっ、ご〜きげんよおぉおおぉおほっ。ほおぉおぉおっ。
「ごきげん☆みゃぁああ”あ”ぁ”ぁああ〜っ」
さわやかな朝の☆ご挨拶! お挨拶がっ。
澄みきった青空にこだましちゃうぉ〜ああぉおおおぉん。
「は、はひっ、はろおぉっ☆わぁるどおおぉっぉ〜っ」
こ、この文章は☆おサンプル! おおぉおぉおおサンプルプログラム!!
どんなおプログラム言語でも基本のご挨拶させていただくのぉぉおッ!
「ぽうっ」
長々と書くのがこ、ここでの〜、ここでのぉおおぉおぉぉおたしなみぃぃいぃ。
「長いぃ。長すぎましゅう。ご挨拶にこんなプログラム長すぎまひゅぅうぅ☆
んおおぉぉ、ばかになる、おばかになっちゃいましゅ〜ッ」
長いのがっ、バッファの奥まで入ってきましゅたぁあぁあっ!
ばっふぁ☆溢れちゃいまひゅぅ〜。あみゃぁあ”あ”ぁ”ぁああ”あ”ぁぁ。
「で、出ます☆ んおおぉぉおおっ、エラー出ちゃいまひゅっ」
ほひぃ☆! え、えらーっ、んお”お”ぉお”お”ぉおぉおおぉっっ。
「出た☆ 出た出た出た出たぁぁあっ えらあぴゅるーっって出たあぁっ」
はしたない☆! ぉおおぉはしたないっ! おはしたない言語ですっっっっっっっ!
おほっほおぉっっっほおぉっっっっっっっっっ
0879デフォルトの名無しさん
2010/09/14(火) 12:44:140880デフォルトの名無しさん
2010/09/14(火) 14:19:300881デフォルトの名無しさん
2010/09/14(火) 14:21:210882デフォルトの名無しさん
2010/09/14(火) 15:04:28って書いてオーバーフローしそうな場合
・intで掛け算してからunsigned intにキャスト
・unsigned intにキャストしてから掛け算
・決まってない
どれが正しいんでしょうか?
0883デフォルトの名無しさん
2010/09/14(火) 16:01:27> ・unsigned intにキャストしてから掛け算
符号無しにしたところでたかだか2倍なんで、
オーバーフローするって問題はどっちも持ってる。
思い付いた力業w
for (i = 0; i < a; ++i) {
assert((int)pow(2, sizeof(unsigned int) * 8) - sum >= b);
sum += b;
}
0884デフォルトの名無しさん
2010/09/14(火) 16:06:020885デフォルトの名無しさん
2010/09/14(火) 16:18:251. スケーリングできないかを考える (例えば1,000,000,000は1000Mもしくは1Gと表現可能)
2. long long intを使う (ただしC99以降もしくは処理系独自拡張)
3. BCDに整形する
0886デフォルトの名無しさん
2010/09/14(火) 16:30:45どっちもダメ、浮動小数点か long long でも使え
>>883
(int)pow(2, sizeof(unsigned int) * 8) は 0 になるんじゃないの?
0887デフォルトの名無しさん
2010/09/14(火) 16:37:34この識別子funcがリンカによって無視される仕様は規格書のどこに記載?
別のモジュールがfunc(void)をstatic指定無しで定義していた
場合リンク可能になる?(としたらこれも規格書準拠の仕様?)
0888883
2010/09/14(火) 16:43:42(unsigned int)pow(2, sizeof(unsigned int) * 8 - 1)
0889883
2010/09/14(火) 16:44:42(unsigned int)pow(2, sizeof(unsigned int) * 8) - 1
です
0890883
2010/09/14(火) 16:50:10(unsigned int)(pow(2, sizeof(unsigned int) * 8) - 1)
0891デフォルトの名無しさん
2010/09/14(火) 17:16:120892デフォルトの名無しさん
2010/09/14(火) 17:27:23void fuck(void);
int main(){
fuck();
return 0;
}
void fuck(){
while(1){
printf("FUCK!\n");
}
}
0893デフォルトの名無しさん
2010/09/14(火) 17:28:260894デフォルトの名無しさん
2010/09/14(火) 17:57:37以前引き継いだ前任者のコードで無限ループが使われてて
アラートが無限に鳴り響いてオペレータ連中にさんざん文句言われたよ
前任者の低脳ぶりに生まれて初めて殺意を抱いた
0895デフォルトの名無しさん
2010/09/14(火) 17:59:41有限でもブラクラみたいなメッセージボックスに殺意を覚えることはよくあるし
0896デフォルトの名無しさん
2010/09/14(火) 18:00:110897デフォルトの名無しさん
2010/09/14(火) 18:09:26>Cの仕様に不満があるなら、
仕様や基本構造まで作り変えたら、それがC言語と言えるものになるんだろうか?w
もはや言語の設計者。作れば良いって、その言語を使う以上その言語で
出来る範囲内、あるいはその仕様に基づいてってことだから、その国家で通用する
法律の範囲内で自由に活動するくらいしか出来ませんよ。
0898デフォルトの名無しさん
2010/09/14(火) 18:15:35無限じゃなければいずれ鳴り止むんだから深夜にタクシーで出社しなくても翌朝対処でよかった
想定内の分岐なら確実に抜けると思って作られていても外的要因の想定外のデータ不整合などには対処できない
そもそも無限ループを使うのは明らかに確実に手抜きでしかない
0899デフォルトの名無しさん
2010/09/14(火) 18:20:10void _3pu(void)
{
int i=0;
while (i<100000000) { i++; }
}
0900デフォルトの名無しさん
2010/09/14(火) 18:20:47だからそれはループが無限か有限かって問題じゃない
0901デフォルトの名無しさん
2010/09/14(火) 18:22:40それは無限ループが悪いんじゃなくて、
翌朝やればいいような内容でアラートを鳴らすのがわるいんじゃね
0902デフォルトの名無しさん
2010/09/14(火) 18:29:12それじゃ無限ループじゃねーだろw
0903デフォルトの名無しさん
2010/09/14(火) 18:32:130904デフォルトの名無しさん
2010/09/14(火) 18:33:34その定義や中身(コードの記述、スタイルなど)はやはり
その言語の仕様(ルール)に基づく。変数の定義など。
演算子といった共通して使えるものもあるが、ライブラリみたいな
各自で自由に作れるものは、別に違反していなければ
特別に法の番人に許可を得るような手続きは必要はない。
必要最低限のことに従えば良いんだし。
規定の範囲内なら自由に家を建てられるだろ?移動できるだろ?
そういうことさ。
0905デフォルトの名無しさん
2010/09/14(火) 18:50:260906デフォルトの名無しさん
2010/09/14(火) 18:57:44別のモジュールが定義していたっていうのはプロトタイプ宣言の事?だったらリンク不可
0907デフォルトの名無しさん
2010/09/14(火) 19:01:41サーバープログラムを無限ループ無しで書けるものなのか?
イベントドリブンも無限ループ無しで書く事は不可能だと思うんだが
0908デフォルトの名無しさん
2010/09/14(火) 19:07:49無限ループが問題だったんだよ
何故ならオレは鳴り止まないアラートを止めに行ったんだからw
>>901
それは単なる結果論
正常時以外はアラートを出すのが運用
調べてみたらさっき書いたとおり外的要因だった
でもそれは1回アラート上げて終了すれば済む話
0909デフォルトの名無しさん
2010/09/14(火) 19:11:080910デフォルトの名無しさん
2010/09/14(火) 19:13:26有限なら【いつ】鳴り止むはずだったんだ?
0911デフォルトの名無しさん
2010/09/14(火) 19:14:41その運用なら正常以外は深夜出社するのも止むを得ないんじゃね
0912デフォルトの名無しさん
2010/09/14(火) 19:28:540913デフォルトの名無しさん
2010/09/14(火) 19:30:06放置して済むようなものじゃなかったらどうする?
一回鳴っただけのアラートで、気付かれなかったらどうする?
0914デフォルトの名無しさん
2010/09/14(火) 19:34:16修正後はエラー時は1回アラート上げて終了するようにしたよ
ようするに問題だったのはエラー内容じゃなくて、いらん所で無限ループ使ってたことだよ
0915デフォルトの名無しさん
2010/09/14(火) 19:38:472回ではいけなかったのか?
0916デフォルトの名無しさん
2010/09/14(火) 19:39:01アラート後に終了しなかったのが問題なんじゃね?
0917デフォルトの名無しさん
2010/09/14(火) 19:41:08そうでもないなら黙ってエラーログ吐いてオチとけw
0918デフォルトの名無しさん
2010/09/14(火) 20:19:050919デフォルトの名無しさん
2010/09/14(火) 20:21:300920デフォルトの名無しさん
2010/09/14(火) 20:33:15#include <stdlib.h>
void fuck(void);
int main(){
fuck();
return 0;
}
void fuck(){
int i;
FILE *log;
for(i=0;i<100;i++){
printf("\aFUCK!\n");
log=fopen("log.txt","a");
fprintf(log,"FUCK!\n");
fclose(log);
sleep(1);
if(i==99){
i=0;
}
}
0921デフォルトの名無しさん
2010/09/14(火) 20:33:24このスレってなんだかんだで勉強になるよね
0922デフォルトの名無しさん
2010/09/14(火) 20:46:14問題なのは知識じゃなくて責任の所在だよ。
おまえには解らんのかも知れないがな。
0923デフォルトの名無しさん
2010/09/14(火) 20:47:29while(1)
{
if(...){
関数ポインタに設定された関数を実行()
}
sleep(1);
}
こんな?
0924デフォルトの名無しさん
2010/09/14(火) 20:50:51アプリケーションから見る限りは違う
OSからみればポーリングかも
0925デフォルトの名無しさん
2010/09/14(火) 20:51:50オペレータキャンセルができるって前提に同意しないのはわかったよ
だがここで問うているのはそんなことではなく、ループがどうであるべきかだ
タクシーがどうとかみたいのはマ板でやってくれ
0926デフォルトの名無しさん
2010/09/14(火) 20:55:28単なるサブルーチンコール
0927デフォルトの名無しさん
2010/09/14(火) 21:00:13if (hoge) break;
}
こういうことするやつアホ過ぎるだろ。
結局は条件があるなら最初から入れとけよ。
while (!hoge){
}
アホの書くコードは読みたくないわ。
0928デフォルトの名無しさん
2010/09/14(火) 21:02:49コンピュータ好きで、そんなクソみたいなプログラミングする人いるの?
職業プログラマーにはアホみたいに沢山いるけど
0929デフォルトの名無しさん
2010/09/14(火) 21:06:52たくさんいるんだよw
そしてそいつが知らないところで他人に迷惑かけてんだ
0930デフォルトの名無しさん
2010/09/14(火) 21:07:320931デフォルトの名無しさん
2010/09/14(火) 21:09:52(???)||
(???)||
(???)||
(???)){
if(???) break;
}
これなら見たことある。
0932デフォルトの名無しさん
2010/09/14(火) 21:11:300933デフォルトの名無しさん
2010/09/14(火) 21:11:36for(;;){
何かの処理
if(....)
continue;
else if(....){
break;
}
何かの処理
if(....){
break;
}
}
0934デフォルトの名無しさん
2010/09/14(火) 21:15:03それ微妙じゃない?
0935デフォルトの名無しさん
2010/09/14(火) 21:15:050936デフォルトの名無しさん
2010/09/14(火) 21:18:36コンピュータ好きでもない奴がプログラマーになると、本当にすごいコードを書くよな
「まぁ〜これでいいんだ」とか言ってる時点で終わっている
0937デフォルトの名無しさん
2010/09/14(火) 21:22:10関数に切り出してreturnでいいんじゃない?
★前スレ
C言語なら俺に聞け(入門編)Part 68
http://hibari.2ch.net/test/read.cgi/tech/1282536520/
★過去スレ
http://makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
★教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 139代目
http://hibari.2ch.net/test/read.cgi/tech/1280653311/
★C++言語については避けてください。C++対応明記スレへどうぞ
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
# 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
# サイズが大きい場合は宿題スレのアップローダ等を利用してください
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
0939デフォルトの名無しさん
2010/09/14(火) 21:24:560940デフォルトの名無しさん
2010/09/14(火) 21:25:39さっそく一人出てきやがったw
0941937
2010/09/14(火) 21:26:34char *の文字列操作だったり
0942デフォルトの名無しさん
2010/09/14(火) 21:27:382chでよく見かけるのは、「お前らが普段必ず使ってるはずのもの」とかいう曖昧な答えだな
0943941
2010/09/14(火) 21:28:02941の名前が937になってる
941です
0944デフォルトの名無しさん
2010/09/14(火) 21:28:47え?
0945デフォルトの名無しさん
2010/09/14(火) 21:31:26おれは見たこと無いな、そういう答え。
0946デフォルトの名無しさん
2010/09/14(火) 21:32:05>>933==941==943ね
941の名前を間違えて937にしてしまった
だめぽorz
0947デフォルトの名無しさん
2010/09/14(火) 21:34:16バカな事ですか?
0948デフォルトの名無しさん
2010/09/14(火) 21:38:32NULL とか 0 であることに意味があるなら初期化するべき
0949デフォルトの名無しさん
2010/09/14(火) 21:40:05バカなやつが見ても文句を言われないようにする
0950デフォルトの名無しさん
2010/09/14(火) 21:42:46姑息だな。そういう問題じゃねーから。
0951デフォルトの名無しさん
2010/09/14(火) 21:44:19それだけの条件では判断不可。
0952デフォルトの名無しさん
2010/09/14(火) 21:49:37おまえらが生きてるこの世界がそれだよ。
0953デフォルトの名無しさん
2010/09/14(火) 21:53:22バグだらけじゃん。早く修正しろよ
0954デフォルトの名無しさん
2010/09/14(火) 21:54:17しょうがないね
0955デフォルトの名無しさん
2010/09/14(火) 21:58:19NULLになるかは保障されてなくね?
0956947
2010/09/14(火) 22:00:06設定ファイルをどこに保存するかを、変数に入れておきたいのですが
静的グローバル変数をどうやったら、初期化できるのかわからないので
0957デフォルトの名無しさん
2010/09/14(火) 22:03:00ローカル変数と同じじゃない?
char path[] = "…";
0958デフォルトの名無しさん
2010/09/14(火) 22:04:070959デフォルトの名無しさん
2010/09/14(火) 22:25:21いやいやいやいや
0960デフォルトの名無しさん
2010/09/14(火) 22:32:54いやね。気がつくと
for(;;) [
ぐちゃぐちゃ
if (hoge) break;
むにゅむにゅ
}
と書いてしまうことが多々あって‥‥やっぱだめですかね?
0961デフォルトの名無しさん
2010/09/14(火) 22:36:07NULL == 0 だから保障されている。なんだったら NULL なんかは忘れて 0 と書いてしまえば悩むこともない。
http://www.kouno.jp/home/c_faq/c5.html#0
0962デフォルトの名無しさん
2010/09/14(火) 22:39:120963デフォルトの名無しさん
2010/09/14(火) 22:44:35理由としてはgoto多用するのと何ら変わらん
0964デフォルトの名無しさん
2010/09/14(火) 22:48:030965デフォルトの名無しさん
2010/09/14(火) 22:49:280966デフォルトの名無しさん
2010/09/14(火) 22:49:38>>955は、calloc()のような初期化をイメージしてるんじゃないの?
http://www.kouno.jp/home/c_faq/c1.html
1.30のほうにnullで初期化されるって書いてあるけど。
0967デフォルトの名無しさん
2010/09/14(火) 22:50:320968デフォルトの名無しさん
2010/09/14(火) 22:52:53おまえこそ、なぜ continue を例に挙げた?
0969960
2010/09/14(火) 22:53:03ループとして
while, do-while
が準備されていても、それらにあわせるように書くのがめんどくさくって、
for(;;) { むにゅむにゅ if () break; ぐちゃぐちゃ } と最近は書き下ろしてしまうんですよ。まずいな、とはおもいつつ。
たとえば、EOF。
EOF って一回よみこんでみないとわからない。
for (;;) {
f1.get(c)
if (f.eof())
break;
f2.put(c)
}
eof() を while や do-while でうまくつかえないものか?
0970デフォルトの名無しさん
2010/09/14(火) 22:54:00breakとcontinueをgotoと同一視してるやつを何度となく見てるから。
0971デフォルトの名無しさん
2010/09/14(火) 22:54:54おまえ自身がそこから continue は別問題と仕分けることはしなかった(できなかった)のだな?
0972デフォルトの名無しさん
2010/09/14(火) 22:58:200973デフォルトの名無しさん
2010/09/14(火) 22:59:27なんで別問題なの?
どちらもgotoとはちがう制御をgotoと同一視してるって同じカテゴリだけど。
0974デフォルトの名無しさん
2010/09/14(火) 23:03:57別にbreakつかおうがなんでもよくね、趣味の問題だろ
0975デフォルトの名無しさん
2010/09/14(火) 23:05:300976デフォルトの名無しさん
2010/09/14(火) 23:05:39構造体に関数ポインタが設定されてんだよな?!
試してないが、これでイケるはず。(間違ってたらすまね)
while (f1.get(c), !f.eof()) {
f2.put(c)
}
f1.get(c)がvoidじゃないなら、カンマ演算子じゃなくて
&&かとかでも出来るかもだがケースバイケース。
0977デフォルトの名無しさん
2010/09/14(火) 23:08:28コピペしたら;がなかった・・・・orz
0978デフォルトの名無しさん
2010/09/14(火) 23:13:37分かってて使う筈だけど思考ブレーキ無しにbreakつかうお人も居るかも知れんし
0979デフォルトの名無しさん
2010/09/14(火) 23:15:17ループ処理自体とそうじゃない処理をごっちゃごちゃにしてるのが問題
0980デフォルトの名無しさん
2010/09/14(火) 23:17:42ぱっとみ格好悪いか?
for(f1.get(c);!f.eof();f1.get(c)){
f2.put(c);
}
最後の一文字の扱いが気になる。
0981デフォルトの名無しさん
2010/09/14(火) 23:20:580982デフォルトの名無しさん
2010/09/14(火) 23:21:430983デフォルトの名無しさん
2010/09/14(火) 23:24:16{
if (f1.eof()) break;
f1.get(c);
f2.put(c);
}
これじゃなぜいかん
0984デフォルトの名無しさん
2010/09/14(火) 23:37:43この書き方、最近疑問におもうようになったんですよ。
while( ) の括弧の中を、カンマ演算子や論理積でつないでいくものです。
while() のなかに書ききれなかったらどうするのか?
while() のなかに押し込むくらいなら、
for(;;) { ぐちゃぐちゃ if() break; むにゅむにゅ }
の方が自然ではないのか?
最近は
if ((fp = fopen()) == NULL)
という書き方もあまりしないようですし。
0985デフォルトの名無しさん
2010/09/14(火) 23:39:050986デフォルトの名無しさん
2010/09/14(火) 23:41:32嘘だと思うならそう思ってればいいよ。
>>869 は VC の実装に基づいた事実だから。
0987デフォルトの名無しさん
2010/09/14(火) 23:42:06ファイルをオープンした直後は eof() の値は 0 である、という決め事に依存しているからですよ。
ファイルの読み込みや eof の問題ならまだしも、ハードウェアを叩いていると、
「何かの操作をしないと、状態がわからない」という場合にわりあいに頻繁に直面するんです。
そういったとき
for(;;) { ぐにゅぐにゅ if () break; むちゃむちゃ}
が便利、というか自然、というか、ああやっぱり疲れているんだなあ。
0988デフォルトの名無しさん
2010/09/14(火) 23:51:42そもそもレアケースだし。
0989デフォルトの名無しさん
2010/09/14(火) 23:54:38f1.get(c) を二度かかないといけないのがいやじゃないですか?
f1.get(c) にあたる部分がボリュームのあるものだと、特に。
for (;;) {
f1.get(c)
if (f1.eof()) break;
f2.putc(c)
}
だったら、f1.get(c) (とかそれにあたる部分)を一度かくだけですむでしょう?
0990デフォルトの名無しさん
2010/09/15(水) 00:04:550991デフォルトの名無しさん
2010/09/15(水) 00:06:550992デフォルトの名無しさん
2010/09/15(水) 00:08:22おまえは本質的に問題がわかってないだろ。
0993デフォルトの名無しさん
2010/09/15(水) 00:10:23アルゴリズムの部分に具体処理かくなんてなんか逆行しとる
0994デフォルトの名無しさん
2010/09/15(水) 00:10:390995デフォルトの名無しさん
2010/09/15(水) 00:13:44ただ、こんなザマになった時点で既に設計ミスだろ。
0996デフォルトの名無しさん
2010/09/15(水) 00:19:030997デフォルトの名無しさん
2010/09/15(水) 00:21:37設計ミスもなにも、単純な fstream でもこんなざまになってしまうのですから、世の中の大概のものはこんなパターンになってしまうのでは?
で、while() のなかにカンマ演算子で押し込むくらいなら(以下略)
0998デフォルトの名無しさん
2010/09/15(水) 00:22:01http://hibari.2ch.net/test/read.cgi/tech/1284477697/l50
0999デフォルトの名無しさん
2010/09/15(水) 00:24:441000デフォルトの名無しさん
2010/09/15(水) 00:29:29イテレータみたいな使い方したいんだったら、そういう抽象を提供しろ。
実装の詳細に依存したループ処理を書かせないようにしなきょ。
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。