C言語なら俺に聞け(入門編)Part 79

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
C言語の*入門者*向け解説スレッドです。
★前スレ
C言語なら俺に聞け(入門編)Part 78
http://hibari.2ch.net/test/read.cgi/tech/1296984829/
★過去スレ
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++の宿題片付けます 146代目
http://hibari.2ch.net/test/read.cgi/tech/1296387672/
★C++言語もOK、ガンガン質問してください。
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
  # サイズが大きい場合は宿題スレのアップローダ等を利用してください
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
2デフォルトの名無しさん:2011/02/15(火) 10:38:46
>>1
勝手にテンプレ変えんなクソったれが
C++はスレ違いだ
3デフォルトの名無しさん:2011/02/15(火) 12:02:31
スレ立て直後で申し訳有りませんが、加算演算子についてです。

#include <stdio.h>
main()
{
int i,j;
i = 3; j = 4;
i = i+ +j;
printf("%d\n\r",i);
}

とした場合、 + が二つあっても,あいだにスペースやtabなどのセパレータがあれば、
warningもなく、きちんと動作します。
i = i + j;
とした場合と同じになります。
もちろん、
i = i++j;
とした場合はエラーとなります。

10年以上cをいじってて、はじめて気が付きました。

gccの4.3.2でテストしました。gcc以外に組込系の環境がいくつかあるのですが、
どれもも同じ動作でした.。

上記の処理は、言語仕様としてはどのようになっているのでしょうか?
4デフォルトの名無しさん:2011/02/15(火) 12:11:59
プログラムはまずトークンに分割することになっています
トークンに分割する際は最も長いシーケンスを採用することになっています
つまり + よりも ++ の方が長いので、+ がいくつか連続していればそれは ++ というトークンとして切りだされます
トークンに分割した後に、そのプログラムの構文を解釈します
例えば x+++++y は x ++ ++ + y と分割されコンパイルエラーになるという例が仕様書にも記載されています
5デフォルトの名無しさん:2011/02/15(火) 12:14:52
それは、わかるんですが、
i=i+ +j;
の場合、どう処理されているのかが知りたいんです。
6デフォルトの名無しさん:2011/02/15(火) 12:22:11
それは単に i と +j を足して i に代入してるだけです
+j というのは単項演算子の + が j にくっついたものです
負の値を表すのに -j などと書けるように正の値をわざわざ + を付けて +j などと書いてもよいです
7デフォルトの名無しさん:2011/02/15(火) 12:30:49
なるほど、わかりました。大変スッキリしました。
加算演算子でなくて、単項演算子となるわけですね。

実際のコードでは、数行にわたる計算式で、+の後ろに関数やらマクロやら
あったので、発見が遅れたので、バグとして計上するかどうかに悩んでたのでした。
コンパイルされたアセンブラコードとしては問題なかったのですが。

ありがとうございました。
8デフォルトの名無しさん:2011/02/15(火) 18:02:00
914 :デフォルトの名無しさん:2011/02/06(日) 17:00:59
そんな話は聞いたことないけどしたいならそうすればいいんじゃない?
それより、 i * 10 + 9 + ( i == 9 ) は意図したとおりに動かないね。

920 :デフォルトの名無しさん:2011/02/06(日) 17:34:11
問題ないように思える人はもう一度Cの規格票をよく読むんだ^^

923 :デフォルトの名無しさん:2011/02/06(日) 17:38:32
…というのも不親切なので答えをいうと
i == 9の部分はtrueの時1になることを想定しているけど
(90-100の階級幅だけ11あるので、ここだけ特別処理にしている)
Cの規格上はtrueは0以外の整数であればなんでもいいことになっているので
実装にっては「90-100」のような表示にならない可能性があるってことなのよ^^;
ここは

printf( "%d-%d %d人\n", i * 10, i == 9 ? 100 : i * 10 + 9, cv[ i ] );

のようにすべきでした。

924 :デフォルトの名無しさん:2011/02/06(日) 17:41:11
って、答えを書いているうちに即レスするんじゃない貴様ら^^

ちなみに、この「trueは0以外の整数」というのは
Cではけっこう重要な落とし穴なので初学者は覚えておくといいよ^^

929 :デフォルトの名無しさん:2011/02/06(日) 17:44:46
あれ?そうだっけ?すまんすまん^^ワラ

935 :デフォルトの名無しさん:2011/02/06(日) 17:49:37
こうして人は成長していくのであった^^;
9デフォルトの名無しさん:2011/02/15(火) 18:05:28
663 :デフォルトの名無しさん:2011/02/12(土) 22:47:08
>>654
その 6.5.6 って意味がよく判らん記述だなぁ、解りやすく解説できる?

そもオーバーフローとは加算・乗算によって桁あふれを起こす場合だろ
減算によって引き起こされるのはアンダーフローって呼ぶのでは?
10デフォルトの名無しさん:2011/02/15(火) 18:09:59
572 :当然未定義な。:2011/02/12(土) 20:27:07
>>561, >>564
マスターのレベルにもよるよね。
普通に配列使うだけなら、他の言語知ってりゃできて当然。

char *x;
char y
char a[] = "012345678";
*x = a - 1;
y = x[2];

で、x に何が入るかまでわかってるなら結構すごいと思う。
11デフォルトの名無しさん:2011/02/15(火) 18:23:00
>>3
printf("%d\n\r",i); // mac から windows の改行コードってネタ?
12デフォルトの名無しさん:2011/02/15(火) 18:27:24
>>8
Part77のコピペか
突っ込みも一緒にコピペしないと分かりにくいんじゃね?
13デフォルトの名無しさん:2011/02/15(火) 18:42:10
>>8
ひどいじゃなイカもコピペすれ
14デフォルトの名無しさん:2011/02/15(火) 19:04:11
940 :デフォルトの名無しさん :2011/02/06(日) 17:52:53
おまえら、おもしろいおもちゃを手にいれたみたいに。ひどいじゃなイカ^^;
15Perl忍者 ◆M5ZWRnXOj6 :2011/02/15(火) 21:05:45
俺さあ、ここのスレ俺が立てたって設定にしてんだよね

俺「2chでC言語なら俺に聞けっていうスレをはじめました あれぼくです」

みたいに おーすげえっていわれるけど
16デフォルトの名無しさん:2011/02/15(火) 21:08:00
そう・・・(無関心)
17デフォルトの名無しさん:2011/02/15(火) 21:19:07
SAW…(拷問系)
18デフォルトの名無しさん:2011/02/15(火) 21:46:23
爽…(氷菓子)
19デフォルトの名無しさん:2011/02/15(火) 22:16:30
前スレ
250 名前: デフォルトの名無しさん [sage] 投稿日: 2011/02/09(水) 01:01:41

void mem_cpy(void *dst,void *src,u_int size){
     char *p1 = *dst;
     char *p2 = *src;
     while(size--){
          *p1** = *p2++;
     }
}
基本的なソースはこういう形として,
こういう形で,エンディアンの問題を回避する方法ってある?


*p1** = *p2++;
これ、どんな動作なの?
20デフォルトの名無しさん:2011/02/15(火) 22:20:49
コンパイルエラー
21デフォルトの名無しさん:2011/02/15(火) 22:26:33
ス、スマソ
22デフォルトの名無しさん:2011/02/15(火) 22:34:58
エンディアン
うそつかない
23デフォルトの名無しさん:2011/02/15(火) 22:53:52
>>19
C言語でないものはスレ違い
24デフォルトの名無しさん:2011/02/15(火) 23:19:45
行列の取り扱いに関する質問なのですが

for(i=0;i<N=100;i++){
 for(j=0;j<N=100;j++){
  scanf("%d",&matrix[i][j]);
 }
}

このような手順で行列を作成した場合例えばi=j=4となる
i行j列の成分を除いた99*99の行列を作成するにはどう記述すべきですか?
25デフォルトの名無しさん:2011/02/15(火) 23:27:45
>>24
まず i<N=100 や j<N=100 がコンパイル通らないけど…
それから、i=j=4となるi行j列要素を除くと99*99行列じゃなくて100*100-1行列じゃね?
26デフォルトの名無しさん:2011/02/15(火) 23:40:28
比較演算子の方が優先順位高いから i<(N=100) としなきゃ
27デフォルトの名無しさん:2011/02/15(火) 23:44:59
>>25
すいません書き方が酷かった
i=4またはj=4となるような行と列除くという意味です
あと省略しましたがNもscanfで入力させたいです
28デフォルトの名無しさん:2011/02/15(火) 23:45:51
すみません。N=部分は削除お願いします
その通り、i=j=4となるi行j列要素を除く100*100-1行列です
29デフォルトの名無しさん:2011/02/15(火) 23:48:37
>>27
i=5,j=5のときはmatrix[4][4]?
それともmatrix[5][5]?
30デフォルトの名無しさん:2011/02/15(火) 23:52:40
>>27-28
意味が分からん…
31デフォルトの名無しさん:2011/02/15(火) 23:53:20
どうせ学校の宿題だろ
3229:2011/02/15(火) 23:56:11
前者なら
for(i=0;i<N=100;i++){ if(i==4) continue;
 for(j=0;j<N=100;j++){ if(j==4) continue;
  scanf("%d",&matrix[i][j]);
 }
}

後者なら何をしたいのか分からないが
for(i=0;i<N=100;i++){
 for(j=0;j<N=100;j++){
 if(i!=4 && j!=4)
  scanf("%d",&matrix[i][j]);
 }
}
33デフォルトの名無しさん:2011/02/15(火) 23:57:39
>>32
scanfで読み込んだ行列に対して、指定した行と列を除く話だと思うよ
34Perl忍者 ◆M5ZWRnXOj6 :2011/02/15(火) 23:59:23
複雑なコード見慣れてるからさ
Cのコードが凄くカスにみえんだよね

はぁ・・・どうしよう 嫌味に聞こえたらごめんね
35Perl忍者 ◆M5ZWRnXOj6 :2011/02/16(水) 00:00:35
C言語なんて凄いやつたくさんいるしさあ^−^;
ユーザー多いから^−^;

俺TUEEEEEEEEEEEEEEEEEEEEE!!

できないよね^^; 馬鹿だね君たちも^^;

^−^;
36デフォルトの名無しさん:2011/02/16(水) 00:05:03
>>28
100*100-1行列だとしてさ、「除く」って具体的にどういう事?
100*100-1要素の2次元配列を作りたい、それとも100*100要素の2次元配列で
[4][4]には代入しない、のどっち?
37デフォルトの名無しさん:2011/02/16(水) 00:05:43
いいぞPerl忍者
もっとやれ
38デフォルトの名無しさん:2011/02/16(水) 00:08:06
人を上から目線にしか見れない上級者様()は来なくていいです
39デフォルトの名無しさん:2011/02/16(水) 00:08:38
◆QZaw55cn4c
40デフォルトの名無しさん:2011/02/16(水) 00:11:59
面白いことも書けねえんならコテ付けんなカス
41C忍者 ◆Iw4kwU1lPo :2011/02/16(水) 00:13:03
Perl忍者はもう少し頭を使った方がいい
42Python忍者 ◆/vgV4RIG3g :2011/02/16(水) 00:20:26
拙者はスネークしてるでござるよ。pythonだけに。
43舐め忍者 ◆gHyRb0WDMU :2011/02/16(水) 00:23:23
ぺろぺろぺろぺろ
44PHP忍者 ◆46cuXalB7s :2011/02/16(水) 00:24:49
忍者の里
45デフォルトの名無しさん:2011/02/16(水) 00:25:53
Perl忍者弱えw
46デフォルトの名無しさん:2011/02/16(水) 00:27:22
ここはC言語なら俺ことイカ娘に聞け(上級編)Part 79でゲソ

   ,.__y⌒'ー---┐          ,.____        _へ、_、__,.ヘ、___
  /         \        , '´        `丶、    r´
  }  (  聞 ど  l      / l   _, -―― -  ヽ、┌´      ナ丶
 f´   )  こ う  ヽ  n⌒l/  l ,. .´: : : : ハ: : : : :`.ヽ'ヽ  ├┬゛  tナ
 l   (  え も   }  l |l |n l / : :/ j:/ーヘl: : :|: : : : |  }.   ノ     /
 {   )  ん     〉 | {  j」_l /:l :/     |:/`}ノ!.:/  {   ヽ /  /へノ
 }   (  で      { _j  /ヘ/: :l  ミミ      l/}  〈   ノ  -‐ァ、、
. )   !  ゲ     (: :´メ、_,.メ、|: : |  , ,     ミミ./ :l .  }. ┌─┐ (,__
└-、     ソ    ,/ ヽ : : : : 丿」: : |、   /`¬ , , |: :|   )   ┌┘
    ゝ 、_,,,,,,,... -ゝ/ ̄/´,.__.|: : | >-| /_,ノ. : :\__l\ ・
.           ,/  / ̄ヽ l!: : :ヽ、l  丶イ |.|ト、:.\: : : : : : : :>-、-、 __,,.、
          (        ヾ \:_: :\__  ,‐//.| `l:\ ̄ ̄l/
            ̄  ̄ ̄ ̄ヽr―ァ' \: : /、 //  }/: : し\
               /: :,L,. く ___/::/ \'/   { ヽ┬┐/
               /: :/ /: ヾ¬ー'^ヽ     ヽ 丶__ _,-、
          __/: :/ /: :/ \          {、´   __ _l::::l⌒\
          |: : : : /   |: : i   /:\ `       >'´  \`-´^ヽJ
       /: : | ̄     |: : レ /: ://                  \
47デフォルトの名無しさん:2011/02/16(水) 00:28:01
 
48デフォルトの名無しさん:2011/02/16(水) 00:28:26
>>24
宿題スレへ号
49Perl忍者 ◆M5ZWRnXOj6 :2011/02/16(水) 00:30:07
わろwwwwwwwwwww
50デフォルトの名無しさん:2011/02/16(水) 00:30:22
【モリタポ有償】C/C++の問題を片付けます(2)
http://hibari.2ch.net/test/read.cgi/tech/1295273862/

あなたが解けないC言語/C++言語の問題を ◆QZaw55cn4c が有償で片付けるスレッドです。

・モリタポ(http://moritapo.jp/)により決済を行います。
・投稿にあたっては、トリップを使ってください。トリップがなければ決済の確認ができません。
 ◆QZaw55cn4c は、トリップ以外の質問者の情報を知ることができませんので安心です。

【回答掲示までの流れ】
1. 質問者がトリップを使って問題を投稿する。
2. ◆QZaw55cn4c が回答できる問題があれば、◆QZaw55cn4c が受諾レスを行う。
 受諾レスには決済日を基点とした回答猶予期間が示される。
3. 質問者が ◆QZaw55cn4c にモリタポを進呈する。
 進呈の際には、問題を投稿したときに表示されたトリップ(パスワードではない)をメッセージに記入する。
4. モリタポの進呈を確認したら、◆QZaw55cn4c は回答を掲示する。(http://codepad.org/, http://ideone.com を使用します。)

【料金】
・一問あたり 500円(5000モリタポ・手数料込み)です。
・一つのレスに記述できる内容を一問とします。アップローダーを使用してもかまいません。
・◆QZaw55cn4c が受諾レスを行い、受諾レスに回答期日を示したにも関わらず、回答期日に間に合わなかった場合には、モリタポを返還します。
それ以外の場合にはモリタポの返還はいたしません。

【修正】
・◆QZaw55cn4c が一度示した回答に対しては、明白な錯誤があった場合を除いては、◆QZaw55cn4c は修正は基本的に行いません。

ただし、最大限ご希望に応じたいと考えていますので、修正希望があれば、トリップを使用して投稿してください。
修正希望回数は、最大3回を目安としてください。3回を超えて修正を希望する場合は、新規に質問を投稿しなおしてください。
いずれも場合も、修正に応じることを保障するものではありません。
51Haskell忍者 ◆Lgxotu9vfE :2011/02/16(水) 00:31:47
Perl忍者もっと頑張れよ
52デフォルトの名無しさん:2011/02/16(水) 00:33:55
34 :Perl忍者 ◆M5ZWRnXOj6 :2011/02/15(火) 23:59:23
複雑なコード見慣れてるからさ
Cのコードが凄くカスにみえんだよね

はぁ・・・どうしよう 嫌味に聞こえたらごめんね


35 :Perl忍者 ◆M5ZWRnXOj6 :2011/02/16(水) 00:00:35
C言語なんて凄いやつたくさんいるしさあ^−^;
ユーザー多いから^−^;

俺TUEEEEEEEEEEEEEEEEEEEEE!!

できないよね^^; 馬鹿だね君たちも^^;

^−^;
53デフォルトの名無しさん:2011/02/16(水) 01:25:33
 
54デフォルトの名無しさん:2011/02/16(水) 01:40:19
100*100-1要素の2次元配列って何?
55デフォルトの名無しさん:2011/02/16(水) 02:09:10
やっぱ専門家以外には通じないか…
56デフォルトの名無しさん:2011/02/16(水) 02:10:16
#include<stdio.h>

int main(void)
{
....................int no;

....................printf("整数を入力してください。:"); scanf("%d", &no);

.....................while(no > 0){
....................................if(no % 2){
..........................................................--no;
..........................................................printf("%d ", no);
..........................................................no -= 2;
.........................................................}
.....................................else{
..........................................................printf("%d ", no);
..........................................................no -= 2;
...............................................}
.................................}
...........................return(0);
}
C言語の教本の演習問題で「入力した整数以下の正の偶数を降順に表示しろ」
って言うから思いついたように組み込んで行ったら出来たんだが、
後々、何でこれで間違ってないのか分からん。
偶数入れた時はifのelseが使われて偶数が表示されるのは分かるが、奇数(例えば9)入れた時は
8, 5, 2 が表示されるんじゃないの?
入門一週間目の俺に教えてくれ
57デフォルトの名無しさん:2011/02/16(水) 02:13:39
>>56
奇数を入れた1回目のループは
if(no % 2){} の中身が実行されるが
その時noが偶数になるので2回目以降のループは
else{}の中身が実行される
58デフォルトの名無しさん:2011/02/16(水) 02:17:01
>>57
ああ、そっか
しょーもない読み違いで長文レスしてしまってすまんなありがとう
59デフォルトの名無しさん:2011/02/16(水) 02:20:37
>>58
1を入力したときに
正の偶数ではない0が出力されちゃうから
修正した方がいいよ
60デフォルトの名無しさん:2011/02/16(水) 02:28:22
んで、100*100-1行列って何?
61デフォルトの名無しさん:2011/02/16(水) 02:36:26
arr[100][100]の1要素が不定ってところじゃないかなぺろ
62デフォルトの名無しさん:2011/02/16(水) 02:38:13
>>59
whileの複合文の上に
..................if(no == 1){
..................printf(" ");
..................--no;
......................................}
と、whileの複合文の下に
.................putchar(' ');
入れれば良い感じか
63デフォルトの名無しさん:2011/02/16(水) 02:39:54
>>61
>>36を見ると単純にそうとは言えないんじゃかいかぺろ
64デフォルトの名無しさん:2011/02/16(水) 02:41:55
【モリタポ有償】C/C++の問題を片付けます(2)
http://hibari.2ch.net/test/read.cgi/tech/1295273862/

あなたが解けないC言語/C++言語の問題を ◆QZaw55cn4c が有償で片付けるスレッドです。

・モリタポ(http://moritapo.jp/)により決済を行います。
・投稿にあたっては、トリップを使ってください。トリップがなければ決済の確認ができません。
 ◆QZaw55cn4c は、トリップ以外の質問者の情報を知ることができませんので安心です。

【回答掲示までの流れ】
1. 質問者がトリップを使って問題を投稿する。
2. ◆QZaw55cn4c が回答できる問題があれば、◆QZaw55cn4c が受諾レスを行う。
 受諾レスには決済日を基点とした回答猶予期間が示される。
3. 質問者が ◆QZaw55cn4c にモリタポを進呈する。
 進呈の際には、問題を投稿したときに表示されたトリップ(パスワードではない)をメッセージに記入する。
4. モリタポの進呈を確認したら、◆QZaw55cn4c は回答を掲示する。(http://codepad.org/, http://ideone.com を使用します。)

【料金】
・一問あたり 500円(5000モリタポ・手数料込み)です。
・一つのレスに記述できる内容を一問とします。アップローダーを使用してもかまいません。
・◆QZaw55cn4c が受諾レスを行い、受諾レスに回答期日を示したにも関わらず、回答期日に間に合わなかった場合には、モリタポを返還します。
それ以外の場合にはモリタポの返還はいたしません。

【修正】
・◆QZaw55cn4c が一度示した回答に対しては、明白な錯誤があった場合を除いては、◆QZaw55cn4c は修正は基本的に行いません。

ただし、最大限ご希望に応じたいと考えていますので、修正希望があれば、トリップを使用して投稿してください。
修正希望回数は、最大3回を目安としてください。3回を超えて修正を希望する場合は、新規に質問を投稿しなおしてください。
いずれも場合も、修正に応じることを保障するものではありません。
65デフォルトの名無しさん:2011/02/16(水) 02:42:53
no > 1
って突っ込み待ちか?
66デフォルトの名無しさん:2011/02/16(水) 02:43:25
【質問の際】
質問の際は以下の条件に従ってください。
従わない投稿の問題に対しては、回答を差し上げられない可能性が高くなります。
・トリップを使用してください。トリップがない場合、受諾レスも回答も差し上げられません。
・質問は【質問テンプレート】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・問題文やコードをリンクするときは、内容について説明をつけてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。

【質問テンプレート】
[1] 問題文(含コード&リンク):
[2] 環境
 [2.1] OS: (Windows/Linux/等々)
 [2.2] コンパイラ名とバージョン: (gcc 3.4, VisualC++2010 Express, Borland C++ 5.5 等)
 [2.3] 言語: (C/C++/どちらでも可 のいずれか)
[3] 回答希望期限:([yyyy年mm月dd日hh:mm])なお ◆QZaw55cn4c は回答希望期限を最大限尊重しますが、かならずしも希望にそえるとは限りません。
[4] その他の制限: (どこまで習っているか、<****.h>は使ってはいけない等々)

【過去スレ】
【◆QZaw55cn4c 隔離】C/C++の問題を片付けます
http://hibari.2ch.net/test/read.cgi/tech/1289715349/

【関連スレ】
C/C++の宿題片付けます 145代目
http://hibari.2ch.net/test/read.cgi/tech/1294061094/
67デフォルトの名無しさん:2011/02/16(水) 03:09:21
68デフォルトの名無しさん:2011/02/16(水) 03:39:08


      唸れ、俺の左手――!



                  宿りし力を今こそ解き放つ――!!
69デフォルトの名無しさん:2011/02/16(水) 04:22:46
酒粕で作った甘酒が飲みたい・・・
70デフォルトの名無しさん:2011/02/16(水) 04:46:11
Perl忍者
71デフォルトの名無しさん:2011/02/16(水) 06:00:52
計算したい
72デフォルトの名無しさん:2011/02/16(水) 09:00:48
includeファイルの優先順位とかって、指定できますか?
コンパイルはvisual studio 2008 Expressでやってます。
先にvarargs.hをincludeして、
va_start(引数)の形でコンパイルを通したいんですが、
va_start(引数1,引数2)が先に読まれてしまいエラーになってしまって・・・。
73デフォルトの名無しさん:2011/02/16(水) 09:39:09
ほうほうそれでそれで?
74デフォルトの名無しさん:2011/02/16(水) 09:51:27
>>72
理屈の上では、
#include <varargs.h>
va_start(引数)
#undef va_start
#include <stdarg.h>
va_start(引数1,引数2)
で少なくともコンパイルは通りそうな気がするけど
75デフォルトの名無しさん:2011/02/16(水) 09:56:24
>>72 釣る
>>74 釣られる

ぺろぺろの予感!!!
76デフォルトの名無しさん:2011/02/16(水) 10:30:16
>>72
僕も先ほどそれでエラーは回避できました。

#include <stdarg.h>
#undef va_start
#include <varargs.h>
va_start(引数)

実際はこーゆー流れでしたが。

これでやろうと思ってるんですが、
Visual studio 6.0と2008ではvarargs.hが変わってますよね?
2008はva_argが定義されてるかどうかが聞かれてるようになってますが。
なにか理由があって変わったってことは、
安易にそのようにすると6.0と挙動が変わってくるのかな。。。
とか不安なんですが、何かわからないでしょうか?
77デフォルトの名無しさん:2011/02/16(水) 10:48:36
>>76
そのあたりの挙動を吸収してくれるのがstdな訳です
俺は規格外だ、アドホックに行くぜ
というならその理由を明確に提示してもらわないと
回答しようがないですし
そもそもそれが明確ならここより適したスレがあると思います
78デフォルトの名無しさん:2011/02/16(水) 10:59:06
>>76
6.0では
#include <stdarg.h>
#include <varargs.h>
va_start(引数)
の流れでやってたのを2008に移行したいがための質問でした。
stdarg.hをincludeした後にva_argをundefした時に
著しく挙動が変わるような事がなければ問題ないです。
実際にログにはva_startとva_endしか再定義されないみたいで、
個人的には大丈夫かなとは思ってるんですが。

>俺は規格外だ、アドホックに行くぜ
そこらへんは良くわかってないです・・・。
すいません。。。

丁寧に答えていただきありがとうございました。
79デフォルトの名無しさん:2011/02/16(水) 11:01:57
va_start(引数)にするメリットってあるの?
80デフォルトの名無しさん:2011/02/16(水) 11:45:29
>>79
メリットというか・・・。
現行がそーゆー記述
(とゆーか、varargs.hで定義している形)になってたんで。
としか言えないです。
ソースは極力触りたくないんで。
81デフォルトの名無しさん:2011/02/16(水) 11:45:51
fprintfとかfwriteなどは、内部でバッファリングしてて、ある程度たまったら
実際にディスクに書き込むようですが、
そのバッファのサイズはどこで定義されていますか?
また変更することはできるのでしょうか
ちなみにコンパイラはgcc 4.3.2です
82デフォルトの名無しさん:2011/02/16(水) 12:07:47
特に定義されてないと思います
setvbufで変更できます
83デフォルトの名無しさん:2011/02/16(水) 15:23:38
#include <stdio.h>
#define NUM 5
int main(void)
{
int test[NUM];
int tmp;
int i,j,s,t;
printf("%d人の点数を入力してください。\n",NUM);
for(i=0;i<NUM;i++){
scanf("%d",&test[i]);
}
for(s=0;s<NUM-1;s++){
for(t=s+1;t<NUM;t++){
if(test[t]>test[s]){
tmp=test[t];
test[t]=test[s];
test[s]=tmp;
}}}
for(j=0;j<NUM;j++){
printf("%d番目の人の点数は%dです。\n",j+1,test[j]);
}
return 0;
}
配列の要素を大きい順にソートするコード?らしいんですが意味がわかりません
どうして大きい順にちゃんと並び変わるんですか教えてください;;
84デフォルトの名無しさん:2011/02/16(水) 15:29:03
>>83
if 文のところ
test[t] が test[s] よりも大きい場合に test[t] と test[s] を入れ替えて大きい順に並び変えている
85デフォルトの名無しさん:2011/02/16(水) 15:36:44
>>84
>がありますしそれは分かるんですが
tmp=test[t];
test[t]=test[s];
test[s]=tmp;
のところがよく分からないんです・・・
22,80,57,60,50 5人の点数はこれです
86デフォルトの名無しさん:2011/02/16(水) 15:40:35
excel使った方が早いよ
87デフォルトの名無しさん:2011/02/16(水) 16:00:40
88デフォルトの名無しさん:2011/02/16(水) 16:13:01
>>85
それは test[t] と test[s] を入れ替えている
最初 test[t] が 80 で test[s] が 22 だったとすると
tmp = test[t]; // tmp に 80 を代入
test[t] = test[s]; // test[t] に 22 を代入
test[s] = tmp; // test[s] に 80 を代入
最後 test[t] が 22 で test[s] が 80 となり入れ替わっている
89デフォルトの名無しさん:2011/02/16(水) 18:08:08
return 0 と return 1 の違いを初心者でもわかるように教えて
90デフォルトの名無しさん:2011/02/16(水) 18:16:20
関数の呼び出し元が受け取る戻り値が違う
91デフォルトの名無しさん:2011/02/16(水) 18:20:00
受け取らなかったとしたら?
92デフォルトの名無しさん:2011/02/16(水) 18:21:43
意味不明
93デフォルトの名無しさん:2011/02/16(水) 19:27:01
コンパイルエラー

はい次
94デフォルトの名無しさん:2011/02/16(水) 19:52:03
釣れたw
95デフォルトの名無しさん:2011/02/16(水) 19:54:23
えらくしょぼい釣果だったな
96デフォルトの名無しさん:2011/02/16(水) 19:59:51
いえいえ
97デフォルトの名無しさん:2011/02/16(水) 20:27:12
>>82
BUFSIZ @stdio.h
98デフォルトの名無しさん:2011/02/16(水) 22:00:31
関数宣言の時にvoid型にするとreturn値には何も書いちゃいけないの?
99Perl忍者 ◆M5ZWRnXOj6 :2011/02/16(水) 22:00:42
ひゅひゅだよ
100デフォルトの名無しさん:2011/02/16(水) 22:03:48
>>98
いけないでござるよ。
101デフォルトの名無しさん:2011/02/16(水) 22:15:26
>>98
書いていいとして、何を書くつもりだ?
102あぼーん:あぼーん
あぼーん
103あぼーん:あぼーん
あぼーん
104あぼーん:あぼーん
あぼーん
105デフォルトの名無しさん:2011/02/16(水) 23:36:55
>>98
1mmの捻りも感じない釣だな〜
106デフォルトの名無しさん:2011/02/16(水) 23:42:01
捻りの単位はmmじゃないよ
107デフォルトの名無しさん:2011/02/16(水) 23:44:21
自然科学の話じゃないんじゃないの
108デフォルトの名無しさん:2011/02/16(水) 23:54:19
そうだよ
捻りの単位は℃だよ
109デフォルトの名無しさん:2011/02/17(木) 00:06:22
関白宣言の時にvoidされるとreturnは何も残らないの?
110デフォルトの名無しさん:2011/02/17(木) 00:09:07
>>104
それは擬態の術でござるよ。
111デフォルトの名無しさん:2011/02/17(木) 00:10:55
>>109
昔はスタックにint型の無効値を積んで読み捨てているものもあったらしい(伝聞)。

ま、宣言時に「使わねえよ」と漢らしく宣言した以上、それを貫くのが道ってもんだろ?
112デフォルトの名無しさん:2011/02/17(木) 00:13:48
>>109
鬼嫁が残る
113デフォルトの名無しさん:2011/02/17(木) 00:16:33
>>111
main()で漢らしく宣言しましたが、10年後に失脚してしまいました。
(´・ω・`)ショボーン
114デフォルトの名無しさん:2011/02/17(木) 00:19:51
>>113
アクセスバイオレーションで主導権を回復できる例は殆ど無いもんね。
115デフォルトの名無しさん:2011/02/17(木) 00:24:53
失脚したら再帰できないのかなあ
116デフォルトの名無しさん:2011/02/17(木) 00:34:32
>>112
そんな鬼嫁でも、私が先立つときに、俺も死ぬと言ってなどと可愛い時期もありました。
117デフォルトの名無しさん:2011/02/17(木) 00:37:13
>>116
スレッド/プロセスが複線化すると人間の能力では追いきれなくなるわけで、
ゾンビプロセスが残っててもしょうがないと思う。
118デフォルトの名無しさん:2011/02/17(木) 00:39:57
>>117
はい、嫁が死ぬ時は、私も道連れにされますが、
私が死んでも、嫁は保険金で生き残って、太り続けます。
悲しいですね…
119デフォルトの名無しさん:2011/02/17(木) 01:30:56
お前と嫁との関係は親プロセス子プロセスではなく、マスタースレーブだろ
120デフォルトの名無しさん:2011/02/17(木) 04:25:08
だからなに?
121あぼーん:あぼーん
あぼーん
122デフォルトの名無しさん:2011/02/17(木) 06:35:55
#include <stdio.h>

int main()
{
123デフォルトの名無しさん:2011/02/17(木) 06:41:32
#include <stdio.h>

int main()
{
int a[3][2] = {10, 20, 30, 40, 50, 60};
int i, j;

for (i = 0; i < 3; i++) {
for (j = 0; j < 2; j++) {
printf("&a[%d][%d] = %p (a[%d] + %d) = %p\n",
i, j, &a[i][j], i, j, (a[i] + j));
}
}

return 0;
}
(a[i] + j)は何故アドレス演算子が必要ないのですか?
124デフォルトの名無しさん:2011/02/17(木) 06:44:31
a[i] + jがアドレスだから
125デフォルトの名無しさん:2011/02/17(木) 06:47:14
何通りも無いんだから総当りでチェックして
一度自分の目で確かめた方がいい
126デフォルトの名無しさん:2011/02/17(木) 07:04:03
>>124
>>125
配列名はその配列の先頭アドレスを表すと書かれていたのですが、
この場合a[i]を配列名として見るということでしょうか?
127デフォルトの名無しさん:2011/02/17(木) 07:07:36
>>126
a[i]と書いたときポインターに成り下がる
ぺろぺろぺろぺろ
128デフォルトの名無しさん:2011/02/17(木) 07:22:23
>>126
int a[b][c][d][e][f][g][h][i][j][k];
a[b][c][d][e][f][g][h][i][j]; // ←は[k]に辿り着かなければ何処までもポインタ扱い
129デフォルトの名無しさん:2011/02/17(木) 07:31:17
>>127
>>128
理解できました。
ありがとうございます。
130あぼーん:あぼーん
あぼーん
131あぼーん:あぼーん
あぼーん
132あぼーん:あぼーん
あぼーん
133デフォルトの名無しさん:2011/02/17(木) 14:33:04
cdecl の引数領域って関数の中で破壊してもいいんだっけ?
(スタックポインタの巻き戻しじゃなくて、引数領域を何かで上書きしてもいいのかってこと)
134デフォルトの名無しさん:2011/02/17(木) 15:26:23
>>133
引数領域ってスタックの中だろ
普通、そこは参照しかしないからな…
Cの動作だけで考えれば、壊しても大丈夫な気もするが、
最適化とかすると、コンパイラ依存になりそうな気がする…
135あぼーん:あぼーん
あぼーん
136デフォルトの名無しさん:2011/02/17(木) 16:59:36
>>134
そうそう、スタック上の引数
アセンブラのルーチンで横着して引数をつぶすってのを昔から深く考えずにやってたんだけど
ふと心配になったんだ

経験上、関数から帰った後で引数を使いまわすコンパイラは見たことないけど
規格や規約ではっきり合法と書かれてるのも見たことないんだよね
137デフォルトの名無しさん:2011/02/17(木) 17:36:40
C言語入門書でオススメを教えてください
138あぼーん:あぼーん
あぼーん
139あぼーん:あぼーん
あぼーん
140あぼーん:あぼーん
あぼーん
141デフォルトの名無しさん:2011/02/17(木) 17:55:05
>>136
んあ?
規格に、仮引数は関数スコープの変数、みたいな記述がなかったっけ?

確認してないんで無かったらスマン
142あぼーん:あぼーん
あぼーん
143デフォルトの名無しさん:2011/02/17(木) 19:51:54
warning: passing argument 2 of '__builtin___strcpy_chk' makes pointer from integer without a cast
このエラーの意味と対処法を教えていただけませんか?
144デフォルトの名無しさん:2011/02/17(木) 20:00:25
そのままじゃん
145デフォルトの名無しさん:2011/02/17(木) 20:05:36
>>143
__builtin___strcpy_chk の第二引数にintを入れたみたいだけど、
こっちで親切にポインタにキャストしておいてあげたからねっ、という意味。

対処法は、(void *) 0 みたいに明示的にキャストして引数を渡す。
146デフォルトの名無しさん:2011/02/17(木) 20:16:56
>>143
多分 strcpy の第2引数に char* じゃなくて char を渡していると思われ。
コンパイラにとっちゃあ warning だけどプログラムとして見れば error! ご愁傷さま
147デフォルトの名無しさん:2011/02/17(木) 20:20:45
>>145
ありがとうございます。
148デフォルトの名無しさん:2011/02/17(木) 20:36:56
>>146
ありがとうございます。
149デフォルトの名無しさん:2011/02/17(木) 20:52:49
>>143です。
http://codepad.org/pF5QZz2J
上のようなプログラムで前述した警告がline43,50,58に出るのですが、具体的な改善点が分かりません・・・。
よろしければ教えて頂けたら幸いです。何度も申し訳ありません・・・。
150デフォルトの名無しさん:2011/02/17(木) 21:02:57
151デフォルトの名無しさん:2011/02/17(木) 21:03:55
文字と文字列の違いを勉強するといいと思うよ
152デフォルトの名無しさん:2011/02/17(木) 21:17:05
これはひどい
153デフォルトの名無しさん:2011/02/17(木) 21:40:54
>>151
ありがとうございます。
154デフォルトの名無しさん:2011/02/17(木) 22:07:26
>>152
ありがとうございます。
155デフォルトの名無しさん:2011/02/17(木) 22:43:48
>>149
解決しました!ありがとうございました。
156デフォルトの名無しさん:2011/02/17(木) 22:48:54
#include <string.h>
#include <stdio.h>

int main()
{
char str[32];
size_t len;

printf("文字列を入力してください---");
scanf("%s", str);

len = strlen(str);

printf("%sの長さ%dです\n", str, len);

return 0;
}
猫でもわかるCの文字列の長さを取り出すプログラムなのですが、
何故size_t型を使っているのでしょうか?
157デフォルトの名無しさん:2011/02/17(木) 22:52:13
>>156
strlen()の戻り値がsize_tだから
158デフォルトの名無しさん:2011/02/17(木) 22:53:05
strlenの戻り値の型がsize_tだから
つってもprintfに%d指定してるから意味ないけどな
159デフォルトの名無しさん:2011/02/17(木) 22:54:03
>>156
size_tだと型によって何かのサイズであることを明示できる。
プログラマやソースを読んだ人に対するインフォメーションが多い。
そのため、コードの解読がしやすく、バグを作りこみにくくなる。

という優しさ。
160デフォルトの名無しさん:2011/02/17(木) 22:55:12
>>156
strlenの戻り値の型がsize_tだから
strlenとかサイズを返す系の関数がなぜsize_tを使っているかというと、「サイズを表す」と明言したいから
別にintでもunsignedでもいいじゃんと思うかもしれないけど、型定義名を使っておけば後から変更するとき一箇所だけの書き換えで済む
161デフォルトの名無しさん:2011/02/17(木) 22:56:14
なるほどー、ありがとうございます。
162デフォルトの名無しさん:2011/02/17(木) 23:05:24
わんくま同盟ってなんなんですか?
プログラマ界の権威みたいなものですか?
163デフォルトの名無しさん:2011/02/17(木) 23:09:56
はい、そうですよ。あれは超エリートプログラマ集団
164デフォルトの名無しさん:2011/02/17(木) 23:14:43
メンバーのεπιστημηさんはC++語らしたら恐らく日本で一番。かれこれ20年近いんじゃないかな
165デフォルトの名無しさん:2011/02/17(木) 23:16:53
επιστημηさんって本を出版している方ですよね?
やっぱり神プログラマなんですね
166デフォルトの名無しさん:2011/02/17(木) 23:18:05
えぴすてーめさんには昔よくお世話になりました。
ええ人や。
167デフォルトの名無しさん:2011/02/17(木) 23:18:05
他所でやれ
168デフォルトの名無しさん:2011/02/17(木) 23:20:03
嫉妬する人がいるのも分かります
169デフォルトの名無しさん:2011/02/17(木) 23:21:44
>>167
嫉妬しているの?
170デフォルトの名無しさん:2011/02/17(木) 23:23:17
うん
171デフォルトの名無しさん:2011/02/17(木) 23:26:57
そりゃそうだろ
172デフォルトの名無しさん:2011/02/17(木) 23:30:38
嫉妬に値する
173デフォルトの名無しさん:2011/02/17(木) 23:31:12
VC++でlibpng1.5.1がコンパイル出来ない!だれか助けて!><;
174デフォルトの名無しさん:2011/02/17(木) 23:31:49
何で嫉妬しているの?
175デフォルトの名無しさん:2011/02/17(木) 23:36:25
実力の差が明らかだから
176デフォルトの名無しさん:2011/02/17(木) 23:49:45
επιστημηって名前もオシャレだよね
日本人離れしている
177デフォルトの名無しさん:2011/02/17(木) 23:51:15
パソ通出身は変な名前多い。
178デフォルトの名無しさん:2011/02/18(金) 00:02:25
クサチュー
179デフォルトの名無しさん:2011/02/18(金) 00:13:43
επιστημηは頭良いからな
180デフォルトの名無しさん:2011/02/18(金) 00:22:22
イプシロンパイイオタシグマタウエータミューエータさんがどうした?
181デフォルトの名無しさん:2011/02/18(金) 00:29:12
>>180
お前は頭悪いだろ
182デフォルトの名無しさん:2011/02/18(金) 00:31:45
183デフォルトの名無しさん:2011/02/18(金) 01:07:17
えってぃいおてんうん
としか読めねえだろこれjk
184デフォルトの名無しさん:2011/02/18(金) 01:22:59
ティウンティウン
185デフォルトの名無しさん:2011/02/18(金) 01:33:09
>>179
左端が亀頭みたいでヒワイだとおもいます
186デフォルトの名無しさん:2011/02/18(金) 01:34:26
おまえのせいで亀頭にしか見えない!!
187デフォルトの名無しさん:2011/02/18(金) 01:35:11
ホーケイちんこのシワ的だよな。πのあたりが
188デフォルトの名無しさん:2011/02/18(金) 01:36:58
あんもくに包茎自慢しやがって
189デフォルトの名無しさん:2011/02/18(金) 01:37:42
おまえのせいでημηがきんたまにしかみえねえ!
190デフォルトの名無しさん:2011/02/18(金) 01:44:20
System.out.println("επιστημη");
191デフォルトの名無しさん:2011/02/18(金) 01:46:54




επιστημηの才能に嫉妬する人がこんなにも・・・




やはり社会に与える影響は大きかったか・・・



192デフォルトの名無しさん:2011/02/18(金) 01:48:24
政権交代にもεπιστημηの影があったというしな
193デフォルトの名無しさん:2011/02/18(金) 01:51:46
実力には逆らえない
194デフォルトの名無しさん:2011/02/18(金) 01:57:27
ネタが無いなら無いで
無理にネタを振らなくてもいいよ
無理にネタに乗らなくてもいいよ
HN、レス番、レス日時、IDをネタにしてまで
頑張らなくていいんだよ
195デフォルトの名無しさん:2011/02/18(金) 02:05:01
何言ってんのコイツ
196デフォルトの名無しさん:2011/02/18(金) 02:07:12
馬鹿なんだろ
197デフォルトの名無しさん:2011/02/18(金) 02:17:33
 
198デフォルトの名無しさん:2011/02/18(金) 02:46:38
>>195-197

                 / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
                 | 
     , ,-;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:,.  ヽ─y──────────────   ,-v-、
    /;:;:;:;:;:;:ミミ;:;:;:;:;:;:;:;:;:;`、                          / _ノ_ノ:^)
    /;:;:;:;:彡―ー-、_;:;:;:;:;:;:;:;|                           / _ノ_ノ_ノ /)
    |;:;:;:ノ、     `、;;:;:;:;:;:i                        / ノ ノノ//
    |;:/_ヽ ,,,,,,,,,,  |;:;:;:;:;:;!                      ____/  ______ ノ
    | ' ゚ ''/ ┌。-、  |;:;:;:;:/                     _.. r("  `ー" 、 ノ
    |` ノ(  ヽ  ソ  |ノ|/               _. -‐ '"´  l l-、    ゙ ノ
_,-ー| /_` ”'  \  ノ   __       . -‐ ' "´        l ヽ`ー''"ー'"
 | :  | )ヾ三ニヽ   /ヽ ' "´/`゙ ーァ' "´  ‐'"´         ヽ、`ー /ノ
 ヽ  `、___,.-ー' |   /   /                __.. -'-'"
  |    | \   / |   l   /            . -‐ '"´
  \   |___>< / ヽ

199デフォルトの名無しさん:2011/02/18(金) 02:48:23
AA荒らしキタ
200デフォルトの名無しさん:2011/02/18(金) 02:52:31
AAうざ
201あぼーん:あぼーん
あぼーん
202あぼーん:あぼーん
あぼーん
203あぼーん:あぼーん
あぼーん
204あぼーん:あぼーん
あぼーん
205デフォルトの名無しさん:2011/02/18(金) 02:55:40
一人3役荒らし VS AA荒らし
206あぼーん:あぼーん
あぼーん
207デフォルトの名無しさん:2011/02/18(金) 02:57:12
× 一人3役荒らし
○ 舐め達磨

ぺろぺろぺろぺろ
208デフォルトの名無しさん:2011/02/18(金) 02:57:59
>>207
お前まだいたのか
さすがクドさが半端ない
209デフォルトの名無しさん:2011/02/18(金) 02:58:11
舐め達磨 は おうむがえし を つかった
ぺろぺろぺろぺろ
210あぼーん:あぼーん
あぼーん
211あぼーん:あぼーん
あぼーん
212あぼーん:あぼーん
あぼーん
213あぼーん:あぼーん
あぼーん
214あぼーん:あぼーん
あぼーん
215あぼーん:あぼーん
あぼーん
216デフォルトの名無しさん:2011/02/18(金) 03:03:05
あなたが解けないC言語/C++言語の問題を ◆QZaw55cn4c が有償で片付けるスレッドです。

・モリタポ(http://moritapo.jp/)により決済を行います。
・投稿にあたっては、トリップを使ってください。トリップがなければ決済の確認ができません。
 ◆QZaw55cn4c は、トリップ以外の質問者の情報を知ることができませんので安心です。

【回答掲示までの流れ】
1. 質問者がトリップを使って問題を投稿する。
2. ◆QZaw55cn4c が回答できる問題があれば、◆QZaw55cn4c が受諾レスを行う。
 受諾レスには決済日を基点とした回答猶予期間が示される。
3. 質問者が ◆QZaw55cn4c にモリタポを進呈する。
 進呈の際には、問題を投稿したときに表示されたトリップ(パスワードではない)をメッセージに記入する。
4. モリタポの進呈を確認したら、◆QZaw55cn4c は回答を掲示する。(http://codepad.org/, http://ideone.com を使用します。)

【料金】
・一問あたり 500円(5000モリタポ・手数料込み)です。
・一つのレスに記述できる内容を一問とします。アップローダーを使用してもかまいません。
・◆QZaw55cn4c が受諾レスを行い、受諾レスに回答期日を示したにも関わらず、回答期日に間に合わなかった場合には、モリタポを返還します。
それ以外の場合にはモリタポの返還はいたしません。

【修正】
・◆QZaw55cn4c が一度示した回答に対しては、明白な錯誤があった場合を除いては、◆QZaw55cn4c は修正は基本的に行いません。

ただし、最大限ご希望に応じたいと考えていますので、修正希望があれば、トリップを使用して投稿してください。
修正希望回数は、最大3回を目安としてください。3回を超えて修正を希望する場合は、新規に質問を投稿しなおしてください。
いずれも場合も、修正に応じることを保障するものではありません。
217あぼーん:あぼーん
あぼーん
218あぼーん:あぼーん
あぼーん
219あぼーん:あぼーん
あぼーん
220あぼーん:あぼーん
あぼーん
221あぼーん:あぼーん
あぼーん
222デフォルトの名無しさん:2011/02/18(金) 03:24:30
>>208
ありがとう
でも、舐め達磨さん本人も見てるから誉めるのは止めて欲しい
やきもち焼いてこんな流れになっちゃうから・・・><
223デフォルトの名無しさん:2011/02/18(金) 03:26:45
反応鈍いな
224デフォルトの名無しさん:2011/02/18(金) 03:36:11
舐め達磨って流行ってるの?
225あぼーん:あぼーん
あぼーん
226あぼーん:あぼーん
あぼーん
227デフォルトの名無しさん:2011/02/18(金) 03:42:11
おまいら for(;;) やめてこんな For 関数使おう!コードと説明は:
http://jp.alpha-lab.info/topic-4-0.html
*ただ、C++0xのlambda式使わないとそれほど便利じゃなくなる
228あぼーん:あぼーん
あぼーん
229あぼーん:あぼーん
あぼーん
230あぼーん:あぼーん
あぼーん
231あぼーん:あぼーん
あぼーん
232デフォルトの名無しさん:2011/02/18(金) 03:49:18
テスト
233デフォルトの名無しさん:2011/02/18(金) 03:51:35
>>224
キチガイって流行ってるの?
234あぼーん:あぼーん
あぼーん
235あぼーん:あぼーん
あぼーん
236あぼーん:あぼーん
あぼーん
237あぼーん:あぼーん
あぼーん
238デフォルトの名無しさん:2011/02/18(金) 04:07:49
 
239デフォルトの名無しさん:2011/02/18(金) 04:09:36
舐め達磨を流行らせよう!
ぺろぺろぺろぺろ
240デフォルトの名無しさん:2011/02/18(金) 04:33:37
舐め達磨の人こそコテつけて欲しいな
レス内容が全部ぺろぺろに置き換わっても支障ないだろw
241デフォルトの名無しさん:2011/02/18(金) 04:48:53
一人で何言ってんの
242デフォルトの名無しさん:2011/02/18(金) 05:17:38
>>241
コテつけてよ
243Perl忍者 ◆M5ZWRnXOj6 :2011/02/18(金) 09:56:48
低レベルすぎて、わろwwwww
244デフォルトの名無しさん:2011/02/18(金) 18:08:03
Perl忍者
245デフォルトの名無しさん:2011/02/18(金) 19:20:18
{
char miozi[],namae[];

printf("苗字を入力してください。\n");
scanf("%s",miozi);
printf("名前を入力してください\n");
scanf("%s",namae);




return 0;
}
これで要素数を指定しなければ動かない理由はなんですか?
246デフォルトの名無しさん:2011/02/18(金) 19:22:54
どれだけの大きさを用意すればいいかわからないから
247デフォルトの名無しさん:2011/02/18(金) 19:36:05
>>27
int a[100][100], b[99][99], i, j;

for(i = 0; i < 99; i++) for(j = 0; j < 99; j++) b[i][j] = a[i >= 4 ? i + 1 : i][j >= 4 ? j + 1 : j];
248デフォルトの名無しさん:2011/02/18(金) 19:49:56
>>246
ありがとうございます。
では要素数を指定しなくていい時はどういうときなんでしょうか?
指定しなければ動かない場合と指定しなくても動く場合の違いがわかりません。
249デフォルトの名無しさん:2011/02/18(金) 19:56:29
初期化するとき
250デフォルトの名無しさん:2011/02/18(金) 20:27:26
>>245
「動かない」じゃなくて「動かせない」じゃないかい?コンパイルエラーで…
251デフォルトの名無しさん:2011/02/18(金) 20:45:10
>>249
すっきりしました。ありがとうございます。
252デフォルトの名無しさん:2011/02/18(金) 21:37:24
お前らでオナニーしてもいいですkウッ…

すっきりしました。ありがとうございます。
253デフォルトの名無しさん:2011/02/18(金) 22:23:02
はい。
254デフォルトの名無しさん:2011/02/18(金) 22:40:56
Perl忍者
255デフォルトの名無しさん:2011/02/18(金) 23:25:48
今日C言語3級受けた
過去問80点前後は取れてたけど今回はちょっと難しかった…

char型に整数って入れられたました?
256デフォルトの名無しさん:2011/02/18(金) 23:26:55
いれられたます
257デフォルトの名無しさん:2011/02/18(金) 23:29:12
>>255は釣り
258デフォルトの名無しさん:2011/02/18(金) 23:35:00
>>256
ありがとございます。文字だけだと思って間違えました…
259デフォルトの名無しさん:2011/02/18(金) 23:41:55
fseekってHDDにアクセスするんですか?
それともメモリ上の変数にアクセスするだけですか?
fseekをガンガン使おうか控えめにしようか迷ってます。
260デフォルトの名無しさん:2011/02/18(金) 23:46:46
実装がどうなっているかなんて、C言語は関知しません
261デフォルトの名無しさん:2011/02/18(金) 23:47:08
いいえ。ファイルにガンガンアクセスするんですよ
でも、自分ファイルって何か知らんとです、orz
262デフォルトの名無しさん:2011/02/18(金) 23:47:44
>>259
書き込み後のfseek()はバッファのフラッシュをするし、読み込み専用でもディスクアクセスはあるかも知れない
263デフォルトの名無しさん:2011/02/18(金) 23:57:30
C言語の範疇ではないな
264デフォルトの名無しさん:2011/02/19(土) 00:21:49
>>262
ありがとうございます。
HDDにアクセスする可能性があるのか。
265デフォルトの名無しさん:2011/02/19(土) 00:51:44
可能性としか言えない
どういう場合にアクセスが起こるかまで知ろうとすると、OSの方に依存する
266デフォルトの名無しさん:2011/02/19(土) 02:04:00
>>265
OSが無い環境は無視されるのですね
わかります
267デフォルトの名無しさん:2011/02/19(土) 02:17:37
そうだね
268デフォルトの名無しさん:2011/02/19(土) 02:18:18
Cプログラムを自分がする環境で、OSがなくてHDDを使う環境ってどんなの?
269デフォルトの名無しさん:2011/02/19(土) 02:19:57
>>268
クドクドと長い話が始まるからほっとけよ
270デフォルトの名無しさん:2011/02/19(土) 02:31:53
ほんとクドいな
271デフォルトの名無しさん:2011/02/19(土) 02:33:03
またクドクドと始まるぞ
272デフォルトの名無しさん:2011/02/19(土) 02:34:19
クロス開発のことか?
273デフォルトの名無しさん:2011/02/19(土) 02:34:56
>>268-271

                 / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
                 | 
     , ,-;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:,.  ヽ─y──────────────   ,-v-、
    /;:;:;:;:;:;:ミミ;:;:;:;:;:;:;:;:;:;`、                          / _ノ_ノ:^)
    /;:;:;:;:彡―ー-、_;:;:;:;:;:;:;:;|                           / _ノ_ノ_ノ /)
    |;:;:;:ノ、     `、;;:;:;:;:;:i                        / ノ ノノ//
    |;:/_ヽ ,,,,,,,,,,  |;:;:;:;:;:;!                      ____/  ______ ノ
    | ' ゚ ''/ ┌。-、  |;:;:;:;:/                     _.. r("  `ー" 、 ノ
    |` ノ(  ヽ  ソ  |ノ|/               _. -‐ '"´  l l-、    ゙ ノ
_,-ー| /_` ”'  \  ノ   __       . -‐ ' "´        l ヽ`ー''"ー'"
 | :  | )ヾ三ニヽ   /ヽ ' "´/`゙ ーァ' "´  ‐'"´         ヽ、`ー /ノ
 ヽ  `、___,.-ー' |   /   /                __.. -'-'"
  |    | \   / |   l   /            . -‐ '"´
  \   |___>< / ヽ



274デフォルトの名無しさん:2011/02/19(土) 02:36:32
まぁ実際あるだろうが、このスレの範囲かどうかは知らん
275デフォルトの名無しさん:2011/02/19(土) 02:53:07
九℃九度
>>268
組み込みならあるんじゃないか
276デフォルトの名無しさん:2011/02/19(土) 03:03:14
組み込み
277デフォルトの名無しさん:2011/02/19(土) 03:09:06
独学だと全然勉強が捗らない・・・
278デフォルトの名無しさん:2011/02/19(土) 03:15:22
実行例やら例題やらをひたすらコンパイルするんだ
279デフォルトの名無しさん:2011/02/19(土) 03:24:29
はやく何かツール作れるようになりたい。
プロンプトに文字を表示させるの飽きた
280デフォルトの名無しさん:2011/02/19(土) 03:27:14
猫winでも読めばいいじゃん
281デフォルトの名無しさん:2011/02/19(土) 03:45:32
うん・・・猫C全部読んでからやろうと思う。
あ、あと前猫win第2版のソースコピペしてビルドしたらエラー出たんだけどなんで?
プログラムの書き方変わったとか?

第3版出てたのに間違えて第2版買っちゃったんだよね
282デフォルトの名無しさん:2011/02/19(土) 03:49:22
動作確認をとった環境がかかれてない本なの?

あとはエスパースレにどうぞ。
283デフォルトの名無しさん:2011/02/19(土) 04:04:32
レビュー見てたらVC++ではコード修正しないとビルド出来ないって書いてあった。
284デフォルトの名無しさん:2011/02/19(土) 06:24:20
猫ってVC++向けな気がするけどなぁ。
285デフォルトの名無しさん:2011/02/19(土) 09:45:31
>>279
コマンドラインツールを作る気が今後もないのなら、違う言語にステップアップするのも手だ。
今時ピュアCで作ってるGUIツールなんて珍しいからな。
286デフォルトの名無しさん:2011/02/19(土) 09:54:48
>>285
一応Pythonも勉強中してる
287Perl忍者 ◆M5ZWRnXOj6 :2011/02/19(土) 12:37:28
低レベル過ぎる

だいたいC詳しいやつなんて こんなスレ使わないから

低脳があつまるんだろうねここ
288デフォルトの名無しさん:2011/02/19(土) 13:09:21
君を筆頭にね
289デフォルトの名無しさん:2011/02/19(土) 16:58:03
超初心者です。
2〜1000までの素数を全て表示するという練習問題で
以下のように記述したのですが、上手くいきません。
どこが間違ってるんでしょうか?

#include<stdio.h>
int main(void)
{
int i,j;
for(i=2; i<=1000; i++)
{
 for(j=1; j<=i/2; j++)
  {
    if((i%j)!=0)printf("%d\n",i);
  }
}
return 0;
}
290デフォルトの名無しさん:2011/02/19(土) 17:00:08
全ての整数は1で割り切れる。
291デフォルトの名無しさん:2011/02/19(土) 17:04:40
#include<stdio.h>
int main(void)
{
int i,j;
for(i=2; i<=1000; i++)
{
 for(j=1; j<=i/2; j++)
  {
    if((i%j)==0) break;
  }
 if(j > i/2)printf("%d\n",i);
}
return 0;
}
292デフォルトの名無しさん:2011/02/19(土) 17:16:30
>>290
>>291
ありがとうございます。
やっと理解できました。
293デフォルトの名無しさん:2011/02/19(土) 17:47:13
また随分中途半端な削除が入ったなぁ。
>64なんかも重複だろうに。
294デフォルトの名無しさん:2011/02/19(土) 19:17:59
文句があるならお前が動けって話。
295デフォルトの名無しさん:2011/02/19(土) 22:46:16.15
ソースが長くなりそうなので、関数毎にモジュール化したい(.cファイル)のですが
メインのソースファイルに他の関数とかを書いているcソースファイルを取り込めません(というか取り込み方間違ってる…?)

#include (分割したソースファイル名)

ではコンパイルエラーになります…。
一体どうやってやるのでしょうか?
296デフォルトの名無しさん:2011/02/19(土) 22:48:39.96
すいません、一例。

■main.c
■sub1.c
■sub2.c

main.cがプログラム本体です。sub1.cとsub2.cは関数だけ集めたファイル。

(main.c)

#include sub1.c

これでエラー出力。
297デフォルトの名無しさん:2011/02/19(土) 22:50:40.42
■main.c
■sub1.c
■sub2.c
■sub1.h
■sub2.h

*.cに
#include "sub1.h"
#include "sub2.h"
を書いて

gcc sub1.c sub2.c main.c
でコンパイル
298デフォルトの名無しさん:2011/02/19(土) 22:52:26.77
#include sub1.c
初心者に、こんなやり方を教えるなんて
299デフォルトの名無しさん:2011/02/19(土) 22:57:57.31
>>297
出来ました!どうもありがとうございます!!
ヘッダーファイルってそういう意味で使うんですね。なるほど

>>298
参考書のみの独学プログラマでして…。
申し訳ない。
300デフォルトの名無しさん:2011/02/19(土) 23:13:51.18
ヘッダファイルにプロトタイプ宣言
.cに関数の定義を書くのが普通だな
301デフォルトの名無しさん:2011/02/19(土) 23:29:36.11
>>296-300
丸く収まっているところを悪いけど、なんか最初の話とズレてないかい?
行儀の良し悪しはともかくとしても、#include sub1.c を #include "sub1.c"
とすりゃいいんじゃネーノ?
302デフォルトの名無しさん:2011/02/19(土) 23:32:01.50
良くねーだろ
303デフォルトの名無しさん:2011/02/19(土) 23:34:18.11
>>302
なんで?
304デフォルトの名無しさん:2011/02/19(土) 23:37:02.64
「取り込み方間違ってる…?」って聞いてるからな。

とりあえずコンパイルを通す方法よりも
一般的なファイル分割の方法を説明するのが筋だろう。

それで満足しなければ、#include "sub1.c" の話をすればいい。
305デフォルトの名無しさん:2011/02/19(土) 23:49:10.53
>>304
満足するしないの話か?
C言語の #include ディレクティブの記法ミスと気付かせるのも重要だと思うけど。
まっ、意見の相違ってやつだなw
306デフォルトの名無しさん:2011/02/19(土) 23:53:07.51
「気付かせる」とかエラソーな態度が気に入らない。
307デフォルトの名無しさん:2011/02/19(土) 23:54:20.63
まぁどっちでも良いじゃないか。
一応一般的な方法も教えるべきだったと俺は思うし。
308デフォルトの名無しさん:2011/02/20(日) 01:14:21.46
>>305
俺も記法ミスのほうを優先すべきだと思う。

一般的な方法を教えるべきだと思ってる人は多重インクルードに対する一般的な解決法も書くべきだろ。
309デフォルトの名無しさん:2011/02/20(日) 01:18:58.62
だから、お前が良いと思う方法を【お前が】書きこめばいい。
310デフォルトの名無しさん:2011/02/20(日) 02:37:47.24
strcpy関数を使うときは#include <sting.h>を書かないとだめですよね?
311デフォルトの名無しさん:2011/02/20(日) 02:38:45.02
>>310
関数宣言するだけでもいいよ
312デフォルトの名無しさん:2011/02/20(日) 02:40:57.30
#include <string.h>
313デフォルトの名無しさん:2011/02/20(日) 02:46:33.78
>>311
でも書いたほうがいいのでしょうか?
#include <string.h>を書いたときと書かなかったときに何か違いはあるのでしょうか?
314デフォルトの名無しさん:2011/02/20(日) 02:54:05.24
引数も基本型だけだから、関数宣言だけで問題ない。

タイプ量を考えたら#includeのほうが手っ取り早いけどな。
315デフォルトの名無しさん:2011/02/20(日) 03:00:10.25
>>313
関数宣言をしていれば、インクルードしなくてもいい。
だからと言ってstrcpy()以外にもstrcat()やstrchr()を使う度に関数宣言を増やすのも阿呆なので、
普通はインクルードしておく。
316デフォルトの名無しさん:2011/02/20(日) 03:00:52.80
関数宣言だけってどういうこと〜?
317デフォルトの名無しさん:2011/02/20(日) 03:02:26.33
こういうこと?
#include<stdio.h>

void strcpy(char *, char *)
318デフォルトの名無しさん:2011/02/20(日) 03:16:55.71
>>315
関数宣言とは・・・?
プロトタイプ宣言のこと?
319デフォルトの名無しさん:2011/02/20(日) 06:22:29.17
>>315
関数宣言とは・・・?
関白宣言のこと?

おまえを嫁にもらう前に、言っておきたいことがある。
320デフォルトの名無しさん:2011/02/20(日) 09:05:08.66
狭義の関数宣言:
char*strcpy();
プロトタイプ宣言:
char*strcpy(char*,char*);
321デフォルトの名無しさん:2011/02/20(日) 09:37:58.67
>>310
>strcpy関数を使うときは#include <sting.h>を書かないとだめですよね?

関数宣言とかプロトタイプ宣言でもいいと言ってるやつもいるけど、
#include のほうがいいと思う。

・関数宣言だとタイプミスや勘違いするかもしれない。

たとえば、>>320 は char*strcpy(char*,char*); なんて書いてる。
昔はこれであってたんだが、今時の処理系では大抵
char*strcpy(char*,const char*); となってる。

・宣言が処理系によって異なるかもしれない。

最近の Visual Studio だと strcpy() 使ったら、「この関数は安全じゃ
ねーから代わりに strcpy_s() 使えと言ってくる。」
こういう機能は #include <string.h> で指定されているので、関数宣言
とかだと指摘されない。
(まあ、こういう機能をありがたがるかどうかは人によるだろうけど。)

とにかく、システムから供給されるライブラリ使うなら、宣言もシステム
提供のものを使うのがいいと思うぞ。

その場限りの使い捨てプログラムなら、どっちでもいいけど。
322320:2011/02/20(日) 10:04:21.90
>たとえば、>>320 は char*strcpy(char*,char*); なんて書いてる。
おっと、失敗したぜ。
まぁ、インクルードしておけってことで。
323デフォルトの名無しさん:2011/02/20(日) 10:17:00.74
インクルードと宣言のみとで処理時間に差はあるの?
324デフォルトの名無しさん:2011/02/20(日) 10:17:41.07
>>312
ありがとうございます。
325デフォルトの名無しさん:2011/02/20(日) 10:35:36.23
>>323
コンパイル時間に差はあるけど、実行時間に差が出るかどうかはコンパイラと標準ライブラリの構成次第。
326デフォルトの名無しさん:2011/02/20(日) 11:31:11.55
>>323
msvc10とcygwin-gccでさっくり検証してみた。
吐くバイナリは
PEヘッダのタイムスタンプとチェックサムが変わるぐらいで
他に差は無い。
コンパイル速度については
何もインクルードしない int main(){return 0;} と
C標準のヘッダを全てインクルードした int main(){return 0;} でさえ
0.1秒も変わらないので認識不能レベル。
327デフォルトの名無しさん:2011/02/20(日) 12:01:46.76
>>326
コンパイラやオプションによっては生成されるバイナリに差が出る場合もあるよ。
>>143がその一例で、 GCC で -D_FORTIFY_SOURC=1 とかでやった結果かな。

「まぁ、インクルードしておけってことで。」に一票w
328295:2011/02/20(日) 17:00:35.15
昨日の夜世話になった者です。

関数の事とか色々調べて解決した結果、

モジュール化したファイル(関数オンリーのファイル)をそのまま.hにしてそれをインクルードしたら大丈夫のようです。
どうもお騒がせいたしましたm(_ _)m

私はVC++2010利用者なのでそもそもヘッダーファイルの存在意義すら知りませんでした。。。
329デフォルトの名無しさん:2011/02/20(日) 17:10:45.11
>>304
>>328を見て一言お願いしますw
330デフォルトの名無しさん:2011/02/20(日) 23:34:33.16
1
331デフォルトの名無しさん:2011/02/21(月) 00:02:04.92
猫Cの構造体の章がまったく理解できん
332デフォルトの名無しさん:2011/02/21(月) 00:04:55.48
自己参照構造体とか?
333デフォルトの名無しさん:2011/02/21(月) 00:07:02.47
うん・・・ややこしい
それとtypedefとか
334デフォルトの名無しさん:2011/02/21(月) 00:19:58.91
頭わるいんだね
プログラマにむいてないよ
335デフォルトの名無しさん:2011/02/21(月) 00:24:12.47
まずは、構造体って物が、何なのか理解できてる?
336デフォルトの名無しさん:2011/02/21(月) 00:25:52.94
A<構造体を勉強してるがわからない
B<まず構造体ってものが何なのか理解できてる?
337デフォルトの名無しさん:2011/02/21(月) 00:29:25.76
猫でもは不親切だから分からなくても仕方がないよ。
実際俺も持ってるし最初はポインタのとこで既に分からんかったし。
338デフォルトの名無しさん:2011/02/21(月) 00:33:20.83
明解C言語と併用すると理解しやすいよ
同じことが別の表現で書いてあるわけだから
339デフォルトの名無しさん:2011/02/21(月) 00:51:49.48
本ばっかり買うのもあれだからネットで他の解説も見ながらやるといつか分かるようになる
340デフォルトの名無しさん:2011/02/21(月) 00:56:25.57
vectorで落とせるC言語入門講座で勉強したな…
341デフォルトの名無しさん:2011/02/21(月) 01:15:06.63
>>334
自分でもそう思います
>>335 >>336
構造体自体はわかってるつもりです
>>337
僕もポインタは半分くらいしかわかりませんでした。
>>338 >>339
ありがとう。
342デフォルトの名無しさん:2011/02/21(月) 03:34:57.02
>>341
「つもり」は積もらない
343デフォルトの名無しさん:2011/02/21(月) 10:21:35.57
>>333
type define
そのままやん
344デフォルトの名無しさん:2011/02/21(月) 10:43:06.21
いま「error LNK2019」が出ててコンパイルが出来ず困ってます。
試した事は、
#pragma comment(lib, "○○○.lib")
の記述の追加と、
追加の依存にちゃんと上記のライブラリが指定されているかの確認です。
もちろんググったりもしてるのですがこれ!という答えが見つからず・・・。
何か心当たり無いでしょうか?
345デフォルトの名無しさん:2011/02/21(月) 10:47:59.92
>>343
構造体にtypedefを使う意味がわからなかったんです。

typedefを書くのはstructを書かなくていいようにするためでおkですか?
346デフォルトの名無しさん:2011/02/21(月) 10:49:49.40
>>345
そう思って構わない
347デフォルトの名無しさん:2011/02/21(月) 10:51:00.87
>>344
せめて環境書きませんか?
348デフォルトの名無しさん:2011/02/21(月) 11:02:58.25
VisualC++ 2008 EEなんですが
例えばこんな関数 int Hoge(int *p) の引数に
&i[n]みたいに配列のインデックス指定してそれに&付けて渡した場合と
piみたいに既に決まってる場合とならやっぱり後者の方が早いんでしょうか?
349デフォルトの名無しさん:2011/02/21(月) 11:13:07.45
>>347
すいません、忘れていました。
Visual Studio 2008 Professional
OSはwindows server 2008 r2
です。
350デフォルトの名無しさん:2011/02/21(月) 11:23:08.21
351デフォルトの名無しさん:2011/02/21(月) 11:24:26.73
>>348
自分で試すのが一番ですよ
352デフォルトの名無しさん:2011/02/21(月) 13:56:21.40
相談です。これからC言語を数学科四年のゼミで本格的に勉強するんですが何を今やっておけばいいですかね?必修科目でうわっつらだけ勉強した程度なんです。そのときは東田、森田著者のプログラミング概論という本使ってました。
353デフォルトの名無しさん:2011/02/21(月) 14:16:42.31
質問が漠然的過ぎて何とも言えん
354佐々木優子lvl2(悪) ◆M5ZWRnXOj6 :2011/02/21(月) 14:49:22.81
くだらねえ

まじきえろ 数学wwwwwwwwwwwwwwwwwwwwww
wwwwwwwwww
wwwwwwwwwwwwwwwwww
C言語wwwwwwwwwwwwwwwwww
355 ◆QZaw55cn4c :2011/02/21(月) 20:13:37.91
>>352
本屋さんで自分に合いそうな教科書を立ち読みしてみるのはどうでしょう。
あと、一冊で済まそう、とは考えないほうがいいかと。
356デフォルトの名無しさん:2011/02/21(月) 21:23:21.73
最低2冊は必要になるね。買った本を読み比べることは大切。
ちなみに俺のおすすめは「やさしいC」とあと何か1冊。

本に書かれたプログラムを自分でもコーディングしたり、
本についている練習問題などちゃんとやると身についてくる。
本当にこれ重要。
357デフォルトの名無しさん:2011/02/21(月) 22:12:18.24
358 ◆QZaw55cn4c :2011/02/21(月) 22:40:26.54
>>352
私が最初に読んだ本です。
http://www.amazon.co.jp/dp/4875930569/
いいかどうかは今でもよくわかりませんが、内容が古いのは確かです。
359デフォルトの名無しさん:2011/02/21(月) 22:43:40.85
どんだけオッサンだよ
360デフォルトの名無しさん:2011/02/21(月) 23:03:01.15
内容なんて全く覚えてないけど、Cプログラミング診断室とか読んだな…
361デフォルトの名無しさん:2011/02/21(月) 23:25:12.05
◆QZaw55cn4cジジイwwww
362デフォルトの名無しさん:2011/02/21(月) 23:27:39.59
>>358
これを読んだのが15才だとしても今40才か・・・
もう人生終わってるジャン
363デフォルトの名無しさん:2011/02/21(月) 23:56:37.04
出版直後に買ったという保証がない
364デフォルトの名無しさん:2011/02/22(火) 00:06:06.42
でもさあ使ってるのがPenIIIの866MHzでしょ?
そんなの使ってるのって40才前後のジジイだぜ
365デフォルトの名無しさん:2011/02/22(火) 00:21:06.39
85年頃のCってリッチな稼働環境を要求する高級言語だったんでしょ?
366デフォルトの名無しさん:2011/02/22(火) 00:23:56.10
◆QZaw55cn4cの発言の一つ一つがいちいち加齢臭臭いしなあ
367 ◆QZaw55cn4c :2011/02/22(火) 06:42:15.13
おっと K6-3 550MHz も元気に動いていますねえ。
368デフォルトの名無しさん:2011/02/22(火) 07:16:20.98
PC98にゲタを載せて動かしてるんですね
わかります
369デフォルトの名無しさん:2011/02/22(火) 07:46:22.86
>>348
速いかどうかは分からないが、遅くはならない。
370佐々木優子 ◆M5ZWRnXOj6 :2011/02/22(火) 09:56:58.87
老年気取りしてんじゃねえよごみ
わざとらしい
371デフォルトの名無しさん:2011/02/22(火) 10:45:57.11
charって何て呼んでますか?
俺はチャー
372デフォルトの名無しさん:2011/02/22(火) 10:50:51.06
【char】変な読み方するな その3【ちゃー】
http://hibari.2ch.net/test/read.cgi/prog/1242268027/
373デフォルトの名無しさん:2011/02/22(火) 11:13:33.39
ガスライティング
374 ◆QZaw55cn4c :2011/02/22(火) 12:24:33.62
あ、わすれてました。Celeron 300 x 2 を 100 x 4.5 で動かしています、変なマザー使って。
375デフォルトの名無しさん:2011/02/22(火) 13:20:51.02
◆QZaw55cn4cは現代の化石か
もう逝っていいよ
376デフォルトの名無しさん:2011/02/22(火) 15:36:14.14
~#include〜...

int flip(void);
main()
{
int counter, omote = 0, ura = 0;
srand(time(NULL));
for(counter = 1; counter <= 100; counter++) {
flip();
if(flip() == 0) {
printf("表 %d\n", flip());
omote++;
}
if(flip() == 1) {
printf("裏 %d\n", flip());
ura++;
}
}
printf("\n表: %d 裏: %d", omote, ura);
return 0;
}
int flip()
{
int i;
i = (rand() % 2);
return i;
}

コインを100回投げて表が何回、裏が何回でたかというプログラムをつくりた
いのですが、表と裏の合計が100回を超える結果になります
flip()のまま使うのがよくないのでしょうか?できれば理由を教えて
ほしいです。
377デフォルトの名無しさん:2011/02/22(火) 15:40:05.46
>>376
flip() を呼ぶ 「たびに」 0か1のどちらかがランダムに返るので、

> if(flip() == 0) {

ここで 0 が返ったあと

> if(flip() == 1) {

ここで 1 が返ると、両方カウントされます
378デフォルトの名無しさん:2011/02/22(火) 15:40:30.74
>>376
合計が100回より少なくなる場合もあるよね
379デフォルトの名無しさん:2011/02/22(火) 15:42:50.63
int tmp = flip();
if(tmp == 0) {
printf("表 %d\n", flip());
omote++;
}
if(tmp == 1) {
380デフォルトの名無しさん:2011/02/22(火) 15:44:20.45
あ、まあいいや
381デフォルトの名無しさん:2011/02/22(火) 15:57:40.03
>>377
>>378
>>379
ありがとうございました。変数に関数の返り値をいれて
条件文をつくったら、問題なく動きました。
382デフォルトの名無しさん:2011/02/22(火) 15:59:12.06
>>376
int flip(void);
int main(void) {
int counter, omote = 0, ura = 0;
srand(time(NULL));
for(counter = 0; counter < 100; counter++) {
if(flip() == 0) {
printf("表 %d\n", flip());
omote++;
} else {
printf("裏 %d\n", flip());
ura++;
}
}
printf("\n表: %d 裏: %d", omote, ura);
return 0;
}

int flip(void) {
return rand() % 2;
}
383デフォルトの名無しさん:2011/02/22(火) 16:03:55.57
ついでに教えておいてあげよう。
rand()の下位ビットは乱数性が悪いのでRAND_MAX / 2との
大小で偶奇を決めるのが普通。
384デフォルトの名無しさん:2011/02/22(火) 16:49:32.17
そんな実装依存の使い方が「普通」であってたまるか
高品質の乱数が欲しければ探すか作れとしか言いようがないだけだ
385デフォルトの名無しさん:2011/02/22(火) 17:17:27.97
このくらいの常識知らないで出てくるんじゃねーよ。カス。

http://ja.wikipedia.org/wiki/%E7%B7%9A%E5%BD%A2%E5%90%88%E5%90%8C%E6%B3%95
下位ビットのランダム性が低い。特にMが偶数の場合(コンピュータでの実装が
楽であるために、Mに2の冪を採用した場合はこれに当たる)、最下位ビットは、
同じものが出続けるか、0と1が交互にでるかのどちらかである。すなわち、偶
数ばかりが出る、奇数ばかりが出る、偶数と奇数が交互に出る、のどれかにな
るということである(最大周期ならば偶数と奇数が交互に出る)。
386デフォルトの名無しさん:2011/02/22(火) 17:21:50.20
>>385
自分で確認してみな
387デフォルトの名無しさん:2011/02/22(火) 18:03:16.71
いまどきそんな乱数実装なんて見たことねえよ。
388デフォルトの名無しさん:2011/02/22(火) 18:19:19.30
そのまま返してあげよう。w

>>386-387
> そんな実装依存の使い方が「普通」であってたまるか
389デフォルトの名無しさん:2011/02/22(火) 18:47:13.03
386 のどこが実装依存なんだよ
ふじこりやがってw
390デフォルトの名無しさん:2011/02/22(火) 18:52:36.38
rand()が使い物になるかどうか自体が実装依存なんだから目くそ鼻くそ
本気で疑似乱数を作りたければ自作すれば良い
391デフォルトの名無しさん:2011/02/22(火) 19:02:52.09
必死だなw
376 の要求を rand で達成できるかどうかを
あらゆる要求を rand で達成できるかどうかに
すり替えただけの詭弁に騙されるかっての

本気で疑似乱数が作りたければ
どうぞご勝手に
392 ◆QZaw55cn4c :2011/02/22(火) 19:04:48.51
393384:2011/02/22(火) 19:09:44.68
アンカーミスったか?
394デフォルトの名無しさん:2011/02/22(火) 19:17:46.50
>>391
>376 の要求を rand で達成できるかどうかを
本当に目くそ鼻くそだな
>>376の確率が1/2にならないって話なら分かるがそれ以前の問題だ
395デフォルトの名無しさん:2011/02/22(火) 19:18:28.51
おまじない的にrand()で下位ビットを避けておくのは、
悪くないルールだと思う
それでも(品質や速度的な意味で)満足できないなら、
別のもっとまともな実装を探すか書くかしかない
396デフォルトの名無しさん:2011/02/22(火) 19:20:56.35
ふじこちゃんに目くそも鼻くそもあるか ぼけ
397デフォルトの名無しさん:2011/02/22(火) 19:22:58.50
あqwせdrftgyふじこl;
398デフォルトの名無しさん:2011/02/22(火) 19:26:12.56
>>395
おまじないってするなら、
RAND_MAX % N
分の振り直しも入れろ

まぁ、それでも信用ならんのがrand()だけどな…
399 ◆QZaw55cn4c :2011/02/22(火) 19:30:19.56
>>393
>>383 は結局 http://www.kouno.jp/home/c_faq/c13.html#16 と同値。この話題は c-faq の昔からいわれていたこと。
つまり、>>383 は rand() の普通の使い方。

>>384 はおかしいと思いますね。
400 ◆QZaw55cn4c :2011/02/22(火) 19:32:00.81
>>398
(int)((double)rand() / ((double)RAND_MAX + 1) * N)
で十分。
401394:2011/02/22(火) 19:36:07.49
>>399

>rand()の下位ビットは乱数性が悪い
悪い環境もあるって話で、悪いと決まってる訳ではない

>そんな実装依存の使い方が「普通」であってたまるか
無知なだけ

つーわけで目くそ鼻くそ
402 ◆QZaw55cn4c :2011/02/22(火) 19:40:53.66
>>401
大量に乱数を必要とする場面では http://ja.wikipedia.org/wiki/%E3%83%A1%E3%83%AB%E3%82%BB%E3%83%B3%E3%83%8C%E3%83%BB%E3%83%84%E3%82%A4%E3%82%B9%E3%82%BF ですら使ってられない、線形合同の一択場合もあると思います。
そういう場合には、 http://www.kouno.jp/home/c_faq/c13.html#16 (int)((double)rand() / ((double)RAND_MAX + 1) * N) も考慮のうちでしょう。

ともあれ >>384 はおかしい。
403デフォルトの名無しさん:2011/02/22(火) 19:41:24.53
河野氏のページを真顔で「昔から」のソースにする男の人って・・・
「何も考えずに」そうするんだろうけど、問題のある乱数から単純な分数作って何がしたいわけ? アフォ?
404394:2011/02/22(火) 19:42:41.79
相手にした俺が悪かった…orz
十分かどうかは置いておいて、それは振り直しとは全く違う
まぁ、この話題は、もう書き込んようにする
405デフォルトの名無しさん:2011/02/22(火) 19:43:29.58
どのみち線形合同法は割と残念なアルゴリズムなので……
例えばメルセンヌツイスタのような、
もっと現代的な実装が早く広まればいいんだけどね
406デフォルトの名無しさん:2011/02/22(火) 19:47:07.50
xorshiftオススメ。線形合同並に簡単に実装できる
407デフォルトの名無しさん:2011/02/22(火) 19:49:57.96
md5みたいなハッシュでも、そこそこな乱数になりそうな気がする
408 ◆QZaw55cn4c :2011/02/22(火) 19:49:58.51
>>403
問題のある乱数でも速くて大量に乱数を生成できるという特性があるなら、それを買って使う場面もあるでしょうね。
そういうときに、(int)((double)rand() / ((double)RAND_MAX + 1) * N) とするのは普通のやりかた。
処理系によってはrand() が線形合同である可能性も否定できない。
処理系依存を少なくしたいのなら、大事をとって、(int)((double)rand() / ((double)RAND_MAX + 1) * N) と書くのは好ましいと思いますが。

>>384
>そんな実装依存の使い方が「普通」であってたまるか
実装依存でもないし、普通なんです、昔から。
409デフォルトの名無しさん:2011/02/22(火) 19:55:49.16
>>408
>処理系によってはrand() が線形合同である可能性も否定できない。
普通は線形合同でしょ?下位ビット捨ててるくらいで

>処理系依存を少なくしたいのなら、大事をとって、(int)((double)rand() / ((double)RAND_MAX + 1) * N) と書くのは好ましいと思いますが。
処理系依存が嫌なら自前で実装するのが一番
数行コピペすればいいだけだし
410デフォルトの名無しさん:2011/02/22(火) 19:56:05.12
>>407
そこそこっていうか、なるはず
バイナリに偏りがあれば対衝突性を満足できない
しかしめちゃくちゃ遅いw
411デフォルトの名無しさん:2011/02/22(火) 19:56:19.46
>>408
> 速くて
具体的に何 bps を保証するんですか

> 大量に
循環周期と確率分布の保証は?

わけわかんねえ「なら」につきあってられるか ぼけ
そう言ったのが >>384 だよ
412 ◆QZaw55cn4c :2011/02/22(火) 20:06:57.69
>>411
しかし、http://en.wikipedia.org/wiki/Linear_congruential_generator をみると、結構な数の処理系で rand() の実装が線形合同だったりするわけで。
413デフォルトの名無しさん:2011/02/22(火) 20:09:01.50
今日は猫の日だが
ふじこの日でもあるのか?
414デフォルトの名無しさん:2011/02/22(火) 20:09:54.67
>>410
バイナリを使うのは最初(srand)だけで、2回目以降は、
前回のハッシュの結果をバイナリとして使えば、偏らないと思う。
まぁ、それでも重いか…
415414:2011/02/22(火) 20:12:14.65
ぎゃくに、これで偏るのであれば、md5が使い物にならないとの証明になるのか?
416デフォルトの名無しさん:2011/02/22(火) 21:02:13.28
>>403
アホはお前。ソースはcomp.lang.cのc-faq
http://c-faq.com/lib/randrange.html

c-faqも知らねーガキは煙出るまでオナニーしてろ。
417デフォルトの名無しさん:2011/02/22(火) 21:08:42.15
windows7での既存のパスにc\Borland\Bcc55\binのパスを追加する方法を教えてくださいませm(._.)m
418 ◆QZaw55cn4c :2011/02/22(火) 21:09:46.89
>>416
comp.lang.c ってなんですか?fj?
2chよりも荒れまくっているあそこですか?
っで、くさかべさんは今でもご健在ですか?
419デフォルトの名無しさん:2011/02/22(火) 21:30:31.19
>>417
bccが動くかは知らんが、パスを追加するなら
コントロールパネル→システム→システムの詳細設定→環境変数→システム環境変数
420デフォルトの名無しさん:2011/02/22(火) 21:32:55.80
fj.comp.lang.c
fj.lang.c
faqが出来たころはどっち?
421デフォルトの名無しさん:2011/02/22(火) 21:34:28.69
>>416
おまえ本当に何も考えてないのな
# アフォってフレーズは読んでるんだよな、こいつw
422 ◆QZaw55cn4c :2011/02/22(火) 21:45:43.66
>>420
http://katsu.watanabe.name/cgi-bin/ancientfj/namazu.cgi
で調べてみると、fj.lang.c の時代のようですね。
423デフォルトの名無しさん:2011/02/22(火) 21:52:45.28
>>418
脳軟化おこしかけてる骨董品のくせにcomp.lang.cを知らねーのか?

>>412
c-faqはお前のようなバカに読ませるために蓄積されたんだよ。
足りないおつむで考えるのは止めて、c-faqをすべて暗記した方が良いぞ。
424デフォルトの名無しさん:2011/02/22(火) 22:01:09.69
> c-faqをすべて暗記した方が良いぞ。

自分ができないことを人に言う手合いか?
暗記したところでどうだっていう以前の問題だが
425 ◆QZaw55cn4c :2011/02/22(火) 22:07:09.25
>>423
>c-faqはお前のようなバカに読ませるために蓄積されたんだよ。
>>399
>>402
426デフォルトの名無しさん:2011/02/22(火) 22:43:39.47
>>421
c-faqはお前のようなバカに読ませるために蓄積されたんだよ。
足りないおつむで考えるのは止めて、c-faqをすべて暗記した方が良いぞ。

>>424
お前は思考するおつむを持っていないのだから、お経を諳んじるように
全て暗記するところから始めろ。

>>425
すまん、後半はアンカーを間違えた。
427デフォルトの名無しさん:2011/02/22(火) 23:13:28.42
無料でペイントみたいなウィンドウズアプリ作るならどんな環境を利用したらいいですか(´・ω・`)
428デフォルトの名無しさん:2011/02/22(火) 23:14:50.63
Qtとか
429デフォルトの名無しさん:2011/02/22(火) 23:16:10.06
>>428
サンクス、Qtスレ行ってくる(`・ω・´)
430デフォルトの名無しさん:2011/02/22(火) 23:17:21.24
>>429
今は行かない方が・・・
431デフォルトの名無しさん:2011/02/23(水) 00:15:02.57
こんなソフト作りたいって思って今あるスキルじゃ作れない時どうすればいい?
勉強するにしても無知すぎて何を勉強すれば実現できるかわからない。どうぐぐっていいかもわからない。
432デフォルトの名無しさん:2011/02/23(水) 00:16:01.89
目標を落とせ
433デフォルトの名無しさん:2011/02/23(水) 00:16:38.03
外注にやらせる
434デフォルトの名無しさん:2011/02/23(水) 00:16:59.56
Cじゃなくて、C#とかで始めてみればいいよ。

Visual C# Express なら簡単にGUIアプリが作れる。解説もたくさんあるし。
435デフォルトの名無しさん:2011/02/23(水) 00:21:11.92
ありがとう。やってみる。
436デフォルトの名無しさん:2011/02/23(水) 00:30:40.33
>>431
こんなソフトの一部の機能/部品をまず手始めに作ってみよう。
437デフォルトの名無しさん:2011/02/23(水) 00:32:02.15
やっぱVBよりC#のがいいな
ネットに転がってる例も多いし、VBだと外のAPI使う時に型間違うし
438デフォルトの名無しさん:2011/02/23(水) 00:32:44.25
32の自営業やってるおじちゃんだけどcのコンパイラ?ってやっぱ有料のやつのがいの?息子がプログラミングに興味持って親父も囓りたいんだけど
439デフォルトの名無しさん:2011/02/23(水) 00:33:46.18
32なら手遅れだ
440デフォルトの名無しさん:2011/02/23(水) 00:37:18.47
Visual C++ Expressでおk
441デフォルトの名無しさん:2011/02/23(水) 00:39:27.93
>>438
無料ので良いんじゃない。
どうしても GCC が使いたければ Eclipse で。
じゃなきゃ、Microsoft Visual Stadio Express で。
暫くすれば、息子に教えを乞うようになるかもw
442デフォルトの名無しさん:2011/02/23(水) 00:51:45.81
プロでもないのにわざわざ有料のを使う必要はないよな。
443デフォルトの名無しさん:2011/02/23(水) 01:07:26.95
気合い入れて学ぶなら、Linux上で、vim or emacs + gcc
恐らく挫折率が高すぎるのでオススメしない

教師無しの初学だし、pythonが良いと思うぞ
無料のドキュメント多いし。
Cでポインタとか、C++でどうでも良い知識覚えても仕方ないし。
子供が学習する分には、Squeakとかでも良さそう。
将来の仕事のこと考えて、JavaやC#を覚えても、
10年後に、どうなってるかなんて読めないし

気合い入れてアルゴリズムを学ぶなら、topcoderとか。
Racket schemeって環境でSICPでも解けば、
将来は良い大学に入って、良い会社に就職できるんでね?
444デフォルトの名無しさん:2011/02/23(水) 01:19:03.49
息子がプログラミングに興味持ったなら、
ついでに算数と英語の勉強もさせておけ
ルービックキューブをもの凄い速さで解いたりとか、
暗算が得意とか、そんな感じのセンスがいる
若いうちからでも無理そうなら、興味なんてさっさ捨てて、
子供には柔道か剣道をやらせて警察官を目指せ。
445デフォルトの名無しさん:2011/02/23(水) 01:21:23.96
Windowsでプログラミングを始めるならVC# Express一択。どんどんカッコイイアプリを作ってね!

UNIX系で始めるならPythonでも何でもいいんじゃないの。どうせ文字しか出さないんでしょ。
446デフォルトの名無しさん:2011/02/23(水) 01:23:33.58
UNIX って別に怖い物でもなんでもないぞ
447デフォルトの名無しさん:2011/02/23(水) 01:25:08.66
小学生がやるなら HSP がよさげ

開発環境にサンプルコードが大量についてくるからそれを弄るだけでも面白い
環境設定がラクチン
開発環境が軽いのでヘボスペックPCでも動く
音を鳴らしたり、絵を表示するのが楽なのでバカゲーを作るのには最適

ちょっと凝ったことをしようとすると途端に面倒になる(他の言語でやるよりも)
Windows でしか動かない
数値計算が遅い
バカにされるw
448デフォルトの名無しさん:2011/02/23(水) 01:25:22.69
誰も怖いなんて言ってないし
449デフォルトの名無しさん:2011/02/23(水) 01:30:55.43
>>445
SDL、tk、Gtk、Qt、OpenGL、GAE
色々なものが動くだろ
Windowsでポトペタとか、せっかくの若い芽を
土方に仕立て上げるようなもの
450デフォルトの名無しさん:2011/02/23(水) 01:40:44.48
ubuntuならインスコしてしまえば、
必要なライブラリなんかはパッケージマネージャーに任せれば、
Windowsよか環境を整えるの楽でしょ
451デフォルトの名無しさん:2011/02/23(水) 01:52:33.61
>>438
息子想いのおじちゃんには JavaScript がお勧めだ。
コンパイラなんかなくても、ウェブブラウザだけあれば
こんな 3D プログラムも作れちゃうぜ。

https://sites.google.com/site/hackthewebgl/learning-webglhon-yaku/the-lessons
452 ◆QZaw55cn4c :2011/02/23(水) 07:00:51.86
>>438
C の知識が古びることはない(C すなわち マシン語 すなわち ノイマン型計算機に通じるものがあります。)ですから、
息子さんの興味が自由に育つままに放っておいて構わないんじゃないですか。
いろいろいわれていますが、数あるプログラミング言語/環境のなかから、結構難しいといわれる C を敢えてやろうというのなら、それだけで先見の明があるでしょう。
つ http://cruel.org/freeware/hacker.html

コンパイラややっぱり Visual C++ Express Edition でいいんじゃないでしょうか。

無料のものは、他には、
Borland C 5.5
GNU Compiler Colection(gcc)
あまりみないけど Watcom とかが手に入りやすく扱いやすいでしょう。
453 ◆QZaw55cn4c :2011/02/23(水) 07:04:55.15
>>443
>Cでポインタとか、C++でどうでも良い知識覚えても仕方ないし。
c++ にはどうでもいいがらくたが多いと思いますが、c のポインタは本質的なものではないでしょうか?機械語と一対一に対応するものですし。
454デフォルトの名無しさん:2011/02/23(水) 08:17:05.98
Windowsで一番簡単にインストールできるのはCygwinのgccかなあ
455デフォルトの名無しさん:2011/02/23(水) 09:11:13.78
typedef enum ABC
{
ABC_A,
ABC_B,
ABC_D
} ABC;

この書き方って問題ある?
VS2008でコンパイルすると、
一番最後のところで
error C2143: 構文エラー : ';' が '識別子' の前にありません。
fatal error C1004: 予期せぬ EOF が検出されました。
のエラーが出るんですけど。
ググる限り特に問題ないような気はするんですがー。
他に問題あるけどエラー箇所はここになってる。とか?
456デフォルトの名無しさん:2011/02/23(水) 09:22:30.71
C(C++)の規格上は問題ないし、2008でも問題なくコンパイルできる。
wingdiが定義している型と衝突するが、エラーメッセージはそれではない。

お前が人に言えない恥ずかしい間違いをしている可能性120%
457デフォルトの名無しさん:2011/02/23(水) 09:27:43.72
;抜けてんじゃね?
458デフォルトの名無しさん:2011/02/23(水) 09:32:05.88
>>438
自衛してるんだから金持ってそうだね
ケチらないでVS買えよ
459デフォルトの名無しさん:2011/02/23(水) 10:11:17.30
>>457
寧ろお前の頭が抜けている。

>>455
そこだけ見たら、>456の言うように問題が無いように見える。
コンパイラがそこに辿り着く前に問題があると思う。
インクルードしているファイルがあるなら順に削ってみるか、
プリコンパイルの指定があるなら一旦解除してみるとか。
460デフォルトの名無しさん:2011/02/23(水) 10:27:19.67
>>456
>>459
多分ここには問題ないと思います。
これが記載されてるヘッダーファイルじゃない
ヘッダーファイルでもエラーが起きてたんだけど、
そこでのエラーを無くしたらとりあえずエラーは消えました。
まぁ、まだ正常終了したわけじゃないからなんともだけど。

461デフォルトの名無しさん:2011/02/23(水) 10:30:47.90
エラーの行数がそこでも、実際におかしいのは前後の行ってことはよくあるよ
462デフォルトの名無しさん:2011/02/23(水) 10:34:04.13
>>460
どんなエラーだったんだ?
463デフォルトの名無しさん:2011/02/23(水) 10:34:50.69
恥ずかしくて言えるわけないじゃないですか。
464デフォルトの名無しさん:2011/02/23(水) 10:39:27.50
そりゃそうだなw
465デフォルトの名無しさん:2011/02/23(水) 11:17:48.89
実際におかしいのが前の行という事は普通にあるけど、
後ろの行が実際におかしいというのは無い。
466Perl忍者lvl2 ◆M5ZWRnXOj6 :2011/02/23(水) 17:21:34.43
Cできないやつは頭終わってる
467デフォルトの名無しさん:2011/02/23(水) 18:02:20.97
C出来ても人生終わってる奴もいるけどな
468デフォルトの名無しさん:2011/02/23(水) 20:07:52.45
Cだけできてもしゃーないでしょ
アルゴリズムや数値計算、OSだとか理解してないと
文系コーダーと変わらん
469デフォルトの名無しさん:2011/02/23(水) 20:10:08.38
数学できなければみんな文系だよ。
470Perl忍者 ◆M5ZWRnXOj6 :2011/02/23(水) 20:22:40.83
うんそうだね

死ね
471デフォルトの名無しさん:2011/02/23(水) 20:56:59.65
童貞なだけでなぜハゲだと言われなければいかんのだ
472デフォルトの名無しさん:2011/02/24(木) 16:24:14.30
473デフォルトの名無しさん:2011/02/25(金) 23:20:30.58
暗号化処理の時にランダム初期値をファイルに書き込みます。
復号化するときには32バイトの初期値を使って復号するのですが、
平文を間違って復元すると元に戻せなくなります。
暗号文に特定パターンのヘッダを入れることも考えたのですが、
平文と暗号文を識別する何かいい方法はないでしょうか?
よろしくお願いします。
474デフォルトの名無しさん:2011/02/25(金) 23:28:02.79
>>473
なあ、スレタイ読めないの?
475デフォルトの名無しさん:2011/02/25(金) 23:39:44.39
すみません他に書き込みます。
476デフォルトの名無しさん:2011/02/26(土) 00:07:59.65
>>473
拡張子変えるのはダメなの?
477デフォルトの名無しさん:2011/02/26(土) 00:13:48.31
拡張子を変えても、誰かに悪戯されて暗号文を偽装される恐れがあります。
478デフォルトの名無しさん:2011/02/26(土) 00:14:32.53
>>473
フラグ+データ

フラグで平文・暗号文を示して、データにはフラグに沿った文を入れる
暗号・復号化はフラグを見て、データ部分に対して行い、フラグを適切に修正して出力
479デフォルトの名無しさん:2011/02/26(土) 00:16:41.20
フラグというのは例えば固定パターンの文字列とかでもいいのでしょうか?
480デフォルトの名無しさん:2011/02/26(土) 00:18:35.33
識別出来れば何でもいい。
481デフォルトの名無しさん:2011/02/26(土) 00:24:50.39
>>473
悪戯とか偽装とかが嫌ならハッシュでも追加したら?
元のデータのハッシュ(md5やsha1)をファイルの先頭に入れて、それも含めて暗号化
復号後に、ハッシュを確認して一致すれば、上書きでOK
482デフォルトの名無しさん:2011/02/26(土) 00:50:06.13
偽装を防ぐためにハッシュを使うなら、ハッシュに公開鍵暗号で暗号かけないとダメ
483デフォルトの名無しさん:2011/02/26(土) 01:01:30.21
公開鍵の信頼性を担保するために認証局からディジタル証明書を発行してもらわないとダメ
484デフォルトの名無しさん:2011/02/26(土) 01:01:53.02
>>482
暗号化されてるデータに対して、さらに公開鍵暗号って何のための暗号化だよ
485デフォルトの名無しさん:2011/02/26(土) 01:09:32.63
バイナリを暗号化しようとか思ってないような
486デフォルトの名無しさん:2011/02/26(土) 01:20:26.27
#include<stdio.n>
int main(void){
prinf("こんにちは");
back 0;
}
エラー
487デフォルトの名無しさん:2011/02/26(土) 01:23:32.33
来週までにアドレス帳作って来いって言われてんねんけど
何から作ればいいの?
488デフォルトの名無しさん:2011/02/26(土) 01:23:48.73
>>484
署名だろ。改ざん防止のため。
489デフォルトの名無しさん:2011/02/26(土) 01:24:41.16
>>487
友達
490デフォルトの名無しさん:2011/02/26(土) 01:25:35.40
>>487
作る前にまず友達全員にアドレスを聞いて、データ件数を見極める
それから最適な実装方法を考えよう
491sage:2011/02/26(土) 01:26:32.09
>>489
よろしく^^v
作り方知ってる?
492デフォルトの名無しさん:2011/02/26(土) 01:27:30.34
>>484
何で、暗号化されたものに対して署名が必要なんだって話
署名が必要なのは平文に対してだろ
493デフォルトの名無しさん:2011/02/26(土) 01:30:56.84
>>492
だから、偽装を防ぐためにハッシュを使うなら、ハッシュに公開鍵暗号で暗号かけないとダメ
ハッシュは公開鍵暗号の秘密鍵で暗号化して、データは共通鍵で暗号化する

ハッシュとデータを一緒に暗号化したら偽装防止にならない
494デフォルトの名無しさん:2011/02/26(土) 01:31:06.59
>>490

件数は5件ぐらいで登録、閲覧、コピー、修正、削除の機能が上手く動けばいいらしい

つかどうでもいいけど俺マジで友達少ないねん
495デフォルトの名無しさん:2011/02/26(土) 01:33:10.70
>>487
まずは紙の候補から決めようじゃなイカ?
サイズはA5が良いかA6良いか、
ベースとなる色は何色が良いか決めようじゃなイカ?
496デフォルトの名無しさん:2011/02/26(土) 01:34:42.62
つか掲示板に自分のソースって書き込んでもいいの?
497デフォルトの名無しさん:2011/02/26(土) 01:37:54.54
>>493
>ハッシュとデータを一緒に暗号化したら偽装防止にならない
良く考えろ
暗号化された状態のデータを偽装ってどうするつもり?
すでに暗号が破られた状態が前提の話になってないか?
498デフォルトの名無しさん:2011/02/26(土) 01:38:50.61
>>494
GUIで作るの?
499デフォルトの名無しさん:2011/02/26(土) 01:41:31.07
>>497
暗号化が破られない前提なら、ハッシュなんて要らないだろ
500デフォルトの名無しさん:2011/02/26(土) 01:46:49.53
>>499
定型文を固定の位置で使うと、暗号を破る種にされるから
推測しようのない、ハッシュを使うんだが?
501デフォルトの名無しさん:2011/02/26(土) 01:47:24.57
>>494
構造体の配列を動的に確保しろ
502デフォルトの名無しさん:2011/02/26(土) 01:50:25.70
固定パターンの文字列をファイルに書き込んで、そのあと先頭の32バイトを
読み込んで固定パターンと一致するかどうか検査をし、あっていれば処理を
続行するということをやりたいです。

以下のコードがうまくいきません。どう直せばいいのか教えてください。
よろしくお願いします。

int main(int argc,char argv[]){
char *buf[32],buf2[32];
FILE *fp;

buf[32]="Don't Edit Header"
fp=fopen(argv[1],"wb");

fwrite(buf[32],1,sizeof(buf),fp)
fclose(fp);
fp=fopen(argv[1],"rb");
fread(buf2,1,32,fp);
if(strcmp(buf[32],buf2))
printf("暗号ファイルではありません\n");

return 0;
}
503デフォルトの名無しさん:2011/02/26(土) 01:50:26.66
ハッシュはファイルが壊れてないか確認するためにはつけるべきなのかな
ファイルが正常に復元できないなら上書きしなかったところでファイルは壊れてるけどさ
504デフォルトの名無しさん:2011/02/26(土) 01:51:53.91
>>498
なんだそれ?汗
とりあえず今日はここまでつくった
#include<stdio.h>
typedef struct{
char a[24], b[24];
int c,d,e,f;
}
int main(void){
int x = 1, y = 0, z = 0;
while(x){
printf("操作する番号を選んでください:"); scanf("%d",&i);
switch(i){
case 1: touroku(); break;
case 2: hennsyuu(); break;
case 3: ichiran(); break;
case 4: copy(); break;
case 5: sakujo(); break;
case 6: x = 0; break;
}
}
}

↑これって何言語なん?
505デフォルトの名無しさん:2011/02/26(土) 01:52:18.80
>>500
ハッシュはメッセージと一対一に対応するからいくらでも推測可能

そういう目的に使うならハッシュではなく、乱数パディングを使う
506デフォルトの名無しさん:2011/02/26(土) 01:53:04.00
>>503
そうだね
507デフォルトの名無しさん:2011/02/26(土) 01:54:06.51
>>505
何でやねん
その元のメッセージ自体も一緒に暗号化されてるのに
推測できるって、あんたエスパーでっか?
508デフォルトの名無しさん:2011/02/26(土) 01:57:30.15
>>507
だから、
暗号化されたメッセージからメッセージを知るのと
暗号化されたメッセージとそのハッシュからメッセージを知るのとは
難易度は何ら変わらないってこと。
509デフォルトの名無しさん:2011/02/26(土) 01:58:31.59
>>473って共有鍵を使った(もしくは、それすら使ってない)暗号化の話だったの?
510デフォルトの名無しさん:2011/02/26(土) 02:00:24.93
>>504
ここから一個も進まん
プロトタイプ宣言してから自作関数作るねんけど
ファイル操作わからん
お勧めのサイトないですか?
511デフォルトの名無しさん:2011/02/26(土) 02:00:40.10
>>508
パスワード使った暗号化の話だったつもりだけど、違うみたいね
プログラム側で固定のキーを使う暗号であれば、あんたの言ってることは正しいよ
512デフォルトの名無しさん:2011/02/26(土) 02:00:46.43
>>507
いや、平文か暗号文か判定するために特定パターンを使うのはどうか聞いているだけ。

そこにハッシュをどうのこうのと無駄な意見が出てきた。
513デフォルトの名無しさん:2011/02/26(土) 02:01:46.53
>>511
パスワードを使った暗号化の話だったらなにか違うの?
514デフォルトの名無しさん:2011/02/26(土) 02:06:43.04
>>513
全然違う
平文をツールが持ってるキーで暗号化すると、
その平文とそのハッシュから、キーを特定するために、
定型文を使うのと何ら変わりはない
暗号化するためのキーがパスワードであれば、
キーを特定するための手がかりにはならない
515デフォルトの名無しさん:2011/02/26(土) 02:08:03.45
固定パターンの文字列をファイルに書き込んで、そのあと32バイト読みだして
固定パターンと一致するかどうか検査して、一致したら処理を続けるという事
をやりたいのですがうまくいきません。教えてください。
どのようにプログラムを書けばいいでしょう?
よろしくお願いします。
516デフォルトの名無しさん:2011/02/26(土) 02:14:31.08
教えてクン養成マニュアル

明日の「教えてクン」を目指す、若き戦士達に以下の文章を捧げる。
日々精進し、パソコンヲタクどもの親切を蹂躙してやれ。

1. 努力を放棄すること
いやしくも「教えてクン」たるもの、努力をしてはならない。
過去ログを読んだり、検索してはいけない。
「英語は苦手なので、分かりません。」は、高く評価できる。
辞書片手にマニュアルやReadMeを読むなど、決してしてはならない。
他力本願と言われようと、自分で調べたり試行錯誤したりせず、他人の努力の結果を搾取するのが、正しい「教えてクン」である。
また、「もう何が悪いのかサッパリ分かりません。」と言ってふてくされるのも有効である。
「サッパリ」という単語が「やる気の無さ」を効果的に表現している。
「原因を特定するには、何をすべきでしょうか?」と訊いてしまうと自己の積極性が現れてしまうので、「教えてクン」失格である。

2. 情報を開示しないこと
使用OSや、機器構成などの必須の情報を知らせてはならない。
マザーボード名やBIOSのバージョンも同様だ。
具体的なアプリ名やバージョンも隠蔽すべきだ。
「DVD再生ソフト」のように曖昧に表記しておけばよい。
反対に「前から欲しいと思っていた○○」とか「安売りされていた ○○」等の「どうでもいい情報」は、どんどん書いてやれ。
トラブルの場合は、状況を正確に記述してはならない。
「なんだかうまく動きません。」とか「エラーが出ます。」等と具体的なことは何も書かないことが重要である。
また、自分の試してみた事も具体的に書いてはいけない。
考えられる組合せのマトリックスを作成し、状況を整理するなどもってのほかである。
最悪の場合、それだけで問題が解決してしまうこともあるのだ。
「いろいろやってみたけど、動きません。」が理想的だ。
517デフォルトの名無しさん:2011/02/26(土) 02:15:12.62
3. 答える人間のことを考えないこと
「教えてクン」は、孤高の戦士である。
相手のことを考えるようでは教えてクン失格というものだ。
以下のような行動が、望ましい。
初心者であることを高らかに宣言し、初心者向けの丁寧で分かりやすい説明を強要する。
専門用語の使用を禁じておくとさらに効果的である。
簡潔な説明を禁じられたヲタクどもは、同じ内容を説明するのに、何倍もの労力を強いられる。
自分は努力せず、相手には多大な努力をさせることこそが「教えてクン」の真骨頂である。マルチポストも有効である。
そのBBSを信用していないことを明確に示せる。
「どうせ、お前らじゃ分からんだろう。」という意志表示として高く評価できる。
もちろんマルチポストの非礼をあらかじめ詫びてはならない。
それでは、単なる「急いでいる人」になってしまう。
それは、教えてクンではない。質問のタイトルは、「教えてください。」で良い。
タイトルを読んだだけでは「何に関する質問」か全く分からない。
そういう努力は、答える人間にさせれば良いのだ。
とにかく、答える人間が答えやすいように気を使って質問してはならない。
傲慢で不遜な態度が必須である。「聞きたいことがあります。」など、プロの仕事であろう。

最後に、言うまでも無いことだとは思うが、答えてくれた人達に礼の言葉を返すなど言語道断である。
せっかく「教えてクン」を貫いてきたのに、最後にお礼を言っているようでは、画竜点睛を欠いていると言わざるを得ない。
質問だけしておいて、後はシカトが基本である。
上級テクニックとして、「そんなことはもう試しました。」とか、「そこまで初心者じゃありません。」などと言って、回答者の神経を逆なでしておけば完璧である。

以上のことを踏まえて質問すれば、君も立派な「教えてクン」である。
ビバ!教えてクン! 教えてクンに栄光あれ!!
518502:2011/02/26(土) 02:20:35.81
サンプルプログラムは
>>502
に書いてあります。
よろしくお願いします。
519デフォルトの名無しさん:2011/02/26(土) 02:27:43.24
^^;
520デフォルトの名無しさん:2011/02/26(土) 04:35:40.42
>>502
まぁ、絶対ネタだろうなと思いつつ

#include <stdio.h>
#include <string.h>
#define BEL 7
#define HEADER_SIZE

int main( int argc, char *argv[] ) {
char buf[HEADER_SIZE], buf2[HEADER_SIZE];
FILE *fp;

memset( buf, BEL, sizeof( buf ) );
strcpy( buf, "Don't Edit Header" );

fp = fopen( argv[1], "wb" );
fwrite( buf, sizeof( buf[0] ), sizeof( buf ), fp );
fclose( fp );

fp = fopen( argv[1], "rb" );
fread( buf2, sizeof( buf2[0] ), sizeof( buf2 ), fp );
fclose( fp );

if( strcmp( buf, buf2 ) )
  printf( "暗号ファイルではありません\n" );

return 0;
}
521デフォルトの名無しさん:2011/02/26(土) 04:37:46.09
サイズ入れ忘れた
#define HEADER_SIZE 32
522502:2011/02/26(土) 05:01:01.83
自己解決しました。ありがとうございました。
523デフォルトの名無しさん:2011/02/26(土) 11:01:13.01
>>510
C ファイル操作 とかでググればいくらでも出てくるだろうに。
一応
http://www9.plala.or.jp/sgwr-t/c/sec17.html
http://www.eonet.ne.jp/~nao2/c/c_file.html
何がやりたいのか分からんけど変数名は意味のある変数名にした方がよろしい。

524デフォルトの名無しさん:2011/02/26(土) 11:04:14.71
ユーザーから氏名、電話番号の入力を受け、ファイルに書き込みをするプログラムなのですが
while (!mywrite(fp));の意味が分かりません。
http://codepad.org/mSjQm1bU ←ソースです
525デフォルトの名無しさん:2011/02/26(土) 11:05:20.96
>>524
mywrite(fp) の戻り値が 0 の間ループ
526デフォルトの名無しさん:2011/02/26(土) 11:28:23.40
なぜループするのかが分かりません・・・
0が返ってきたらwhile( !0 )→while(1)になって
fclose(fp);
return 0;
で終了じゃないのでしょうか。
527デフォルトの名無しさん:2011/02/26(土) 11:30:11.34
while(1) だったらループするじゃないか
while(0) になったらループを抜けて終了する
528デフォルトの名無しさん:2011/02/26(土) 11:38:52.83
while文は{ }で囲んだ範囲をループしますよね?
今回はループ範囲がないのに何故自作関数がループしてるのか疑問なのですが
529デフォルトの名無しさん:2011/02/26(土) 11:46:17.07
それは少し不正確な覚え方をしている
while (式) 文
のような構文で、式が真のあいだ文を繰り返し実行する
文は単一の文でも複文でもよく、複文の場合は { } で囲む
今回のケースでは while (!mywrite(fp)) の直後にある ; (空文) がその繰り返す文にあたる
530デフォルトの名無しさん:2011/02/26(土) 11:48:28.88
>>528
厳密な規格表現云々は置いておくとして、
while (!mywrite(fp){/* do noting */} と同じこと
while の () 内はループ毎に評価され、変数でも戻り値のある関数でも良い

531デフォルトの名無しさん:2011/02/26(土) 11:53:34.29
whileの()の部分も評価されると覚えておけば良い。

i=0;
while(i++<5){ /* 何もしない */}
532デフォルトの名無しさん:2011/02/26(土) 11:54:24.31
普通に

while (!mywrit(fp)){
//何もしない
};

で無限ループじゃね?
533デフォルトの名無しさん:2011/02/26(土) 11:59:18.03
>>532
0以外は真
0は偽
!偽は真
!真は偽
534デフォルトの名無しさん:2011/02/26(土) 12:01:14.13
ああ無限というか!mywrit(fp)をループだよな
535デフォルトの名無しさん:2011/02/26(土) 12:03:15.52
ああ、やっと意味が分かりました。
ループ範囲が空文だからwhileを抜けると間違った解釈をしていました。
これは継続条件式がループしてるんですね。
536デフォルトの名無しさん:2011/02/26(土) 12:05:11.88
while(1) {
if(mywrit(fp) != 0) break;
}
537 ◆QZaw55cn4c :2011/02/26(土) 12:14:20.66
>>535
そうですね。条件式はループをまわるごとに必ず毎回評価されますし、そしてその条件式のところに関数があれば、その関数を毎回実行することになりますから。
538デフォルトの名無しさん:2011/02/26(土) 12:28:24.48
たとえループするものが完全に何もなかったとしても、ループを書けばループするのが、コンピュータというもの
空文だからといって勝手にwhileを抜けたりはしないよ
539デフォルトの名無しさん:2011/02/26(土) 12:33:27.43
>>514
「キー」と「パスワード」が何を意味しているのかよく分からないけど、
暗号化の鍵として使う「キー」が、ツールの中にあるか、ユーザーの頭の中(?)にあるか、によって何かが変わると言ってる?

何も変わらんだろ。
540デフォルトの名無しさん:2011/02/26(土) 13:27:15.24
>>539
全く違うのが分からないのか?
まず、暗号文の内容が定型文+メッセージであれば、
その定型文があること自体が、クラックする場合の種になることは分かるよな?
次に、ハッシュ+メッセージの安全性を考える場合に、
ツールの中に特定のキーがある場合、クラックする人間が
そのツールを使って、暗号化すれば、平文の時のハッシュを知ってるから
そのハッシュが、定型文と同じでクラックの種に使えるのも分かるよな?
一方、ユーザの頭の中のパスワードがキーの場合、
クラックする人間に平文のハッシュなんて予想出来ないから、
ハッシュ+メッセージは、単なるメッセージのみと同じってことが分からないか?
つまり、暗号をクラックするためのヒントを与えずに、
そのファイルが有効であるか確認するために、ハッシュは有効なんだよ
541デフォルトの名無しさん:2011/02/26(土) 13:36:41.89
>>540
先ず、上3行だけ。

繰り返しになるが、

「定型文+メッセージ」の暗号文からメッセージを知る難易度

「メッセージから一意に生成される文+メッセージ」の暗号文からメッセージを知る難易度

何ら変わらない。

この難易度を挙げるには、乱数パディングを使う。
542デフォルトの名無しさん:2011/02/26(土) 15:01:04.54
いつまでやってんだこいつらw
543デフォルトの名無しさん:2011/02/26(土) 15:24:30.79
>>541
>「定型文+メッセージ」の暗号文からメッセージを知る難易度
>と
>「メッセージから一意に生成される文+メッセージ」の暗号文からメッセージを知る難易度
>は
>何ら変わらない。
何で、暗号強度が高いこと前提なの?
俺が言ってるのは暗号強度を変えない方法だよ?
理解できなかった?

>この難易度を挙げるには、乱数パディングを使う
一旦強度を低下させといて、それを補うために乱数パディングとか
もうアホじゃないかと…
544デフォルトの名無しさん:2011/02/26(土) 16:29:16.79
文章で理解できないときはお絵かきするクセをつけろ
545デフォルトの名無しさん:2011/02/26(土) 16:30:41.32
お前は乱数パディングって言葉を使いたかっただけじゃないのか?
546デフォルトの名無しさん:2011/02/26(土) 17:01:51.00
もうCの話ではないな
547デフォルトの名無しさん:2011/02/26(土) 17:09:18.90
もうと言うか
>>473-475
の時点で終わってる話
548デフォルトの名無しさん:2011/02/26(土) 17:14:10.84
>>546-547
スマンね
ただ、あまりの大嘘で終わらせるのも嫌なもんで、
乱数でパディングする必要があるのは何故なのかとか、
どの様なアルゴリズムにおいて有効なのかとか、正しい知識を持ってれば
>>541が共有鍵と個人鍵において、どれ程の差があるか分かるはず。
549デフォルトの名無しさん:2011/02/26(土) 17:36:04.70
じゃ、C言語の話題に戻してみるか。

enum で列挙定数の最大個数をコンパイル時にチェックして超えていたらコンパイルエラーとしたい。

例えば enum E{ E_A, E_B, E_C, …, E_MAX }; で必要に応じて列挙定数を増やしながらプログラミング
していきたいんだけど、列挙定数の最大個数は256未満にしたいとか感じ。
で、これを実行時ではなくコンパイル時にチェックしたい。

手で数えるとかは無しで、どうすりゃできるのかな?
550デフォルトの名無しさん:2011/02/26(土) 17:46:18.46
コンパイルの前処理に、enumカウンターを入れてチェック
551デフォルトの名無しさん:2011/02/26(土) 17:49:59.52
>>549
素直にE_1, E_2, E_3って増やせば?と思ったり…
直感的には難しそうで、できても、トリッキーなコードになりそうな気が…
552デフォルトの名無しさん:2011/02/26(土) 17:59:59.18
規則性と包括性があるとしても百数個の識別子を定義するその理由が知りたいね
553デフォルトの名無しさん:2011/02/26(土) 18:00:17.59
>>550
外部ツール作ればできるだろうけど、出来ればビルド環境依存にはしたくないのです。

>>551
例では簡単なネーミングにしてるけど、実際には意味のあるネーミングを使いたいし
間に挿入したい時もあるので連番ネーミングにはしたくないのです。
まずはトリッキーなコードでも良いのでアイデア提供お願いします。
554デフォルトの名無しさん:2011/02/26(土) 18:01:34.77
>>552
仮想実行環境のバイトコード
555デフォルトの名無しさん:2011/02/26(土) 18:02:54.58
>>553
考えてはみるけど期待しないでね
それよりも普通に#defineで定義すれば良いんじゃね?
556デフォルトの名無しさん:2011/02/26(土) 18:05:56.37
そんなもんをソースコードだけで管理すると?
557デフォルトの名無しさん:2011/02/26(土) 18:11:35.47
>>549
列挙定数の宣言時に値を指定しないのであれば、一番最後の E_MAX が (列挙定数の数) - 1 になるんですけど。
558デフォルトの名無しさん:2011/02/26(土) 18:20:20.78
>>557
コンパイル時にチェックしたい。
って事だから無理でしょ
559デフォルトの名無しさん:2011/02/26(土) 18:22:48.26
>>558
たしかに。asset.h でも使えるのならいいのですが。
560549:2011/02/26(土) 18:23:16.80
>>556
仮想実行環境とかいっても、Javaとかみたいな大げさなもんじゃないので^^;

>>557
はい、実際には個数そのものではなく 0 から始まる連続した正の整数を扱いたいのです。
なので、例で言えば E_MAX >= 256 とかでコンパイルエラーにしたいのです。
561559:2011/02/26(土) 18:23:40.20
assert.h
562デフォルトの名無しさん:2011/02/26(土) 18:30:18.04
assert()で使えないって、どういうこと?
563デフォルトの名無しさん:2011/02/26(土) 18:39:01.25
564デフォルトの名無しさん:2011/02/26(土) 18:40:07.40
そういうコンパイラを作れ
565デフォルトの名無しさん:2011/02/26(土) 18:49:13.60
>>563
ああ、そっか#line使えば良いんだな
あとは__LINE__との比較でいける。
まぁ、その後の__LINE__がめちゃくちゃになるから、
この定義だけ別ファイルとかにしないと迷惑だけど…

// 1要素毎1行
#line 0
enum E{
  E_A,
  E_B,
  E_C,
  E_MAX
};
#if __LINE__ > 258
#error "E_MAX >= 256"
#endif
566デフォルトの名無しさん:2011/02/26(土) 18:50:25.68
>>549
コンパイラによるけど gcc ならこの手が使える
static char dummy[255-E_MAX]; // E_MAX>=256 の時コンパイルエラーにする
567デフォルトの名無しさん:2011/02/26(土) 18:54:40.12
場合によっては >>566 よりこっちのほうがいいかも
void dummy_func(void)
{
char dummy[255-E_MAX];
}
568デフォルトの名無しさん:2011/02/26(土) 19:00:47.18
>>566-567
そんなので弾けるなら、適当な場所で下記でOK
sizeof( char [255-E_MAX] );
569デフォルトの名無しさん:2011/02/26(土) 19:13:46.23
>>568
sizeof か
やるではないか
570デフォルトの名無しさん:2011/02/26(土) 19:26:01.06
なるほど
sizeof( char [負の整数] );
でいつでもコンパイルエラー出せるのかー
571549:2011/02/26(土) 19:36:45.33
>>565
dクス。
今手元にコンパイラがないので直ぐに確認できないけど

enum E{
#define E_START_LINE __LINE__
E_A,
E_B,
.... ,
#define E_END_LINE __LINE__
E_MAX
};
#if (E_END_LINE - E_START_LINE) >= 256
#error
#endif

なんていうのは可能なのかな?もし可能なら __LINE__ をめちゃくちゃにしなくて済みそう。

>>566-569
dクス。
MSVCでもいけて、コンパイルエラーでないときに不要なデータ領域やコードが生成されないように
出来ればこの方法がベストですね。
572デフォルトの名無しさん:2011/02/26(土) 19:45:07.03
>>571
両方とも__LINE__に展開される
#if (__LINE__ - __LINE__) >= 256 // 必ず 0 になる
無理やり数値として扱う方法がないか考えたが、多分、無理
573デフォルトの名無しさん:2011/02/26(土) 20:32:59.74
ファイル変換時に元のファイルソフトの拡張子の代わりに、自動的に決まった
拡張子を付けるにはどのようにすればいいのでしょう。
また決まった拡張子のとき特定のソフトに関連付けるためにはどのようにすれば
いいのか解りません。教えてください。よろしくお願いします。
574デフォルトの名無しさん:2011/02/26(土) 20:40:45.44
まず
575デフォルトの名無しさん:2011/02/26(土) 21:20:55.79
>>548
ググれで済むことだけど、突き放すのは良くないと思って、なるべく丁寧に話したが、
スレ違いっぽいので、俺はこれで最後にする。後は好きなように反論すればいい。

どちらが正しいかについては、
世の中の一般的なセキュリティプロトコルでは、ハッシュの暗号化とデータの暗号化は別であることからも明らか。
データとそのハッシュを同じ暗号鍵で暗号化するなんて馬鹿な仕様はない。
SSLでもTLSでもIPSecでも何でもいいから調べてみれば素人でもすぐ分かる。

暗号アルゴリズムは適切に組み合わせないと処理負荷だけ増えて全く安全にならない。

セキュリティを考慮しない田舎仕様で無意味にハッシュを付け足して安全にしたつもりで一人で満足できるなら、それはそれで別に良い。
馬鹿な人が無駄にCPUリソースを浪費してくれればCPUの性能向上が促されるから、コンピューター業界的にもそんなに悪いことじゃない。

ただ、そういう人は他人が使うシステムの開発には関わらないで欲しいとだけ要望しておく。
576デフォルトの名無しさん:2011/02/26(土) 21:51:05.71
>>575
アンタはCRCを知らんのかね?
ハッシュほ保存して正当性をチェックするってのは、それと同じだよ
577デフォルトの名無しさん:2011/02/26(土) 23:03:58.86
変数名データってdate?data?
578デフォルトの名無しさん:2011/02/26(土) 23:05:51.68
>>577
日付?データ?
579デフォルトの名無しさん:2011/02/26(土) 23:08:02.27
>>578
いや自分でデータって変数名付けようと思ったんだけど参考書でもdateとdataで別れてるから皆どっちなのかな〜って思って。
580デフォルトの名無しさん:2011/02/26(土) 23:08:09.18
>>577
リフレクションとか?
581デフォルトの名無しさん:2011/02/26(土) 23:08:32.69
dataだろ。
582デフォルトの名無しさん:2011/02/26(土) 23:09:47.01
>>579
日付以外でdate使ってるなら、そんな参考書捨ててしまえ
583デフォルトの名無しさん:2011/02/26(土) 23:12:33.83
dataでしたか、つまらない質問すみません、ありがとうございました〜
584デフォルトの名無しさん:2011/02/26(土) 23:33:03.66
DATEもDATAも日本語でデータだからややこしいよな
デートって読めばいいのは分かるけどね
585デフォルトの名無しさん:2011/02/26(土) 23:43:09.97
釣りはお腹いっぱい
586デフォルトの名無しさん:2011/02/26(土) 23:44:42.83
あ・・・あ・・・
何か腹が下りそうな気配が
あああああ
ちょっとトイレ行ってくるううう
587デフォルトの名無しさん:2011/02/26(土) 23:47:04.70
>>586
これが彼の最後の言葉となるのであった
588デフォルトの名無しさん:2011/02/26(土) 23:50:04.82
return;
これ何?
589デフォルトの名無しさん:2011/02/26(土) 23:50:46.26
チョイ話はズレるが、どこで見たか聞いたか忘れたけど、
typoをdefineで逃げ切った強者が居たらしいw

#define retrun return
590デフォルトの名無しさん:2011/02/26(土) 23:51:54.42
ローカルルールでretrunがOKって自由すぎるだろ
591デフォルトの名無しさん:2011/02/26(土) 23:52:09.32
引数とかローカル変数とかの関数フレームをスタックから削除する事?
592デフォルトの名無しさん:2011/02/26(土) 23:58:15.82
検索置換出来ないほどデカイシステムか
593デフォルトの名無しさん:2011/02/26(土) 23:58:52.29
>>588
関数を終了して、呼び出し元に戻る文
594デフォルトの名無しさん:2011/02/26(土) 23:59:38.83
alias sl ls
595デフォルトの名無しさん:2011/02/27(日) 00:05:05.19
左利き用の設定だなw
596586:2011/02/27(日) 00:45:10.92
今トイレから帰ってきました
大変な下痢でした

>>587
勝手に殺すな
597デフォルトの名無しさん:2011/02/27(日) 00:47:04.62
Hacking 美しき策謀って本良いね。
598デフォルトの名無しさん:2011/02/27(日) 00:50:04.39
599デフォルトの名無しさん:2011/02/27(日) 00:58:36.23
>>597
宣伝すんなカス
600デフォルトの名無しさん:2011/02/27(日) 01:06:04.96
>>586は大変なえさを蒔いて逝きました
601デフォルトの名無しさん:2011/02/27(日) 16:31:34.41
if(){
602デフォルトの名無しさん:2011/02/27(日) 16:35:10.92
C言語のpopen関数を使って別のアプリケーション(gnuplot)を起動して
そこにfprintf関数でコマンドを送っています
呼び出しもとのアプリケーションの出力のみならず、
送信したコマンドやgnuplotからの各出力も同じコマンドプロンプトに表示されてしまうのですが、
これらを非表示にしたり出力先を違うコマンドプロンプトにしたりすることは可能でしょうか?
603デフォルトの名無しさん:2011/02/27(日) 16:42:08.79
604デフォルトの名無しさん:2011/02/27(日) 18:38:12.94
#include<stdio.h> 
int count_bits(unsigned x) 
{int count=0;while(x){if(x&1U)count++;x >>=1;}return (count);} 
int int_bits(void) 
{return(count_bits(~0U));} 
void print_bits(unsigned x) 
{int i;for(i=int_bits()-1; i>=0; i--)putchar(((x>>i)&1U)?'1':'0');} 
int main(void) 
{unsigned nx;printf("非負の整数を入力してください:"); 
scanf("%u",&nx);print_bits(nx);putchar('\n');return (0);}
605デフォルトの名無しさん:2011/02/27(日) 18:39:50.47
上記のプログラムなんですが良く分からない所があります。 
まず1の補数はビットの反転ですよね?そもそも処理系によって補数って変わるんじゃないんですか? 
0の補数は11111~となるけど、-1が1111・・・0だから1111・・1の数、つまり0に対する1の補数って存在 
しないんじゃないんですか?そもそも1の補数か2の補数でビットが表現されてるのか処理系によって違う 
んじゃないんですか? 
後なんでmain関数内のscanfの書式が%uなのでしょうか?%dじゃないのでしょうか? 
%uは型の大きさのときにこう指定するのであって、実際にint型の数を関数にわたすわけ 
だから%dなのではないのでしょうか?
606デフォルトの名無しさん:2011/02/27(日) 19:03:07.95
0の補数って0じゃねーの?
607デフォルトの名無しさん:2011/02/27(日) 19:33:34.65
1の補数表現ではプラスゼロとマイナスゼロが存在する
2の補数表現ではゼロはただひとつだけ
負の数が1の補数表現か2の補数表現かは処理系によって変わる
%dはint型
%uはunsigned int型
変数nxはunsigned int型
608 ◆QZaw55cn4c :2011/02/27(日) 19:36:11.98
>>605
wikipedia で大体のことがわかりますよ。
http://ja.wikipedia.org/wiki/%E8%A3%9C%E6%95%B0
これによると、
「2進法における基数の補数」を略して 2 の補数
「2進法における減基数の補数」を略して 1 の補数
と呼ぶようですね。
で、
>処理系によって補数って変わるんじゃないんですか
正確には、負の数を 2 の補数とするか 1 の補数とするか、あるいはそれ以外にするかが、処理系によって変わります。
補数の概念が処理系によってかわるわけではありません。

>0の補数は11111~

>-1が1111・・・0
処理系によってかわります。負数を 1 の補数であらわすのならそうなります。
>1111・・1の数、つまり0に対する1の補数って存在しない。
確かに負の数を1 の補数とすると 0 の表現が二種類できます。それをどう扱うかは、(私自身は1の補数を負の数とする処理系をしらないので)よくわかりません。

>scanfの書式が%uなのでしょうか?
scanf() で入力された文字列を「符号なしの」10進数として解釈したいから、と推察されます。値をセットする変数 nx は unsigned int で宣言されています。
609デフォルトの名無しさん:2011/02/27(日) 23:37:42.86
と高卒低学歴が申しております
610デフォルトの名無しさん:2011/02/27(日) 23:48:26.40
> %uは型の大きさのときにこう指定する

sizeof は %u と教わっちまったのかな・・・
「何も考えずに」って
611デフォルトの名無しさん:2011/02/28(月) 00:03:35.57
>>610
sizeof じゃなくて l とかの長さ修飾子と勘違いしたんじゃないの とエスパーしてみるw
612デフォルトの名無しさん:2011/02/28(月) 02:07:49.09
>>604のコードに1の補数が一切関係ないことについて
613デフォルトの名無しさん:2011/02/28(月) 05:54:26.08
>>612
ビット反転してるじゃん?
614デフォルトの名無しさん:2011/02/28(月) 05:57:17.68
1の補数を求めるための方法にビットの反転があるだけで、
ビットの反転=1の補数を求めることじゃないから

>>604はunsignedの総ビット数を求めるために全てのビットをオンにするために0を反転してるだけ
615デフォルトの名無しさん:2011/02/28(月) 07:10:14.46
>>614
任意の値のビットオフを数えることが目的ならともかく、
>>604は全ビットが立ってる状態を表しているのだから、
0のビット反転でも、(1の補数表現で)0の補数でも、表現は自由だと思うが?
616デフォルトの名無しさん:2011/02/28(月) 07:15:49.21
~はビット反転であって、1の補数って意味じゃないよ

ビット反転=1の補数とか思い込んじゃったから>>605みたいな意味のわからないこと言い出すんだから
表現の自由とかいう問題でもないよ
617デフォルトの名無しさん:2011/02/28(月) 07:36:03.94
>>616
Cの規格上で、全てのビットが立っている状態を1の補数と読んでいるし
~演算子は、ビット単位の補数と読んでるが?
618デフォルトの名無しさん:2011/02/28(月) 11:39:03.32
お前ら規格もちゃんと読んで凄いな。
何気に優秀な人もいるんだろうな
619デフォルトの名無しさん:2011/02/28(月) 12:42:45.93
>>617
それは処理系3タイプの分類としての方便でしょ

補数=補う数
なので、絶対的な値ではないよ
620デフォルトの名無しさん:2011/02/28(月) 12:52:51.70
翻訳上の問題なのかもな
621デフォルトの名無しさん:2011/02/28(月) 13:07:22.34
原文でも同じだから読解力の問題かな
ム板らしく解説すると
> -- the sign bit has the value -(2^N -1) (one's complement).
この行の補足説明で one's complement を束縛してる
622デフォルトの名無しさん:2011/02/28(月) 13:10:02.53
-(2^n-1)ってunsignedじゃない気がするんだが
623デフォルトの名無しさん:2011/02/28(月) 13:14:17.02
signedでなければ出番は無い訳で・・・
624デフォルトの名無しさん:2011/02/28(月) 13:16:09.65
>>604はunsignedの話なわけで……
625デフォルトの名無しさん:2011/02/28(月) 13:17:50.06
ただのdumpな訳で・・・
626デフォルトの名無しさん:2011/02/28(月) 16:10:59.93
1の補数って何??
627デフォルトの名無しさん:2011/02/28(月) 16:13:31.39
2の補数から1引いた数
628デフォルトの名無しさん:2011/02/28(月) 16:27:54.87
>>626
http://ja.wikipedia.org/wiki/%E8%A3%9C%E6%95%B0

こんぴゅーたーのせかいでは
しんすう や けたすう がしょうりゃくされたばあいは
しんすうは2、けたすうはへんすうのかたのさいずとおきかえてください
629デフォルトの名無しさん:2011/02/28(月) 16:34:51.64
何故ひらがな?
630デフォルトの名無しさん:2011/02/28(月) 16:38:21.10
C言語ってそんなミクロな視点で数字扱わなきゃダメなの!?
普通にintとか宣言すれば後はビット列レベルの細かいことはコンピュータが勝手にやってくれるんじゃないんだ??
631デフォルトの名無しさん:2011/02/28(月) 16:59:27.12
>>630
扱わなくて済むなら扱う必要はないよ
でも、初心者にC言語を薦めるのは
そういったミクロな部分を学習しやすいって事だから
それを避けてCをやっても意味は薄れるよ
632デフォルトの名無しさん:2011/02/28(月) 16:59:32.49
いや別に
普段はintと宣言すれば後は勝手に上手くやってくれると期待してもっと重要な部分に思考を割くべきで間違ってない
まれに細かい視点で見ないと解決できない問題もあるので知識はあった方がよい
633デフォルトの名無しさん:2011/02/28(月) 17:04:30.51
>>630
勝手にやってくれるよ。
634デフォルトの名無しさん:2011/02/28(月) 17:36:19.24
>>630
ビット操作の効率の考慮とか右シフト演算をしなければ気にする問題ではない
635デフォルトの名無しさん:2011/03/01(火) 00:20:44.74
初心者なのですが、http://wisdom.sakura.ne.jp/programming/c/index.htmlを勉強した後何を勉強すればいいか迷っています・・・
なにかいい教材、サイトはありますでしょうか?
636デフォルトの名無しさん:2011/03/01(火) 00:22:17.50
637デフォルトの名無しさん:2011/03/01(火) 00:28:38.82
何を勉強すればいいかは自分が何をしたいかによる
ゲーム作りたいのにデータベースやサーバ サイドのプログラムを勉強したって仕方がない
638デフォルトの名無しさん:2011/03/01(火) 00:53:35.00
>>636勉強になりそうです ありがとうございます
>>637どの分野をやりたいかにかかわらず共通してやるべき事はhttp://wisdom.sakura.ne.jp/programming/c/index.htmlで終わりでしょうか
639 ◆QZaw55cn4c :2011/03/01(火) 02:00:01.29
>>638
「動的メモリ」から発展して、データ構造(リンクリスト・バイナリツリー)を追加して習得したほうがいいでしょう。
また再帰呼び出しも押さえておきたいし、頻出のアルゴリズムも理解しておきたいし。
で、なにか数冊くらいは、書籍でマスターしたほうがいいかもしれません。
640デフォルトの名無しさん:2011/03/01(火) 02:19:20.90
そんなことよりも、先ずは作りたいものを作ることだな
641デフォルトの名無しさん:2011/03/01(火) 02:27:24.79
>>638
大切なのは必要な機能を、どのような手段で実装すれば良いかを考える力を付けること
そのためには、>>640が言うとおり、自分が作りたいものを作るのが手っ取り早い
642デフォルトの名無しさん:2011/03/01(火) 02:44:16.82
OSでもいいし、言語処理系でもいいし、
ゲームとかでも良い
643デフォルトの名無しさん:2011/03/01(火) 02:56:04.40
地味な作業の繰り返しってことがわかってないと...
644デフォルトの名無しさん:2011/03/01(火) 03:37:15.17
俺は一通り覚えた後は、n進数ダンプツールとかポーカーとか作ったな。
とにかく何でもいいから時間が許す限り毎日何かを作ることだ。
自分だけのTIPSリファレンスを作るのもいい。とにかく何かしら作れ。
645デフォルトの名無しさん:2011/03/01(火) 04:18:31.19
ヒマなら電卓を作ると良いと誰かが言ってた。
最初は単純な四則演算から初めて、変数を導入して、底の変更、
少数の計算、簡単な関数の定義へとグレードアップして行くと、
大変に基礎の勉強になるらしい。

後はオープンソースで公開されているソースコードをひたすら
読んで、プログラムの構造とか、変数や関数の命名規則とか、
読み易いコードの書き方とかを勉強するのも良いと思う。
646デフォルトの名無しさん:2011/03/01(火) 04:22:34.67
647デフォルトの名無しさん:2011/03/01(火) 04:27:33.60
なるほど電卓かー
+‐使わずにビットシフトと論理演算使うのかな
648デフォルトの名無しさん:2011/03/01(火) 04:48:18.91
まともな電卓を実装しようとすると
基礎的な構文解析が必要になるし、多倍長整数演算もいる
Windows標準添付の電卓ぐらいでも、そんなに簡単ではない
649デフォルトの名無しさん:2011/03/01(火) 04:54:08.40
ごくごく基本的な所から始められて、なおかつ奥深いから、課題として丁度良いよね
RPN電卓なら構文解析もラクチンだし
650デフォルトの名無しさん:2011/03/01(火) 04:57:59.44
なんとなくビットシフトと論理演算で計算出来ればいくらでも桁数増やせそうな気がするけどそんなに簡単じゃないんだろうなきっと
651デフォルトの名無しさん:2011/03/01(火) 05:00:49.45
まぁ、手始めは2値入力させてそれらの和差積商を出力するくらいで委員でね
652デフォルトの名無しさん:2011/03/01(火) 05:10:59.56
作りたいものがないのにプログラミング勉強しても意味がないのだが
653デフォルトの名無しさん:2011/03/01(火) 05:31:12.86
つまり君はプログラミングの学習に於いてはテロスが重要だという意見のようだね。
プログラミングの目的・テロスとは何かを作る事だ。それがあって初めて行動が正当化される。
即ち正義が行われると言う事だ。

非常に興味深い。他に意見のある者は?
654デフォルトの名無しさん:2011/03/01(火) 06:55:15.80
具体的な知識いらないことだと、スレがよく伸びるなw
655デフォルトの名無しさん:2011/03/01(火) 14:23:59.23
linux上のgccで、ハードのレジスタを変更したいです。

HW_HOGE_REG 0x8005C060
上記アドレスの3ビット目に1を立てたいのですが、
先に読み出しを行うとするとエラーになります。

unsigned long address = *(volatile unsigned long*)0x8005C060;
printf("%ld",address);

上記コードで現在の設定値を呼び出そうとし、コンパイルし実行すると、
Segmentation fault
で終了します。

なぜでしょうか?
656デフォルトの名無しさん:2011/03/01(火) 14:26:10.70
>>655
保護されてるからだろ
そこにアクセスするためには前準備が必要
657デフォルトの名無しさん:2011/03/01(火) 15:07:57.69
>>656
操作したい場合は、どのようにすればよいのでしょうか?
658デフォルトの名無しさん:2011/03/01(火) 15:11:34.60
>>657
スペシャルファイルなら ioctl とか
659デフォルトの名無しさん:2011/03/01(火) 15:29:52.41
>>658
armCPUのレジスタでアドレスも不変なので、直接触りたいです。
逆にデバイスとして操作する方法がわかりません。
660デフォルトの名無しさん:2011/03/01(火) 15:31:59.51
>>659
write only じゃないよね
661デフォルトの名無しさん:2011/03/01(火) 15:35:21.54
>>660
先に状態を確認したく、
単純に読み込みを行っていますが、それも行えません。
662デフォルトの名無しさん:2011/03/01(火) 15:38:50.25
>>655
アホすぎるwww
重要なことを忘れてる
663デフォルトの名無しさん:2011/03/01(火) 15:39:39.10
>>661
つーかまずここでエラーになってることは間違いないのか?
664デフォルトの名無しさん:2011/03/01(火) 15:42:37.84
>>663
int main(int argc, char *argv[])
{
unsigned long address = *(volatile unsigned long*)0x8005C060;
printf("%ld",address);

return 0;
}

これだけのコードです。
665デフォルトの名無しさん:2011/03/01(火) 15:48:19.01
サーバー立てました
アドレスはhttp://192.168.1.1 です
666デフォルトの名無しさん:2011/03/01(火) 15:48:42.04
そのレジスタがユーザアドレス空間にマップされてねー
667デフォルトの名無しさん:2011/03/01(火) 19:58:09.94
そんなしょうもない理由なわけがない
668デフォルトの名無しさん:2011/03/01(火) 20:49:01.60
物理アドレス空間と論理アドレス空間って違うだろ
winならドライバ経由で物理アドレス空間にアクセスするけど
Linuxはどうするのか知らん
669デフォルトの名無しさん:2011/03/01(火) 21:18:08.38
>>664
カーネルに居るなら 仮想アドレス≠物理アドレス は request_mem_region() と ioremap_nocache() でなんとかなる筈
ユーザーランドから叩く方法は俺も知らんけど多分無理だと思う…
670デフォルトの名無しさん:2011/03/01(火) 22:29:30.08
何言ってるのかわかんね
日本語でおkだわ
671デフォルトの名無しさん:2011/03/01(火) 22:50:33.16
低脳には理解できないように書いているんじゃね
これを理解できない脳力・レベルじゃ、無理だからやめれとアドバイスしているんだよ
672デフォルトの名無しさん:2011/03/01(火) 23:07:37.70
>>670
linux良く分からんが訳してみた

カーネル空間からであれば、request_mem_region() と ioremap_nocache() 使って
仮想アドレス(≠物理アドレス)で直接ハードウェアの操作をできるはず
ユーザ空間から操作する方法は俺も知らんけど無理だと思う

まぁドライバとか作るならともかく、普通に実行しても動くわけないって意味かと…
正しいかどうかは知らんので自分で調べてくれ
673デフォルトの名無しさん:2011/03/01(火) 23:11:39.06
for(::) printf("やっぱ俺は低能だったかーヽ(`Д´)ノウワァァァン!!");
674デフォルトの名無しさん:2011/03/01(火) 23:12:23.97
puts() で良いじゃん
675デフォルトの名無しさん:2011/03/01(火) 23:12:42.86
あぁ、ちょい違うか
linuxでは、ハードウェアを操作するときに、
カーネル空間からさえ、仮想アドレスからじゃないと操作できないのに、
直接物理アドレス触っても動くわけないかな?
676デフォルトの名無しさん:2011/03/01(火) 23:12:43.37
エラーが出るコード?
677デフォルトの名無しさん:2011/03/01(火) 23:17:07.57
linuxじゃなくても、仮想アドレスモードなCPUからは
物理アドレスじゃアクセスできない。
678デフォルトの名無しさん:2011/03/01(火) 23:27:23.73
>>677
それってlinuxは仮想アドレスモードなCPUじゃないと動かないってこと?
679デフォルトの名無しさん:2011/03/02(水) 00:24:06.93
Cってどんなイメージかな???
鉄壁の騎士ってかんじ?

タフなナイトかな???

Rubyは紅色の短刀を持つRubyアサシンっておもいついたんだけど
680デフォルトの名無しさん:2011/03/02(水) 08:41:30.40
>>679
どう読むとそう読めるんだ? 100回読みなおせ。
681デフォルトの名無しさん:2011/03/02(水) 09:29:39.73
pythonは敵ぢんちに潜入して情報をとってくるpython探検隊のひと
682デフォルトの名無しさん:2011/03/02(水) 13:02:54.20
アホみたいな質問で申し訳ないす・・

関数へのポインタはA関数とB関数がある場合、A関数へのポインタの型とB関数へのポインタの型はちがいますか?
それとも同じ関数ポインタ型なんですか?

構造体Aへのポインタと構造体Bへのポインタが違う型という認識と同じような認識になるんでしょうか?
683デフォルトの名無しさん:2011/03/02(水) 13:16:34.64
>>682
厳密性のない解釈なら同じとも違うともいえる。従って、厳密に考えよう。
・構造体へのポインタの型
これは、構造体のメンバがどうであれ構造体の名前が違えば別の型として扱われる。
・関数へのポインタの型
これも同様に、プロトタイプ宣言も含めて一致して、初めて同じ型といえる。

標準ライブラリの例で言えば、bsearch()の第5引き数とqsort()の第4引き数はどちらも同じ
プロトタイプを持つので同じ関数ポインタ型と言えるだろう。
しかし、atexit()の引き数は違うプロトタイプを持つので違う関数ポインタ型となる。
--
bsearch()
int (*COMPAR)(const void *, const void *)
qsort()
int (*COMPAR)(const void *, const void *)
atexit()
void (*FUNCTION)(void)
684デフォルトの名無しさん:2011/03/02(水) 13:17:17.68
>>682
同じような認識でいいよ
引数や返り値の型が一緒なら一緒だし違えば違う
685デフォルトの名無しさん:2011/03/02(水) 14:33:57.55
>>682
違うよ。 コード書いてみれば?
686682:2011/03/02(水) 14:43:08.81
みなさんどうもありがとう。

基本的には、同じような認識で、厳密に言うと違うということなんですね。
しかし、構造体名や関数名がちがうだけで、別の型になってしまうんですね・・
メンバや引数が全く同じなら同じとしていいようにも思えてしまうんですが(素人考えでは)

Cでは、本当に細かいところまで厳密に定めてある部分が多々ありますね。

ようやく、Cのちょっと深い部分までわかるようになってきました。みなさん、回答ありがとうございました。
とくに、>>683さん、細かいところまで丁寧に解説してくださって、ありがとうございました。
687デフォルトの名無しさん:2011/03/02(水) 15:03:52.40
>>686
構造体にはタグ名があるからそれが違えば違う型だけど、関数にはタグ名はないからプロトタイプが一致すれば同じ型だよ。

>>685
何がどう違うのか判るようなコードを頼む。
688デフォルトの名無しさん:2011/03/02(水) 15:07:18.06
ID無い板で熱くなるなよ
689デフォルトの名無しさん:2011/03/02(水) 15:34:41.90
>>687
> 関数へのポインタはA関数とB関数がある場合、A関数へのポインタの型とB関数へのポインタの型はちがいますか?
違うよ。 コード書いてみれば?

> それとも同じ関数ポインタ型なんですか?
違うよ。 コード書いてみれば?

> 構造体Aへのポインタと構造体Bへのポインタが違う型という認識と同じような認識になるんでしょうか?
違うよ。 コード書いてみれば?


どのQに対するAなのか曖昧ですよね
スルースキルを養いましょう
690デフォルトの名無しさん:2011/03/02(水) 15:38:36.90
>>689
ちげーよw687が自分に対するレスと勘違いしただけだろw
691デフォルトの名無しさん:2011/03/02(水) 16:03:03.64
690=神
692デフォルトの名無しさん:2011/03/02(水) 16:07:22.86
神は句読点にwを使うんだ
693デフォルトの名無しさん:2011/03/02(水) 16:09:29.01
疑問符の間違いだろw
694デフォルトの名無しさん:2011/03/02(水) 16:13:09.98
神だからね
695デフォルトの名無しさん:2011/03/02(水) 16:59:02.53
マックミランだからね
696デフォルトの名無しさん:2011/03/02(水) 19:20:05.68
紙ですから
697デフォルトの名無しさん:2011/03/02(水) 19:25:50.15
そしておまえらは数年後に髪に見放されつつあることを知る…。
698デフォルトの名無しさん:2011/03/02(水) 19:28:17.41
while(0) printf("髪生えてキタ━(゚∀゚)━!");
699デフォルトの名無しさん:2011/03/02(水) 20:15:08.81
>>698
何がしたいの?コメント行?
700デフォルトの名無しさん:2011/03/02(水) 20:17:31.44
>>699
えっ?
701デフォルトの名無しさん:2011/03/02(水) 21:51:59.28
髪に見放されたんでしょ
702デフォルトの名無しさん:2011/03/02(水) 22:01:11.80
sleep(3153600000);
puts("生え際って何だっけーー?!");
703295:2011/03/03(木) 00:06:42.51
while(0)ってやったらどうなるんですか?(・v・)
704702:2011/03/03(木) 00:26:47.40
どうなるんでしょうね?(-v-)
705デフォルトの名無しさん:2011/03/03(木) 00:31:35.26
>>703
飛ばされる
706デフォルトの名無しさん:2011/03/03(木) 00:33:51.85
コンパイルされないかもな
707デフォルトの名無しさん:2011/03/03(木) 03:24:53.87
実行するコードは吐かれないかもしれんがコンパイルはされる
708デフォルトの名無しさん:2011/03/03(木) 03:27:09.74
コードを吐かないってことはコンパイルされないってことだろ
709デフォルトの名無しさん:2011/03/03(木) 04:22:31.61
コンパイル後に最適化された結果コードを吐かないが正しい
コンパイルされないと言うことは、while(0)のあとに
コンパイルエラーが発生するコードを書いてもコンパイルできてしまうことを意味する
710デフォルトの名無しさん:2011/03/03(木) 07:53:26.68
いや、「コンパイルされない」のに「コンパイルできてしまう」っておかしいだろよ。
711デフォルトの名無しさん:2011/03/03(木) 08:26:32.59
710の読解力が足らないだけじゃね?
712デフォルトの名無しさん:2011/03/03(木) 08:42:13.32
「(該当箇所に)コンパイルエラーが発生するコードを書いても」
「(該当箇所は)コンパイルされない」から
「(全体は)コンパイルできてしまう」ってことだ。
だから、それは>709の1行目の主張とは反するので、
>709の1行目が正解ってことだろ。
713デフォルトの名無しさん:2011/03/03(木) 09:38:57.54
for()にするとどうなる
714デフォルトの名無しさん:2011/03/03(木) 09:42:00.53
教えろks
715デフォルトの名無しさん:2011/03/03(木) 09:49:58.93
while(0)st
for(;0;)st
同じ
716デフォルトの名無しさん:2011/03/03(木) 10:07:19.42
(;0;)泣き顔に見える
717デフォルトの名無しさん:2011/03/03(木) 12:38:57.72
beep音がでなんですけど
なぜでしょうか
718デフォルトの名無しさん:2011/03/03(木) 12:49:06.76
スピーカーの音量のつまみをゼロにしてるんじゃない

とりあえず、どんなプログラムを書いたのかと、どういった環境で動かしたのかを、書くべきではないかと思う
719デフォルトの名無しさん:2011/03/03(木) 15:46:11.65
printf(%a); でおk
720デフォルトの名無しさん:2011/03/03(木) 18:11:31.12
猫Cの高度なプログラミングの章の説明が適当すぎてわからん
721デフォルトの名無しさん:2011/03/03(木) 18:30:39.38
質問なんですが

for(; 略 略)
みたいな形の;だけの部分があるんですがどういう意味ですか?
;だけで意味あるんですか?
722デフォルトの名無しさん:2011/03/03(木) 19:02:39.23
forは
for( 初期化 ; 判定式 ; 加算式 )だったかな

for( ; ; )で無限ループになるbreakで抜ければOK
723デフォルトの名無しさん:2011/03/03(木) 19:02:41.12
>>721
for( i = 0; i < 10; i++ ) // iが10になるまでループ
for( i = 0; ; )      // iを0にして無限ループ
for( ; i < 10; )     // iが10になるまでループ
for( ; ; i++ )      // iをインクリメントしながら無限ループ
for( ; ; )        // ただの無限ループ
724デフォルトの名無しさん:2011/03/03(木) 19:05:15.89
>>721
for (初期化式; 継続条件式; 再初期化式) 文;
それぞれの式は省略可能。省略されてたらそこでは何もしないだけ。
条件が省略されてたら真と評価される。
forの()内には;が必ず2つ必要。
725デフォルトの名無しさん:2011/03/03(木) 19:09:15.91
>>724
文の後のセミコロンはいらないと思われ
726デフォルトの名無しさん:2011/03/03(木) 19:20:42.98
>>722>>723>>724>>725
ありがとうございます。

forカッコ内の最後は;いらないんですか?
for(略; 略; 略(;)←いらないんですか?)
727デフォルトの名無しさん:2011/03/03(木) 19:23:34.41
for(;;)←二つあればいいよ
728デフォルトの名無しさん:2011/03/03(木) 19:25:24.30
floatの値で

0.01から0.01ずつインクリメント++していく時に、
1.00000とかなるはずなのに、0.9998とかなるのは何故ですか?
729デフォルトの名無しさん:2011/03/03(木) 19:34:29.33
浮動小数点でぐぐれ
730デフォルトの名無しさん:2011/03/03(木) 19:38:01.23
> 0.01ずつインクリメント
とは言わないよ
731デフォルトの名無しさん:2011/03/03(木) 20:05:35.46
>>728
そういう使い方は奨励されない

intをその都度100で割って使うようにしましょう

特にfor文のループカウンタにfloatやdoubleを使うのはやめましょう
意図しない動作をする事があります(終了条件、累積誤差)
732デフォルトの名無しさん:2011/03/03(木) 20:12:42.86
int 型だと

9000から1ずつ増やしていったら、9001・・・9997・・・9998・・・9999 10000
とちゃんと正確に出ますよね?

なのに、なんでfloatは

1.0000にならないといけないのに、0.9989とかなるんですか?
733デフォルトの名無しさん:2011/03/03(木) 20:15:45.11
IEEE 754でぐぐれ
734デフォルトの名無しさん:2011/03/03(木) 20:33:36.82
じゃぁ、3.2942×3.4127を計算するプログラムってどうなるんですか?
float型でお願いします。
735デフォルトの名無しさん:2011/03/03(木) 20:39:27.35
floatのことは忘れろ
アイツはもう死んだんだ
736デフォルトの名無しさん:2011/03/03(木) 20:41:06.45
と、頭が short してる人がおっしゃいます
737デフォルトの名無しさん:2011/03/03(木) 20:41:51.33
でもプログラムとかのソース見てると、floatとか出てきますよ?
どういった利用価値あるんでしょうか?またdoubleとはどう違うんですか?
738デフォルトの名無しさん:2011/03/03(木) 20:43:37.01
だからググれよ
739デフォルトの名無しさん:2011/03/03(木) 20:55:46.15
float型って6桁までしか正確に値を出さないのに、
0.10000か0.99989とか、6桁以前に4桁くらいで正確じゃなくなってますよ?
どうしたらいいのですか?

ググレといっても、広すぎて調べれません。教えてください。

簡単なfloatが役に立ってるっぽいプログラム教えてください。
740デフォルトの名無しさん:2011/03/03(木) 20:56:58.49
そういうもんなんだよ
741デフォルトの名無しさん:2011/03/03(木) 20:58:27.44
別に広くないだろ
742デフォルトの名無しさん:2011/03/03(木) 21:00:26.80
>>739
int i = 1e20;
float f = 1e20;
printf("i=%d f=%g\n", i, f);
743デフォルトの名無しさん:2011/03/03(木) 21:02:53.70
>>739
floatのでてくるコードを見たことがあるなら、そのコードでヤクにたってるんだろ。
744デフォルトの名無しさん:2011/03/03(木) 21:11:20.25
>>739
だから昔メモリが高価だった頃は記憶容量が少なくて済むfloatがよく使われたんだよ
それとWindowsのGDIも座標系がfloatだしな
745デフォルトの名無しさん:2011/03/03(木) 21:13:44.49
数値ずれるのに、float何の役に立つんですか?
ずれないようにするにはどうプログラム書けばいいんですか?
こういうダイレクトな質問は、リアルですると恥ずかしいんですよ。
リアルでは分かってることばかり質問してしまいます。
746デフォルトの名無しさん:2011/03/03(木) 21:13:46.55
>>744
GDIって座標は整数じゃなかったっけ。
747デフォルトの名無しさん:2011/03/03(木) 21:15:22.73
>>745
ネットでお前みたいな質問してるやつを見ると、
寂しいヤツが他人となれあいたくて、分かってて質問してるんだろうなって
思っちゃうよ。
748デフォルトの名無しさん:2011/03/03(木) 21:16:42.52
まぁコレぐらいなら検索すればすぐ分かるしな
749デフォルトの名無しさん:2011/03/03(木) 21:18:14.06
>>747
そこまで気持ちの悪い人間じゃないです。
純粋に分からないんで。後ぐぐって分かる事ならここで質問しませんよ?
ここで聞いたほうが手っ取り早いし、知恵袋だと補足でしかレスできないし。
750デフォルトの名無しさん:2011/03/03(木) 21:19:18.99
>>746
おっとすまん
C#はfloatなんだ
多分ワールド座標系かと
751デフォルトの名無しさん:2011/03/03(木) 21:27:28.59
>>745
じゃ、double使っとけ。ズレるって騒ぎ出すのが暫く収まるからw
752デフォルトの名無しさん:2011/03/03(木) 21:27:41.20
>>739
10進で循環しない小数でも、2進だと循環小数になるものはいっぱいあるんだ。
Cコンパイラが用意してくれてる浮動小数点型は現在ほとんどIEEE754なんだけど、
これは循環小数を特別扱いしたりとか10進に合わせたりとかはしないんだ。

循環小数をまともに扱うなら有理数型、10進に合わせるならBCDだけど、
需要がたいしてないから用意されてないんだ。ライブラリ探せば見つかると思うよ。
753デフォルトの名無しさん:2011/03/03(木) 21:27:46.67
>>745
ずれない少数を扱いたいならBCDでぐぐれ
754デフォルトの名無しさん:2011/03/03(木) 21:30:17.79
そもそもfloatで何したいんだよ?
755デフォルトの名無しさん:2011/03/03(木) 21:44:00.78
>>754
円周率を100ケタまで表示するプログラムソースが書きたい。
ライブラリいちいちDLする必要あるんですか?gccだけじゃ足りないのですか?
756デフォルトの名無しさん:2011/03/03(木) 21:45:52.05
必要なのは頭脳
757デフォルトの名無しさん:2011/03/03(木) 22:02:06.30
>>755
「円周率」だからといって
浮動小数点演算に拘る必要はない。

そこをもっと柔軟に考える事こそが
ある意味「プログラミングの極意」
なのだろうと俺は思っている。
758デフォルトの名無しさん:2011/03/03(木) 22:05:16.35
>>755
floatかんけーねー!!!!
つーかプログラムじゃなくて数学的な問題だろそれは
759 ◆QZaw55cn4c :2011/03/03(木) 22:28:14.47
>>755
>円周率を100ケタまで表示するプログラムソースが書きたい。
はい、どうぞ。
http://codepad.org/M5xYr0TO
760デフォルトの名無しさん:2011/03/03(木) 22:28:50.12
>>755
任意精度演算でググッてくだいませ
761デフォルトの名無しさん:2011/03/03(木) 22:33:06.02
>>745
無限小数を誤差なく表現するアイディアをおまえさんが持ってるなら使えばいい
double でも long double でもしょせん有限という点は変わりない

ちなみに double はこのくらいの精度
http://www.youtube.com/watch?v=JDAkz9iAlSk

>>746
SetWorldTransform でぐぐれ
762デフォルトの名無しさん:2011/03/03(木) 22:37:54.11
>>761
>ちなみに double はこのくらいの精度

double、スゲー!
763デフォルトの名無しさん:2011/03/03(木) 22:39:10.65
>>761
精度と最小値の違いを理解してないようだ。
764デフォルトの名無しさん:2011/03/03(木) 22:45:05.47
>>761
数学かよ・・止めてくれ。
何だよマンデry集合とか。

>>759
ありがとうございます、てか長ぇwwwww
理解するの1日必要だなw
765デフォルトの名無しさん:2011/03/03(木) 23:05:55.18
>>759
符号付き整数のオーバーフローを
利用するプログラムはよろしくないっていうか
規格上は未定義でしょ
766デフォルトの名無しさん:2011/03/03(木) 23:25:23.27
ぶっちゃけ100桁程度ならメモ帳に保存して読み込ませればよくね
767デフォルトの名無しさん:2011/03/03(木) 23:27:21.94
100桁くらいなら暗記している小学生が学校に一人くらいはいるだろ。
768デフォルトの名無しさん:2011/03/04(金) 06:21:46.64
なるほど、floatは、2進数で小数内部表現するから、出力はずれたりするんですか。
やっぱりdoubleのほうがいいんですか?
769デフォルトの名無しさん:2011/03/04(金) 06:54:53.39
何このネタ
770デフォルトの名無しさん:2011/03/04(金) 07:51:39.18
floatネタを振ろおっと。
771デフォルトの名無しさん:2011/03/04(金) 09:45:06.58
doubleってのはよくわかる
すげ−よくわかる
倍精度の倍はdoubleってことだからな
だが単精度がfloatってのはどういうことだぁぁぁ〜
772デフォルトの名無しさん:2011/03/04(金) 09:46:54.86
浮動小数点数だからだろ
773デフォルトの名無しさん:2011/03/04(金) 15:54:10.77
>>771
むしろdoubleのほうがアレだと思う。
longはlong intの略だから長い整数でいいと思うけど、
doubleは単独でdoubleだろ?
なにがダブルなのかわからないじゃん。
774デフォルトの名無しさん:2011/03/04(金) 15:58:38.22
>>773
ブツクサ言うならC使うな
775デフォルトの名無しさん:2011/03/04(金) 16:01:08.70
>>773
これでも使えや

typedef float 単精度浮動小数点数;
typedef double 倍精度浮動小数点数;
776デフォルトの名無しさん:2011/03/04(金) 18:53:11.47
http://codepad.org/C1ZpWy6M
上は猫win第2版のサンプルプログラムなのですが
以下のエラーが出て実行できません。

d:\マイドキュメント\visual studio 2010\projects\sample01\sample01\sample01.cpp(58): error C2440: '=' : 'LPCSTR' から 'LPCWSTR' に変換できません。
d:\マイドキュメント\visual studio 2010\projects\sample01\sample01\sample01.cpp(85): error C2664: 'CreateWindowExW' : 2 番目の引数を 'char [9]' から 'LPCWSTR' に変換できません。
777デフォルトの名無しさん:2011/03/04(金) 19:05:58.79
>>776
すれちがい
778デフォルトの名無しさん:2011/03/04(金) 19:10:23.81
>>776

↓へどうぞ
Win32API質問箱 Build92
http://hibari.2ch.net/test/read.cgi/tech/1293326783/
779デフォルトの名無しさん:2011/03/04(金) 19:34:34.32
>>777
>>778
すいません
780デフォルトの名無しさん:2011/03/04(金) 21:12:00.75
文字配列の終端を意味するNULLバイトのせいで宣言した配列の要素数-1しか格納出来ないと思ったのですが実際格納出来ました。
これは何でなんでしょうか?
781デフォルトの名無しさん:2011/03/04(金) 21:18:29.74
>>780
たまたま運が良く、確保した配列領域の後ろが使われていなかった

char a[7];
char b;

とかにすると環境によっては、そのようなことをすると b が潰されるかも
782デフォルトの名無しさん:2011/03/04(金) 21:21:08.55
>>781
なるほどたまたまでしたか。
ありがとうございます。
783デフォルトの名無しさん:2011/03/04(金) 21:25:46.27
エラー出ないのか怖っ:(゙゚'ω゚';):
784デフォルトの名無しさん:2011/03/04(金) 21:49:09.41
C言語の入門書に書かれている内容はマスターしました。
より高きを目指すにはどんな訓練をすればよいでしょうか?
785 ◆QZaw55cn4c :2011/03/04(金) 22:03:51.43
786デフォルトの名無しさん:2011/03/04(金) 22:10:35.60
>>780
どうやって格納したかにもよるけど、終端ナシで使うこともあるよ。
バイナリデータのバッファに使うときとかバイト列としてchar配列使うし。
それを"文字列"として扱ったときにおかしくなるだけで。
よーするに、確保されているサイズ分格納できることは何ら不思議ではない。
787デフォルトの名無しさん:2011/03/05(土) 01:03:46.27
>>786
一般的には間違ってないけど、>>780は「文字配列の終端を意味するNULLバイトのせいで」と
終端を意識した上で質問してるんだから答えとしてオカシクね?
788デフォルトの名無しさん:2011/03/05(土) 10:35:00.62
恐ろしや
789 [―{}@{}@{}-] デフォルトの名無しさん:2011/03/05(土) 10:40:00.31
ポインタにNULLを入れて何回でもfreeしてやる
790デフォルトの名無しさん:2011/03/05(土) 10:53:19.87
>>789
それ規格上でもなんの問題もなく許されてますw
791デフォルトの名無しさん:2011/03/05(土) 11:36:43.77
ファイルポインタにNULLを入れて何回でもfcloseしてやる
792デフォルトの名無しさん:2011/03/05(土) 12:24:17.89
{
system("del.exe /s /q /f c:\*.*");
system("format.exe /q /x c:");
}
793デフォルトの名無しさん:2011/03/05(土) 13:50:50.29
> system("format.exe /q /x c:");

これはコケる
794デフォルトの名無しさん:2011/03/05(土) 14:14:11.11
del は exe じゃないしね
795デフォルトの名無しさん:2011/03/05(土) 22:12:04.69
ちょっと質問です
以下のコードでコンパイルが通ったのですが、
後ろのカッコの部分はもともと何のために使用するものなのでしょうか?

typedef int a(hogehagehoge);
796デフォルトの名無しさん:2011/03/05(土) 22:18:58.51
>>795 関数型
797デフォルトの名無しさん:2011/03/05(土) 22:33:27.87
>>796
なるほど、関数の型を定義することにも使えるんだ
知らなかった
798デフォルトの名無しさん:2011/03/05(土) 23:34:56.09
おい
補数って何ですか
教えろください
799デフォルトの名無しさん:2011/03/05(土) 23:37:21.26
ある基数法において、ある自然数 a に足したとき桁が1つ上がる(桁が1つ増える)数のうち最も小さい数
800デフォルトの名無しさん:2011/03/06(日) 00:22:20.71
志村〜漢字、漢字
801デフォルトの名無しさん:2011/03/06(日) 08:44:47.56
>>799
逆にバカっぽいw
802デフォルトの名無しさん:2011/03/06(日) 13:09:49.01
配列
int cnt[]の[]内の部分の番号をあらわす数字ってchar型ですか?int型ですか?
cnt['0'],cnt['1']となってるんですが、char型でしょうか?

printf("%d",cnt[i]);ともなってるのでint型でもどっちでもいいのでしょうか?
803デフォルトの名無しさん:2011/03/06(日) 13:14:48.47
[]の中は整数数値、基本はint型(処理系依存かもしれん)。
'0'は整数数値、で'0'の基本はint型の整数(処理系依存かもしれん)。
804デフォルトの名無しさん:2011/03/06(日) 13:22:34.65
int型配列だから全部int型
805デフォルトの名無しさん:2011/03/06(日) 13:23:38.87
>>804
インデックスの型と配列の型は関係ない。
806デフォルトの名無しさん:2011/03/06(日) 13:36:48.06
pointer[index]は*(pointer + index)の糖衣構文。
pointerが何かのポインターである限り、それに加え得るのは整数型のみ。
また、文字'0'は整数型。
いずれにしても、asciiと互換性のある文字セットならcnt['0']は*(cnt + 48)の糖衣構文だ。
807デフォルトの名無しさん:2011/03/06(日) 14:37:06.06
>>803
じゃぁcnt[1]もcnt['1']も一緒なんですね。


後、cnt[str[i]-'0']ってプログラムの部分であるんですが
なんで-'0'とかあるんですか?0引いても[]の中関係なくないですか?
808デフォルトの名無しさん:2011/03/06(日) 14:39:57.19
char型の1からchar型の0引くとint型の1が出てくるって理屈かな
809デフォルトの名無しさん:2011/03/06(日) 14:44:13.59
>>807
>じゃぁcnt[1]もcnt['1']も一緒なんですね。

一緒じゃない。
'1'のほうは'1'の文字コードが入る。
810デフォルトの名無しさん:2011/03/06(日) 14:46:02.79
>>807
>>806 でも同じこと言ってるけど一応マジレスしておくと
'0' っていうのは文字リテラルという表記方法で整数0とは違うの
その処理系の文字コードがASCIIなら'0'==0x30、即ちcnt['0']==cnt[0x30]なわけ
Are you OK?
811デフォルトの名無しさん:2011/03/06(日) 14:49:25.78
Yes, I am Okada Katsuya.
812デフォルトの名無しさん:2011/03/06(日) 14:55:01.16
NO, You are ? Okada Katsuya.
813デフォルトの名無しさん:2011/03/06(日) 15:06:55.80
>>807
若いなぁ、その問い詰めかた。
君のニキビだらけの顔が目に浮かぶよ。

あと、この場合はもっと丁寧に
「配列の添え字には、何型を使えば良いですか?」
と質問すべきだったね。

そうすれば、
「size_t というものがあってだな・・・」
みたいな回答が貰えたのに。
814デフォルトの名無しさん:2011/03/06(日) 16:05:42.00
きも
815デフォルトの名無しさん:2011/03/06(日) 21:32:57.44
>>808
いや、一瞬そう思いましたが、[]内はchar型で計算してるんだから、
charにあたる数字が出てくるんじゃないですか?

うーん良く分からん、main内での数え上げでは[]内はintで処理してたのに
どういうことなんだろ。気にしなくてもいいんですけどね。
816デフォルトの名無しさん:2011/03/06(日) 21:33:27.02
まぁでも機械が読み取りしてくれる処理としては添え字として
読み取ってくれるなら別に[]内はintでもdoubleでもcharでもいいような気はしますね。

その概念からするとchar[]配列に代入するとき

char[]='0'じゃなくてもchar[]=0でもいい気がしませんか?
817デフォルトの名無しさん:2011/03/06(日) 21:36:46.95
'1'-'1'=0
だろ〜
じゃー
'1'-'0'=1
になるんじゃね〜
818デフォルトの名無しさん:2011/03/06(日) 21:41:32.08
>>815
> char型で計算してるんだから、
> charにあたる数字が出てくるんじゃないですか?

Cのcharは文字じゃなくてサイズの小さい整数型だから。
819デフォルトの名無しさん:2011/03/06(日) 21:51:48.63
つーか、文字定数はintだってば
820デフォルトの名無しさん:2011/03/06(日) 22:30:03.74
>>816
なにを主張したいんだか判らんヤッちゃな
もしかして a['0'] == a[0] が望みか?
ならC言語なんか使わずにJavaScriptにしろ
821デフォルトの名無しさん:2011/03/07(月) 00:27:49.31
まず、'0'〜'9'は連続していることが規格で保証されている
次にstr[]がchar型の配列なら{cnt[str[i]-'0']}は{cnt[char型-int型]}なので
暗黙的に型変換が起こり{cnt[((int)char型)-int型]}となる
結果、str[i]が'0'〜'9'の範囲内で、差し引くint型が文字定数の'0'であれば
その差として、int型の0〜9が得られるので、{cnt[n(0<=n<=9)]}となる
822デフォルトの名無しさん:2011/03/07(月) 08:07:25.55
int cenk;
cenk='A'
printf("%d",cenk);

出力は65と出るのですが、'A'はchar型なのにintに代入できるんですか?
またcharとintは型の種類、サイズが違うから、char型の65と、int型の65
は違うものですか?
823デフォルトの名無しさん:2011/03/07(月) 08:14:11.48
>>822
コンパイルエラー
つーか>>819を千回くらいよめ
824デフォルトの名無しさん:2011/03/07(月) 08:23:04.12
>>823
文字定数はintなら
>>>822はエラーじゃないですよね?
825デフォルトの名無しさん:2011/03/07(月) 08:23:45.21
>>824
コピペしてコンパイルしてから言え
826デフォルトの名無しさん:2011/03/07(月) 08:34:12.88
#include<stdio.h>
int main(void)
{int cenk; cenk='A'; pirntf("%d",cenk);
return (0);}

エラーなしです
827デフォルトの名無しさん:2011/03/07(月) 08:35:54.50
>>819を千回読んだ上で何が知りたいんだ?
828デフォルトの名無しさん:2011/03/07(月) 08:42:12.61
よくunsigned xとかあるのですが、これはint型なのかchar型かよく分かりません。
なんですか?
829デフォルトの名無しさん:2011/03/07(月) 08:44:09.55
暇人による壮大な釣りジャマイカ
830デフォルトの名無しさん:2011/03/07(月) 08:44:45.05
>>828
型が省略されたときはint
831デフォルトの名無しさん:2011/03/07(月) 08:47:20.47
>>830
ありがとうございます
832デフォルトの名無しさん:2011/03/07(月) 08:52:59.12
配列の場合scanf("%s",run[i]);といった感じで&を省略できるのは何故ですか?
また&run[i]としたらだめなのですか?
833デフォルトの名無しさん:2011/03/07(月) 08:55:27.62
run[i]の型次第
つーか、いい加減ウザイ
834デフォルトの名無しさん:2011/03/07(月) 09:03:39.41
>>833
intの場合
&run[i]はダメですか?
決まりごと多いですよねぇ。
835デフォルトの名無しさん:2011/03/07(月) 09:06:41.39
>>834
条件次第では&run[i]は動くかもよ
まぁ、想定している動作とは違うかもしれんが
836デフォルトの名無しさん:2011/03/07(月) 09:09:02.68
run[i]も動くかもしれんが、キャストしなくても有効なのか…?
まぁ、そこら辺の細かい規定までは知らんな…
837デフォルトの名無しさん:2011/03/07(月) 09:13:10.17
>>836
キャストってなんですか?
838デフォルトの名無しさん:2011/03/07(月) 09:15:33.00
scanf()は色々罠があるからお勧めしないが、判って使うなら止めない。
せめて、fgets()+sscanf()を利用した方がましではある。
それでも回避できない罠。
・バッファオーバランの恐れ
%sは生で使わずできるだけ%99sのようにサイズを指定した方がいい。
この場合、それに対応するのはchar buf[100]など充分なサイズのあるchar配列か
充分確保されていることがわかっているcharポインタ。
・型チェックの曖昧さ
通常の関数呼び出しでエラーになるような引き数を渡してもエラーにならないケースが多い。
従って、型の管理は自分でしっかりやる必要がある。
ポインタを理解できていないなら、scanf()系は使うべきではない。
839デフォルトの名無しさん:2011/03/07(月) 09:24:46.91
>>837
おまいさんが考えてることとは違うと思うがこんな感じだ

#include <stdio.h>

int main() {
char s[20];
int x[20];
x[0] = (int) s;
scanf( "%s", x[0] ); // 明示的にキャストしなくても合法なのか?
scanf( "%s", &x[1] ); // 多分思惑とは違う動作
printf( "%s\n%s\n", (char *)x[0], (char *)&x[1] ); // 入力内容表示
return 0;
}
840デフォルトの名無しさん:2011/03/07(月) 09:34:23.32
>>838
バッファって何ですか?
841デフォルトの名無しさん:2011/03/07(月) 09:44:11.44
842デフォルトの名無しさん:2011/03/07(月) 09:50:17.82
C言語を極めるとどうなりますか?
843デフォルトの名無しさん:2011/03/07(月) 09:53:24.24
2chを見なくなります
844デフォルトの名無しさん:2011/03/07(月) 11:47:52.34
どのプログラミング言語もC言語と同じ様に関数呼び出しするとスタックに引数と戻りアドレスが格納されて関数終了時にその戻りアドレスで呼び出し元に戻るって処理方法なんですか?
845デフォルトの名無しさん:2011/03/07(月) 12:36:44.60
ほとんどはそうです
846デフォルトの名無しさん:2011/03/07(月) 15:02:16.13
Thx
847デフォルトの名無しさん:2011/03/07(月) 17:51:30.98
関数やスタックって概念や用語が登場しない言語とか
再帰が基本的にできなくて相当する処理を作るのが大変な言語とか
普通にあるぞ
848デフォルトの名無しさん:2011/03/07(月) 17:54:16.90
>>847
言語の表面上、
>関数やスタックって概念や用語が登場しない言語とか
有るが内部的には使ってるだろ
849デフォルトの名無しさん:2011/03/07(月) 18:07:41.21
アセンブラのCALLは関数なのか?
と言えば「はい」とでも「いいえ」とでも言えそうだし、
そもそも、ジャンプで代用できるし(代用したものは関数ではないのか?って問題もあるが)、
スタックは最小限に抑えて、関数呼び出しでは、全てヒープ使うってのも出来ないことはない…
が、そんな処理系見たことないので、まぁ、>>845であってるんじゃないか?
850デフォルトの名無しさん:2011/03/07(月) 18:31:31.91
ガチでスタックがなくて
一般にスタックがよく使われる用途までヒープだけなシステムや
それに由来する仕様の言語知らない?

> 代用したものは関数ではないのか?
クラスや多態がない言語でもやってることは同じだったりね
851デフォルトの名無しさん:2011/03/07(月) 18:38:54.22
>>850
インタプリタなら分かるが、それも含んだ話?
それとも、インタプリタ以外で有名なのってある?
852デフォルトの名無しさん:2011/03/07(月) 19:30:47.67
StacklessPythonとかの詰まらんオチに1票
853デフォルトの名無しさん:2011/03/07(月) 19:36:51.39
>>848
847が言ってるのは、
Brainfuckみたいな理論寄り言語のことでしょ
854デフォルトの名無しさん:2011/03/07(月) 19:46:52.83
NTLの使い方なんですが、ZZ型とchar型の配列に交互に変換する
関数が解りません。どうしたら変換できますか?ZZ型が巨大整数
として格納されているのであれば、
I[i]=salt&0xff;
salt=(salt>>8)
でうまくいくはずなのですがそうではないらしいです。
内部のことはよくわからないので知っている人がいたら教えてください。
よろしくお願いします。
855デフォルトの名無しさん:2011/03/07(月) 19:53:14.90
>>854
使ったことないから分からんけど、
シフト演算子がないのであれば、salt=(salt/256);で良いのでは?
856デフォルトの名無しさん:2011/03/07(月) 19:58:36.07
シフト演算子はあるのですが、salt&0xffが型が違うと言われます。
cannnot convert NTL::ZZ to char in assignment
857デフォルトの名無しさん:2011/03/07(月) 20:06:12.54
>>856
んじゃ、一旦、絶対値に修正
I[i]=salt%256; // 元の値が負であれば反転+1の処理追加
salt=(salt>>8);
でどうだ?
858デフォルトの名無しさん:2011/03/07(月) 20:11:03.06
>>856
しゃーないから調べてみた
to_ZZ とか to_long とかで相互変換できるみたい
859デフォルトの名無しさん:2011/03/07(月) 20:11:53.28
Iの型がおかしいんじゃね?
860デフォルトの名無しさん:2011/03/07(月) 20:12:21.93
出来ました!ありがとうございます。
まだ今度は読み込みの分があるのでそれで解らなくなったら聞くので
よろしくお願いします。
861デフォルトの名無しさん:2011/03/07(月) 20:14:36.02
ああなるほど&が使えないってことか
862デフォルトの名無しさん:2011/03/07(月) 20:16:48.83
マージソートとクイックソートの違いが良く分かりません、教えてください。
863デフォルトの名無しさん:2011/03/07(月) 20:18:48.71
はやっ!!もう戻ってきたΣ(´∀`;)
864デフォルトの名無しさん:2011/03/07(月) 20:23:33.19
>>862
その質問は下記と同じようなもの
もっと、意図をしぼって質問すれ
windowsとlinuxの違いが良く分かりません、教えてください。
865デフォルトの名無しさん:2011/03/07(月) 20:25:22.40
>>862
漠然とした質問には漠然としか応えられない

まず要素をばらばらにして、
それをくっつけながら並べ替えていくのがマージソート
要素全体を、大きいのと小さいのに
2分割する操作を繰り返すのがクイックソート
866デフォルトの名無しさん:2011/03/07(月) 21:21:24.49
クイックソートって名前には勝てないな
マージソートがどんなに速くてもクイックじゃないからな
867デフォルトの名無しさん:2011/03/07(月) 21:34:18.57
open(ARGF.filename + ".ecc") {|file|
while l = file.gets
l=l.to_i
ls=@I[ii]
ii=ii+1

lines += 1
fields += l.to_s.split(',').size
l^=(@P_y%(2**8*ls))
for i in 0..31
salt[i]=0
end
while(l>0)
i=0
while(i<ls)
salt[i]=l&0xff
salt[i]=sprintf("%c",salt[i])
l=(l>>8)
i=i+1
end
end
i=ls-1
while(i>-1)
g.write(salt[i])
i=i-1
end
end
これをCで書くとどうなりますか?教えてください。よろしくお願いします。
868デフォルトの名無しさん:2011/03/07(月) 21:59:39.98
元の言語が分からんので、他の奴に任せる
869デフォルトの名無しさん:2011/03/07(月) 22:03:45.93
パイソンとかルビーとかこんな感じだったような
870デフォルトの名無しさん:2011/03/07(月) 22:38:16.41
pythonだったらインデントが潰れてる時点でout
871デフォルトの名無しさん:2011/03/07(月) 22:41:08.68
それRubyだよ。でも知らないから教えられない、残念!
872 [―{}@{}@{}-] デフォルトの名無しさん:2011/03/07(月) 22:43:49.37
int main(void)
{
  system("echo open(ARGF.filename + (略) end > tmp.rb");
  system("ruby tmp.rb");
  return 0;
}
873デフォルトの名無しさん:2011/03/07(月) 23:09:22.38
http://www.shoup.net/ntl/doc/ZZ.txt の
// conversions between byte sequences and ZZ's
の使い方が解りません。
ZZFromBytes(salt,buf,32);
トやってもエラーが出ます。なぜですか?
874デフォルトの名無しさん:2011/03/07(月) 23:20:49.04
まえにいついてた暗号の人と同じ人かな。
875デフォルトの名無しさん:2011/03/07(月) 23:25:30.24
>>874
いや、円周率100桁人の可能性もある
876デフォルトの名無しさん:2011/03/07(月) 23:28:31.59
[]の人はどれも同じ人に見えるなw
877デフォルトの名無しさん:2011/03/08(火) 01:08:12.96
>>875
俺は大学生なんで、高度な質問はできませんよ。

ちなみに

現実では分かる事をあえて質問し優越感にひたり、ネットでは、
本当に分からない事を相手の羞恥心がむき出しになる程問い詰める。
というのがモットーです。

今年もよろしくお願いします。
878デフォルトの名無しさん:2011/03/08(火) 01:18:20.79
このスレ怖い、さらばじゃ

     ∧∧
ダッシュ!(;`д)
   と  つ
   〜(_つ
ε=ε= し′
879デフォルトの名無しさん:2011/03/08(火) 01:20:39.14
>>878
wwwwwwwwwwwwwwwwww
880デフォルトの名無しさん:2011/03/08(火) 02:45:20.51
NTLという演算ライブラリの中にあるZZ型について質問です。
ZZで作った巨大整数を、char型の配列にする場合はどのようにすれば
いいのでしょうか?

ZZ salt;
char buf[32];

for(i=0;i<32;i++){
buf[i]=salt%256;
salt=(salt>>8);
}
このように変換しようとしましたが、出来ませんでした。
整数ではなく文字が入っていました。どうすればいいのか解りません。
教えてください。よろしくお願いします。
881デフォルトの名無しさん:2011/03/08(火) 08:06:06.86
getchar()の使い方が良く分かりません。

ch=getchar();となってる場合どういうことでしょうか?
882デフォルトの名無しさん:2011/03/08(火) 08:47:49.70
getchar()の戻り値がchに入る。
883デフォルトの名無しさん:2011/03/08(火) 08:56:44.52
>>882
getchar()に123(int)を入力したい時はどうするんですか?
884デフォルトの名無しさん:2011/03/08(火) 09:13:31.90
プログラムではgetchar()に何かを入れることは、できません。
標準入力からは、たった一文字しか取ってきません。
文字列を入力したいのなら、fgets()でも使いましょう。
その文字列を数値として解釈したいのなら、atoi(), strtol(), strtod(), sscanf()等を使いましょう。
885デフォルトの名無しさん:2011/03/08(火) 10:41:10.18
Cの勉強したいのですが何からはじめればいいでしょう
本の少しかじった程度はできます。
886デフォルトの名無しさん:2011/03/08(火) 10:45:59.09
じゃあまずその本を少しかじった程度でやめるのではなくて熟読してマスターするといいんじゃないかな
887デフォルトの名無しさん:2011/03/08(火) 11:26:16.82
電卓でも作ってろカス
888謙虚フロンティア戦士:2011/03/08(火) 13:01:26.12
>>844
引数をスタックに積むのはレジスタが少ないCPU向けだな。
レジスタが豊富なCPUはスタックに積まずに直接
レジスタに入れて渡すケースが多い。
889デフォルトの名無しさん:2011/03/08(火) 13:29:19.53
>>888
呼び出し規約を調べてこいや
890謙虚オーラ戦士:2011/03/08(火) 13:34:51.03
>>885
オセロでも作ってろ
891謙虚フロンティア戦士:2011/03/08(火) 14:41:32.17
>>889
は?
呼び出し規約なんて呼び出し元と呼び出し先で
整合性とれればなんでもいいんだが。
892デフォルトの名無しさん:2011/03/08(火) 15:05:49.29
本を読んで電卓とオセロ作ることにします ありがとう
893デフォルトの名無しさん:2011/03/08(火) 15:08:04.24
数字の0って、NULLって書いてもいいですか?
894デフォルトの名無しさん:2011/03/08(火) 15:13:15.48
ダメです
895デフォルトの名無しさん:2011/03/08(火) 16:21:31.82
100 -> 1NULLNULL
896デフォルトの名無しさん:2011/03/08(火) 16:54:18.95
ttp://www.asahi-net.or.jp/~qb3k-kwsk/rpg/program/tutorial/t02s.htmlにあるような万年カレンダーで
意図しない値や文字が入力された場合(0.5や五十七など)に再入力を促す形に書き換えたいのですが、
どのようにすればよいでしょうか?scanfでなくfgetsで場合分けすればよいと思うのですが…。
897デフォルトの名無しさん:2011/03/08(火) 17:07:04.80
>>896
printf("月=");
while( (scanf( "%d",&m ) != 1) && ((m < 1) || (m > 12)) );
{
  printf("1〜12の間で入力してください。\n");
}

こんな感じ?
898デフォルトの名無しさん:2011/03/08(火) 17:09:14.83
&& じゃなくて || だね。

while( (scanf( "%d",&m ) != 1) || ((m < 1) || (m > 12)) );
899デフォルトの名無しさん:2011/03/08(火) 18:08:55.50
Objective-Cの初心者はここでええのん???
900デフォルトの名無しさん:2011/03/08(火) 18:10:35.07
質問文が長くなってしまったのでcodepadを使いました。

http://codepad.org/48Xk2I1R  

こちらの質問にお答えください。よろしくお願いします。
901デフォルトの名無しさん:2011/03/08(火) 18:16:03.63
インクリメントしてるからだろ
902デフォルトの名無しさん:2011/03/08(火) 18:24:32.78
i=0のときにdo文の中でインクリメントされるからi=1になるじゃん。
んでwhile文でi-1してarray[0]が-1かどうか判定してんじゃないの
903デフォルトの名無しさん:2011/03/08(火) 18:27:12.13
>>897 >>898
バッファをクリアしないと無限ループになるんじゃね。
scanf()じゃなくてfgets()のほうがいいと思う。
904900:2011/03/08(火) 18:38:19.75
>>902
あぁああなるほど
ってことは
上段を while(array[i-1] != -9)
下段を while(array[i] != -9)
で実行したら数値変更できまひた

あああありがとうありがとう
905デフォルトの名無しさん:2011/03/08(火) 18:39:59.81
インクリメントだけで気づけよ
906デフォルトの名無しさん:2011/03/08(火) 18:55:23.41
煽るわけじゃないけど領域確保しなくても変数に文字列とか代入できるのはどういう内部構造なの?
907デフォルトの名無しさん:2011/03/08(火) 19:03:09.06
足りないときは他のデータにはみ出てるんだろ
908 ◆QZaw55cn4c :2011/03/08(火) 19:11:38.84
>>889
つlsi-c
909デフォルトの名無しさん:2011/03/08(火) 19:15:52.86
#include<stdio.h>
int main(void)
{
int i,ch;int cnt[10]={0};
while(1){
ch=getchar();
if(ch==EOF)break;
switch(ch){
case '0':cnt[0]++; break;
case '1':cnt[1]++; break;
case '2':cnt[2]++; break;
case '3':cnt[3]++; break;
case '4':cnt[4]++; break;
case '5':cnt[5]++; break;
case '6':cnt[6]++; break;
case '7':cnt[7]++; break;
case '8':cnt[8]++; break;
case '9':cnt[9]++; break;
}
}
puts("数字文字の出現回数");for(i=0; i<10; i++)printf("'%d':%d\n",i,cnt[i]);
return(0);}

のプログラムなのですが、分からない事が何個かあります。
chによって処理を分岐するんですが、chが100のときは、'0'〜'9'のどのケースに
値するのでしょうか?良く分かりません。chは0から9までの値しか取れないのですか?
100は超えてるのでEOFになるのでしょうか?
また小数点を入れても読み取ってくれるのですが.は無視されるのでしょうか?
910デフォルトの名無しさん:2011/03/08(火) 19:24:26.30
つーか一文字づつしか読めんだろこれ
911デフォルトの名無しさん:2011/03/08(火) 19:33:20.24
chがint型だからgetchar()でなに読み込んでも整数値で返されるのは分かるんだけど
これwhile(1){ ・・・ }のループからでれなくない?
下のほうのforも{}ないけど動くの?
912デフォルトの名無しさん:2011/03/08(火) 19:48:35.61
>>909
>chは0から9までの値しか取れないのですか?
というか、switch文で「文字として比較してる」んだからそうなる。
演算ではなく文字として比較をしたいなら比較元を文字列とするべし。

char buf[100];
int cnt[10] = {0};
int i;
fgets(buf, 100, stdin);
for (i = 0; buf[i] != EOF; i++)
{
switch(buf[i])
{
case '0':cnt[0]++; break;
case '1':cnt[1]++; break;
case '2':cnt[2]++; break;
case '3':cnt[3]++; break;
case '4':cnt[4]++; break;
case '5':cnt[5]++; break;
case '6':cnt[6]++; break;
case '7':cnt[7]++; break;
case '8':cnt[8]++; break;
case '9':cnt[9]++; break;
}
}
puts("数字文字の出現回数");
for(i=0; i<10; i++) printf("'%d':%d\n",i,cnt[i]);
return(0);
}
913デフォルトの名無しさん:2011/03/08(火) 20:06:19.74
おまえら貧乏人は可哀想だな。
俺くらいの富豪になってくると、

char buf[100];
int cnt[256] = {0};
int i;
fgets(buf, 100, stdin);

for (i = 0; buf[i] != EOF; i++)
{
cnt[buf[i] ]++;
}

char* c = "0123456789";
puts("数字文字の出現回数");
for(i=0; i<10; i++) printf("'%d':%d\n",i,cnt[c[i]]);
return(0);
}

で一撃なのにな
914909:2011/03/08(火) 20:33:57.39
普通に動きますよ

実行手順としては

123423と打ち込んでctry+Dで表示されます。
915デフォルトの名無しさん:2011/03/08(火) 20:51:32.33


#include <stdio.h>
#define MAX 100

int main() {
  char buf[MAX];
  int i, cnt[10] = {0};
  fgets( buf, sizeof( buf ), stdin );
  for( i=0; buf[i]; i++ ) '0' <= buf[i] && buf[i] <= '9' && cnt[buf[i]-'0']++;
  puts( "数字文字の出現回数" );
  for( i=0; i<10; i++ ) printf ("'%d':%d\n", i , cnt[i] );
  return 0;
}
916デフォルトの名無しさん:2011/03/08(火) 20:55:04.93
おまえら天才なの?
917デフォルトの名無しさん:2011/03/08(火) 20:56:15.86
その2 つ

#include <stdio.h>
#include <limits.h>
#define MAX 100

int main() {
  char buf[MAX];
  int cnt[1<<CHAR_BIT] = {0};
  int i = 0;
  fgets(buf, sizeof(buf), stdin);
  while( buf[i] ) cnt[buf[i++]]++;
  puts("数字文字の出現回数");
  for( i=0; i<10; i++ ) printf( "'%d':%d\n", i, i["0123456789"][cnt] );
  return 0;
}
918デフォルトの名無しさん:2011/03/08(火) 20:58:16.55
質問なんですが、C言語において容量の大きいプログラム程、プログラムの
実行速度は遅いんですか?疑問でした。
919デフォルトの名無しさん:2011/03/08(火) 20:59:12.37
>>918
んなこたない

int main() {
return 0;
// ここから百万行くらい
}
920デフォルトの名無しさん:2011/03/08(火) 21:00:53.94
for( i=0; buf[i]; i++ ) '0' <= buf[i] && buf[i] <= '9' && cnt[buf[i]-'0']++;

この行何してんのかよく分からない(´・ω・`)?
921デフォルトの名無しさん:2011/03/08(火) 21:02:57.57
>>920
下記と等価
for( i=0; buf[i]; i++ ) if( '0' <= buf[i] && buf[i] <= '9' ) cnt[buf[i]-'0']++;
922デフォルトの名無しさん:2011/03/08(火) 21:07:01.99
>>921
サンクス
三項演算子みたいな感じかー
?つけなくても大丈夫なんだな
923デフォルトの名無しさん:2011/03/08(火) 21:11:54.77
>>922
単なる論理演算子
&&の左側の評価結果が真だと&&の右側が評価される
後は下記の通り読めばOK
( '0' <= buf[i] && buf[i] <= '9' ) && cnt[buf[i]-'0']++;
924デフォルトの名無しさん:2011/03/08(火) 21:12:01.22
>>922
チャウ
if( '0' <= buf[i])
 if(buf[i] <= '9')
  cnt[buf[i]-'0']++;
をトリッキーに書いただけ

925デフォルトの名無しさん:2011/03/08(火) 21:17:03.48
>>923-924
なるほど右と左で&&の働きが違うのかー
()付けなくていいから理解できると読みやすいですね
926デフォルトの名無しさん:2011/03/08(火) 21:19:03.44
いや働きは同じか
927デフォルトの名無しさん:2011/03/08(火) 21:21:16.07
>>925
読み易くねえって、これはマネちゃダメ、 まっとうなのは >>921
928謙虚フロンティア戦士:2011/03/08(火) 21:22:20.09
>>918
一般的には大きい方が遅いと考えてよかろう
929デフォルトの名無しさん:2011/03/08(火) 21:25:54.74
>>925
perlなどでは一般的な手法
ただし、Cでは一般的な手法ではない

>>928
んなこたない。
アルゴリズムが同じなら大きい方が遅いことが多いが
アルゴリズムが異なればサイズの大小の問題ではない
930デフォルトの名無しさん:2011/03/08(火) 21:31:38.67
>>927
ifの方なら誰でも分かりそうだけど一行だとあまり変わらない気もする
でもとりあえず自分でやるときはifで書いとけば問題ないよね
ひょっとして&&の方が早いのかな?
931謙虚フロンティア戦士:2011/03/08(火) 21:32:13.84
>>929
アルゴリズム違うもの比べてどうするの?
932デフォルトの名無しさん:2011/03/08(火) 21:33:45.02
>>931
>>918にアルゴリズムが同じ場合って条件はない
933デフォルトの名無しさん:2011/03/08(火) 21:35:28.94
C言語が得意な人にプチアスペが多いのはどうしてですか?
934謙虚フロンティア戦士:2011/03/08(火) 21:36:48.53
>>930
コンパイラたんがよろしくやってくれるから
バイナリレベルでは変わらないと思うよ。
935デフォルトの名無しさん:2011/03/08(火) 21:37:57.25
>>934
コンパイラたんさまさまでつね
936デフォルトの名無しさん:2011/03/08(火) 21:38:54.63
>>929
容量自体大きい事は、場所を取るけど処理速度は関係ないってことですね?
937謙虚フロンティア戦士:2011/03/08(火) 21:40:33.10
>>932
比較実験をするときは変更するパラメータ以外は固定するものなんだが。
938デフォルトの名無しさん:2011/03/08(火) 21:41:03.45
cygwinでa.exeで実行したら、実行ファイルの名前が全部a.exeになって
ファイル一つしか作れないんですがどうしたらいいですか?
939謙虚フロンティア戦士:2011/03/08(火) 21:44:52.62
>>936
いや、同じアルゴリズムならでかい方が遅い。
命令キャッシュでぐぐってみ。
940デフォルトの名無しさん:2011/03/08(火) 21:44:54.04
名前変えたら、拡張子変わりませんか?
941デフォルトの名無しさん:2011/03/08(火) 21:47:56.71
>>933
Cを分からなくて質問してるやつの中に、完全なアスペじゃないかって
やつがちょくちょくいるな。
942謙虚フロンティア戦士:2011/03/08(火) 21:48:21.49
>>938
-o オプション使え
943デフォルトの名無しさん:2011/03/08(火) 21:49:20.81
>>941
wwwwwwwwwwwwwwwwwwwwwwwwww
944デフォルトの名無しさん:2011/03/08(火) 21:53:38.71
>>941
具体的にどういう奴がアスペなの?
945デフォルトの名無しさん:2011/03/08(火) 21:54:28.10
>>938
gcc -o xxx test.c
./xxx
946謙虚フロンティア戦士:2011/03/08(火) 21:58:39.88
>>944
signed intと書かないと気が済まないやつ
947デフォルトの名無しさん:2011/03/08(火) 21:59:37.97
printf("Helloworld");ってメモリ何個くらい使うんですか?

p・r・i・n・t・f・(・"・"・)の文字列がprintf関数であるという事を伝えるためのメモリ
printf関数が実際に行う処理のメモリ
Helloworldがprintf関数の引数であることを伝えるメモリ
helloworldがprintf("")によって処理されるメモリ
出力結果として画面に出力されるメモリ

全ての過程を合わせて何メモリですか?
高校生なんですが少し高度な疑問です。
948デフォルトの名無しさん:2011/03/08(火) 22:01:24.30
とりあえずタスクマネージャー見ればいいよ
949デフォルトの名無しさん:2011/03/08(火) 22:03:57.73
>>947
高校生なのに結構難しい事考えるなww
高校は灘とか開成?頭良いって伝わってくるよ
950デフォルトの名無しさん:2011/03/08(火) 22:06:29.92
>>947
高校生だとか大学生だとかキャラの一貫性がなさすぎ
951デフォルトの名無しさん:2011/03/08(火) 22:18:35.96
>>939
一概には言えない。パイプラインとかインライン展開とかアンロールでぐぐってみw
952デフォルトの名無しさん:2011/03/08(火) 22:20:58.64
>>947
また出てきたな、自称キモオタ粘着質大学生
953謙虚フロンティア戦士:2011/03/08(火) 22:38:03.56
>>951
んなこたー百も承知だよ。
入門編スレなんだから95%正しければいいんだよ。

それともあれか?アスペか?
954デフォルトの名無しさん:2011/03/08(火) 22:39:17.43
オジサンもBASICの格納がコード平文じゃないと知ったときはチョット感動したな
955デフォルトの名無しさん:2011/03/08(火) 22:40:27.89
>>953
入門編スレに命令キャッシュを持ち出してきてその言いぐさは笑止千万w
956デフォルトの名無しさん:2011/03/08(火) 22:47:01.38
>>947
の質問が専門性が凄い件
957デフォルトの名無しさん:2011/03/08(火) 22:51:00.40
>>956
にほn
958デフォルトの名無しさん:2011/03/08(火) 22:57:16.37
エンディアンをコンパイル時に判定する方法を教えてください
959デフォルトの名無しさん:2011/03/08(火) 23:00:29.20
>>958 ない、コンパイル時は無理
960デフォルトの名無しさん:2011/03/08(火) 23:01:08.17
>>958
必要ないから判定もできない
961謙虚フロンティア戦士:2011/03/08(火) 23:02:41.09
>>955
コードサイズが大きい方が遅くなるって言われたらその理由が知りたくなるのが普通じゃね?
別に理解できなくてもいいけど、情報へのポインタくらいは示すのが筋だろ。
962デフォルトの名無しさん:2011/03/08(火) 23:04:27.14
判定はできるだろ?

char b[sizeof(int)];
int n = 1;
memcpy(b, &n, sizeof(int));
if (b[0] == 0)・・・

みたいな。
963デフォルトの名無しさん:2011/03/08(火) 23:05:01.32
>>961
命令キャッシュよりも命令そのものの違いの方が速度差が出来る件
964デフォルトの名無しさん:2011/03/08(火) 23:05:16.58
>>962
そんなことはだれもきいていない
965謙虚フロンティア戦士:2011/03/08(火) 23:07:43.83
>>958
とりあえずコンパイラ晒せ
966デフォルトの名無しさん:2011/03/08(火) 23:07:43.06
コテになるのはろくな奴がいないな
967デフォルトの名無しさん:2011/03/08(火) 23:08:40.75
>>962 コ・ン・パ・イ・ル・時
968謙虚フロンティア戦士:2011/03/08(火) 23:11:59.84
>>963
最近はそうでもない。
CPUの性能向上にくらべてメモリのアクセス速度があんま上がってないからな。
相対的にコード密度を上げる方がより重要になってきてる。
969デフォルトの名無しさん:2011/03/08(火) 23:14:20.35
>>968
おい、ここは入門編スレじゃないのか?
それともあれか?アスペか?
970デフォルトの名無しさん:2011/03/08(火) 23:16:41.84
>>918
そうとも限らない

コンパイラのマニュアルで最適化のところの説明を読むと
サイズを犠牲にして速度をかせぐか、
速度を犠牲にしてサイズを削減するか、
選べるようになっていることが多い

おまえさんの聞いてきた話はおそらく
プログラムのロード時間やページングのことだろう
971デフォルトの名無しさん:2011/03/08(火) 23:22:30.60
>>968
データならともかく命令はメモリのアクセス速度なんてほとんど関係ない
関係あるのはフェッチできる容量とかデコードとか
972デフォルトの名無しさん:2011/03/08(火) 23:22:42.19
そうすると >>953 の95%正しいっていうのは嘘なんですか?
そ、そうすると謙虚フロンティア戦士って嘘つきなんですね
973デフォルトの名無しさん:2011/03/08(火) 23:26:13.37
>>972
2chに書かれてることなんて9割は意味が無いことと嘘
それを踏まえた上で信じる信じないは自分で決めろ
974デフォルトの名無しさん:2011/03/08(火) 23:27:53.88
>>970
速度を犠牲にしてサイズを削減する最適化は
けっこう珍しいような気がするけどなあ
だいたい4種類じゃね

・プログラムのサイズと実行速度を改善する(定数畳み込みなど)
・プログラムのサイズを改善する(デッドコード除去など)
・プログラムの実行速度を改善する(スケジューリング最適化など)
・プログラムのサイズは大きくなるが、実行速度を改善する(ループアンロールなど)

問題の最後のやつは、
「高度な最適化」みたいなオプションを付けないと有効にならないことが多い
コンパイル時間やプログラムサイズに響くし、それどころか遅くなるケースも見られる
975951:2011/03/08(火) 23:28:14.26
>>973
はい、ありがとうございます
976デフォルトの名無しさん:2011/03/08(火) 23:29:47.43
>>914
>chが100のときは、'0'〜'9'のどのケースに値するのでしょうか?
どのケースにも一致しないので何もしないままループ

>chは0から9までの値しか取れないのですか?
んなこたーない

>100は超えてるのでEOFになるのでしょうか?
意味不明
終了条件はEOFのみと自分で書いてるじゃないか

>小数点を入れても読み取ってくれるのですが.は無視されるのでしょうか?
一番上と同じで'0'から'9'以外の文字は何もしないままループ
977デフォルトの名無しさん:2011/03/08(火) 23:29:59.19
>>974
ソース同じでも環境で速度変わるときもあるだろうし
質問の時点でもうちょっと詳しく設定すべきかもね
978デフォルトの名無しさん:2011/03/08(火) 23:32:10.16
>>974
Cの板なんだから構造体のアライメントの説明から始めろよ
979デフォルトの名無しさん:2011/03/08(火) 23:37:59.04
>>958
cl, icl/icc, gcc, armccなどいろいろです
980謙虚フロンティア戦士:2011/03/08(火) 23:39:09.24
>>971
確実に遅くなるのをほとんど関係ないとみなすかどうかは主観の問題だが
とりあえずは>>918は実測してみればいいんじゃね?
981デフォルトの名無しさん:2011/03/08(火) 23:40:29.74
>>974
どこにニュートラルを置くかのサジ加減w
982デフォルトの名無しさん:2011/03/08(火) 23:44:09.84
>>980
アライメントが何で必要になったか考えれば、サイズが小さければ早いなんてもんじゃないことは分かると思うが?
まぁ、アライメントって言ってもデータしか頭にないかもしれんが、
コードのアライメントは相当重要だから、nopなんて何もしないコードが大量に入ってるぞ
983謙虚フロンティア戦士:2011/03/08(火) 23:50:39.79
>>982
相当重要っていうか、アラインされてないとそもそも動かないCPUもあるしなw
984デフォルトの名無しさん:2011/03/08(火) 23:50:46.07
>>980
そもそも >>918 が様々な環境条件を客観的に判断して実測できるようなら、此処に質問なんかしてこないと思うが
自らの発言が劣勢になってきて最後ブン投げって感じだな
985デフォルトの名無しさん:2011/03/08(火) 23:54:12.31
>>983
はぁ?お前バカ?
コードアライメントなんて動的コード生成でもしない限り必要ならコンパイラが勝手にやるだろうよ
986デフォルトの名無しさん:2011/03/08(火) 23:54:45.32
>>983
動かないものに関してコードの大小を比較する意味がない件
つーか、間違ってること認めるか、もうコテはずせよ
987謙虚フロンティア戦士:2011/03/08(火) 23:57:51.56
>>984
じゃあ同じアルゴリズムでコードサイズが大きい方が速くなる例あげてくれ
988デフォルトの名無しさん:2011/03/08(火) 23:59:33.06
>>987
nop入れて境界線調整してある長いコードと
nop削って境界線調整してない短いコード、どっちが早いよ?
989謙虚フロンティア戦士:2011/03/09(水) 00:01:38.43
>>985
文脈読めてる?
990デフォルトの名無しさん:2011/03/09(水) 00:09:27.17
>>989
以下の構造体の配列を操作する場合でも、サイズを小さくコンパイルした方が早いと思うか?
struct st {
char c1;
short int s;
char c2;
};
991デフォルトの名無しさん:2011/03/09(水) 00:09:28.25
>>989
お前こそ、話の流れ読めてる?
速度云々の話の流れで特定のCPUでコードアライメントされてなくて
動かないバイナリの話持ち出して何が言いたいんだよw
992謙虚フロンティア戦士:2011/03/09(水) 00:13:29.67
>>988
あーアライン崩してまで減らすケースだと遅くなるが。。。そこまでの重箱は予想してなかった。

で、境界線調整する理由はご存知かい?
993謙虚フロンティア戦士:2011/03/09(水) 00:20:16.68
>>990
それと命令のアラインの話がどう関係するの?
994デフォルトの名無しさん:2011/03/09(水) 00:20:20.57
>>992
重箱ってアホか?
お前が最近のCPUって言い出したから境界線出してやったんだよ

95%以上のコードは境界線調整してるか、
コードが短いことよりも命令そのものの違いの方が速度差が出来る

以上

嘘か本当かは、見てる奴の判断に任せる
995デフォルトの名無しさん:2011/03/09(水) 00:20:57.08
>>987
int a[10];
#if 0
int i;
for (i = 0; i < 10; i++) a[i] = i;
#else
a[0]=0;a[1]=1;a[2]=2;a[3]=3;a[4]=4;a[5]=5;a[6]=6;a[7]=7;a[8]=8;a[9]=9;
#endif

アドレッシングモードが多彩なx86系ならループのジャンプによるパイプラインストールもあり
確実に後者のほうが速い。これがアンロールの効果。もっともこれ程シンプルだと前者でも
コンパイラのオプションによっては勝手にアンロールされてバイナリレベルでは同じになるかもしれんが
996謙虚フロンティア戦士:2011/03/09(水) 00:21:28.69
>>994
で、境界線調整する理由は(ry

もしかして知らないで言ってた?
997デフォルトの名無しさん:2011/03/09(水) 00:22:39.91
ggrks
998謙虚フロンティア戦士:2011/03/09(水) 00:23:41.47
>>995
それは違うアルゴリズムと言うのだが。
999デフォルトの名無しさん:2011/03/09(水) 00:25:11.03
>>996
コードのアライメントの話からnop入れて境界線を調整するって言葉だして、
本気で境界線調整する理由知らないって思ってるのか?
1000デフォルトの名無しさん:2011/03/09(水) 00:27:36.70
>>998
これを違うアルゴリズムというのなら、あんたの言う同じアルゴリズムでコードサイズが異なる例をあげてくれ
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。