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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
C言語の*入門者*向け解説スレッドです。

★前スレ
C言語なら俺に聞け(入門編)Part 94
http://toro.2ch.net/test/read.cgi/tech/1324648274/
★過去スレ
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++の宿題片付けます 155代目
http://toro.2ch.net/test/read.cgi/tech/1325685876/
★C++言語については避けてください。C++対応明記スレへどうぞ
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
  # サイズが大きい場合は宿題スレのアップローダ等を利用してください
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

長くなりそうなコードはcodepadに貼り付けてもいいでしょう
http://codepad.org/
2デフォルトの名無しさん:2012/01/13(金) 23:59:58.19
野田改造内閣に早速疑惑浮上

@aritayoshifu 有田芳生
捜査当局が内偵を続けている農水疑惑。詳細な怪文書まで出回っている。3億円の
行方はどこに?

@minorucchu ジャーナリスト 田中稔
野田改造内閣を揺るがす、農水省3億円スキャンダルの怪文書。二人の議員名が浮上。
34分前 webから
https://twitter.com/#!/minorucchu/status/157687110562881537

鹿野と筒井らしい
自公は問責も視野に調査開始だって
3デフォルトの名無しさん:2012/01/14(土) 00:01:34.02
オイ俺のコピペ脳!まで読んだ。
4デフォルトの名無しさん:2012/01/14(土) 10:53:25.48

int main() {
 char* str1[10];   //定義しただけで初期化していない。つまり文字列は格納されていない。

 func1( &str );
}


void func1( char* str ) {
 char* inStr;

 str = "test data";
 return ;
}
 

質問なんだが。
なぜ、きちんとstrに文字データが格納されるんだろうか?

5デフォルトの名無しさん:2012/01/14(土) 11:01:18.98
タブスペースで書き込んじまった

int main() {
 char* str1[10];   //定義しただけで初期化していない。つまり文字列は格納されていない。

 func1( &str );
}


void func1( char* str ) {
 char* inStr = "test";
 inStr = anotherFunc() ;
 str = inStr + 1 ;
 return ;
}
 

質問なんだが。
なぜ、きちんとstrに文字データが格納されるんだろうか?

main 関数でstr のポインタ領域は確保されているが、その参照先の文字列領域は未確保。
func1にとんだ先では、自動変数inStr に文字列が格納されており、そのポインタを渡すことでstrの中身に具体的なポインタが入る。
func1内では、str のポインタの指し示す先は自動変数inStrと同じポインタであり、参照できて当然。

ところが、return すると、自動変数inStr の内容はスタックを戻すことにより開放されている。
return された後にmainにてstrを参照しても全く問題ないし、キチンと値が格納されている。

値が参照できるのは、たまたまナノか?
この操作は問題ない?

6デフォルトの名無しさん:2012/01/14(土) 11:03:11.76
まずはコンパイルが通るか自分で確認してから書き込め
7デフォルトの名無しさん:2012/01/14(土) 11:10:20.15
最初のスタックへのアドレスがまずさ迷い人に成って5ではfunc1のリテラルも全く無意味になって更にアナザの返値の先頭バイトまで無意味に成ってる。
8デフォルトの名無しさん:2012/01/14(土) 11:16:53.05
>>6
あいよ。

int main(){
 char* str[10];   //定義しただけで初期化していない。つまり文字列は格納されていない。

 func1( str );
}



void func1(char* str[] ) {
 char* inStr;
 inStr = anotherFunc() ;
 str[1] = inStr + 1 ;
 return ;
}

char* anotherFunc(){
 return (char*)"test";
}
9デフォルトの名無しさん:2012/01/14(土) 11:17:18.80
>int main() {
> char* str1[10];   //定義しただけで初期化していない。つまり文字列は格納されていない。
>
> func1( &str );
>}
変数名ちゃうやん。

>void func1( char* str ) {

型ちゃうやん。(char ** → char *)

10デフォルトの名無しさん:2012/01/14(土) 11:18:37.34
>>7
>更にアナザの返値の先頭バイトまで無意味に成ってる
戻り値として、「est」が欲しいのでそうなってる。
11デフォルトの名無しさん:2012/01/14(土) 11:19:33.12
str[1]="test"+1;
12デフォルトの名無しさん:2012/01/14(土) 11:27:47.89
>>11
anotherFunc の return は、例えば「Content-Type: application/x-javascript」

その中で「application/x-javascript」を取り出したい。
13デフォルトの名無しさん:2012/01/14(土) 11:34:46.94
char* anotherFunc(){
 return (char*)"test";
}

がもし、

char* anotherFunc(){
 return (const static char*)"test";
}

なら、BSSなり、テキスト領域なりに格納されると思う。
テキスト領域かな?

でも

char* anotherFunc(){
 ・・・
 何がし処理
 ・・・
 return buf ; //bufには「Content-Type: application/x-javascript」文字列が格納
}
であるならコンパイルエラー(local address云々)

ここまでなら分かる。
14デフォルトの名無しさん:2012/01/14(土) 11:59:47.56
"test"はプログラムをメモリ上に読み込んだ時点で確保されてる。
開放されるのはプログラム終了時。

return (char*)"test";

char *inStr = "test";
return inStr;
も、書き込みをしなければ問題ない。

但し
char inStr[] = "test";
return inStr;
は駄目。
15o:2012/01/14(土) 12:00:08.37
ところが、>>8 における inStr はfunc1のスタックに積まれる。

いくら、str[1]にポインタを代入したところで、参照しているのはfunc1のスタック上にあるinStrのアドレスである。
func1がリターンしてしまうと、スタックは破棄( ただ単にゼロクリアしていないだけ)な気がする。

結局うまく言っているように見えるのはスタックが破壊されていないから?かな、と。
16o:2012/01/14(土) 12:05:30.40
>>14
返信ありがと。

str[1]に書き込んでmainで参照するにはどうするのが良い?
17デフォルトの名無しさん:2012/01/14(土) 12:08:12.05
ならないよ。
>8 の inStrはいわばメモ書き。
"test"の場所が書かれてるだけ。
str[1]に内容をコピー(1足してるけど)した後に消える。


住所書かれてるメモ紙を捨てたらその住所が消滅するわけじゃあるまい?
18o:2012/01/14(土) 12:10:32.04
あ、
念のため・・・

char* str[10] は、10個の不定長の文字列を格納する10個のポインタです。
最終目的は、sub関数から不定長の文字列を設定したい、と言うことです。
19o:2012/01/14(土) 12:14:47.41
>>17
最終的に聞きたいのは、スタティックなリテラル値ではなく、ダイナミックな変数の値です。

つまり、
inStrの具体的な値を、str[1]に入れ込むためにはどうしたらよいのか?と言うことです。
20デフォルトの名無しさん:2012/01/14(土) 12:14:47.84
【話題】女子にイラッとされる「理系男子特有の話し方」9パターン★2

【1】「要するに」と他人の話もまとめてしまう
【2】「違う」と小さな間違いでもいちいち訂正する
【3】「化学反応だから」などロマンチックなことにも根拠を述べる
【4】「仮に」など自分の専門分野でたとえたがる
【5】「具体的には?」と曖昧な表現でなく数字を知りたがる
【6】「データがあるから」と他人の意見を受け入れない
【7】「わかる?」と難しい説明の後で上から目線の確認をする
【8】「ありえない」など決めつけて断言する
【9】「だから?」とオチを先に聞きたがる


要するに馬鹿しか女子とはお話出来ないということだな
21デフォルトの名無しさん:2012/01/14(土) 12:27:51.39
1, 2, 7, 8は理系文系関係なく糞爺にも当てはまるw
22デフォルトの名無しさん:2012/01/14(土) 12:35:19.42
>19

>8 の
>str[1] = inStr + 1 ;
でいいんじゃないの?
23o:2012/01/14(土) 12:40:46.42
>>22
うむむ。

分からないのは、

「inStr+1」で指定されたアドレスは、func1がreturnされると開放されるメモリアドレスじゃないですか?
そうすると、そのアドレスを入れ込んだstr[1]の内容(=アドレス)も開放されてしかるべきアドレスじゃないかと?
24デフォルトの名無しさん:2012/01/14(土) 12:43:49.29
17を100回読め
25o:2012/01/14(土) 12:43:50.36
コンパイルエラーでできないんだけれども、こんなことをやりたいんだと言うことです。

*( str[1] ) = *( inStr + 1) ;
26o:2012/01/14(土) 12:46:49.28
>>24
20回読みましたデス。足りないかな?

スタティックなリテラル値の話ではなく、自動変数に格納されている値を戻したいと言うことですが・・・
戻すとき、リターン値はエラーコードで使用されていますのでリターンで戻すのは不可です。

なのでfunc1にポインタで渡して、その内容を更新したい、ということです。
もう20回読んでみます。
27o:2012/01/14(土) 12:51:23.74
後だしと言われるのを避けるために、実際のコードの説明をしますが、

実際にはfunc1 には構造体を渡しています。
正確には構造体のアドレスを渡してます。

構造体は

typedef struct s{
char* field[MaxHeaderNum];
char* attrib[MaxHeaderNum];
}S;
28デフォルトの名無しさん:2012/01/14(土) 12:53:18.74
こうか?
str[1] = (char *)malloc(strlen(inStr + 1)+1) ;
if(!str[1]){
/*エラー処理*/
}
strcpy( str[1] , inStr + 1);
29o:2012/01/14(土) 13:01:30.86
>>28
すんばらしい。
そういうことです。

はじめはそのように書いていたのですが、
非常に頻繁に呼ばれることと、
mainのなかでいつfreeすればよいのかが不定であることや、
関数を変にまたがってしまう、

などなどの複雑な問題により諦めてしまいました。
で、コードをシンプルにする方法でのアプローチでコーディングしなおしてます。

ヒープを使わなければ無利なのでしょうか?
30デフォルトの名無しさん:2012/01/14(土) 13:05:33.73
とりあえず
char* str[10]
をゼロクリアしてから使え。

あとは終了時とmallocする前にNULLで無ければfreeするような処理書いとけばいいんじゃね?
31o:2012/01/14(土) 13:16:46.64
>>30
だんけ

ってことは、>>8はたまたまうまく行っているだけってことかな?
32デフォルトの名無しさん:2012/01/14(土) 13:48:33.33
長引いてるな…

>スタティックなリテラル値の話ではなく、自動変数に格納されている値を戻したいと言うことですが・・・

自動変数に〜というなら、malloc でヒープに領域を確保して、外部で解放するしかない。
自動で解放して欲しいのなら、C++ に行ってデストラクタなり std::string なりに頼る。
>>8 はスタティックなリテラルのポインタを返してるので、たまたまではなく正常に動作する。ただし貴方の求めているものではない。
33デフォルトの名無しさん:2012/01/14(土) 14:04:28.58
メールとかの通信関係の処理か?
クラス化の設計とか楽しそうだなぁ。
34o:2012/01/14(土) 16:19:51.99
>>32
ありがと。
参考になります。

>>33
bingo
HTTPだけど。


移植性を考えてて、ANSI-Cベースで書いているところが、またそれはそれで、制限が多いw
35デフォルトの名無しさん:2012/01/14(土) 16:39:47.31
>>15
> 参照しているのはfunc1のスタック上にあるinStrのアドレスである。
これが間違えていることには気づいているのだろうか
inStrのアドレスは&inStrな。
36o:2012/01/14(土) 16:41:00.07
>>35
宣言が、

char* inStr だけれども?
37デフォルトの名無しさん:2012/01/14(土) 16:44:53.84

反日ネット工作員
朝日新聞社→社員約300人
民主党とその取り巻きの資金が入った反日工作会社→数社約450人

朝日新聞の社員は捕まった49歳の編集者を含め新聞記事を書く合間に2chを荒らしている程度とみられているが
民主党が用意した反日工作会社はほぼ24時間体制で工作を行っている
工作範囲は民主党が予め工作費を流している2ch、ニコニコ動画を中心にyoutube、個人のブログなどである。

38デフォルトの名無しさん:2012/01/14(土) 17:33:17.30
>19
>inStrの具体的な値を、str[1]に入れ込むためにはどうしたらよいのか?と言うことです。

「inStrの具体的な値」と言ったらinStrに代入されてる"test"のアドレス値のことだろ。
それが
>28
が正解というなら
「inStrのポインタが示す先の文字列をコピーして、str[1]に入れ込むためにはどうしたらよいのか?」
と言うべきだろ。

まぁ、そう言えるぐらい理解できてるなら質問もしてこないだろうが。
39デフォルトの名無しさん:2012/01/14(土) 17:53:22.36
>>36
だから?
40デフォルトの名無しさん:2012/01/14(土) 18:06:19.42
sizeof(char *) == sizeof(int)
なら

void func1(char* str[] ) {
 int inStr;
 inStr = (int)anotherFunc() ;
 str[1] = (char *)(inStr + sizeof(char)) ;
 return ;
}
としても同じ結果なんだよ。
41デフォルトの名無しさん:2012/01/14(土) 18:29:39.07
intptr_t 使えよ
42デフォルトの名無しさん:2012/01/14(土) 18:47:25.84
>>40
日記ならチラシに
43デフォルトの名無しさん:2012/01/14(土) 19:56:46.82
別名便所の壁の2chがチラシより上とな!?
44デフォルトの名無しさん:2012/01/15(日) 00:10:00.07
便所の壁はみんなの目に触れるからな
45デフォルトの名無しさん:2012/01/15(日) 00:33:43.37
都内じゃ1500枚ほどチラシが貼られたらしいな。
46o:2012/01/15(日) 07:51:27.88
>>38
>「inStrのポインタが示す先の文字列をコピーして、str[1]に入れ込むためにはどうしたらよいのか?」
コピーして
の部分が全く違う。

コピーしてよいのなら、解決法はいくつでもある。
47デフォルトの名無しさん:2012/01/15(日) 10:35:38.71
>46

>28
>strcpy( str[1] , inStr + 1);
コピーしてるやん。
違うというなら正しいソース書いてみてよ。
48o:2012/01/15(日) 11:21:44.71
>>47
多分、言いたいことの1/1000も伝わっていないんだと思う。

バッファから下ろしてきたデータは一時的にしかるべき場所に「コピーして」配置される。


俺の言っているのは、
そのしかるべき場所のポインタを渡すだけにしたいんだが、何とかならんのんかの?
という質問だが、

君は「さらに」、コピーしたらええやん、

と言っている。
49デフォルトの名無しさん:2012/01/15(日) 11:29:50.94
その「しかるべき場所」はグローバルか何かで確保されてたり消える心配がないのであれば
そのポインタを渡すだけでいいじゃん
50o:2012/01/15(日) 11:33:02.67
ところで、そもそも、コピーができるのか?という問題も、ある。

構造体は

typedef struct s{
 char* field[MaxHeaderNum];
 char* attrib[MaxHeaderNum];
}S;

ストリームデータがこのようになっているとき、(¥区切り文字)

aaaaaaa\bbbbbbbbbb\cccc\dd\eeeeeeeeeee\
     ↑       ↑  ↑ ↑        ↑
attrib[1] attrib[2] attrib[3] attrib[4] attrib[5]
のポインタが入る。

コピーできるん?????
コピーじゃなくて、もう一度strstrあたりできりなおさんとまずくない?????

ま、さくっとコピーできるんだったら、謝る
51デフォルトの名無しさん:2012/01/15(日) 11:35:48.32
何を何にコピーすることを言ってるのか?
区切り文字が'\'というのは例として挙げただけ?
52o:2012/01/15(日) 11:38:53.01
>>49
コーディング規約により、グローバル宣言ができないんですヨ

・局所的にしか利用されず
・他スレッドからの参照に問題あり
・アクセスコントロールに関与する
・マルチスレッド対応の場合
などなど。
53o:2012/01/15(日) 11:39:23.14
>>51
そ。

\r\n = ¥
としただけ
54デフォルトの名無しさん:2012/01/15(日) 12:12:25.05
仕事上のコーディング方法を2chで質問かよwww
55デフォルトの名無しさん:2012/01/15(日) 12:26:55.36
みんなすげーな
オレには何を言いたいのか全然分からん
56デフォルトの名無しさん:2012/01/15(日) 12:28:45.50
民主党が惨敗した参院選直前の政党支持率(2010年7月11日投票)

FNN 2010年7月4日
民主党 29.9% 自民党 16.3%
ttp://sankei.jp.msn.com/politics/policy/100706/plc1007060530003-n1.htm
ttp://www.fnn-news.com/archives/yoron/inquiry100705.html

マスコミに、ダマされるなよ。

57デフォルトの名無しさん:2012/01/15(日) 12:30:22.44
この子の関わったソフトが載った製品は買いたくないと思ってしまうな
@>何を何にコピーすることを言ってるのか? への回答は?
A「しかるべき領域」はスタック上?ヒープ上?それ以外?スタック上ならほぼコピーするしかない
B「しかるべき領域」は書き換えてもよい?書き換えたらダメなのであればさらにコピーするしかない
58o:2012/01/15(日) 12:30:27.97
>>54
チートツールなんだが、なぜに仕事だと思うのかなぁwww
59o:2012/01/15(日) 12:34:36.28
>>57
>この子の関わったソフトが載った製品は買いたくないと思ってしまうな
売り出されたら驚いちゃうんちゃう?

>@>何を何にコピーすることを言ってるのか? への回答は?
機種依存文字はどうかと思うけど。
コピーと言われたから、それを使っただけ。

>A「しかるべき領域」はスタック上?ヒープ上?それ以外?スタック上ならほぼコピーするしかない
スタック上。
main関数のスタックに積んでいればOKでしょ?
違うの???

>B「しかるべき領域」は書き換えてもよい?書き換えたらダメなのであればさらにコピーするしかない
書き換えても良いの意味が分からん。
書き換えたらダメってことは、参照もダメってこと???
意味が不明です。
60デフォルトの名無しさん:2012/01/15(日) 12:35:48.48
>>59
お前が意味不明だな。

手繰るの面倒だからここでもう一度整理して新規に質問しなおせ。
61o:2012/01/15(日) 12:50:30.70
>>60
君のおかげで整理できたよ。


聞きたい内容は、

呼び出し先の呼び出し先から、大元のスタックにある文字列を直接変更できるか?

ってこったな。
孫関数には、ポインタのポインタなら渡せる、と言う条件でな。
62デフォルトの名無しさん:2012/01/15(日) 12:52:31.54
>>61
その質問の答えは、できる、だ。
63o:2012/01/15(日) 12:53:35.05
細かい条件を列挙する。


・データはストリームで落とされる。
・孫関数にはポインタのポインタが渡される
・文字列の長さは不定長
・区切り文字がある文字列
・ストリームは、孫関数で処理される

この条件で親のスタックに詰まれた文字列を孫から操作できるかどうか?

んだな。
64デフォルトの名無しさん:2012/01/15(日) 12:54:05.71
ちゃんと質問できるようになるまで何年もかかりそうだな
義務教育の間何やってたんだか
65o:2012/01/15(日) 12:55:10.92
おっと。
追加があった

・データはストリームで落とされる。
・孫関数にはポインタのポインタが渡される
・文字列の長さは不定長
・区切り文字がある文字列
・ストリームは、孫関数で処理される
・staticは使えない
66o:2012/01/15(日) 12:56:52.04
>>64
まあ、そんなことより、

>>52が仕事上のタスクだと思う方が驚きだけど。
指示されないと何もできないんかなぁ。
もしくは何でもグローバル宣言すりゃいいと思っているのかなぁ。

普通に個人のコーディング規約に含まれる常識的な内容だと思っていたんだが、これも違うのか?
67デフォルトの名無しさん:2012/01/15(日) 13:00:25.15
>>66
>>65 を読む限りお前の考えたものではないだろうし
バカみたいな社内用語?で伝わると思ってるのがおかしい
68デフォルトの名無しさん:2012/01/15(日) 13:00:50.73
>>65
わけのわからない条件は関係なく、元のスタック上の文字列のポインタが
わかるなら当然できるだろ。
なんでできないとか思うんだろ。
ちなみに、スタックとかストリームとか、Cには関係ないから。
69o:2012/01/15(日) 13:12:04.29
>>68
ストリームデータは軽く64kを超えるんだが、

mainで

char streamData[131072]

とか宣言しちゃうの?
スマートじゃない気がするけどw
後々func1がスレッドで動くようになるんだし、mainがdllmainになるんだが、
どう見てもそりゃスマートとは言いがたいと思うんだけど、どうだろうか?
70o:2012/01/15(日) 13:13:45.46
>>67
こちとら、素人だし、
チートツールの作成を企業が許可するとも思えんし、

>普通に個人のコーディング規約に含まれる常識的な内容
だと思うんだけど、違うのか?
71デフォルトの名無しさん:2012/01/15(日) 13:16:07.60
整理して質問しろと言っただろ。
> 呼び出し先の呼び出し先から、大元のスタックにある文字列を直接変更できるか?
できる。

もう一度だけチャンスをやる。
整理して1レスで質問しろ。
72デフォルトの名無しさん:2012/01/15(日) 13:16:59.99
73デフォルトの名無しさん:2012/01/15(日) 13:18:36.84
>>70
チートツール作るなんてことを言ってるバカに協力しねーよ
74o:2012/01/15(日) 13:19:03.47
>>71
>できる。

こういうことだろ?
>>69
75デフォルトの名無しさん:2012/01/15(日) 13:20:06.56
どういうことだよ。
お前、頭腐ってるわ。
76デフォルトの名無しさん:2012/01/15(日) 13:21:02.62
o君の考えるスタックとは何を指しているのかね?
77o:2012/01/15(日) 13:21:07.96
>>72
f2を実行しないと、str[]の大きさが分からないんだけど、それでも大丈夫ってこと?
少なくとも512byteは確実に超えるんだけど。
78デフォルトの名無しさん:2012/01/15(日) 13:22:09.28
ここまで日本語が通じないのも珍しいな。
いや、そうでもないか。
79o:2012/01/15(日) 13:22:30.21
>>75

>>69以外に方法があるなら、丁重に謝るよ。
80デフォルトの名無しさん:2012/01/15(日) 13:24:14.16
>>79
お前の思い込みなんて人にはわからないんだよ。
だからお前のことを何も知らない普通の人間にわかるように整理して
1レスにまとめて質問してみろよ。
81o:2012/01/15(日) 13:24:59.66
>>76
関数が呼び出されたことにより確保される、SP、ReturnAddressと自動変数のかまたり
82デフォルトの名無しさん:2012/01/15(日) 13:26:10.30
スタックのサイズが心配ならスタックを拡張するなりヒープを使うなり
すればいいだけだろ。
83o:2012/01/15(日) 13:27:07.83
>>80

あいよ。

聞きたい内容は、

呼び出し先の呼び出し先から、大元のスタックにある文字列を直接変更できるか?
条件は次の通り
・データはストリームで落とされる。
・孫関数にはポインタのポインタが渡される
・文字列の長さは不定長
・区切り文字がある文字列
・ストリームは、孫関数で処理される
・staticは使えない

84デフォルトの名無しさん:2012/01/15(日) 13:28:38.77
だから、ストリームて何だよ。
思い込みハゲしいなまったく。
85デフォルトの名無しさん:2012/01/15(日) 13:29:17.88
文字列を直接変更できるかどうかに長さや区切り文字は関係ないだろ。
86o:2012/01/15(日) 13:31:05.93
>>84
不定長のデータ、でよいよ。
87o:2012/01/15(日) 13:32:15.62
>>85

>>72のコードで、512byteのデータをどうやって変更するの?
88デフォルトの名無しさん:2012/01/15(日) 13:33:29.91
またか。
その512byteのデータと>>72がどう関係するんだよ。
89o:2012/01/15(日) 13:36:36.09
>>88
void f2(char* str){
str[500]='\r';
str[501]='\n';
}

ができるんだったら、何も言わんよ
90デフォルトの名無しさん:2012/01/15(日) 13:37:19.50
>>89
じゃぁ何も言うな。
91o:2012/01/15(日) 13:38:41.03
ああ、

void f2(char* str){
str[131070]='\r';
str[131071]='\n';
}

ができるんだったら何も言わんよwww
92o:2012/01/15(日) 13:38:58.70
>>90
エラーが出るんですけどwww
93o:2012/01/15(日) 13:40:11.55
そりゃそうだわな。

str[10] と宣言しているのに、
str[131070]にアクセスしているんだもんね。

>>90は、そんなことも分からないの?
94デフォルトの名無しさん:2012/01/15(日) 13:42:43.17
何も言うなと言ってるだろ。
95o:2012/01/15(日) 13:47:33.40
>>94
君は、回答する前に、こっちを読んで勉強した方が良いと思うよ。
http://www.kumei.ne.jp/c_lang/intro/no_07.htm

宣言した数より大きな領域にアクセスさせるのは危険だよ。
書き込みなんかしたら、スタック壊しちゃうからね。
気をつけたほうが良いよ。
96デフォルトの名無しさん:2012/01/15(日) 13:48:48.34
また、えらく拗らせちゃってるんだね。
スタックのサイズが心配なら512KBをヒープに確保してそれを渡せばいいだけだろ。
まわりの人も大変だろうな。
97デフォルトの名無しさん:2012/01/15(日) 13:49:32.86
無能な働き者ってこの質問主の様な奴の事なんだろうな。
98デフォルトの名無しさん:2012/01/15(日) 13:50:59.22
>>95
>宣言した数より大きな領域にアクセスさせるのは危険だよ。

常識で分かることは言う必要がない。
99デフォルトの名無しさん:2012/01/15(日) 13:53:40.36
無能な働き者。これは処刑するしかない。
100デフォルトの名無しさん:2012/01/15(日) 13:56:50.88
ちょっとよくわからないのが
大元がmainだとして
「大元のスタックにある文字列」って
>mainで
>char streamData[131072]
以外にどうやって定義するの?
101o:2012/01/15(日) 13:56:56.89
>>96
ヒープに確保する方法は否定していないよ。
102デフォルトの名無しさん:2012/01/15(日) 13:59:35.77
>>100
質問もできないくらいのレベルなんだから察してやれ。
103デフォルトの名無しさん:2012/01/15(日) 14:00:57.52
>>100
allocaで確保するとかw
104o:2012/01/15(日) 14:04:12.54
>>103
良いね!
105デフォルトの名無しさん:2012/01/15(日) 14:07:11.53
どこまでアホ?
alloca使ったところでスタックは拡張されない。
って、まぁ釣りだろうけどw
106デフォルトの名無しさん:2012/01/15(日) 14:07:51.54
>>95
ストリームとやらの範囲内ならいくらでもアクセスできるでしょ。
例は10だったけど、そのストリームはもっと大きいんでしょ
107デフォルトの名無しさん:2012/01/15(日) 14:08:49.44
>>104
allocaってスタックだよ。
ってかヒープを避ける理由がわからない。
108デフォルトの名無しさん:2012/01/15(日) 14:10:33.82
char streamData[131072]
でも
char *streamData = (char*)alloca(131072);
でもいいけど、
結局>>72で問題なくね?

allocaってのは初めて知ったわ
109o:2012/01/15(日) 14:12:26.25
>>107
直近の問題は、何時freeするのかが不定なことだけど、
本質的には、スレッドで動かしたいから、別スレッドからのアクセスをさせないために自動変数での処理をさせたい
と言うのが本音。
110デフォルトの名無しさん:2012/01/15(日) 14:13:45.65
スタックはスレッドで共通だが。
111o:2012/01/15(日) 14:14:14.13
>>108
どこからスレッドとして走らせるかだけど、
スレッドが100走ると末恐ろしい
112o:2012/01/15(日) 14:14:31.03
>>110
なの????
113デフォルトの名無しさん:2012/01/15(日) 14:14:33.82
別スレッドからのアクセス性についてな。
114デフォルトの名無しさん:2012/01/15(日) 14:16:58.71
その点ではヒープもスタックも同じ。
普通、mallocもfreeもスレッドセーフだろ。
115o:2012/01/15(日) 14:17:20.97
>>113
だったら、ストリームデータを、他のスレッドが書き換えるって事が可能というか、
別のスレッドがストリームデータを壊すんだよね。

それじゃ、NGじゃね?
116o:2012/01/15(日) 14:17:48.14
>>114
だから、自動変数で、と・・・・
117デフォルトの名無しさん:2012/01/15(日) 14:18:24.71
最初に立ち戻るんだけど、ストリームは別スレッドから変更されうるんじゃないのかって気がするんだけど。
もしそうならポインタ保持じゃだめだけど、それは大丈夫?
で、そのストリームが読み取り専用じゃないかつ、デリミタのような0バイトよりも大きな文字列があるのなら、strtokの要領で対応できないか?
118デフォルトの名無しさん:2012/01/15(日) 14:18:55.57
>>116
自動変数=スタックと仮定すると>>114だと言ってるだろ。
119o:2012/01/15(日) 14:19:40.12
>>114
すまん、間違えた。

ヒープでもスレッドセーフなのか?
ちょいと調べてみる
120デフォルトの名無しさん:2012/01/15(日) 14:20:01.08
>>115
ポインタの先が別スレッドが確保したスタック領域ならそこを壊す。
つか、それはバグと言うんだがな。
121デフォルトの名無しさん:2012/01/15(日) 14:20:52.74
>>119
お前はスレッドセーフという単語を理解してないに3億ペリカ。
いや、スレッドも理解してないに10億カノッサ。
122デフォルトの名無しさん:2012/01/15(日) 14:21:39.04
「ヒープでもスレッドセーフなのか?」
これなんぞ。
根本的な知識が圧倒的に足りないといわざるを得ない。

チートツールの前に初心者としてまっとうに勉強しなさいな。
123デフォルトの名無しさん:2012/01/15(日) 14:25:52.76
mallocがスレッドセーフか? というのならそれはライブラリ次第。
124o:2012/01/15(日) 14:26:40.81
>>122
ヒープがスレッドセーフなんて聞いたことがない。
ライブラリが対応してスレッドセーフにしているケースなら知っているけど???

君の知っているのはどんなシステム系なんだ?
125デフォルトの名無しさん:2012/01/15(日) 14:26:48.56
だから普通と言ってるだろ。
スレッド使う環境でスレッドセーフじゃない設定をわざわざ使わない限りな。
126デフォルトの名無しさん:2012/01/15(日) 14:27:16.83
>>125>>123な。
>>124
3億カノッサよこせ。
127デフォルトの名無しさん:2012/01/15(日) 14:28:51.62
>>124
関数がリエントラント可能かどうかについてその言葉を使うのであって、スタックやヒープに対して使うもんじゃないよ
128o:2012/01/15(日) 14:29:42.29
どう見ても、

>>122がダブルパンチ食らっているようにしか見えないけど?
129123:2012/01/15(日) 14:30:33.99
>>125
まったくそのとおりだ。ちょっと上のスレもよまんで書いてしまった^^;
130デフォルトの名無しさん:2012/01/15(日) 14:30:34.75
すごいなぁ、お前。
131デフォルトの名無しさん:2012/01/15(日) 14:30:53.25
もちろん、>>130>>128な。
132デフォルトの名無しさん:2012/01/15(日) 14:31:21.48
なんだこれ。恥ずかしくなって暴れ始めたのか
133デフォルトの名無しさん:2012/01/15(日) 14:33:56.98
>>132
いや、多分素だと思うぞ。
134デフォルトの名無しさん:2012/01/15(日) 14:33:59.84
>>124
もしかして「ヒープ領域からメモリを確保すること」の略として「ヒープ」っていってんの?
135デフォルトの名無しさん:2012/01/15(日) 14:39:16.96
…静かになったぞ。何かを調べてんのか?
136o:2012/01/15(日) 14:41:13.91
>>133
素だよ。素人だっちゅってんだろ。

ちなみに、>>135 うんこ位させろよ。
137o:2012/01/15(日) 14:44:26.42
で、

>>52 って
>普通に個人のコーディング規約に含まれる常識的な内容
だと思うんだけど、違うのか?
138o:2012/01/15(日) 14:45:49.46
>>134
その、
「ヒープ領域からメモリを確保すること」
の意味が分からんけど?
139デフォルトの名無しさん:2012/01/15(日) 14:48:24.79
素かよ。もっとやりたいことを具体的に示せ。
大体わかってるつもりでレスをしているんだが、訳わからんほうに話をずらされてる感じがする。

あと、>>127は大体あってるけど少し違う。
リエントラント可能であることはスレッドセーフであることを保障するが、逆はそうではない。
140デフォルトの名無しさん:2012/01/15(日) 14:49:18.43
>>136
素。
ほんと、日本語も不自由なんだな。
恥ずかしくて素人じゃないって言えないだけじゃないのか?
141デフォルトの名無しさん:2012/01/15(日) 14:52:26.93
>>138
それをわからずにヒープだスタックだ、あまつさえ「ヒープでもスレッドセーフなのか?」なんてことを言うのか。
逆に「スタックはスレッドセーフ」だと思っているってことだと思うんだけど、これがどういうことなのか説明してくれ。
142デフォルトの名無しさん:2012/01/15(日) 14:52:32.31
>>139
そう思ってはじめたのが>>80なんだが。
143デフォルトの名無しさん:2012/01/15(日) 14:53:39.55
違うな。>>71だ。
144デフォルトの名無しさん:2012/01/15(日) 14:54:09.40
お?>>60じゃないのか?
145デフォルトの名無しさん:2012/01/15(日) 14:54:17.21
>>137
>グローバル宣言ができない
個人の開発で完全に禁止する利点があまりない。
グローバル変数をできるだけしないってのはまあ誰でも考える。

個人でコーディング規約を決めていたとして、
それに違反することを「コーディング規約により・・できない」って言い方をする人はあまりいない。
俺の方針に反するだとか、好みじゃないとか、そのレベルでしょ。
146デフォルトの名無しさん:2012/01/15(日) 14:55:24.44
素人じゃないことを隠したい素人さん。
147デフォルトの名無しさん:2012/01/15(日) 14:55:33.69
俺も文書がおかしいなw
×グローバル変数をできるだけしない
○グローバル変数をできるだけ使わない
148デフォルトの名無しさん:2012/01/15(日) 14:57:21.78
>>142
>>8>>83でエスパー大会ってことか…
加えて、>>115でストリームデータ(mainのstrか?)は別スレッドから変更されうる、と。

ストリームデータを変更されたあとでも使用したいのなら、
strへのアクセス処理を「スレッドセーフ」にして、
別領域(要件を満たせるならスタックでもヒープでも)にコピーするしか方法はないよな。
149o:2012/01/15(日) 14:57:25.09
>>141
スレッドに詰まれたスタックならスレッドセーフだろ。
150デフォルトの名無しさん:2012/01/15(日) 14:59:49.89
>>149
すべてのスレッドはメモリ空間を共有する。
基本だ。
151デフォルトの名無しさん:2012/01/15(日) 15:00:31.29
「スレッドに詰まれたスタック」って、何?
152デフォルトの名無しさん:2012/01/15(日) 15:00:48.32
先にスレッドセーフの国語的な用例を調べて意味を理解してくれ
×スタックはスレッドセーフ
○スレッドセーフな関数、スレッドセーフなコード など
153デフォルトの名無しさん:2012/01/15(日) 15:01:26.54
スタック領域がスレッドごとに確保されるってことを言いたいんだと。
154o:2012/01/15(日) 15:01:33.54
>>146
つまり、お前涙目ってことかな。
仕方ないだろ。俺が素人なんだから。

なんか同じような内容を別のところでも書いた気がするw
155デフォルトの名無しさん:2012/01/15(日) 15:01:43.06
>>149
意識をあわせてレスをしようとしてみる。

スレッドのスタックにあるポインタの指すアドレスを複数のスレッドが保持している場合、
そのアドレスはスレッドセーフじゃない
(かなりひどい文だが…
156デフォルトの名無しさん:2012/01/15(日) 15:02:06.27
>>154
素人を自覚してるならまずその態度を治せ。
157o:2012/01/15(日) 15:02:28.96
>>153
あんがと
158デフォルトの名無しさん:2012/01/15(日) 15:03:20.08
で、そのスタック領域はすべてのスレッドが共有するメモリ空間にあるわけだが、
そのあたりを1_も理解してないんだろう。
159o:2012/01/15(日) 15:03:27.27
>>156
回答している人の中に、素人が混じってるから仕方ないと思うよw
160デフォルトの名無しさん:2012/01/15(日) 15:03:46.60
>>156
それは大抵の場合、やりたいことを引き出すことよりも難しいよ
161o:2012/01/15(日) 15:04:05.63
>>158
プロセスって言葉を出させたいってこと?
162デフォルトの名無しさん:2012/01/15(日) 15:04:33.23
>>161
そんなことはどうでもいいから>>148
163デフォルトの名無しさん:2012/01/15(日) 15:05:41.01
>>161
いや。
お前がスレッドすら1_も理解してないことを自覚させたいだけ。
164o:2012/01/15(日) 15:10:42.02
>>162
スマートな方法じゃないけど、「スタッククラス」で対応するのも手かもよ。
コピーするだけが能じゃない気がするけど???
165デフォルトの名無しさん:2012/01/15(日) 15:11:26.00
お前は何を言っているんだ。
166デフォルトの名無しさん:2012/01/15(日) 15:12:22.49
C++なの?
167デフォルトの名無しさん:2012/01/15(日) 15:13:26.78
その「スタッククラス」ではコピーが必要ないの?初心者の俺にkwsk
168デフォルトの名無しさん:2012/01/15(日) 15:13:44.46
まだ「スタックはスレッドセーフ」という妄想に取り付かれてるようだな。
169o:2012/01/15(日) 15:14:43.67
>>166
ANSI-Cベースなので、クラスは使わない方向で行きたいが、
コーディングはCDTでやってる。
170 ◆QZaw55cn4c :2012/01/15(日) 15:15:06.19
>>110
いいえ、スタックとプログラムカウンタはスタックごとに別。
171o:2012/01/15(日) 15:15:31.34
>>168
そのスタックの話をしているわけじゃないのは分かっているよね?
172デフォルトの名無しさん:2012/01/15(日) 15:16:33.51
お、QZにちょうどいい相手じゃないか?
ちょっとどんな展開になるのか、他の人はだまってみてようよw
173デフォルトの名無しさん:2012/01/15(日) 15:16:56.99
>>164
それで実装したコードを挙げてくれ。そうすればもっとスマートな解決方法を出すことができるかもしれない。
174o:2012/01/15(日) 15:17:00.12
>>172
そうだな。
素人が1人減るしねw
175デフォルトの名無しさん:2012/01/15(日) 15:17:27.54
QZの意見を聞きたくなる場面なんてあまりないからなw
ぜひ回答してやってくださいQZさん
176デフォルトの名無しさん:2012/01/15(日) 15:17:43.90
>>172
ああ、うん。珍しくQZの自演暴れじゃないものが見られるかもしれんね
177デフォルトの名無しさん:2012/01/15(日) 15:18:02.46
実はo=QZという素晴らしいオチ!
178デフォルトの名無しさん:2012/01/15(日) 15:21:33.63
175 名前:あぼ〜ん[NGWord:QZ] 投稿日:あぼ〜ん
176 名前:あぼ〜ん[NGWord:QZ] 投稿日:あぼ〜ん
177 名前:あぼ〜ん[NGWord:QZ] 投稿日:あぼ〜ん
179o:2012/01/15(日) 15:22:27.21
>>173
実装なんかしてない。
180173:2012/01/15(日) 15:28:35.84
QZじゃなくてすまんがレスされてしまったので。

>>179
もちろん実装していないことはわかっている。

>>5がいい方法かどうかがわからなくて困ってたんだろ。
>>164がいい方法だと思いついたのなら、それで実装すればいい。
これが気に入らないのであればレスしなくていいし、質問はQZあてに頼む。
181o:2012/01/15(日) 15:37:47.56
>>145
いや、そんなことを言っているんじゃなくて、

・局所的にしか利用されず
・他スレッドからの参照に問題あり
・アクセスコントロールに関与する
・マルチスレッド対応の場合
+もろもろ

のような条件があるにもかかわらず、グローバル変数を使おうとする人が世の中にいるのか?
って話。

これだけ条件が整えば、
企業が規制するまでも無く、グローバル変数の利用を控えるんじゃないの???と
182o:2012/01/15(日) 15:40:14.15
>>163
先回りされて、涙目、だなwww
183デフォルトの名無しさん:2012/01/15(日) 15:44:28.99
解散
184デフォルトの名無しさん:2012/01/15(日) 15:45:28.11
>>181
>>49の段階ではマルチスレッドの話なんて出てきてなかったろ。
自分だけが知っている情報を他人も知っているはずだと考えるのはよくないことだよ。
185デフォルトの名無しさん:2012/01/15(日) 15:47:12.80
>>184
局所に格納してたんだろう
186デフォルトの名無しさん:2012/01/15(日) 15:48:25.92
>>185
ああ、さらにアクセスコントロールもされていたようだ
187o:2012/01/15(日) 15:55:36.98
>>184
条件が出てきた時点で、

「ああ、そうかグローバル変数じゃダメね」

ってレス付くなら分かるが、

>仕事上のコーディング方法を2chで質問かよwww
とレスられた事で

玄人の( というのは間違いで本当は素人 ) の中ではこれだけ条件が付いても
「ああ、そうかグローバル変数じゃダメね」
とは思わないのかなぁ???

という話。
188デフォルトの名無しさん:2012/01/15(日) 15:56:17.70
日本語からやり直せ。
189o:2012/01/15(日) 15:57:47.80
>>188
涙目乙www
190デフォルトの名無しさん:2012/01/15(日) 16:01:12.86
やっぱりo=QZか?
191デフォルトの名無しさん:2012/01/15(日) 16:02:00.04
質問主アスペ
192デフォルトの名無しさん:2012/01/15(日) 16:02:35.15
キチがウヨウヨいると考えたくないしな
193デフォルトの名無しさん:2012/01/15(日) 16:02:58.11
言いたいことを簡潔的確に言えるようにならないと開発は無理。
理解力はその前に必要だけど、普通の人なら持っている。
194デフォルトの名無しさん:2012/01/15(日) 16:05:00.03
最近はその普通が通じないんだと思うよ。
195o:2012/01/15(日) 16:06:20.21
>>192
そうだよね。

これだけ条件が付いていりゃ、業務命令じゃなくても、グローバル変数は避けるよねぇwww
196デフォルトの名無しさん:2012/01/15(日) 16:08:06.61
別にグローバル変数だってスレッドセーフにすればいいだけ。
197デフォルトの名無しさん:2012/01/15(日) 16:13:04.17
>>195
そんな話どうでもいいから本題をQZに質問するといいよ
198デフォルトの名無しさん:2012/01/15(日) 16:18:55.49
流れとは別の質問なんだけど
スタック領域とかヒープ領域とかに対して
グローバル変数やstatic変数がある領域って一般的になんていうの?
データ領域?
199デフォルトの名無しさん:2012/01/15(日) 16:23:22.30
>>198
スレ違いだが、それでいい。
記憶クラスでググれ。
200o:2012/01/15(日) 16:25:18.71
>>198
BSSかテキスト領域
201デフォルトの名無しさん:2012/01/15(日) 16:25:51.54
>>196
だね。
そもそも、業務命令とか変な条件の前にグローバル変数は避けるのがデフォだし。
202o:2012/01/15(日) 16:26:33.99
>>200
おっと、途中で送信してしまった。

BSSとかデータ領域とかの話をしてるんじゃね?
203デフォルトの名無しさん:2012/01/15(日) 16:27:30.80
>>200
> テキスト領域

市ね
204o:2012/01/15(日) 16:27:38.02
>>201
そうなんだよ。

だから
>仕事上のコーディング方法を2chで質問かよwww
と言われると、
本職の方は、そんな考え方もしているのかなぁ、と
205デフォルトの名無しさん:2012/01/15(日) 16:29:16.03
>>203
なんだ?
テキストってのはコードのことだ。
>>204
で、いつまで話ずらすの?
206o:2012/01/15(日) 16:29:56.40
なんか、みんな俺に冷たいなぁ。
俺がなんかしたんか?
207o:2012/01/15(日) 16:30:37.06
>>205
傍系の質問だべ。
答えられなきゃ、黙ってりゃ良いのに。
208デフォルトの名無しさん:2012/01/15(日) 16:30:45.97
>>4から読めば誰でもそうなるんじゃないかな。
209デフォルトの名無しさん:2012/01/15(日) 16:31:36.72
QZ出てこいよ。
ちょっと質問が高度すぎるか?
あ、質問というより回答がか。
210デフォルトの名無しさん:2012/01/15(日) 16:40:35.12
質問主はこれやってみろ。
ttp://www.the-fortuneteller.com/asperger/aq-j.html
211デフォルトの名無しさん:2012/01/15(日) 16:43:21.52
>>206
質問に答えているのにスルーして続ける
知らない単語をさも知っているように間違って使う
関係ないところにつっかかって引き延ばす
212o:2012/01/15(日) 16:50:08.47
>>210
何言っているのか分からんが、

自己診断テスト得点計算結果

あなたの得点は16点です。

社会的スキル
3点
注意の切り替え
4点
細部への注意
1点
コミュニケーション
5点
想像力
3点
閾値内に収まっています。
213o:2012/01/15(日) 16:52:32.85
>>211
あいや、
スルーしているんなら、レス番号知らせてもらえると助かるよ。

>知らない単語をさも知っているように間違って使う
これは、きちんと指摘してもらえればOK
心は広いから無問題だよ

>関係ないところにつっかかって引き延ばす
新たな質問が出たら、きちんと解決しよう。
普通のことだと思うけど?
これのどこが気に触る内容なのかな?
214デフォルトの名無しさん:2012/01/15(日) 16:53:33.84
こういうのは分裂症?
215o:2012/01/15(日) 16:54:20.80
>>214
それ、なんてクラス?
216デフォルトの名無しさん:2012/01/15(日) 17:00:01.71
>>213ちなみにもう問題は解決してるの?
217o:2012/01/15(日) 17:18:10.40
>>216
よく分からんが、選択肢が2つ。

1つは、func1で文字列を保持
もう1つはmallocでmainに引き渡す。

実装してみないと分からないけど、前者かなぁ・・・と。
HTTPだけど、すべてのデータがmainに返さないといけないわけではない。
汎用性がないのが残念だけど、前者の方がよいかなぁ。
汎用性を高めるんなら、mallocかなぁ、と考えてる。

ただ、結合テストで問題が出そうな気がしてならない。
218デフォルトの名無しさん:2012/01/15(日) 17:22:55.28
QZ早く出てきてやれよ。
219デフォルトの名無しさん:2012/01/15(日) 17:23:54.61
>>217
マルチスレッドらしいから、各スレッドの役割を書いてみて
220デフォルトの名無しさん:2012/01/15(日) 17:27:15.15
先が永杉。
やるならスレ立ててそっちでやれ。
221デフォルトの名無しさん:2012/01/15(日) 17:32:49.04
>>205
>> グローバル変数やstatic変数がある領域って一般的になんていうの?
> テキストってのはコードのことだ。

市ね or >>207
222デフォルトの名無しさん:2012/01/15(日) 18:24:45.54
「空を自由に飛びたいな」 という夢があったときに
パイロットを目指すかパイロットを雇うかの違いがある。
223デフォルトの名無しさん:2012/01/15(日) 18:33:47.92
ドラえもんが何とかしてくれると思った
224デフォルトの名無しさん:2012/01/15(日) 18:43:45.81
脱原発(笑)



風力発電コスト高、モニュメントに

 オホーツク地方で唯一の風力発電施設の北海道興部町風力発電所が、修繕費用難のた
めに昨年11月、完成から約10年で廃止され、風車を固定したモニュメントとして残
されることになった。
 東日本大震災を受けた福島第一原子力発電所の事故後、風力発電は再生可能エネルギ
ーとして注目されているが、小規模風力発電施設が直面するコスト高の課題を露呈した
格好だ。
 同町の風力発電所は2001年3月に完成。風車は1基で、建設費約1億9000万
円は、経済産業省が所管する独立行政法人の新エネルギー・産業技術総合開発機構(N
EDO)がほぼ半額を負担し、道の補助を除く約5000万円を町が負担した。隣接す
る町の農業研究施設に電力を供給したうえで、余剰分は北海道電力に売電してきた。約
9年半で計6170万円の売電収入があり、6430万円の維持管理費と収支はほぼ均
衡していた。
 しかし、10年10月に発電機のベアリングが破損して稼働を停止。欧州製で部品発
注のほか高所作業が必要となるため、修理には約4000万円かかることが判明した。
全額を町が負担しなければならないことから、町は「長期的に見た場合、コスト面で運
転再開は困難」(町企画財政課)と判断、発電所を廃止した。
----------
http://www.yomiuri.co.jp/national/news/20120114-OYT1T00047.htm
http://www.yomiuri.co.jp/photo/20120114-463522-1-L.jpg
225デフォルトの名無しさん:2012/01/15(日) 19:03:46.42
>>222
自由に「飛びたい」だと、パイロットを雇うのでは微妙に要件を満たさないような気が…
226デフォルトの名無しさん:2012/01/15(日) 19:11:29.57
スレが伸びてるなと思ったら、ほとんど罵倒じゃねか。
227o:2012/01/15(日) 19:39:26.42
>>226
そやね
228デフォルトの名無しさん:2012/01/15(日) 20:08:53.37
>「空を自由に飛びたいな」
つ シャブ
229デフォルトの名無しさん:2012/01/15(日) 20:47:14.71
>>225
航空法でがっちり縛られるから、パイロットになっても
そんなに自由に飛ばせるわけではない
自分で飛ばすのも雇って指示するのも自由度では大差ないかな
230デフォルトの名無しさん:2012/01/15(日) 23:53:16.84
民主党には朝鮮人など外国人のなりすまし、スパイが約90名在籍している
野田内閣は過半数が帰化人

野田はどうだろうか
韓国人から賄賂を貰い、韓国人の集いに出席している野田は

首になった蓮○はシャブで逮捕歴のある人間と仲が良いな。蓮○自身はやってんの?
い-6-1
テレビが言えない民主党のスポンサー=韓国北朝鮮
あとはもうわかるよな

231デフォルトの名無しさん:2012/01/16(月) 00:19:48.44
入門編の参考書見ながら勉強中のど素人です

#include <stdio.h>
//ビット数をカウント
int count_bits(unsigned int 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 int x)
{
int i;
for(i = (int_bits()-1); i >= 0; i--)

putchar(((x >> i) & 1U) ? '1' : '0');
}
putchar('\n');
}
232231:2012/01/16(月) 00:20:21.66

//ビットシフト
unsigned int sft1(unsigned int x, int pos)
{
return (x << pos);
}
//posビット目からn個のビットに1をセット
unsigned int set(unsigned int x, int pos, int n)
{
return (x | sft1(~sft1(~0U,n), (pos - 1)));
}

int main(void)
{
print_bits(0);
print_bits(set(0,1,32));
return (0);
}
233231:2012/01/16(月) 00:24:34.89
print_bits(set(0,1,32));
ここで1ビット目から、32個のビットに1をセットするようにしているのですが
31個のビットだと正常に011111?と1がセットされるのですが
上記のように32個だと、000000?となり1がセットされません

なぜ、11111?な感じで1がセットされないのでしょうか?
234デフォルトの名無しさん:2012/01/16(月) 00:29:24.01
>>233
ビット幅以上のシフトは未定義
自分の知ってる処理系では mod ビット幅 だけシフトされる
235デフォルトの名無しさん:2012/01/16(月) 00:51:44.97
どうでもいいが、処理系が同じでも、CPUが違うと動作が違ったりもする。
186か286かその辺の時代以前には、律儀に32回シフト(ただしintは16bit)してた。
236デフォルトの名無しさん:2012/01/16(月) 00:59:25.16
>>234
レスを元に調べてみたら、ビット演算のWikipediaにそれらしい内容が書かれていました
今回の場合だと
31 mod 32 で31ビットシフトするが
32 mod 32だと0でビットシフトしない
33 mod 32だと1ビットシフトする
というこで理解できました
ありがとうございました
237デフォルトの名無しさん:2012/01/16(月) 01:10:56.78
高速フーリエ変換使って1万桁同士の掛け算を行うプログラムを作れ。
そういう課題が出た。さっさと教えろ。お前ら偉いだろ。
238デフォルトの名無しさん:2012/01/16(月) 01:18:08.73
宿題は宿題スレに逝けと言ってるだろ、このタコ。
239 ◆QZaw55cn4c :2012/01/16(月) 03:23:46.56
>>65
こんなのでどうですか?
http://ideone.com/SGJmx
240デフォルトの名無しさん:2012/01/16(月) 08:25:12.57
>>237
作ってやるから20万円よこせ
偉い人の時間は高いぞ
241デフォルトの名無しさん:2012/01/16(月) 14:33:54.35


ステルスマーケティングまとめ
A http://www.dotup.org/uploda/www.dotup.org2522270.png
B http://www.dotup.org/uploda/www.dotup.org2522750.png
 →  ステマの黒幕は ソニー(アニプレックス)、角川

関連キーワード はちま 清水鉄平(はちまの本名) KND 元ソニー会長出井伸之
        はちま管理人によるみかじめ料を払わない特定メーカーへの叩き
        まとめサイトは企業が運営 コメント欄も社員の煽り(が殆ど)
おまけ
2ch監視が仕事のスクウェア社員w↓
96 名前:番組の途中ですがアフィサイトへの転載は禁止です[sage] 投稿日:2012/01/16(月) 12:41:25.60 ID:X9dFbc830
proxy1.square-enix.co.jp - 2012/01/16 12:38:51 - Japan - Commercial(企業)
IP :61.195.58.8 (不明)
Referer :http://ipatukouta.altervista.org/php5/
USER-AGENT :Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)


【株式会社KND・清水鉄平】はちま起稿が特定され黒い関係が明らかに★78【黒幕を特定せよ】
http://awabi.2ch.net/test/read.cgi/poverty/1326691256/
242デフォルトの名無しさん:2012/01/16(月) 22:36:48.88
リスト構造も使い易さを追求して、様々な形態の物が存在する。
使い易さを追求して実現された種々の機能と それを実現しているリスト構造の具体例について
解説せよ。
という問題があるんだが、答えるのにチェイン法とか機能の説明でいいのかな?
243デフォルトの名無しさん:2012/01/16(月) 23:20:46.73
244デフォルトの名無しさん:2012/01/16(月) 23:24:32.44
>>242
いいと思う。
245デフォルトの名無しさん:2012/01/16(月) 23:27:06.26
>>244
ありがとう

ついでなんだが、オブジェクトのデータと処理とを組み合わせて
合理的に管理するためのプログラミング手法ってなんて言うんだったっけ?
246デフォルトの名無しさん:2012/01/16(月) 23:27:21.98
>>244
ありがとう

ついでなんだが、オブジェクトのデータと処理とを組み合わせて
合理的に管理するためのプログラミング手法ってなんて言うんだったっけ?
247デフォルトの名無しさん:2012/01/16(月) 23:29:04.14
oops!
248デフォルトの名無しさん:2012/01/16(月) 23:34:49.93
oh...
連レスすまない
249デフォルトの名無しさん:2012/01/16(月) 23:50:08.16
>>246
OOP, Object Oriented Programming
250デフォルトの名無しさん:2012/01/16(月) 23:58:46.59
Object oriented programming style

アクネドート:
実用に成るコードを完成させるためには
定義の段階で同じ識別詞、同じ記述が繰り返し繰り返し現れる
251デフォルトの名無しさん:2012/01/17(火) 00:34:19.57
関数プロトタイプ宣言について、どのような時に用いるか、なぜ必要なのか教えていただけないでしょうか。
よろしくお願いします。
252デフォルトの名無しさん:2012/01/17(火) 01:34:11.86
>>251
その関数を呼び出す前に、その関数を使用する場合
プロトタイプ宣言しといて、実装を後に実装する。
あと、ライブラリを作成するとき、ヘッダに宣言をまとめて
書いといて、実装をコード側に書く。
253デフォルトの名無しさん:2012/01/17(火) 10:04:03.55
>>246
「データ」が「ステート(状態)」の事を意図してるなら、OOP。
「データ」一般なら色々あるからCTMCPなどが参考になる。
254デフォルトの名無しさん:2012/01/17(火) 12:29:37.79
以下のように
aが32未満のときは、AしてからCして、Dする
aが224より大きいときは、BしてからCして、Dする
それ以外のときはAもBもCもせずにDする
というような制御構造を、ソースレベルでも、出力されるアセンブラレベルでも
重複コードがないようにするには、gotoを使うしかないのでしょうか?

if(a < 32){
b = a; //A
}else if(a > 224){
b = 256 - a; //B
}else{
goto HOGE2;
}
HOGE1:
c = b * 100; //C
HOGE2:
//D
255254:2012/01/17(火) 12:30:35.88
d = a < 32;
e = a > 224;
if(d || e){
if(d){
b = a; //A
}else{
b = 256 - a; //B
}
c = b * 100; //C
}
//D

こういうのもifが2つあって、なんだか冗長です。
256254:2012/01/17(火) 12:30:55.20
void hoge(int *pc, int b){
*pc = b * 100; //C
}
---
if(a < 32){
b = a; //A
hoge(&c, b);
}else if(a >> 224){
b = 256 - a; //B
hoge(&c, b);
}
//D

これも関数呼び出しコードが重複してるし
関数呼び出しコストがもったいないです。
inlineにすれば、呼び出しコストはかからないけど
//Cの部分がアセンブラレベルで重複してしまいます。

結局gotoを使わないと、重複は避けられないのでしょうか?
257デフォルトの名無しさん:2012/01/17(火) 13:26:36.03

if( a < 32 ){
 //A
}
if ( a > 224 ){
 //B
}
if( ( a < 32 || a > 224)){
 //C

//D


>>254は、コードが複雑になった場合に追っかけるのが面倒
>>255は、何やってるのかわかりづらい
>>256は、今時のシステムならそのくらいのコスト気にすんな。関数名次第では分かりにくい。

自分は、同じ基準で判定する方がコードが分かりやすい。
このケースの場合、a を基準にするのではなく、
//A、//B、//C、//Dのそれぞれのコードがどういう条件なら実行できるか、
を同じレベルで書いた方が後で見て分かりやすい。

258254:2012/01/17(火) 14:59:48.07
なるほど、>>255でネストするよりわかりやすいです。

多少冗長になっても、メンテを考えればgotoなど使わない方がいいと言うことですね。

ありがとうございます。
259デフォルトの名無しさん:2012/01/17(火) 15:13:29.39
//Cの条件はb>=32か?
260デフォルトの名無しさん:2012/01/17(火) 16:08:24.42
goto使わなくても大抵コンパイラ後はgoto相当の処理してるんだがな。
261デフォルトの名無しさん:2012/01/17(火) 16:14:30.48
goto使ってもいいと思うんだけどな。
262デフォルトの名無しさん:2012/01/17(火) 16:30:33.18
あれならこうかな。

  bool a32 = (a < 32)
  bool a224 = (a > 224)

  if (a32 || a224) {
    if (a32) {
      A();
    } else {
      B();
    }
    C();
  }
  D();
263デフォルトの名無しさん:2012/01/17(火) 16:38:28.45
>if (a32 || a224) {
if (a32 | a224) {
の方がいい場合あり。
昔逆アセンブルしてみたら
if(a32) goto xxx;
if(a224) {
xxx:
...
}
的な処理してた。

まぁ処理速度必要で、
一秒間に数千、数万回実行される処理でなきゃそこまでする必要は無いと思う。
264デフォルトの名無しさん:2012/01/17(火) 16:40:24.40
組み込みとか4kデモとかじゃないかぎり気にせず関数化
265デフォルトの名無しさん:2012/01/17(火) 16:40:35.91
って、>>262>>255と同じだったか。
>>263
そこまで速度を必要とするならそもそも条件判断をしないようにすればいい。
266254:2012/01/17(火) 16:50:41.22
4kではないですが、動画の処理なので、関数呼び出しコストはかなり気になります。

条件判断しないようにすればいいとは、どのように書けばよいのですか?
267デフォルトの名無しさん:2012/01/17(火) 16:51:40.47
>>263
||を|とかかれると?と思ってしまう。
あー、これはほかにもいろいろバグが入ってるんだろうなー、と残念な
気持ちになるんで人が見るコードの場合はやめてくれ。
268デフォルトの名無しさん:2012/01/17(火) 16:52:58.71
>>266
一番簡単なのは必要な処理を用意して関数ポインタ使って条件によって切り替える。
一般的に高速化と冗長性の削減は両立しないんだよ。
269デフォルトの名無しさん:2012/01/17(火) 16:53:19.03
まぁ、それ以前にOpenVCなり使えるものを使うのがいいと思うけどな。
270デフォルトの名無しさん:2012/01/17(火) 16:53:41.91
OpenCVな。
271デフォルトの名無しさん:2012/01/17(火) 16:55:25.05
昔アセンブラで計算処理部分で分岐無くすように書いたことあったな。
フラグ取得→ローテーション命令で0か0ffffhに加工→計算過程でANDして加算
速くなったかどうかは知らん。
272デフォルトの名無しさん:2012/01/17(火) 16:55:39.99
あぁ、ピクセル処理みたいのならテーブル引きにすればいいよ。
273デフォルトの名無しさん:2012/01/17(火) 16:57:15.88
高速化が必要だと思った場合はまずプロファイルを取るのが基本。
1%の処理を100万倍速くしたところで1%も速度は向上しない。
274デフォルトの名無しさん:2012/01/17(火) 16:58:51.38
>人が見るコードの場合はやめてくれ。
0=偽 0以外=真 って確証(確信?)ないからやらないよ。
275デフォルトの名無しさん:2012/01/17(火) 17:00:19.16
いやいや、それは仕様で決まってるから。
どういうこと?
276デフォルトの名無しさん:2012/01/17(火) 17:02:44.89
仕様書見たこと無いってこと。
277デフォルトの名無しさん:2012/01/17(火) 17:06:38.13
まぁこのスレの99%はそうだろうからそれは気にしない。
278デフォルトの名無しさん:2012/01/17(火) 17:07:49.12
>>255
関数のサイズと関数の呼び出しコストって関係あるの?
279デフォルトの名無しさん:2012/01/17(火) 17:09:48.50
各ABCの処理が、簡略化されたからそうなっているのか、実際にそうなのかにもよりそうな話だなぁとおもったり。
280デフォルトの名無しさん:2012/01/17(火) 17:12:29.87
>>278
ない。
281デフォルトの名無しさん:2012/01/17(火) 17:13:23.01
もちろん、厳密にはキャッシュの利用が変わってきて速度は変わる。
が、そんなことを気にするのはあと数レベル先の話。
282デフォルトの名無しさん:2012/01/17(火) 18:10:35.59
C言語のテトリスを標準出力で作るのって無理ですか?
283デフォルトの名無しさん:2012/01/17(火) 18:14:32.35
日本語変だな。

テトリスをC言語によって作るのは出来ると思うのですが
標準出力のみで作れますか?
284デフォルトの名無しさん:2012/01/17(火) 18:17:54.16
できるよ。
285デフォルトの名無しさん:2012/01/17(火) 18:17:59.44
OSや端末を絞れば作れるでしょうしCUIのテトリスはぐぐれば出てくるでしょう
286デフォルトの名無しさん:2012/01/17(火) 18:18:39.20
標準のみだと改行しないといけないけど、それ我慢すればできない理由はないね。
287デフォルトの名無しさん:2012/01/17(火) 18:20:30.52
Curses使えば普通に楽しめそう。
288デフォルトの名無しさん:2012/01/17(火) 18:23:18.51
>>286
グラフィック関連の低級性ってどうなってんの?
プログラミングだとアセンブラでしょう。
グラフィックは?
289デフォルトの名無しさん:2012/01/17(火) 18:24:24.40
何言ってるのか分からん
290デフォルトの名無しさん:2012/01/17(火) 18:31:30.36
ニコ動に1時間でWindows版テトリス作るみたいなのがあったからそれでも
見てみたらどうか。
291デフォルトの名無しさん:2012/01/17(火) 18:32:00.50
>>288
16ビットのときは、CPUで特定のアドレスに書きこむと画面に反映されてた。
それ以降は知らん。
292デフォルトの名無しさん:2012/01/17(火) 18:40:41.05
昔昼休みにUNIXでテトリス対戦してる人がいた。
見た感じCUIだった。
293デフォルトの名無しさん:2012/01/17(火) 19:05:11.88
>>291
Windows には専用の API がある。
294デフォルトの名無しさん:2012/01/17(火) 19:23:05.12
標準出力って事は、コンソール出力なんだろうから、
エスケープシーケンス使うかすればいいのかな?
295デフォルトの名無しさん:2012/01/17(火) 19:47:18.39
>>290
見たww

>>291
なるほどぉ。

いやもっと低級な事。
インクとかは?どうやって全色出してるのかなと。
296デフォルトの名無しさん:2012/01/17(火) 19:48:22.99
すまんが、そのインクとかいうものとC言語の関係を教えてくれないか?
297デフォルトの名無しさん:2012/01/17(火) 19:57:22.70
>>295
環境に依存すると思う。どういう環境(OS、処理系)で作りたいかを教えれ
298デフォルトの名無しさん:2012/01/17(火) 19:57:30.73
>>266
なんか、遠い記憶にそんな努力をしたことがあるような、無いような。
ポケコン時代だと、
if文ってスゲー遅いんだよな・・・
それを嫌ってForNextで書いてた。
でも、そうするとコードの容量が大きくなるんだよなぁ。


>>266
224と32にとても意味があるのであれば、ビットシフトを駆使する方法もあるかもねぇ。
a >> 8 が0 なのは ABD
a >> 9 が1 なのは ACD

( a >> 8 ) * ( a >> 9 ) が1なのはD
299デフォルトの名無しさん:2012/01/17(火) 20:04:34.39
色々考えたソースがコンパイラの最適化に勝てないことも多々…。
300デフォルトの名無しさん:2012/01/17(火) 20:06:31.09
比較演算自体内部で分岐命令使ってる気もするがな。
301デフォルトの名無しさん:2012/01/17(火) 20:06:37.72
>>297
1990年くらいのパソコン。
一太郎しか入ってなかった。
302デフォルトの名無しさん:2012/01/17(火) 20:12:01.09
パソコンのメーカー名と機種のシリーズ名も言えないんじゃなぁな。
303デフォルトの名無しさん:2012/01/17(火) 20:14:06.20
>>301
MS−DOSの頃で、PC9801をターゲットにしてたなら、
テキストVRAM直書きが速かったかも。VRAMに表示文字以外に
確か属性があって、色やブリンクなどをセットできてた。
304デフォルトの名無しさん:2012/01/17(火) 20:16:56.86
>>303
詳しすぎワロタw


C言語に詳しい人って同時にコンピュータ関連詳しすぎw
305デフォルトの名無しさん:2012/01/17(火) 20:22:07.27
PC-9801プログラマーズBibleが未だに捨てられない。
306デフォルトの名無しさん:2012/01/17(火) 20:24:02.15
>>300
ちゃうちゃう。
サンプルコード書けない理由にもなってるけど、

もしABCDの処理が加算なら、

(加算数A) * ( (~a) >>8 ) + (加算数B) * (a >> 9 ) + .....

と比較しなくてもできる。

>>299
まあねぇ。
特に最近はHyperThreadingとかキャッシュとかねぇ。コードでは全く見えない高速化があるからねぇ。
307デフォルトの名無しさん:2012/01/17(火) 20:25:57.57
>C言語に詳しい人って同時にコンピュータ関連詳しすぎw
アセンブラの次にハードを直接いじるのに適してる言語だと思ってるから。
308デフォルトの名無しさん:2012/01/17(火) 20:36:08.57
>>295
複合機(レーザー)やってたが、PCで作るのは画像データorスクリプトだけだよ。
後は複合機側でやる。色はCMYKを混ぜると全色でる。
309デフォルトの名無しさん:2012/01/17(火) 20:38:23.26
結局はハード屋の奴隷
テレビの画質なんてものはLSIで決まる
Cプログラマは上からレジスタ操作してハードウェア様の機能をオンオフするだけ
310デフォルトの名無しさん:2012/01/17(火) 20:39:05.47
>>308
VxWorks ?
311デフォルトの名無しさん:2012/01/17(火) 20:40:56.60
>>310
大当たりw
312デフォルトの名無しさん:2012/01/17(火) 20:42:15.01
いやいや
メタリックインキや蛍光インキもありますぜ旦那
313デフォルトの名無しさん:2012/01/17(火) 20:42:46.37
>>308
CMYKって表現が分かる人、どのくらいいるのかな?
314デフォルトの名無しさん:2012/01/17(火) 20:42:59.11
>>311
豊橋じゃないってことやねwww
315デフォルトの名無しさん:2012/01/17(火) 20:43:48.60
熱転カラーリボン
316デフォルトの名無しさん:2012/01/17(火) 20:44:14.16
>>314
違う。
豊橋だ
317デフォルトの名無しさん:2012/01/17(火) 20:44:28.44
初期の熱転写はすぐ熱ダレしてたな。
318デフォルトの名無しさん:2012/01/17(火) 21:37:08.40
>>313
かなりたくさん。
319デフォルトの名無しさん:2012/01/17(火) 21:37:45.43
>>312
プリントゴッコなつかしい
320 ◆QZaw55cn4c :2012/01/17(火) 23:11:18.21
>>303
それが、裏VRAM に書く方法が今でもわからなかったりするのです。
321 ◆QZaw55cn4c :2012/01/17(火) 23:13:44.36
>>313
わかんない。シアンマゼンダイエロー、K‥‥‥K‥‥‥K‥‥‥キンタマか?
322デフォルトの名無しさん:2012/01/17(火) 23:15:45.85
>>321
ブラック
323デフォルトの名無しさん:2012/01/17(火) 23:26:58.27
>>320
バンク切り替えすればいいだけだろ。
ほんと、程度が低いな、お前。
324デフォルトの名無しさん:2012/01/17(火) 23:27:49.89
>>320
遙か彼方の記憶なのだが、どこかのポート出力でバンク切り替えしていたような?
325 ◆QZaw55cn4c :2012/01/18(水) 00:17:49.40
>>323
バンク切り替えはどうやればいいのですか?

>>324
http://www.webtech.co.jp/company/doc/undocumented_mem/
を探してはみたのですが‥‥‥。0A4hか?
326デフォルトの名無しさん:2012/01/18(水) 01:40:51.10
何言ってんだお前。
そんなのPC98使ってた人間なら常識だろ。
知らないのに出てくるとは、よっぽどなんだな。
327デフォルトの名無しさん:2012/01/18(水) 02:18:15.95
使ってれば常識なの?PC98で開発してればの間違いではないのだろうか。
PC98つかったことないけど。
328デフォルトの名無しさん:2012/01/18(水) 02:46:44.23
そうしてたかのように装ったのはお前だろ、QZ
329デフォルトの名無しさん:2012/01/18(水) 02:59:37.35
恋は盲目だな。>>327はQZじゃないよ。
330デフォルトの名無しさん:2012/01/18(水) 03:35:14.00
プラットフォームを選ばない会話。
x86以外ではmipsしか知らない俺には無理。
331254:2012/01/18(水) 08:29:12.36
>>298 比較演算よりビットシフトを使った条件のが速いというのは聞いたことがあります。

>>306 なるほど、条件×加算数 というふうにすればいいのか。
これを使って、いくつか書き直してみたいと思います。

ありがとうございます。

条件とAとBは例で示したものが多いです。
Cは3〜10行くらいです。
Dはいろいろあって、かなり長いです。
332デフォルトの名無しさん:2012/01/18(水) 08:40:06.15
とりあえず、いまどきのプロセッサで速度を気にする場合
まず、メモリアクセスと条件分岐を減らすのが基本。

その上で、ビット演算がどうとかいうのは実際に測定してから。
333デフォルトの名無しさん:2012/01/18(水) 09:47:49.57
>>331
自分で書いていてなんなんだが、

× ( (~a) >>8 )
○ ( (~a) >>8 ) && 1   //シフトした後1桁目だけを抽出

演算量が増えると、比較した方が早くなる可能性は十分にある。
また、デバッグがしにくい。16進法を脊髄反射で2進法にできるなら問題ないけど。
値の持たせ方も変わってくる(ビット演算しやすいデータ形式で持たせる必要がある)
ポインタを妙に使い出す
フラグを妙に使い出す( int 変数に複数の情報を持たせたくなる )
デバッグ関数( printf で2進法を表示するコードが欲しくなる )
結果としてコードの見通しが悪くなる


なんて特徴もあるからねぇ。注意は必要だけど。
334デフォルトの名無しさん:2012/01/18(水) 10:05:23.18
パフォーマンスが気になるなら、
ちょっとばかしアセンブラを勉強して、この資料を見るとよい。

http://download.intel.com/jp/developer/jpdoc/ia32.pdf

パフォーマンスが厳しい場合、割り算をしたがらない気持ちがよく分かると思うよ。

MOV( メモリからの読み込みなどで使用) が0.5クロック
CALL(関数の呼び出しでよく使われる)で5クロック
RET( Return ) 8クロック
DIV(割り算)が 56〜70クロック

CMP自身は0.5クロックだけど、If文だとJMPを伴うのでもう少し大きいかな?
ビットシフトは、MOVとシフト命令の1.5かな?
関数を使えば、CALLとRETが必要だから最低13クロック以上掛かることになる。

この辺は詳しくないので、説明はできないけど。
335デフォルトの名無しさん:2012/01/18(水) 10:52:06.29
なんかスゲー間違えてる・・・気がする・・・
だれか助けて

関数に引数1つをつけて呼んでリターンした場合
movl $0xa,(%esp)        ; 0.5クロック
call 0x4013e1 <func1(int)>  ; 5クロック
mov $0x0,%eax         ; 0.5クロック
leave                ; leaveは実質mov pop movなので、2.5クロック
ret                ; 8クロック
なので、最低 16.5クロック+関数内での演算クロック数が必要

ビットシフトは、
sarl $0x2,0x1c(%esp) ; 4クロック
4クロック+演算クロック数

if文
cmpl $0x0,0x18(%esp)     ; 0.5クロック
jne 0x4013ee <main()+46>  ; 不明:0.5クロック程度?
1クロック+演算クロック数が必要

あれ?
If 文って結構早くね?
てか、ビットシフト遅くね?
If文って分岐予測が当たればさらに高速化するし。
336デフォルトの名無しさん:2012/01/18(水) 11:53:53.16
ホッケーゲームみたいなのを作ってるんだが
バーとボールの当たり判定はどうすればいいんだ?
337デフォルトの名無しさん:2012/01/18(水) 11:57:33.93
>>336
物理演算ライブラリに丸投げ
338デフォルトの名無しさん:2012/01/18(水) 13:39:39.33
>>336
バーとボールの座標値を比較。
つーか、どう作っているのか判らんのにどう判定すればいいか分かるわけないだろw

>>335
すげぇ無駄な努力をしていることに気付け。
その高々数十クロックは一体何分の一秒なのか判っているのか?
339デフォルトの名無しさん:2012/01/18(水) 13:43:27.54
>>338
映像処理って、1秒に30個とか60個の画像が含まれていて、それぞれの画像は1920*1080ドットあったりして
その各ドットにはRGBの3つの8bit値が存在するんだけど、
1秒の映像を処理するのに何回画素値に対する処理が動くか判っているのか?
340デフォルトの名無しさん:2012/01/18(水) 13:57:18.96
画像処理は小さな最適化が大きな効果を及ぼす分野の一つだよねー。
アムダールの法則で言うところのpの値が限りなく1に近い。
341デフォルトの名無しさん:2012/01/18(水) 13:58:12.83
まずビデオチップで演算できないかを考える。
342デフォルトの名無しさん:2012/01/18(水) 14:02:05.12
速度上げるなら重複増やしてでもループ(分岐)回数減らすのがデフォ。

DOS時代は同じ処理を16回分連続で書いたこともあった。
343デフォルトの名無しさん:2012/01/18(水) 14:03:04.33
1920*1080*3*60=約0.4GB。
そりゃぁ、一画素を三回ずつ愚直に計算してたら回数は多いわねぇ。
CPUでそんなことすることを考えているとしたらそのほうが間抜けだ。
344デフォルトの名無しさん:2012/01/18(水) 14:04:12.65
>>342
今時のコンパイラなら、ループアンローリングもやってくれるよ。
ついでにベクタ化もしてくれるかもしれない。
345デフォルトの名無しさん:2012/01/18(水) 14:56:20.00
>>343
愚直に計算しないためにも、たとえばSSEつかって4画素(4つの32bit整数として)同時にフィルタをかけたりするよね。
>>335はそういうことにつながる話でもあるんだけど、それも>>338みたいに無駄な努力で間抜けな考えだと思うの?

ただいえるのは、スレ違いだということ。
346デフォルトの名無しさん:2012/01/18(水) 15:02:35.06
「CPUで」だから、GPUにやらせろっていいたいんだろう
だからどうしたのって話だけどねー
347デフォルトの名無しさん:2012/01/18(水) 15:06:42.41
少なくとも、今時のCPUはクロック通りに動くわけじゃない。
パイプラインもあればキャッシュミスすればペナルティもある。
クロック数だけ足し算しても屁の突っ張りにもならないな。

前からこのスレでも言われているだろう。所要時間を知りたかったら実測しろと。
348デフォルトの名無しさん:2012/01/18(水) 15:16:49.69
少しでも軽くなるように期待してあらかじめ書いているだけだろう?
349デフォルトの名無しさん:2012/01/18(水) 15:21:30.93
>>347
所要時間を知りたいわけじゃないでしょ
今問われている箇所がボトルネックになっていることを突き止めたあとかもしれないよ
350デフォルトの名無しさん:2012/01/18(水) 15:27:36.73
意外とレベルの高い質問の中くだらない事で恐縮なんだが…
int main() {
func1();
}
void func1() {
func2();
}
void func2() {
func3();
}…
ひとつの関数を見やすくするという理由だけで、こんな風に
入れ子になっていく事は、なるべく避けた方がいいのかな?

351デフォルトの名無しさん:2012/01/18(水) 15:30:56.90
>>350
ちゃんと名前付けてれば大丈夫だと思うよ。
「見やすくする」という基準がずれてなければ。
352デフォルトの名無しさん:2012/01/18(水) 15:40:12.61
>>347
言ってることはあってるが、今言うことじゃないな
353デフォルトの名無しさん:2012/01/18(水) 15:52:40.36
>>351
すばやい回答ありがとう!
見やすくしようと思って整理してたら、どんどん関数が増えていって
ちと不安になってきたので質問しました。
354デフォルトの名無しさん:2012/01/18(水) 17:17:24.00
>>352
その実測が既に難しくなっているんだけどな。

そのコードがどのくらい掛かるかを調べるために、そのコードを繰り返したら
キャッシュあたりまくりでパフォーマンスが良すぎる値が出てくる。
355デフォルトの名無しさん:2012/01/18(水) 17:26:20.65
それはテストが下手だといわざるを得ない
356デフォルトの名無しさん:2012/01/18(水) 17:37:23.71
つーか、普段キャッシュにあたらないような状況ならそこを改善する意味がないだろ。
357デフォルトの名無しさん:2012/01/18(水) 17:47:20.87
【C++】高速化手法【SSE】
http://toro.2ch.net/test/read.cgi/tech/1130349336/
358デフォルトの名無しさん:2012/01/18(水) 17:55:11.41
実測は実データまたは実データに近い仮想データで行うんだから
それでキャッシュヒットしまくって全体に対する占有時間が小さくなってるなら
>>356の言うとおり改善する意味なし。
359デフォルトの名無しさん:2012/01/18(水) 19:59:00.54
>350
ヘッダファイル作ってコメント入れときゃ多少マシだろ。
360デフォルトの名無しさん:2012/01/18(水) 20:04:22.56
>見やすくするという理由

実際に見やすくなり、再利用が出来るなら、そうして良いんじゃないの?
361デフォルトの名無しさん:2012/01/18(水) 20:34:18.83
関数の行数は1画面に収まる程度にするとよいとCodeCompleteに書いてあったぞ
2〜3行しかない処理を関数化するのは逆によろしくないようで。
362デフォルトの名無しさん:2012/01/18(水) 20:39:13.90
>>361
意味のある名前をつけられるかどうかを指標にする
同じコードを2回書くならそれを関数かできないか検討する
363 ◆QZaw55cn4c :2012/01/18(水) 20:40:12.35
>>350
解決するべき条件をひとつずつ皮をむくようにクリアしながら下位の関数に投げてしまう、というのは私はよくします。
直近では
http://toro.2ch.net/test/read.cgi/tech/1325685876/339
main() は fopen() と fclose() しかしていない。
364デフォルトの名無しさん:2012/01/18(水) 20:41:53.23
1画面って何行くらいなんだろ
画面解像度やフォントサイズでかなり違いがでそうだけど
365デフォルトの名無しさん:2012/01/18(水) 20:44:51.45
一つ関数を作る度に、膨大な設計書を書かされていた時は、
一つの関数が300行を楽々超えていた。
366デフォルトの名無しさん:2012/01/18(水) 20:50:00.46
個人的には、短い関数が多い方が見やすい。

>>365
開発だとそうなりがちだわな。
2000超えてるの見たときは、驚いたけど。
367デフォルトの名無しさん:2012/01/18(水) 21:10:25.39
一行の関数とか大量に作るなあ
まあ(C++ではなく)C言語なら、多少は自重するが
それでも20行以内の関数なんて全然珍しくはない
368デフォルトの名無しさん:2012/01/18(水) 21:16:46.85
>>361
基準が行数って時点で目的意識はどこへやら

いまどき行いくらって稼ぎ方はそうないだろうが
頭脳労働者らしからぬ発言には気をつけろな
369デフォルトの名無しさん:2012/01/18(水) 21:32:50.30
亜流だか我流だか、かも試練が、

アルゴリズムが埋もれないように関数化する
370デフォルトの名無しさん:2012/01/18(水) 21:54:25.28
>>350
> ひとつの関数を見やすくするという理由だけで、こんな風に
> 入れ子になっていく事は、なるべく避けた方がいいのかな?

必要ないなら、「入れ子 (ネスト)」は少ないほうがいい。
俺なら、こう書くかな。

int main() {
 func1();
 func2();
 func3();
}
void func1() {
 ...
}
void func2() {
 ...
}
void func3() {
 ...
}
371デフォルトの名無しさん:2012/01/18(水) 21:58:58.37
>>370
あまりにこの形式になりすぎて
上位のほうの関数が実際に何やってるのか
よくわからんくなってるプロジェクトを最近見た
372デフォルトの名無しさん:2012/01/18(水) 22:21:44.34
>>370
ナンセンス

関数内に隠せないものを関数スコープで宣言とか
おまえは B の時代のヨボヨボジジイか?
373デフォルトの名無しさん:2012/01/18(水) 22:22:28.10
>>364
こういう場面で言われる1画面は80*25をさす場合が多い。80文字、25行ね。
最近はメソッドや変数名が長い場合も多く、横方向への基準を緩和していることも多い。
たとえば120文字までにおさめるなど。

縦方向は今も昔もさほど変わっていないと思う。
でもメソッドチェーンなんかで、1かたまりの処理が複数行にわたる場合なんかを考えると、
今となっては25行は厳しいかもしれないね。
374デフォルトの名無しさん:2012/01/18(水) 22:24:25.63


ステマ相関図画像更新(1/17)
http://gazo.restspace.jp/img-box/img20120117010742.jpg
テレビや新聞、大規模なネットサイトで「今流行の」「今話題の〜」「女性に人気の〜」等と言われるものはほぼ全て
この画像上部、○○堂がコントロールしている。
  ・世間にどの程度流行らせるか
  ・流行に乗り遅れる(流行に乗り遅れさせる)人間をどのくらい作るか
  ・話題に乗り遅れた人間に対してどの程度の疎外感を与えるか
  ・いつその流行を終わらせるか
2chもステマ会場
http://www.dotup.org/uploda/www.dotup.org2526030.jpg

ちなみに ハリーポッターと賢者の石の 「石」とはテレビのこと(著者が執筆当時)
 ダイオード→半導体→シリコン→石
 賢者とはテレビを見る人間でも番組を作る人間でもなく、テレビを操る人間。
375デフォルトの名無しさん:2012/01/18(水) 22:42:55.85
なんのことだかさっぱりだが、そこはダイオードじゃなくてトランジスタだろ。
376デフォルトの名無しさん:2012/01/18(水) 22:47:08.66
>>370
俺もそれっぽい書き方するわ。
もちろん、そこまで極端ではないけど。
377デフォルトの名無しさん:2012/01/18(水) 22:50:22.44
アジャイルなら、ある処理を関数化するかどうか、つまり処理の粒度は「意図によるプログラミング」に従う。
378デフォルトの名無しさん:2012/01/18(水) 22:52:07.61
趣味のソースなら再利用する気が無い限り関数化しないな。
379デフォルトの名無しさん:2012/01/18(水) 23:07:22.27
>>372
意味わからん、あくまでも >>350 の改善案だぞ。
380デフォルトの名無しさん:2012/01/18(水) 23:51:17.96
>>378
関数化の大きな目的の1つである同一コードを纏めて修正を1回で済ませる、という目的を忘れてる気がする。

どんなコードの書き方でも基本的に構わないけど、
バグの温床になる書き方はどんな書き方でもNGだと思うが
381デフォルトの名無しさん:2012/01/18(水) 23:54:29.63
>>372
>>379

ナンセンス以前に、おまえら超能力者かと
mainからみて隠蔽したい内容であるなら、>>350だし、
それがアルゴリズムとして重要でmainからみとおせる必要があるなら>>370だし。

それが、>>350で読み解けてるみたいだから、超能力でもあるんだろう。
382デフォルトの名無しさん:2012/01/19(木) 00:12:29.16
http://ameblo.jp/c-plus-style/
検証お願いします
383デフォルトの名無しさん:2012/01/19(木) 07:30:01.47
「俺のコーディングが最も正しい!!」
384デフォルトの名無しさん:2012/01/19(木) 08:21:13.40
コンパイラ通ったの?
385デフォルトの名無しさん:2012/01/19(木) 08:21:41.81
コーディングスタイルはそれぞれでも、
1関数は百行以内で頼みたい。
386384:2012/01/19(木) 08:25:52.23
ソース読み間違えたorz
387デフォルトの名無しさん:2012/01/19(木) 10:52:47.12
>>382
ぱっと見、抽象型プログラミングっぽいけど、よく見たらファイル一個につき
selfが一個だな。
あんまり利点を感じない。
388デフォルトの名無しさん:2012/01/19(木) 14:07:44.90
いったい検証てなんなんだ?
意味がわからんのだが。
389デフォルトの名無しさん:2012/01/19(木) 15:18:28.05
査読してほしいってことぐらいわかろう
390デフォルトの名無しさん:2012/01/19(木) 15:50:28.51
何がしたいコードなのかもわからずに査読も何もないだろう。
ぱっと見、OOPを噂で聞いたくらいで何かそういうことを
やろうとしたような残念なコードにしか見えないんだが。
391デフォルトの名無しさん:2012/01/19(木) 17:34:27.20
ネバーネバーネバーネバーギブアップって、
! ! ! ! give_up という事で、
give_upがtrueなら
! ! ! ! give_up もtrueという事で
ギブアップなんですよね?
392デフォルトの名無しさん:2012/01/19(木) 17:51:02.21
give_up || !give_up
だよ
393デフォルトの名無しさん:2012/01/19(木) 18:37:49.17
番号を選択し、選択した番号によって処理を変えたいのですが、
[範囲外の数値が入力されました。]としか表示されません
番号通りの処理をさせるにはどうしたらいいのでしょうか


http://codepad.org/IOuFqtMb
394デフォルトの名無しさん:2012/01/19(木) 18:44:58.18
>>393
- scanf("%d", menu);
+ scanf("%d", &menu);
395デフォルトの名無しさん:2012/01/19(木) 18:51:32.77
>>394
有難うございます
早速修正します
396デフォルトの名無しさん:2012/01/19(木) 20:51:59.13
コンパイラが宣言された配列に対して実際に確保するメモリ領域の大きさを決める基準ってなに?
397デフォルトの名無しさん:2012/01/19(木) 21:00:03.22
>>396
配列のサイズ以外に何かあるの?
398デフォルトの名無しさん:2012/01/19(木) 21:25:55.65
char は1バイト
int は4バイト(処理系によりけり)
long は8バイト(処理系によりけり)

とかを聞きたいんじゃね?
399デフォルトの名無しさん:2012/01/19(木) 21:44:19.30
コンパイラの仕様による
としか
400デフォルトの名無しさん:2012/01/19(木) 21:48:02.12
char a[6];
が8バイト分確保するとか。
コンパイラ依存だろうが。
401396:2012/01/19(木) 22:24:08.73
すまん、要素数が1の時に1byte、2〜16で16byte、17〜32で32byte、33〜64で64byteっていう実験結果が得られたのを前提に頼む。
402デフォルトの名無しさん:2012/01/19(木) 22:32:17.25
>>401
char配列?
403デフォルトの名無しさん:2012/01/19(木) 22:32:39.53
>>401
>すまん、要素数が1の時に1byte、2〜16で16byte、17〜32で32byte、33〜64で64byteっていう実験結果が得られたのを前提に頼む。

そんなのじゃなく、実際の宣言部分を見せろ。
404デフォルトの名無しさん:2012/01/19(木) 22:37:07.14
>>401
OSやコンパリラとか書かないと
405396:2012/01/19(木) 22:56:02.82
char a[i];

コンパイラはgcc
406デフォルトの名無しさん:2012/01/19(木) 22:57:55.71
>>381
俺の超能力をもってしても、お前のレスは意味不明。
407デフォルトの名無しさん:2012/01/19(木) 23:02:24.89
>>401
別に普通のことだろ。
何が疑問なんだ?
408デフォルトの名無しさん:2012/01/19(木) 23:03:38.25
プラグマとかコンパイルオプションで変えられるっしょ
409デフォルトの名無しさん:2012/01/19(木) 23:05:06.72
>>405
とりあえず↓だと
#include<stdio.h>
int main(int argc, char **argv)
{
char a1[1];
char a2[2];
char a17[17];
char a33[33];

printf("sizeof(a1) = %d\n", sizeof(a1));
printf("sizeof(a2) = %d\n", sizeof(a2));
printf("sizeof(a17) = %d\n", sizeof(a17));
printf("sizeof(a33) = %d\n", sizeof(a33));
return 0;
}
実行結果 こうなる。
sizeof(a1) = 1
sizeof(a2) = 2
sizeof(a17) = 17
sizeof(a33) = 33

gccは
$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-pc-cygwin/4.5.3/lto-wrapper.exe
Target: i686-pc-cygwin
--中略--
Thread model: posix
gcc version 4.5.3 (GCC)
410デフォルトの名無しさん:2012/01/19(木) 23:07:02.20
>>405
>char a[i];
要素数が変数になっているのが気になるな。
情報小出しにしないで、>401でどうしてそう判断したのか、
コードを出しな。
411デフォルトの名無しさん:2012/01/19(木) 23:25:53.81
>>410

#include <stdio.h>
#define i 1
int main(void)
{
char a[i],b[i],c[i];
printf("a:%p\n",a);
printf("b:%p\n",b);
printf("c:%p\n",c);
}
412デフォルトの名無しさん:2012/01/19(木) 23:27:23.14
>要素数が変数
>>405がやってるのは、なに言語?
413デフォルトの名無しさん:2012/01/19(木) 23:27:53.71
>>411
そういう書き方、気持ち悪いと思う
414デフォルトの名無しさん:2012/01/19(木) 23:28:00.33
どうせワード境界だのなんだのの話だろ?
415デフォルトの名無しさん:2012/01/19(木) 23:28:08.95
アドレス表示してなにがやりたいの?
416デフォルトの名無しさん:2012/01/19(木) 23:42:07.25
>>411
環境によって、4の倍数のアドレスがアクセスが速いとか、奇数アドレスにアクセスできないとか
あるから変数とかきっちり敷き詰めて置かれないことのほうが多い。
417デフォルトの名無しさん:2012/01/19(木) 23:43:01.09
#include <stdio.h>
char a[XXX];
char b[1];
int main(){printf("%d ",b-a);return 0;}

for XXX in 1 2 3 4 5 6 7 8 9 10; do gcc -DXXX=$XXX hoge.c; ./a.out; done

結果
1 2 3 4 5 6 7 8 9 10
418デフォルトの名無しさん:2012/01/19(木) 23:44:02.24
>>405
配列の添字が変数のトキはとくべつなしょりになるよ
419デフォルトの名無しさん:2012/01/19(木) 23:44:43.21
構造体だと
#pragma pack(1)
みたいな、隙間無く埋めろとか指定できるのもあるな。
こんなの使わないから忘れたけど。
420デフォルトの名無しさん:2012/01/19(木) 23:45:13.81
>>417
a,bの順番にかくほされるとはかぎらないよ
421デフォルトの名無しさん:2012/01/19(木) 23:53:00.39
構造体は何にもしなくてもアドレス続いてるんじゃなかたけ?
例えば、
struct a{
long n;
char c[4];
};
a.nの次のアドレスにa.c[0]が続いてるんじゃないの??
422デフォルトの名無しさん:2012/01/19(木) 23:54:34.00
struct a{
char c[3];
long n;
};
はどうなってるのかと考える?
423デフォルトの名無しさん:2012/01/19(木) 23:54:42.23
いいえ
424デフォルトの名無しさん:2012/01/19(木) 23:57:17.34
>>422
char c[3]がlongに合わせられるんでしょ?
ちなみにlongは4バイトでw
425デフォルトの名無しさん:2012/01/19(木) 23:58:17.42
何を根拠にそう言ってるんだ?
426デフォルトの名無しさん:2012/01/20(金) 00:00:03.47
>>421
隙間あいてることもあるよ。
427デフォルトの名無しさん:2012/01/20(金) 00:01:02.85
>>424
>char c[3]がlongに合わせられるんでしょ?

×
428デフォルトの名無しさん:2012/01/20(金) 00:03:08.82
なんとw
char c[3]の領域破壊したら、その下のlong nも壊れるんじゃないんだ
429デフォルトの名無しさん:2012/01/20(金) 00:07:56.70
>>411
それは配列がどう配置されるかで、

>>396
>コンパイラが宣言された配列に対して実際に確保するメモリ領域の大きさを決める基準ってなに?
の、配列に対して確保されるメモリ領域の大きさとは、話が変わってるぞ。

>>409で示したように、「配列に対して実際に確保するメモリ領域」の大きさは、char a[N];
ならNになっている。
430デフォルトの名無しさん:2012/01/20(金) 00:17:02.14
構造体のサイズとアライメント
ttp://www.g-ishihara.com/c_st_01.htm
431デフォルトの名無しさん:2012/01/20(金) 00:43:40.33
double array[10][20]に対応するキャストってなんでしょうか?
よろしくお願いいたします。
432デフォルトの名無しさん:2012/01/20(金) 00:46:33.99
ポインタと意味と斟酌すると、
 double (*p)[20] = array;
433デフォルトの名無しさん:2012/01/20(金) 00:56:51.62
ダブルポインタとかトリプルポインタってどういう時に使うの?
434デフォルトの名無しさん:2012/01/20(金) 00:58:22.67
使う時が来るまでほっといていいよ
435デフォルトの名無しさん:2012/01/20(金) 01:00:02.56
>>433
とりあえずコマンドライン引数を使おうとすると、早速char **argvが出てくるな。
436デフォルトの名無しさん:2012/01/20(金) 01:06:52.78
>>435
コマンドラインで char *argvしか使ったこと無いけどそれ何の意味があるの?
437デフォルトの名無しさん:2012/01/20(金) 01:28:56.92
>>436
複数パラメータ時は?
438デフォルトの名無しさん:2012/01/20(金) 06:52:37.88
>>436
>コマンドラインで char *argvしか使ったこと無いけどそれ何の意味があるの?

コマンドライン引数はint argc, char **argvしかありえないが、処理系なに使っている?
439デフォルトの名無しさん:2012/01/20(金) 06:53:40.58
関数の中で引数の変数にポインタを設定するときとか
440デフォルトの名無しさん:2012/01/20(金) 09:28:45.67
引数の char *argv[] が実際には char **argv であることなんて
知らない人のが多いだろう。
441デフォルトの名無しさん:2012/01/20(金) 09:33:20.81
あれは字句分解が面倒でのぅ
442デフォルトの名無しさん:2012/01/20(金) 11:42:40.29
>>440
引数の場合同じことになるだけで、実際は前者だろ。
443デフォルトの名無しさん:2012/01/20(金) 12:03:26.72
[]が配列を渡しているように見えるからイカンのでは
444デフォルトの名無しさん:2012/01/20(金) 12:09:20.92
atoi関数の、
ループ(・・・){
n = 10 * n + (s[i] - '0');
・・・
}
return n;
この処理って何をやっているのですか><
iPhoneセミコロン打てない><
445デフォルトの名無しさん:2012/01/20(金) 12:14:30.21
卓上で手動ステップ実行やってみなさい
446デフォルトの名無しさん:2012/01/20(金) 12:20:58.46
2バイト文字のバイナリ化ってどうすれば出来ますか?
447デフォルトの名無しさん:2012/01/20(金) 12:31:09.33
1バイトの場合と一緒
448デフォルトの名無しさん:2012/01/20(金) 12:45:13.57
>>444
ヒント:
(s[i] - '0') この部分はs[i]の1文字から、数値を得ている
s[i]がcharの'1'だとすると、'1'=0x31
'0'は0x30なので、0x31 - 0x30 から 数値として1を得る
449デフォルトの名無しさん:2012/01/20(金) 13:25:11.24
>>444
>iPhoneセミコロン打てない><
「日本語テンキー」を使っている状態だろうから、
左下の地球儀アイコンを押して「English(US)」にすればフルキーが出る。
そこで左下の「123」キーを押せば「;」キーが見える。
450デフォルトの名無しさん:2012/01/20(金) 15:09:21.28
学校の課題で自分でプログラム作れって言われて、
グリコゲーム作ろうと思ったんだけど、うまく動作しないんだ。
助けてくれ。
エンドレスじゃんけん状態から抜け出せない・・・><
↓みたいなプログラム作ったんだが。
451デフォルトの名無しさん:2012/01/20(金) 15:11:34.14
>>450です

プログラムです


#include <stdio.h>
#include <time.h>
#include <stdlib.h>

int main(void)
{
int you,cpu,kaidan;
int y_position = 0;
int c_position = 0;

printf("グリコゲーム\n");
printf(“階段の数>>”);
scanf(“ %d\n”,&kaidan);
452デフォルトの名無しさん:2012/01/20(金) 15:12:40.43
>>451の続きです

srand(time(NULL));
do
{
printf("最初はグー\n");
printf("\nじゃん!けん!\n");
do
{
printf("ポン!\n");
printf("グー:1 チョキ:2 パー:3 >>");
scanf("%d\n",&you);
cpu = rand()%3 + 1;
printf("cpu>>");
if(cpu == 1)
printf("グー\n");
else if(cpu == 2)
printf("チョキ\n");
else
printf("パー\n");
} while(you == cpu);
453デフォルトの名無しさん:2012/01/20(金) 15:13:44.78
>>452の続きです

if (you == 1 && cpu == 2)
{
printf("you:「グ・リ・コ!」");
y_position = y_position + 3;
printf("you>>%d段目\n",y_position);
printf("cpu>>%d段目\n",c_position);
}
else if (you == 2 && cpu == 3)
{
printf("you:「チ・ア・ガ・ア・ル!」");
y_position = y_position + 5;
printf("you>>%d段目\n",y_position);
printf("cpu>>%d段目\n",c_position);
}
else if (you == 3 && cpu == 1)
{
printf("you:「パ・イ・ナ・ツ・プ・ル!」");
y_position = y_position + 6;
printf("you>>%d段目\n",y_position);
printf("cpu>>%d段目\n",c_position);
}
454デフォルトの名無しさん:2012/01/20(金) 15:15:02.09
>>450
宿題スレって知ってるか
>>1
455デフォルトの名無しさん:2012/01/20(金) 15:15:22.80
>>453の続きです

else if (cpu == 1 && you == 2)
{
printf("cpu:「グ・リ・コ!」");
c_position = c_position + 3;
printf("you>>%d段目\n",y_position);
printf("cpu>>%d段目\n",c_position);
}
else if (cpu == 2 && you == 3)
{
printf("cpu:「チ・ア・ガ・ア・ル!」");
c_position = c_position + 5;
printf("you>>%d段目\n",y_position);
printf("cpu>>%d段目\n",c_position);
}
else if (cpu == 3 && you == 1)
{
printf("cpu:「パ・イ・ナ・ツ・プ・ル!」");
c_position = c_position + 6;
printf("you>>%d段目\n",y_position);
printf("cpu>>%d段目\n",c_position);
}



}while((y_position < kaidan) && (c_position < kaidan));

456デフォルトの名無しさん:2012/01/20(金) 15:16:33.71
>>451
とりあえずscanfに\nが入ってる時点でおかしい
それ以上は宿題スレ行け
457デフォルトの名無しさん:2012/01/20(金) 15:16:48.40
>>454 すみません、2ちゃんねる初めて使うので知らなかったです。
そっちにいってみます
458デフォルトの名無しさん:2012/01/20(金) 15:18:18.73
>>456 ありがとうございます。いってきます。
459デフォルトの名無しさん:2012/01/20(金) 15:24:18.77
「チ・ア・ガ・ア・ル!」←なんだよこれ?
チ・ヨ・コ・レ・エ・ト!だろ?
460デフォルトの名無しさん:2012/01/20(金) 15:28:08.03
>>459 パイナップルも6文字なので
5文字か4文字の言葉にしようと思いました。
普通はチョコレートですよね
461デフォルトの名無しさん:2012/01/20(金) 15:55:31.89
うちの地元ではチ・ン・チ・コ・オ・ル!だったよ
462デフォルトの名無しさん:2012/01/20(金) 16:21:23.14
ちょこれいとに1票
463デフォルトの名無しさん:2012/01/20(金) 16:29:03.16
ぬるぽに1票
464デフォルトの名無しさん:2012/01/20(金) 16:29:39.62
ガッ
465デフォルトの名無しさん:2012/01/20(金) 19:59:29.24
チョキは蝶野正洋
パーは橋本真也
グーはグレートムタ
466 ◆QZaw55cn4c :2012/01/20(金) 21:34:22.22
だるまさんがころんだ
さんしろうがわらった
げんごろうがもぐった
かみふうせんがきえた
ゆうらんせんがゆれた
へんとうせんがはれた
かめれおんのあかちゃん
ちゃんぴおんのでかぱん
あみにおんのぼうさん
うちゅうせんがとんでく〜
http://www.youtube.com/watch?v=010MEVmjoVA

467デフォルトの名無しさん:2012/01/20(金) 21:59:17.25
どこまでもうぜえなコイツ
468 ◆QZaw55cn4c :2012/01/21(土) 00:46:36.37
>>467
相手にするなカス
469デフォルトの名無しさん:2012/01/21(土) 01:23:37.04
466 名前:あぼ〜ん[あぼ〜ん] 投稿日:あぼ〜ん

468 名前:あぼ〜ん[あぼ〜ん] 投稿日:あぼ〜ん

これが正しい対処法
470デフォルトの名無しさん:2012/01/21(土) 01:41:15.32
469 名前:あぼ〜ん[レスあぼ〜ん] 投稿日:あぼ〜ん
471デフォルトの名無しさん:2012/01/21(土) 01:48:10.53
>>469
透明にしたほうがよくね?
472デフォルトの名無しさん:2012/01/21(土) 01:50:55.03
このスレを開かないのが一番いいと思う。
473デフォルトの名無しさん:2012/01/21(土) 02:35:27.45
いや、にちゃんなんか見ないのが・・・…...
474デフォルトの名無しさん:2012/01/21(土) 12:49:08.28
死ねばいいと思うよ・
475uy:2012/01/21(土) 13:08:01.48
生まれてきてごめんなさい
476デフォルトの名無しさん:2012/01/21(土) 14:15:20.40
あやまる前にやる事があるんじゃないか?
477デフォルトの名無しさん:2012/01/21(土) 15:40:05.55
          _____
  .ni 7    /        \  ご冥福をお祈りします
l^l | | l ,/) / /・\  /・\ \    .n
', U ! レ' / |    ̄ ̄    ̄ ̄  |  l^l.| | /)
/    〈  |    (_人_)    |  | U レ'//)
     ヽっ     \   |    /   ノ    /
 /´ ̄ ̄ ノ     \_|    \rニ    |
                      `ヽ   l
478デフォルトの名無しさん:2012/01/21(土) 15:49:56.91
文字列を読み込んで判定すんのってどうやるのが1番いいんですか?
(厨房にわかるレベルでお願いします)
479デフォルトの名無しさん:2012/01/21(土) 15:52:03.71
>>478
国語の勉強すりゃいい
480デフォルトの名無しさん:2012/01/21(土) 15:52:06.95
「判定」について
481デフォルトの名無しさん:2012/01/21(土) 15:55:40.81
文字列を読み込んで?
482馬鹿で中2病な厨房:2012/01/21(土) 15:58:40.18
要するにriverと書き込むとmountainと出力されるプログラムが書きたいのです
483デフォルトの名無しさん:2012/01/21(土) 16:08:44.71
>>482
strcmp()とか普通の方法じゃご不満なんですかね。
どうご不満とか書かないと、回答もないですよ。
484デフォルトの名無しさん:2012/01/21(土) 16:49:03.21
>>482
#include <stdio.h>
#include <string.h>
void main(){
char buf[20],*p;
fgets(buf,20,stdin);
if((p=strchr(buf,'\n'))!=NULL)*p='\0';
if(strcmp("river",buf)==0)puts("mountain");
}
485デフォルトの名無しさん:2012/01/21(土) 16:51:13.88
答えられる頭のない奴は黙ってたほうがいいよ
486デフォルトの名無しさん:2012/01/21(土) 16:55:17.01
答えられない人はだれも発言してないように見えるけど。
487デフォルトの名無しさん:2012/01/21(土) 17:07:57.40
>>486
>>485は答えられないんじゃないかな
488デフォルトの名無しさん:2012/01/21(土) 17:08:06.18
一人だけいるよ >>485
489デフォルトの名無しさん:2012/01/21(土) 17:08:36.76
うぉっ、かぶった ... orz
490デフォルトの名無しさん:2012/01/21(土) 17:50:37.51
答えられない>>485は黙ってたほうがいいよ
491485:2012/01/21(土) 18:07:48.60
雑魚共がごちゃごちゃうっせーな
俺はプロだから答えられるに決まってるだろ
492デフォルトの名無しさん:2012/01/21(土) 19:10:09.97
じゃあ答えろよ


何をと訊かれても知らないが
493デフォルトの名無しさん:2012/01/21(土) 21:36:33.96
>>491何のプロなん?
494485:2012/01/21(土) 21:52:58.18
>>492
何を?
495デフォルトの名無しさん:2012/01/21(土) 22:03:31.36
>>494何のプロなん?
496デフォルトの名無しさん:2012/01/21(土) 22:24:45.54
>>482 に俺はプロだから答えられるって言うのもプロっぽくないよな。
497デフォルトの名無しさん:2012/01/21(土) 23:07:06.97
ああ成る程、プログラマ未満でプロか。
498デフォルトの名無しさん:2012/01/21(土) 23:18:27.22
何でID無いんだよ
499デフォルトの名無しさん:2012/01/21(土) 23:20:27.02
QZが自演できるようにだろ。
500デフォルトの名無しさん:2012/01/21(土) 23:30:12.37
ID化必要だよな
501デフォルトの名無しさん:2012/01/22(日) 02:03:16.11
C言語にsprintfがあることを知った時、感動したな
502デフォルトの名無しさん:2012/01/22(日) 04:35:58.10
>>501
昨日の俺だわw
strcatとか使う意味ないわwww
503デフォルトの名無しさん:2012/01/22(日) 08:57:59.99
sprintf使えるよな
win32apiでMessageBoxで変数の値を出力したいときとかも重宝する
504馬鹿で中2病な厨房:2012/01/22(日) 14:34:55.78
>>484
ありがとうございます
505デフォルトの名無しさん:2012/01/22(日) 16:15:06.90
506デフォルトの名無しさん:2012/01/22(日) 18:09:40.27
>>444です。
n = 10 * n + (s[i] - '0');
これの意味がわかりました。
ヒントを下さった>>448さん、ありがとうございました。
これはK&Rに載っているatoi関数、
int atoi(char s[])
{
int i, n;

n = 0;
for (i = 0; s[i] >= '0' && s[i] <= '9'; i++)
n = 10 * n + (s[i] - '0');
return n;
}
の一部分でした。
507デフォルトの名無しさん:2012/01/22(日) 18:10:41.90
K&Rに習って、自分でもatoi関数を書いてみました。
#include <stdlib.h>

int myatoi(char s[]){
char *p = s;
int i, j, n, length, len, sum;
int *ptr;

length = 0;
while (*p++)
length++;
ptr = calloc(length, sizeof(int));
len = length;
i = 0;
while (s[i] >= 0x30 && s[i] <= 0x39) {
ptr[i] = s[i] - 0x30;
n = 1;
for (j = 0; j < length - 1; j++)
n *= 10;
ptr[i] *= n;
i++;
length--;
}
sum = 0;
for (i = 0; i < len; i++)
sum += ptr[i];
free(ptr);
return sum;
}
-------------------------------------------
n = 10 * n + (s[i] - '0');
この式ってすごいうまいことやってるんですね
508デフォルトの名無しさん:2012/01/22(日) 18:56:12.52
#include<stdio.h>
#define NUMBER 5
int main(void)
{
int i;
int tensu[NUMBER]={0};
int b[NUMBER]={0};

puts("please put an points of your students");

for(i=0;i<NUMBER;i++)
{
printf("Student No.%d,Student point:",i+1);
scanf("%d",tensu[i]);
if(tensu[i]>=60)
b[i]=tensu[i];
}
puts("The success students are.....");
for(i=0;i<NUMBER;i++)
{
printf("student No.%d:%d points.\n",i+1,b[i]);
}
return 0;
}
コンパイルできるんですがどうも全て実行できません
16行目がいけないでしょうか?
509デフォルトの名無しさん:2012/01/22(日) 19:05:41.91
scanf("%d",&tensu[i]);
510デフォルトの名無しさん:2012/01/22(日) 19:14:23.06
\(^o^)/
ありがとうございます
初歩的なミスですね。。。
511デフォルトの名無しさん:2012/01/22(日) 21:51:57.76

就活中
(p)http://livedoor.blogimg.jp/jin115/imgs/3/1/31a6f8e6.jpg

就職後
(p)http://livedoor.blogimg.jp/jin115/imgs/2/b/2b790359.jpg

街の人(やらせ業者)募集中です

512デフォルトの名無しさん:2012/01/22(日) 22:58:40.48
平方根を求める関数sqrt(double x)は
「math.h」をインクルードすることで使えるようになりますが
このヘッダ内を文字列「sqrt」で検索しても、よくわかってないせいもありますが
それらしい計算式が見当たりません
sqrt関数はどのようにして、平方根を求めてるのでしょうか?
数学的な計算式は理解しています
math.h内でどのように処理されてるのか知りたかったので、聞いてみました
win7でVC2010を使用しています
513デフォルトの名無しさん:2012/01/22(日) 23:15:17.23
プログラム自体はふつう、objやlib、DLLなどにあります
ヘッダは宣言のみです
514デフォルトの名無しさん:2012/01/22(日) 23:21:47.22
>>ヘッダは宣言のみです
勘違いしてました
ありがとうございます
515デフォルトの名無しさん:2012/01/23(月) 01:00:27.01
本来は使用する側が、関数が組み込まれているライブラリを指定するように作られてるが
標準関数や基本的な関数ははじめから組み込むようにコンパイラやIDEが指定してくれている。
このオマケのような仕組みのために間違えたんだろう。
516デフォルトの名無しさん:2012/01/23(月) 01:32:34.59
C言語で二点の緯度経度から距離を求めることができますか。
517デフォルトの名無しさん:2012/01/23(月) 01:36:10.21
できない理由はありません。
518デフォルトの名無しさん:2012/01/23(月) 01:37:30.57
>>512
これはGNU libcのものだが、
とにかく高速である事が求められる数値計算系の実装は
パッと見て何をやっているのかさっぱり分からないことも多いw

http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/ieee754/dbl-64/e_sqrt.c
519デフォルトの名無しさん:2012/01/23(月) 01:38:23.05
ちゃんと考えると難しいな、高低は別としても
520デフォルトの名無しさん:2012/01/23(月) 01:39:17.77
>>516
できるよ
地球の中心を原点として2点の座標のなす角を
内積(内積が0に近いときは外積)から求めて半径を掛ければおk
521デフォルトの名無しさん:2012/01/23(月) 01:42:00.26
地球は楕円だから、その分を考慮した
やや大仰でめんどくさい式があったはず
522デフォルトの名無しさん:2012/01/23(月) 01:43:42.87
どこまでの精度が必要か明確にしないとな
523デフォルトの名無しさん:2012/01/23(月) 01:44:06.59
>>517
ありがとうございます。
どのように行えばいいのでしょうか。

>>520
ありがとうございます。
むずかしそうな話ですね^^;

今探してたら
http://www2s.biglobe.ne.jp/~satosi/gmap/map_length.html
こういうのがあったんですが、これで可能でしょうか。
524デフォルトの名無しさん:2012/01/23(月) 01:45:31.89
>>521
ありがとうございます。
ヒュベニの公式みたいなやつでしょうか。

>>522
制度は一応、mぐらいあれば大丈夫です。
525デフォルトの名無しさん:2012/01/23(月) 01:49:23.81
mまで必要ならもっと正確な計算が必要だな
その計算じゃ無理だし地形データと海抜情報も必要だろう
526デフォルトの名無しさん:2012/01/23(月) 01:56:21.45
緯度経度のほか高さも必要だな。
東京タワー一階と、展望台では移動距離違うしな。直線も。
527デフォルトの名無しさん:2012/01/23(月) 02:18:43.44
>>525
ありがとうございます。
そうですか。
結構複雑な式になるんですかね^^;

>>526
ありがとうございます。
高さもですか。。。
高さは平らとして考えていました。
528デフォルトの名無しさん:2012/01/23(月) 02:30:51.20
そもそもの目的を言え。
m精度がいるのに高さ無視とか、どうせ大した意味もないんだろうけど。
529デフォルトの名無しさん:2012/01/23(月) 02:40:10.74
>>528
はい。
2点の距離を図り速さで割って
そこまでにかかる時間を求めたいのです。
530デフォルトの名無しさん:2012/01/23(月) 02:44:24.19
だったら道路情報じゃねえか
話にならんわ
531531:2012/01/23(月) 03:43:29.63
系列データの始点座標(x,y) 移動方向dir ステップ数stepsといった
入力されたデータをテキスト形式でファイルへ保存しないといけないのですが
ファイルには-1076994648 2516192 8 1536358
といったわけの分からない数字が保存されます
どうすればいいでしょうか?
http://codepad.org/T7yR4vHH
532デフォルトの名無しさん:2012/01/23(月) 03:49:24.86
x,y,dir,stepsに適切なデータを代入してやればいい
533531:2012/01/23(月) 04:11:49.03
>>532 すいません具体的にはどういうことでしょうか?


534デフォルトの名無しさん:2012/01/23(月) 04:20:00.15
課題説明に記載されている書式なんてわからんから答えようが無い
535531:2012/01/23(月) 04:36:55.59
>>534 すいません課題説明はこちらです http://ideone.com/eZmWI
   ファイルの入出力以外は問題ないようです
536デフォルトの名無しさん:2012/01/23(月) 04:43:16.68
めんどくさいからよく読んでないけど
save_textfil(int startpos[][2], int movedir[][MAXMOVE + 1], int movesteps[][MAXMOVE + 1])
のように渡してそれらを順次出力するだけでは?
537デフォルトの名無しさん:2012/01/23(月) 08:13:05.15
まぁ、宿題スレに行け、と。
538デフォルトの名無しさん:2012/01/23(月) 13:15:54.94
宿題スレでは干されていました。
539デフォルトの名無しさん:2012/01/23(月) 14:02:51.92
じゃ、諦めろ。
540デフォルトの名無しさん:2012/01/23(月) 20:16:49.74
#include<stdio.h>

double asd(double dx,int no)
{
int i;
double tmp = 1.0;

for(i=1;i<=no;i++)
tmp *= dx;
return (tmp);
}

int main(void)
{
int n;
double x=0.0;

printf("No.1:");
scanf("%f",&x);
printf("No.2:");
scanf("%d",&n);

printf("answer=%.2f",asd(x,n));

return 0;
}
実行結果が
No.1:5.0
No.2:2
answer=inf
となります。なぜでしょう?
541デフォルトの名無しさん:2012/01/23(月) 20:18:01.17
>>540
%f だから
542デフォルトの名無しさん:2012/01/23(月) 20:20:40.25
#include<stdio.h>

double asd(double dx,int no)
{
int i;
double tmp = 1.0;

for(i=1;i<=no;i++)
tmp *= dx;
return (tmp);
}

int main(void)
{
int n;
double x;

printf("No.1:");
scanf("%4.1f",&x);

printf("No.2:");
scanf("%d",&n);

printf("answer=%.2f",asd(x,n));

return 0;
}
実行結果が
No.1:5.0
No.2:answer=inf
となりました\(^o^)/
543デフォルトの名無しさん:2012/01/23(月) 20:25:04.22
>>542
%4.1f だから
544デフォルトの名無しさん:2012/01/23(月) 20:27:58.60
>>543
lですかぁ
ありがとうございます
本には1とかいてあるようにみえたので・・・
545デフォルトの名無しさん:2012/01/24(火) 20:07:37.80
C言語を知っていれば、なんでもできると思う人います?
546デフォルトの名無しさん:2012/01/24(火) 20:10:33.78
そう思うやつはC言語を理解してない。
547デフォルトの名無しさん:2012/01/24(火) 20:32:53.92
結局、基本はC言語だよね
548デフォルトの名無しさん:2012/01/24(火) 20:37:02.06
>>545
君の言う「なんでも」というのが「妹を作りたい」とか
「ヨガファイアを身に付けたい」とか云うことなんだとすれば、
そんなことを思う人はキチガイだ。
549デフォルトの名無しさん:2012/01/24(火) 20:37:21.10
>>545
はい
550デフォルトの名無しさん:2012/01/24(火) 20:46:11.59
C言語を始めたいと思ったんだけど、「Borland C++ Compiler 5.5」の設定ができない…
ilink32.cfg は拡張子変更できたんだけどbcc32.cfg が .txtファイルのままになってしまう
551デフォルトの名無しさん:2012/01/24(火) 20:50:19.84
>>548
自己紹介乙。
552デフォルトの名無しさん:2012/01/24(火) 20:53:55.18
>>550
setbccでググるといいかも
553デフォルトの名無しさん:2012/01/24(火) 20:56:02.76
>>545
Cを知っていれば他の言語は簡単、みたいな意味だったら20年くらい前はよくそんなこと言われてたなって感じ。
554デフォルトの名無しさん:2012/01/24(火) 21:00:30.49
「妹を作りたい」、「ヨガファイアを身に付けたい」と言う理由で
C言語を学ぼうと思った人がいるかも知れない。
555デフォルトの名無しさん:2012/01/24(火) 21:02:51.91
同一翻訳内で同じ文字列は、
同じ領域に割り当てられると
規格で保証されていますか?

char *amanojaku(char *str)
{
 return str == "YES" ? "NO" : "YES";
}
char *say(char *str)
{
 printf("%s,", str);
 return str;
}
main()
{
 // VCでは期待通り、"YES,NO,YES"と出力された
 say(amanojaku(say(amanojaku(say(amanojaku("NO"))))));
}
556デフォルトの名無しさん:2012/01/24(火) 21:07:14.39
>>555
"YES,NO,YES,"になると思うけど
保証されないはず
557デフォルトの名無しさん:2012/01/24(火) 21:07:31.46
>>555
× str == "YES" ?
558デフォルトの名無しさん:2012/01/24(火) 21:10:04.14
>>547
違うな。
ゴールに近い言語を使うのが正解。

VBで目的が達成できるものに、Cを敢えて使う理由なんか、無い
559デフォルトの名無しさん:2012/01/24(火) 21:12:47.63
char型の数字を配列にいれたいんですけど
どうすればいいんですか?
char a[10]=
560デフォルトの名無しさん:2012/01/24(火) 21:13:58.37
>>558
大概excelで出来ちゃうので、プログラムくむ必要がなくなる。
561デフォルトの名無しさん:2012/01/24(火) 21:14:11.05
>>555
コンパイラオプションによる。
562デフォルトの名無しさん:2012/01/24(火) 21:14:35.89
>>559
char a[10] = { 1, 2, 3 };
563デフォルトの名無しさん:2012/01/24(火) 21:15:04.56
数値じゃなく数字なら
char a[10] = { '1'. '2'. '3' };
564デフォルトの名無しさん:2012/01/24(火) 21:15:26.43
>>555
コンパイラ依存だったような。

>>557
この話でそこに突っ込みを?
565デフォルトの名無しさん:2012/01/24(火) 21:22:10.34
a3b4と入力したらaaabbbbと出力するようにしたいんですが
できません。
教えてくれませんか?
566555:2012/01/24(火) 21:24:14.11
>>556
やっぱり保証はされないですか
残念です。

>>561
具体的にこのオプションがあればOKとかあれば
注意書きして、この方法を使ってみたいのですが

>>564
大抵のコンパイラならOKそうな気がするんですけどね
567デフォルトの名無しさん:2012/01/24(火) 21:30:16.43
>>565
ab3と入力したら
・abbb
・aaabbb
どっちになるの?

あと0の扱いは?
a01bb2
とかの文字列はどう解釈すんの?

プログラム以前の問題だ
568デフォルトの名無しさん:2012/01/24(火) 21:30:57.36
>>555
文字列の比較ならstrcmp()使えよ
569デフォルトの名無しさん:2012/01/24(火) 21:32:06.26
>>567
ab3 => abbb
a3b3 => aaabbb
a01bb2 => abbb
570デフォルトの名無しさん:2012/01/24(火) 21:32:54.55
>>565

ab0c12d5
こういう入力だと、出力はどうしたい?
571デフォルトの名無しさん:2012/01/24(火) 21:36:16.27
>>567
すみません。
数字の0と1は入力ミス扱い。
連続した数字も入力ミス扱い。
二桁以上も入力ミス扱い。
ab3はabbbとなります。
お願いします。
572デフォルトの名無しさん:2012/01/24(火) 22:00:55.70
>>571
念のため聞くけど、
「連続した数字」と「二桁以上(の数字?)」は何か違う全くベツのモノ?
573デフォルトの名無しさん:2012/01/24(火) 22:08:36.77
>>572
同じです;;
二桁以上の数字は入力ミス扱いです
a10やa23など。
574デフォルトの名無しさん:2012/01/24(火) 22:13:00.32
>>573
もう少し聞くけど、
もしかしてその文字列は「数字から始まってはいけない」とかいうルールがあったりしない?
575デフォルトの名無しさん:2012/01/24(火) 22:19:19.40
数字から始まってはいけないですね〜

まぁ早く解いて。
576デフォルトの名無しさん:2012/01/24(火) 22:28:23.66
正体は社交場かなんかと勘違いしてるお子チャマか
577デフォルトの名無しさん:2012/01/24(火) 22:31:54.75
あー気持ちわりいなお前
明らかにお前の方がなめてただろ
こっちがいらつくのはあたり前だろ
早く寝ろおっさんw
578デフォルトの名無しさん:2012/01/24(火) 22:41:42.77
ワロタ

パターンマッチングの精度半端ねーな
579デフォルトの名無しさん:2012/01/24(火) 23:43:34.53
>>565
#include <stdio.h>
#include <string.h>
int mprint(char *str)
{
int i, len, n;
len = strlen(str);
for (i=0; i< len; i++) {
char a = str[i];
if ('0' <= a && a <= '9') return 1;
else{
char b = str[i+1];
if ( b == '0') return 1;
if ('1' <= b && b <= '9') {
n = (b - '0'); i++;
} else n = 1;
while (n-- > 0)putchar(a);
}
}
return 0;
}
int main()
{
char buf[256];
printf("input:");scanf("%s",buf);
mprint(buf);
return 0;
}
580デフォルトの名無しさん:2012/01/24(火) 23:51:28.42
>>566
gccで-fwritable-stringつけたら動かないんじゃないの
581デフォルトの名無しさん:2012/01/24(火) 23:52:52.47
strings、だったごめん。
manから引用
> -fwritable-strings
> 文字列定数を書き込み可能なデータセグメントに配置し、同内容の文字列を 1 つの共有オブジェクトにする処理を行いません。これは、文字定数に書き込むことができることを仮定した昔のプログラムとの互換性をと
> るために提供されています。‘-traditional’ オプションも同様の効果を含みます。
>
> 文字定数に書き込むという考えは非常によくない考えです。“定数” はまさに定数であり、変化すべきではありません。
582デフォルトの名無しさん:2012/01/25(水) 00:52:06.30
>>555
これでいけ
#include <stdio.h>
#include <string.h>

char *amanojaku(char *str)
{
return strcmp(str, "YES") == 0 ? "NO" : "YES";
}
char *say(char *str)
{
printf("%s,", str);
return str;
}
int main()
{
say(amanojaku(say(amanojaku(say(amanojaku("NO"))))));
return 0;
}
583デフォルトの名無しさん:2012/01/25(水) 00:56:52.34
確かにstrcmp()で何の問題があるのかとは思うけど
584デフォルトの名無しさん:2012/01/25(水) 01:05:34.77
そんな話なのか?
それなら単に2つポインタ使えばいいだけじゃねーのか。
585デフォルトの名無しさん:2012/01/25(水) 07:14:03.55
単に規格の範囲を疑問に思っただけなのか
「同じ領域に割り当てられると保証されて」いてほしい理由があって聞いたのか
どっちでしょうね
586デフォルトの名無しさん:2012/01/25(水) 08:01:41.80
保証されている前提で書いた自分のプログラムをなんとか正当なものにしたいんじゃね?
仕事だったらありえねぇ馬鹿だがw
587デフォルトの名無しさん:2012/01/25(水) 08:31:02.40
何で攻撃しまくりなんだよw
マクロで文字列リテラルが展開されまくったとき、exe サイズ膨れ上がらないかとか
さらにそのソースはいろんなコンパイル環境で使いまわすとか
気にしなきゃいけない可能性はいろいろあるだろうに
588デフォルトの名無しさん:2012/01/25(水) 08:34:18.18
使いまわすようなコードに
文字リテラルなんて埋め込むなよ
589デフォルトの名無しさん:2012/01/25(水) 09:27:52.57
>>587
もしそういう要求があるなら尚のこと、コンパイラ任せにするべきじゃない。
例えば、リテラルへのポインタを返す関数を用意しておけば済むことだ。
それにどうせ、マクロを使ったってリテラルの連結をする場合は別領域だ。
590デフォルトの名無しさん:2012/01/25(水) 12:24:43.54
こういうマクロは規格上許されていますか?
VC2008では再帰展開は行われず、aaaがbbb aaaに展開されます。

#define aaa bbb aaa
591デフォルトの名無しさん:2012/01/25(水) 12:37:28.66
>>590
Cリファレンスマニュアルによれば、規格上はアリ。ただし古い処理系だと
再帰展開して止まらなくなってしまうケースがあったようだ
592デフォルトの名無しさん:2012/01/25(水) 12:51:22.39
>>591
ありがとう。これで安心して使えます。
593デフォルトの名無しさん:2012/01/25(水) 13:01:01.04
assert("hoge" == "hoge");
594デフォルトの名無しさん:2012/01/25(水) 13:07:38.56
文字列を表示するときにstdio.hをおまじないで書く覚えました
このstdio.hみたいな○○.hっていうので他にもどんなことが事が出来るのか知りたいのですが
なんていうキーワードで検索したら出てきますか?
595デフォルトの名無しさん:2012/01/25(水) 13:14:33.33 BE:139784674-2BP(294)
>>594
C 標準ライブラリ
596デフォルトの名無しさん:2012/01/25(水) 13:15:45.05
>>594
そのまんま"stdio.h"で検索しても
それなりのものが出ると思うんだが
597デフォルトの名無しさん:2012/01/25(水) 13:27:18.07
>>594
赤くなーれ!

標準Cライブラリ - Wikipedia
ja.wikipedia.org/wiki/標準Cライブラリ - キャッシュ
limits.h, 整数型の大きさ. locale.h, 文化圏固有操作. math.h, 数学. setjmp.h, 非局所分岐. signal.h, シグナル操作. stdarg.h, 可変個数の実引数. stdbool.h, 論理型および論理値 (C99より追加). stddef.h, 共通の定義. stdint.h, 整数型 (C99より追加). stdio.h ...
598デフォルトの名無しさん:2012/01/25(水) 13:33:59.19
2038年以降のタイムスタンプを取得する方法はないのですか?
599デフォルトの名無しさん:2012/01/25(水) 13:56:21.61
ポインタのインクリメントについて質問です。
while (*p++) {
...
}
このpは、ポインタをインクリメントしているのであって、pの指す*pをインクリメントしているのではないのですよね?
そうであれば、これは*pが0x00か比較してからpをインクリメントしているのか、それともpをインクリメントしてから*pが0x00かどうか比較しているのか、どちらなのでしょうか。
演算子の優先順位を見ても、間接演算子*とインクリメント演算子++は優先順位が同じなので、わかりませんでした。
600デフォルトの名無しさん:2012/01/25(水) 14:01:06.77
演算順の話じゃない。
後置++の演算値はインクリメント前、したがって*演算子に与えられるアドレスはインクリメント前。
601デフォルトの名無しさん:2012/01/25(水) 14:12:00.71
>>599
>while (*p++) {

while (*p) {p++; と見なせる。
602デフォルトの名無しさん:2012/01/25(水) 14:14:48.84
見なせません
603デフォルトの名無しさん:2012/01/25(水) 14:21:59.10
++*p *++p *p++ (*p)++
604デフォルトの名無しさん:2012/01/25(水) 14:47:01.82
>>595-597
ああああああああああああ赤くなっちまったよ!
最後にすいません
これら全部の標準ライブラリを覚えないとやっぱりやっていけないですか?
605デフォルトの名無しさん:2012/01/25(水) 14:55:25.12
たかがこのくらいの数でそんな事を言ってる奴には無理
606デフォルトの名無しさん:2012/01/25(水) 14:56:30.22
うわwwwじゃあ全部覚えるかw
607デフォルトの名無しさん:2012/01/25(水) 15:00:18.81
>>606
別に覚えなくとも、うっすら片隅にいれておけばいいよ
標準ライブラリで提供されてるのに自作するのを避けられる、、けど>>606みたいな人は
自作前にこことかで聞くだろうから未然に防がれるのかな。
608デフォルトの名無しさん:2012/01/25(水) 15:01:35.54
概要と主要なやつだけ覚えて、残りは使用する度に使い方検索する。
609デフォルトの名無しさん:2012/01/25(水) 17:21:41.26
例えば、キーボードのJを押すとKが出力されるような自作のキーカスタマイズプログラムを作りたいのですがうまいこといきません。
矢印キーを押すとマウスカーソルを動かす事に最初に成功したので、
同じようにすればキーも変えられると思ったのですが何故か反応せず。
キー関係はマウスと違い何か必要なのでしょうか?
よければサンプルプログラムなどいただけないでしょうか
610デフォルトの名無しさん:2012/01/25(水) 17:23:05.54
スレチ
611デフォルトの名無しさん:2012/01/25(水) 17:24:15.44
フックしたキーを捨てないとだめじゃないかな
612デフォルトの名無しさん:2012/01/25(水) 17:38:40.85
HTMLで画像の上にマウスカーソルを乗せるとツールチップが表示されるじゃないですか
Cでツールチップを指定した座標に表示させたいのですがなんて標準ライブラリを使えば実現できますか?
613デフォルトの名無しさん:2012/01/25(水) 17:40:19.54
webprog行け
614デフォルトの名無しさん:2012/01/25(水) 17:43:59.59
いやwebプログラムの質問してるんじゃなくて
ツールチップを表示させたいだけです
615デフォルトの名無しさん:2012/01/25(水) 17:51:39.38
そんなものはない
616デフォルトの名無しさん:2012/01/25(水) 17:53:39.68
>>614
付箋アプリみたいな?ウィンドウ作ればいい
617デフォルトの名無しさん:2012/01/25(水) 18:28:25.50
#include<iostream>
#include<string>
int main()

{
std::string name;

std::cout<<"hello"<<std::endl;
     std::cout<<"こんにちは"<<std::endl;
      std::cin>>name
;std::cout<<name<<std::endl;
}

最後から二番目の行のstdの前の「;」にはなんの意味があるの?
それ抜きにするとエラーになるんだけど
618デフォルトの名無しさん:2012/01/25(水) 18:30:12.47
      std::cin>>name
619デフォルトの名無しさん:2012/01/25(水) 18:38:12.65
>>618
      std::cin>>name
;
620デフォルトの名無しさん:2012/01/25(水) 18:42:51.90
>>619
;std::cout<<name<<std::endl;
621デフォルトの名無しさん:2012/01/25(水) 18:43:01.47
わからない…
つまり、std::cin>>nameの結果を表示するために;std::cout<<name<<std;;endl;にしなくちゃいけないことでおk?
622デフォルトの名無しさん:2012/01/25(水) 18:44:43.27
あ、もしかしてstd::cin>>name; にしろってこと?
623デフォルトの名無しさん:2012/01/25(水) 18:44:50.34
>>621
      std::cin>>name
624デフォルトの名無しさん:2012/01/25(水) 18:51:45.51
>>622
std::cout<<"hello"<<std::endl
;
     std::cout<<"こんにちは"<<std::endl
;
      std::cin>>name
;
std::cout<<name<<std::endl
;
}

べつにこうでもいいよ
625デフォルトの名無しさん:2012/01/25(水) 18:54:55.70
とりあえず、Cじゃないのはわかってるよな。
626デフォルトの名無しさん:2012/01/25(水) 19:19:26.14
素直にスレ違いっていえないのは何で?
627555:2012/01/25(水) 21:48:50.01
>>581
昔は文字列定数書き換えられたんですね。(確かにconst char *じゃないし)
それならば保証は難しそうですね。ありがとうございました。
>>583
単純にパフォーマンスが理由です。
>>584
文字列が英語にしにくい日本語なので、
変数名で処理を書くと分かり難かったので聞いてみました。
enumに日本語が使えればいいんですけど

static char *const MISONIKOMI = "味噌煮込み";
static char *const MIZUTAKI = "水炊き";
static char *const OYAKODON = "親子丼";
char *kondate(char *yesterday)
{
 if (yesterday == MISONIKOMI)
  return MIZUTAKI;
 else if (yesterday == MIZUTAKI)
  return OYAKODON;
 else
  return MISONIKOMI;
}
char *kondate(char *yesterday)
{
 if (yesterday == "味噌煮込み")
  return "水炊き";
 else if (yesterday == "水炊き")
  return "親子丼";
 else
  return "味噌煮込み";
}
628デフォルトの名無しさん:2012/01/25(水) 21:55:16.53
コメントに書けばいいじゃねぇか。
629デフォルトの名無しさん:2012/01/25(水) 22:02:03.95
次のwindowsってC言語でアプリの開発できるのかな?
なんだかタッチパネル方式になるって
どこかに書いてあったけど。
630デフォルトの名無しさん:2012/01/25(水) 22:32:01.23
これでいいかいのう?

#include <stdio.h>
#define MISONIKOMI "味噌煮込み"
#define MIZUTAKI "水炊き"
#define OYAKODON "親子丼"
#define MISONIKOMI_ 0
#define MIZUTAKI_ 1
#define OYAKODON_ 2
char *menu[] = {MISONIKOMI, MIZUTAKI, OYAKODON, NULL};
char *kondate(char *yesterday)
{
if (yesterday == menu[MISONIKOMI_])
return menu[MIZUTAKI_];
else if (yesterday == menu[MIZUTAKI_])
return menu[OYAKODON_];
else
return menu[MISONIKOMI_];
}
int main(void)
{
int i;
char *y, *k;
for(i=0;menu[i] != NULL;i++){
y = menu[i];
k = kondate(y);
printf("i = %d, kondate(%s) = %s\n", i, y, k);
}
return 0;
}
631デフォルトの名無しさん:2012/01/25(水) 22:32:50.66
タッチパネルだったらCで開発できないと思った根拠は何?
632デフォルトの名無しさん:2012/01/25(水) 22:38:43.77
>>630
こういうのが30分以内にさらっとかける男になりたいんですが
C言語のおすすめの入門書を教えてください
JavaScriptだとオライリーが有名です
633デフォルトの名無しさん:2012/01/25(水) 22:39:23.22
タッチパネルでCのコードを入力できないって言う意味?
634デフォルトの名無しさん:2012/01/25(水) 22:48:41.09
>>632
落ち着いて。基本に忠実に書いているだけだよ。
意識してやったことは、
文字列はマクロで定義しておく、
文字列に対応する整数値は 文字列 + _(アンダースコア)
文字列を格納する配列はNULL終端にする。
関数の引数は一度変数に代入したものにする。
# こうすると、debugの時に便利だよね。

私は本をそんなに読んでないけど、
もっている本は、
プログラミング言語C第2版
プログラミング作法
ぐらいだった。
635デフォルトの名無しさん:2012/01/25(水) 23:00:40.57
>>634
ありがたきお言葉頂戴しました
636デフォルトの名無しさん:2012/01/25(水) 23:27:52.22
質問です。ランダムで10文字の英字を返す関数を作りたいのですが
strcat_sのところでエラーで落ちます。(strcatだと通る)
なにがいけないのでしょうか?
char* randomWord(void){
static char alphabet[27] = "abcdefghijklmnopqrstuvwxyz";
char word[2]="\0";
static char *words;
words = (char *)calloc(26, 1);
int i;
for(i=0; i<10; i++){
memcpy(word, &alphabet[0]+rand()%26, 1);
strcat_s(words, 1, word);
}
return words;
}
637デフォルトの名無しさん:2012/01/25(水) 23:30:50.41
C言語で緯度、経度の二点間の距離を出したいのですが
http://www2s.biglobe.ne.jp/~satosi/gmap/map_length.html
このページで大丈夫なのでしょうか。
また、違うようでしたらどのようにすればよいのでしょうか。
参考になるページなどございましたら、よろしくお願い致します。
638デフォルトの名無しさん:2012/01/25(水) 23:37:40.46
>>636
コイツバカじゃねーの、
&alphabet[0]+rand()%26
なんてアフォなことしなくてもいいじゃん

639デフォルトの名無しさん:2012/01/25(水) 23:41:13.07
>>638
是非教えていただきたいです・・
640デフォルトの名無しさん:2012/01/25(水) 23:41:22.46
>>636
どこがって。。。
全体的に悪かったから書き直しておいたよ。
こっち使って。
コメントにしている所を有効にした場合は、alphabet変数はいらなくなります。

char* randomWord(void)
{
#define WORD_LENGTH 10
const char alphabet[27] = "abcdefghijklmnopqrstuvwxyz";

char *words = NULL;
int i, r;

words = (char *)malloc(WORD_LENGTH+1);
if(words == NULL)
return NULL;

for(i=0; i<WORD_LENGTH; i++){
r = rand() % 26;
words[i] = alphabet[r];
// or
// words[i] = 'a' + r;
}
words[WORD_LENGTH] = '\0';

return words;
}
641デフォルトの名無しさん:2012/01/25(水) 23:43:13.46
strcat_s(words, word, 1);
かな?よく分からんけど
642デフォルトの名無しさん:2012/01/25(水) 23:46:03.45
あと、こう書いた方がいいよ
const char alphabet[] = "abcdefghijklmnopqrstuvwxyz";
もしくは
const char *alphabet = "abcdefghijklmnopqrstuvwxyz";
643デフォルトの名無しさん:2012/01/25(水) 23:49:16.77
>>640
ありがとうございます!凄い勉強になります・・
644デフォルトの名無しさん:2012/01/25(水) 23:50:56.06
>>637
C言語に関係ない問題
地理板?地学板?の方がいいと思うよ
でも、まあ、どうぞ
http://oshiete.goo.ne.jp/qa/249931.html
645デフォルトの名無しさん:2012/01/25(水) 23:52:15.40
C# から C++(DLL) を呼ぶ処理を作成しています。


typedef struct TEST_SUB {
char szName[1000];
} STRUCT_TEST_SUB;



typedef struct TEST {
char szName[1000];
int iCnt;
STRUCT_TEST_SUB *pStructTestSub;
} STRUCT_TEST;

構造体をこんな感じで作成して。

# DLL に定義した関数
structMethod(TEST *test)

C# 側で構造体に値を詰め込んで渡して、C++ 側で取得したいんですが。
どうしても、TEST_SUB の値をとることができません。
(空の値が取得されます)


C# 側の値の設定方法が悪いのでしょうか??

646デフォルトの名無しさん:2012/01/25(水) 23:55:07.45
>>629
APIが提供されるはずだからCで問題ないよ
647デフォルトの名無しさん:2012/01/25(水) 23:58:53.92
>>642
わかりました
words[i] = 'a' + r;みたいな書き方もできるんですね・・
本当に参考になります。ありがとうございます。
648デフォルトの名無しさん:2012/01/26(木) 01:59:00.64
>>644
ありがとうございます。
挑戦してみたんですが、なかなかうまくいきません。
どのようなプログラムになりますか。
649デフォルトの名無しさん:2012/01/26(木) 02:02:46.07
>>648
あーーーウゼーな、
勘違いしたアホがいつくとロクなことがねーよ

プログラムは簡単だよ
あとは数学の問題

その数学部分を理解出来ないのは
お前がアホだから
さっさと出てけ
650デフォルトの名無しさん:2012/01/26(木) 02:21:07.90
>>649
ありがとうございます。
数学はなんとなく理解はできるのですが、
プログラムがかけません。
また、ヒュベニの公式を使って、求めることができるみたいなのですが、
プログラムをどのようにしたらよいのかわかりません。
651デフォルトの名無しさん:2012/01/26(木) 02:46:01.52
ちょっと前に同じ質問してた人がいたけど、同じ人?
652デフォルトの名無しさん:2012/01/26(木) 02:59:12.57
>>650
適当な計算プログラムつくればいいのに。
数学理解できるなら段階を踏めばいいことぐらいわかるでしょ
653デフォルトの名無しさん:2012/01/26(木) 07:50:35.29
プログラムつったって数式に条件分岐と繰り返しとサブルーチン足した程度のものでしょ
そのなんちゃらの公式は理解してるんだよね?
だったらあとはそれを分解して目的に応じて再構築するだけじゃないの

とそのなんちゃらの公式を知らないがいってみるテスト

654デフォルトの名無しさん:2012/01/26(木) 13:24:31.17
>>650
ググったらJavaのコードがあったから、これをCにすればいいのでは?
http://yamadarake.web.fc2.com/trdi/2009/report000001.html
655デフォルトの名無しさん:2012/01/26(木) 15:15:11.42
>>654
http://codepad.org/lqKCchcU
なんでcodepadはCだとsin/cosが使えないんだろうか。
656デフォルトの名無しさん:2012/01/26(木) 15:44:05.57
-lmついてないってやつ?
657デフォルトの名無しさん:2012/01/26(木) 16:57:27.59
VCのコードが全然変わってくる可能性は無い?
658デフォルトの名無しさん:2012/01/26(木) 16:58:18.75
は?
659デフォルトの名無しさん:2012/01/26(木) 17:05:01.55
>>656
Language: Cを選ぶとそういう状態だね。
どっかオプションとかあるんかな。
660デフォルトの名無しさん:2012/01/26(木) 18:22:26.63
ないんじゃないかな
確か前見たときはなかった
661 ◆QZaw55cn4c :2012/01/26(木) 19:26:20.70
>>640
>rand() % 26;
rand() の返り値は悲惨なまでにランダムではない処理系があるので剰余演算子で乱数生成範囲を制限するのは誤りとはいわないまでも疑問手である件について云々かんぬん
http://www.kouno.jp/home/c_faq/c13.html#16
662デフォルトの名無しさん:2012/01/26(木) 20:14:22.25
これだけレスがあって、やっと言えたのがそれだけか。
コテも大変だな。
663デフォルトの名無しさん:2012/01/26(木) 20:20:37.49
>>661

>>636の初期の目的に沿おうとするなら、こう?
rand() / (RAND_MAX / N + 1) - 1

N + 1 な理由が分からね。
N だけでいいなら - 1 が不必要になるんだが。
664デフォルトの名無しさん:2012/01/26(木) 20:40:52.01
理解力、コミュ力と、数学力ってIT業界入るにはどっちが必要ですか?
665デフォルトの名無しさん:2012/01/26(木) 20:42:54.55
C言語のソースコードって全部で何行くらいなんでしょうか?
666デフォルトの名無しさん:2012/01/26(木) 20:53:46.83
>>665
兆か京のけた?
667デフォルトの名無しさん:2012/01/26(木) 21:06:41.65
>>666
ええええ...
どうやって開発者は書いたんだ。
大学のレポート課題です。お願いします。
668デフォルトの名無しさん:2012/01/26(木) 21:13:07.13
tiny Cならそんなに行数としては少ないかもね
大学の課題だったら自分で調べるといい
669デフォルトの名無しさん:2012/01/26(木) 21:13:07.47
Googleの入試並みの問題だなw
さぁどっから推定しようか。人数?会社?機器?PCの台数?
670デフォルトの名無しさん:2012/01/26(木) 21:16:41.93
C言語で書かれたプログラムって、世界に何本くらいあるのかな?
671デフォルトの名無しさん:2012/01/26(木) 21:19:47.19
>>669
C言語開発者が開発に取り組んだ時の、動機、人事的な背景を考察せよ。
っていう問題。
672デフォルトの名無しさん:2012/01/26(木) 21:22:35.45
Cが無いときのソースコードはCじゃないってことはわかるよな。
673デフォルトの名無しさん:2012/01/26(木) 21:26:37.29
>>672
直接機械をいじってプログラムを作ってたんだろ?
静電気とか走っただろうな、手袋してたろうけど。
674デフォルトの名無しさん:2012/01/26(木) 21:27:30.83
それ、おもしろいことでも言ってるつもりなんか?
675 ◆QZaw55cn4c :2012/01/26(木) 21:52:33.58
>>663
(int)(rand() / (RAND_MAX + 1.0) * 26)
でいいんじゃないですか?
+1.0 するのは RAND_MAX
676デフォルトの名無しさん:2012/01/26(木) 21:56:10.58
GCCはGCCでコンパイルします。
677デフォルトの名無しさん:2012/01/26(木) 22:03:02.70
世の中のCで書かれたコードの総行数と勘違いしている人がいるね。

>>672
そうなんだけど、それだけじゃ△だな
678デフォルトの名無しさん:2012/01/26(木) 22:07:50.39
>>670の書いた通りわざと書いてるのを勘違いしてるバカがいるな。
679デフォルトの名無しさん:2012/01/26(木) 22:10:26.26
曖昧な質問だから、勘違いと言い切るのはどうかと思う。
C言語のソースコードって言っても、どのコンパイラの話かも不明だし。
680デフォルトの名無しさん:2012/01/26(木) 22:13:34.28
はいはい。
681デフォルトの名無しさん:2012/01/26(木) 22:38:25.74
#include <stdio.h>
#define WIDTH 10
#define HEIGHT 20
#define DEPTH 40

double temperature[DEPTH][WIDTH][HEIGHT];
int calc_flag[DEPTH][WIDTH][HEIGHT];

int main(){
int h,w,d;
for(h=0;h<=HEIGHT;h++){
for(w=0;w<=WIDTH;w++){
for(d=0;d<=DEPTH;d++){
temperature[d][w][h]=20.0;
calc_flag[d][w][h]=1;
}}}
printf("%f\n",temperature[0][0][0]);
fflush(stdin);
getchar();
return 0;
}

三次元配列の計算がうまくいきません。
上は最も単純な例ですが、このコードを実行しても表示が0.000000となってしまいます。
しかし、calc_flag[d][w][h]=1;の行をコメントアウトした場合は20.000000となり意図した値になります。
もう何が何やらさっぱりわからないのでお助け願います。
環境:Microsoft Visual C++ 2010 Express
682デフォルトの名無しさん:2012/01/26(木) 22:46:51.02
>>681
for(h=0;h<HEIGHT;h++){
for(w=0;w<WIDTH;w++){
for(d=0;d<DEPTH;d++){
683デフォルトの名無しさん:2012/01/26(木) 22:47:03.01
>>681
a[10]の場合、a[0]〜a[9]しかアクセスしちゃダメよ。
684デフォルトの名無しさん:2012/01/26(木) 23:05:46.98
>>682-683
うわああああああ恥ずかしいいいいいい
おかげで問題は解決しました。
説明書を読まない初心者みたいな質問をしてすみませんでした。
685デフォルトの名無しさん:2012/01/26(木) 23:21:19.54
>>665
ある大手メーカーの看板商品でだいたい数百万行(当時20世紀)
ある大手物流センターでは最長不倒関数の競技場で1ソース1万行超えが日常だった
ある半官半民の案件では C なのにグローバルとマジックナンバーの嵐でまるで拷問室
ハード系(C よりアナログやメカが得意)の某社さんのコードは美しさが際立っていた

おめ、gcc のソースの行数数えてみたか? 数えていなければ、それが正解だと思うぞ
686デフォルトの名無しさん:2012/01/26(木) 23:28:14.90
分岐の要件が薄っぺらいなら長大な関数でも別にいいと思うし
大量のグローバル変数も整理されてるなら正しい使い方
でもマジックナンバーはヤバイよな
687デフォルトの名無しさん:2012/01/26(木) 23:37:01.71
量の多さで競うな。
コード量が少なく開発日数の少ないのが優れてる。
同品質なら。
688デフォルトの名無しさん:2012/01/26(木) 23:51:55.62
>>654
>>655
ありがとうございます。
これで、二点間の距離でますよね?
689デフォルトの名無しさん:2012/01/26(木) 23:54:34.24
>>688
もちろん、でますん。
690デフォルトの名無しさん:2012/01/27(金) 00:06:52.66
>>689
ありがとうございました。
助かりました。
単位は、メートルですよね?
691デフォルトの名無しさん:2012/01/27(金) 00:10:56.57
出ても正しくはないだろ。出すだけならreturn 1;でもいい。
ある程度は正しいかもしれない。
692デフォルトの名無しさん:2012/01/27(金) 00:13:34.25
止まった時計でも日に二回正確な時を示すって感じだな
693デフォルトの名無しさん:2012/01/27(金) 00:18:41.80
>>691
え、どういうことですか。
694デフォルトの名無しさん:2012/01/27(金) 00:19:58.99
あとは自分でやれって事だ
695デフォルトの名無しさん:2012/01/27(金) 00:39:35.20
>>693
ベッセル楕円体という近似はいまいちということが判明してる。


国土調査課 地籍活用GIS 世界測地系への移行
http://tochi.mlit.go.jp/tockok/gis/gps/main4.html
日本経緯度原点に450mのズレ
 近年では人工衛星を使った観測等により、地球の極めて正確な形状が明らかになりました。それによると、地球は当時推定されていたベッセル楕円体よりも長半径が約700m長いことが判明しました。

座標系
http://vldb.gsi.go.jp/sokuchi/datum/tokyodatum.html
いろいろな地球楕円体


天文経緯度と測地経緯度
http://www.h2.dion.ne.jp/~kazuf/sao/135e/tenmonsokuchi.htm
696デフォルトの名無しさん:2012/01/27(金) 00:39:39.75
>>694
答えが正確ではないということですか。
697デフォルトの名無しさん:2012/01/27(金) 00:41:30.39
>>695
地球を真球と考えた結果ということですね。
そして、地球は真球ではなく、楕円となっているため
値が正確ではないということですね。
698デフォルトの名無しさん:2012/01/27(金) 00:42:44.48
だからさあ、何につかうんだよ
699デフォルトの名無しさん:2012/01/27(金) 00:44:24.13
よりよい近似モデルを使うか、Googleアースのように高度を含めた地球の3Dモデルデータを持っていたら割と正確に出せる。
700デフォルトの名無しさん:2012/01/27(金) 00:52:04.99
>>698
距離を求めて、そこまでの時間を求めたいです。
速さは、GPSから取得します。

>>699
そうですか。
これだけだと正確ではないのですね。。。
701デフォルトの名無しさん:2012/01/27(金) 00:52:59.04
最近はここまでのアホも珍しくないからなぁ
702デフォルトの名無しさん:2012/01/27(金) 01:18:19.64
直線距離もとめたって意味が無いってわからないのかな
いいかげんあきらめろよ
703デフォルトの名無しさん:2012/01/27(金) 01:57:40.67
>>702
陸上では、あまり意味がないかもしれませんが
海上などでは、直線距離で大丈夫ですよね?
704デフォルトの名無しさん:2012/01/27(金) 02:06:52.65
>>703はやっぱりアホだ
705デフォルトの名無しさん:2012/01/27(金) 02:29:56.50
>>684
はずかしがるってことは、間違えている内容をちゃんと理解できてるから。
恥ずかしがらなくていいよとはいえないけど、喜んどけ
706デフォルトの名無しさん:2012/01/27(金) 02:31:02.44
>>685
最長不倒関数とか懐かしい言葉を出しつつも関数の行数を出さないあたりが渋いよね
707デフォルトの名無しさん:2012/01/27(金) 02:33:02.24
>>703
海流
708デフォルトの名無しさん:2012/01/27(金) 03:12:57.15
>>685はwc -l を知らない肉体労働者
709デフォルトの名無しさん:2012/01/27(金) 03:13:41.57
>>705は優秀な燃料管理技士
710デフォルトの名無しさん:2012/01/27(金) 03:55:17.37
wcで関数の行数数えるのも面倒だろ。
つか、ファイルに分けるんだったらその時点で行数わかるし。
711デフォルトの名無しさん:2012/01/27(金) 04:21:46.97
「コードの総行数」という定義は、意外と厄介。

1文を複数行に分けて書いたときをどう扱うかにもよる。
コメント行を含めるか、含めないかでも変わる。

結局、元の質問(>>665)が、実行数と論理行数(ステップ数)の
どっちが欲しいかによる。

答えは知らないけど・・・。
712デフォルトの名無しさん:2012/01/27(金) 04:28:50.08
>>711
ステップカウンタってのがあるよ。
713デフォルトの名無しさん:2012/01/27(金) 04:44:45.48
意味ないけどな。
714デフォルトの名無しさん:2012/01/27(金) 12:30:45.04
擬似乱数じゃない本物の乱数(暗号的なんちゃら乱数)を使いたいんですが
ライブラリは存在しませんか?
715デフォルトの名無しさん:2012/01/27(金) 12:37:37.62
/dev/random
openssl, ssh, gmp, crypto
716デフォルトの名無しさん:2012/01/27(金) 12:39:02.26
>>714
今はそういうライブラリは存在しない。

そもそも、
・一方向性関数が存在すれば暗号論的擬似乱数生成機が存在する事が知られている。
・現在のところ、一方向性関数の存在性は証明されていない。
・一方向性関数の存在性が示せれば、P≠NP予想が証明できる。
という状況。

凡人にゃあ無理。

あとは、ソフトウェアじゃなくてハードウェアデバイスでなんとかするしかない。
放射性物質の崩壊を検知して、それを0,1で置き換えてくれる装置とか。
717デフォルトの名無しさん:2012/01/27(金) 12:53:47.90
http://ja.wikipedia.org/wiki/Randのコード例のものをコピペして動かしても
常に0しか返ってきません
原因は何故ですか?
718デフォルトの名無しさん:2012/01/27(金) 13:27:52.01
だって return 0; だから・・・
719デフォルトの名無しさん:2012/01/27(金) 13:34:16.43
え?乱数とreturn 0に何の関係があるんですか?
出力はreturn 0の前ですけども
720デフォルトの名無しさん:2012/01/27(金) 13:38:49.56
「返ってくる」のはreturn 0だからという言葉遊びだと思うよ
http://codepad.org/Vou6Xbqh
721デフォルトの名無しさん:2012/01/27(金) 13:54:56.13
何で実行するたびにいつも同じ数字が返ってくるんですか?
毎回違う数字は帰れないんですか?
722デフォルトの名無しさん:2012/01/27(金) 14:16:39.52
コピペ間違いじゃなければお前の実行環境に問題がある。
Wikipediaの例は標準的な環境で正しく動くはずだ。
723デフォルトの名無しさん:2012/01/27(金) 14:37:59.51
VC++2010Express
Win32コンソールアプリケーション
test.cにコード貼り付けて
printfとreturn 0;の間にブレークポイント置いてF5押したら
同じ数字しかでません
724デフォルトの名無しさん:2012/01/27(金) 15:20:46.38
>>723
もいっかいやってみろ。さっきとは違う値が出ないか?
725デフォルトの名無しさん:2012/01/27(金) 15:29:41.77
>>714
今年出るIvy Bridgeまで待て。AVXにRdRAND命令が追加される。
726デフォルトの名無しさん:2012/01/27(金) 16:45:41.50
メモリやHDDの書込速度を測ってその最下位ビットを使え。
727デフォルトの名無しさん:2012/01/27(金) 16:58:53.45
>>723
やってみた。VC++のrandomの性能が悪すぎる。
seedの下位ビットはまるっきり無視されてるような感じだ。
srand((unsigned int)(time(0) << 16)));
こんなもんでどうか。
728デフォルトの名無しさん:2012/01/27(金) 17:01:26.43
>>717
処理系によっては、1回目の値が前回実行時と大差ないものがあり、RAND_MAXで割ると0.6あたりをウロウロしたりする。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
srand((unsigned int)time(0));
printf("%d¥n", rand());
return 0;
}

上記コードを3回実行してみると、
gcc version 4.2.1 (Apple Inc. build 5664)では
1470289798
1470306605
1470306605


http://codepad.org/ では
121543468
627453109
1744218406

応急回避方法は、0~9が必要なら、rand() % 10
729SCHEME餃子 ◆8X2XSCHEME :2012/01/27(金) 17:40:58.46
>>692
俺もリンドバーグのファンだよ。
730デフォルトの名無しさん:2012/01/27(金) 17:58:24.26
生成速度はよくないが、規則性のないはずの乱数。


#include <stdio.h>

__int64 rdtscval() { __asm { rdtsc } }
void waitfnc(){FILE *fp = fopen("tmp", "wb");fwrite("tmp", 1, 3, fp);fclose(fp);}

unsigned int rand_rdtsc() {
unsigned int n,x=0;
for(n=0; n<32; n++) {
waitfnc();
__int64 val=rdtscval();
x|=((val>>3)&1)<<n; }
return x; }


void main() {
for(int n=0; n<100; n++) printf("%d\n",rand_rdtsc());
}
731デフォルトの名無しさん:2012/01/27(金) 18:02:05.15
>>730のウェイトをメモリアクセスにしたら速度は上がるが、ほぼ等速度になってしまい乱数にならない。
ファイルへのアクセスだとOSや他のアプリやサービスなどが働いて等速度でなくなる。
732デフォルトの名無しさん:2012/01/27(金) 18:09:55.22
本当wikipediaのコードはksだな
733デフォルトの名無しさん:2012/01/27(金) 18:12:07.47
__asmは64bitで使えないからダメ。
734デフォルトの名無しさん:2012/01/27(金) 18:21:25.14
>>733
なるべく高精度のタイマーだったらなんでもいい。最低一ビットリターンできれば良い。
735デフォルトの名無しさん:2012/01/27(金) 18:33:22.51
>>714そっちのけで、入門編から飛び出している件
736デフォルトの名無しさん:2012/01/27(金) 19:28:27.89
>>733

#include <stdio.h>

#ifdef _WIN32 & !(__GNUC__)
struct timezone { int tz_minuteswest; int tz_dsttime; };
#include <windows.h>
int gettimeofday(struct timeval *tv, struct timezone *tz) {
LARGE_INTEGER t;
QueryPerformanceCounter( &t );
tv->tv_sec = t.HighPart;
tv->tv_usec =t.LowPart;
return 0; }
#else
#include <sys/time.h>
#endif


void waitfnc(){FILE *fp = fopen("tmp", "wb");fwrite("t", 1, 1, fp);fclose(fp);}

unsigned int rand_rdtsc() {
unsigned int n,x=0;
for(n=0; n<32; n++) {
waitfnc();
static struct timeval t;
gettimeofday(&t, NULL);
x|=((t.tv_usec>>3)&1)<<n; }
return x; }


void main() { for(int n=0; n<100; n++) printf("%d\n",rand_rdtsc()); }
737 忍法帖【Lv=27,xxxPT】 :2012/01/27(金) 19:44:24.65
組織は些細な物事に対して、不釣り合いなほど重点を置く
738デフォルトの名無しさん:2012/01/27(金) 20:13:15.74
>>727
下位ビットが無視されるって、何秒かたっても同じ乱数が生成されたってこと?
739デフォルトの名無しさん:2012/01/27(金) 20:14:18.72
>>728
世の中の逆を行くコードを書くことになるとは
740デフォルトの名無しさん:2012/01/27(金) 20:14:53.69
>>738
>>727 がバカなだけ
内部状態の伝播にちょいと時間がかかる
741デフォルトの名無しさん:2012/01/27(金) 20:21:17.99
男なら擬似乱数は許せないのだよ君たち
742デフォルトの名無しさん:2012/01/27(金) 20:42:37.60
だからIvy Bridgeまで待てといっとろうが。
待てないならこれでも使え。
http://www.fdk.co.jp/whatsnew-j/release041005-j.html
743デフォルトの名無しさん:2012/01/27(金) 20:51:48.00
そのなんとかブリッジっていうのはVC++2010デモ使えるのでしょうか?
744デフォルトの名無しさん:2012/01/27(金) 21:16:44.82
疑似乱数なら、Boostでも使うとか。
745デフォルトの名無しさん:2012/01/27(金) 21:31:46.54
>>743
そりゃ使えるだろ。
746デフォルトの名無しさん:2012/01/27(金) 21:35:31.60
>>745
なんとかなんとかじゃないひとが使えないんじゃないでしょうか
747デフォルトの名無しさん:2012/01/27(金) 22:05:36.77
日本語でおk。
748デフォルトの名無しさん:2012/01/27(金) 22:43:43.41
南斗か
749デフォルトの名無しさん:2012/01/28(土) 00:18:21.29
ttp://www9.plala.or.jp/sgwr-t/c/sec15-5.html
このサイトの、「(3)自己参照構造体を使ったリスト処理」のところで、

/* ポインタのつなぎ換え */
p->next = head; /* 今までの先頭ポインタを次ポインタに */
head = p; /* 新たな領域を先頭ポインタに */


とあるのですが、「p++」などで、次の構造体のアドレス移動していないのにどうして上書きせずに次のアドレスの構造体に保存できるのでしょうか?
用語がうまく使えなくて申し訳ないのですが・・・
750デフォルトの名無しさん:2012/01/28(土) 00:49:05.13
リンク先見る気は無いがコメント通りの処理を目指してんならnextて要素名は変じゃね?
751デフォルトの名無しさん:2012/01/28(土) 00:57:37.35
>>749
どうしてって言われてもリンクリストだからとしか言いようがない。
セルが配列みたいに連続して並んでたらポインタをインクリメントして次のセルだけど。
図入りでコードがあるんだから、おっかけてください。
752デフォルトの名無しさん:2012/01/28(土) 00:58:59.07
リストの先頭に追加してるだけ
753デフォルトの名無しさん:2012/01/28(土) 01:44:40.31
mallocで場所を確保するときにpが新しいアドレスに移っているということですね
754デフォルトの名無しさん:2012/01/28(土) 02:06:55.48
C言語を勉強しているのですが、if文の中で

if(式A||式B||式C||式D)

のように複数の式が論理演算子||で並んでいる時に、手持ちのコンパイラですと
実行時に、左側の式から順に(式A、式B、式C、式Dの順で)評価されていて、
かつ、途中の式が真の場合、残りの式は評価されていないみたいです。

※例えば式Aが真の場合、式B〜Dの中に含まれている関数は実行されない

これはC言語に共通する規則でしょうか?
それともコンパイラ固有の仕様ですか?
755デフォルトの名無しさん:2012/01/28(土) 02:08:56.05
>>754
C言語の規格通り
「短絡評価」といったキーワードで検索してみる
756デフォルトの名無しさん:2012/01/28(土) 02:11:23.51
>>755
ありがとうございました
757デフォルトの名無しさん:2012/01/28(土) 07:11:53.75
>>753
>pが新しいアドレスに移っているということですね
この表現の意味がわからない。

ポインタといっても通常の変数と変わらない。
mallocの戻り値を保持しているだけだよ。

ついでにリスト構造について、根本的に理解ができていないと思われる。
ポインタpに対してp++すると、pが指しているオブジェクトサイズ分値が増える。
配列の場合はメモリ上に稠密にデータが確保されているため、配列の次の要素を
指すことになる。リストで次の要素を指すためにはp = p->next;とすることになる。
758デフォルトの名無しさん:2012/01/28(土) 17:45:05.28
#include <stdio.h>

char strput(char *str){
while(*str){
putchar(*str);
*str++;
}
}

int main(void){
char str[20];

scanf("%s", str);

strput(str);
}

これは入力した文字を出力するプログラムなのですが、
6行目の「*str++」について疑問があります
もちろん、コンパイルすればエラーも出ずに結果も正常なのですが
「*」がない「str++」にしても同様にできました

そこで「*」がいるのかいらないのか分かりません
つける必要はないんでしょうか?
759デフォルトの名無しさん:2012/01/28(土) 17:46:21.32
ない
760デフォルトの名無しさん:2012/01/28(土) 17:48:00.12
何のためにつけるか、考えようね
761デフォルトの名無しさん:2012/01/29(日) 01:22:28.75
整数は大丈夫だろうけど、
浮動小数点数の演算結果って、
CPUによって違ったりしたりする?
i7, i5 と比べて ATOM とか、
FX, A と比べて E, C とか、
後者は演算ユニットが128ビットと64ビットで差があったりするんだが。
762デフォルトの名無しさん:2012/01/29(日) 01:26:59.68
>>758
#include <stdio.h> // printfなどの定義
char strput(char *str) // *は、strがポインターであることをコンパイラに指示する
{
while(*str) { // *strは、strが指す位置の文字データ内容
putchar(*str); // 文字を出力
str++; // ポインターの値を+1する。データを書き換えるわけではないので*は不要
}
}

int main(void)
{
char str[20];
scanf("%s", str);
strput(str);
}
763デフォルトの名無しさん:2012/01/29(日) 01:50:14.07
C言語に詳しい人に質問です。

p は構造体へのポインタです。

*((int *)((char *)p - sizeof(int)))
だとか
*((char *)p - sizeof(int))
といったかんじのコードをみかけるのですが、
これって何を意味しているのですか?

764デフォルトの名無しさん:2012/01/29(日) 03:28:13.08
*((char *)p - sizeof(int))の場合。

pには構造体の配置されてるアドレスが入っている。それをたとえば123456番地とする。
sizeof(int)は4バイトとすると

123452=123456-4番地を文字としてみたときの0-255のいずれかの値を表す。
765デフォルトの名無しさん:2012/01/29(日) 03:32:51.06
初心者っぽいので。

char p[]="abcxyz";とすると、p+3は文字列"xyz"の先頭アドレスだったり、*(p+3)はxを表したりする。

この操作と同じ。これがわかり無くそうになってだけで同じだ。
766763です:2012/01/29(日) 04:37:03.22
764さん, 765さん
ありがとうございます。
構造体の配置されているアドレスであるpからtypeof(int)を
引いたアドレスにはどんな意味があるのでしょうか?
ここを参照してintやcharとしての値を取得する目的があるのでは
ないかと思うのですが...




767デフォルトの名無しさん:2012/01/29(日) 05:01:34.61
>>766
それはその通りだけど、その場所に何が入っているかなんてCでは決まっていない。
環境またはそのプログラムが何かを入れているのだろうとしか言えないな。
768763です:2012/01/29(日) 05:15:59.87
>>767
たとえば、
C++の例ですが
ttp://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=287
には、
int sz= *(((char *) p)-sizeof (int));
がnew XXX [size] したときのsize と関係があるようなことが
書いてあります。
環境依存かもしれませんが。



769デフォルトの名無しさん:2012/01/29(日) 05:37:50.44
一部しか読んでないけど。

new された配列 char p[N] について。
C++ では new された配列は delete [] p; といったように書く。
delete [] のようにした場合、その配列の要素分だけメモリから開放するわけだが、
その要素数は、p の sizeof(int) 分手前に格納されている。(環境依存のはず)
770デフォルトの名無しさん:2012/01/29(日) 05:49:41.03
【中国BBS】2030年に韓国が日本を抜く? 反対意見が多数

中国大手検索サイト百度の掲示板に、「2030年に韓国のGDPは日本を追い越すって本当?」というスレッドが立てられた。
これに対して反対意見が多数寄せられている。

● スレ主:八戒窘6
  アジア開発銀行のデータによれば、2030年に韓国のGDPは日本を追い越すらしい。

● せんとう
  どんな予測も多少なりとも正確ではない所があるが、今回の話はあり得なさ過ぎる。

● satay醤
  本当にデタラメだな。アジア開発銀行によるレポートだって?じゃあバンク・オブ・アメリカや欧州の銀行の結論はどうなのよ?

● 佚名野菜地
  アジア開発銀行ってのは、韓国人が開いているのか?

● Joseph19969
  俺の妄想では、2100年日本人の1人当たりのGDPは46万ドル、韓国は8万だな!

● o落葉不知秋o
  その頃までに韓国という国が残っているかどうかも分からないぞ。

● 梨花陰凉
  死んでも信じない。

● MakiのLove
  なんか最近、韓国のニュースが多くね?
http://news.searchina.ne.jp/disp.cgi?y=2012&d=0128&f=national_0128_091.shtml

771デフォルトの名無しさん:2012/01/29(日) 06:57:55.48
>>768
その記事にも「典型的な実装では」て断って書いてあるだろうが。
772デフォルトの名無しさん:2012/01/29(日) 07:19:31.51
>>768
念のため、配列の先頭よりも前をさすような減算を行ったばあいの動作は未定義
あと、配列の最終要素の次をさすまでは合法だけど、内容を取得しようとしたときの動作は未定義
773デフォルトの名無しさん:2012/01/29(日) 10:53:23.43
>>759,760,762
意味を理解しながら勉強していこうと思います
ありがとうございました
774763です:2012/01/29(日) 11:49:16.47
>>769,771,772
ありがとうございます。

775デフォルトの名無しさん:2012/01/31(火) 16:16:16.16
オレC言語だけど今日は忙しいのでもう閉店ね。
また明日来て下さい。
776デフォルトの名無しさん:2012/01/31(火) 16:32:48.21
aとbは真偽値を取る変数なんですが、

!(a && b)

という式を||の式に変換すると、

(a == 0 || b == 0)

という式で合ってますでしょうか?
ド・モルガンの法則でぐぐって一応確認しました
777デフォルトの名無しさん:2012/01/31(火) 16:36:40.26
あってるけどなんで( !a || !b )にしないんだろう
778デフォルトの名無しさん:2012/01/31(火) 16:39:46.26
779デフォルトの名無しさん:2012/01/31(火) 18:17:39.94
ありがとうございました
!aだとよくわかんないので、
他人のソースを書きなおす作業をしてます
780デフォルトの名無しさん:2012/01/31(火) 18:19:49.06
たまにそういうやついるよね。
なんか間抜け。
781デフォルトの名無しさん:2012/01/31(火) 18:54:03.42
fuckな話をすれば、
0とか1とかアフォなことは書かず、FALSEとかTRUEとかにしろ
782デフォルトの名無しさん:2012/01/31(火) 19:00:17.31
どちらかというと後者の方がアホに見えるけどな。
783デフォルトの名無しさん:2012/01/31(火) 19:40:46.96
>>776
わざわざなんちゃらの法則だしたり2ちゃんできかないと答えに自信が持てないような難易度か?
784デフォルトの名無しさん:2012/01/31(火) 19:44:35.50
こんな質問で俺様理論を展開するお前らにあきれた
785デフォルトの名無しさん:2012/01/31(火) 19:50:27.65
ん?俺様理論てのは>>781だけじゃないのか?
786デフォルトの名無しさん:2012/01/31(火) 20:29:47.10
>>781
Cの場合、FALSEは0のみだからいいにしても、TRUEは0以外があてはまるから
そんなことするとわけのわからないバグに悩まされるだけだよ。
>>783
わざわざ出すとか以前に、ド・モルガンの法則なんて基本中の基本だろ。
787デフォルトの名無しさん:2012/01/31(火) 20:33:08.92
TRUEが0のばあい
FALSEは-1じゃなかったっけ
なんかどっかでみたことあるよw
788デフォルトの名無しさん:2012/01/31(火) 20:34:26.93
hoge_p() == TRUEとかやってバグったことあるよな。
789デフォルトの名無しさん:2012/01/31(火) 20:36:58.60
これがmalloc/free論争と対を成すboolean論争か
790デフォルトの名無しさん:2012/01/31(火) 20:38:47.89
>>787
違う。
>>789
論争にもなっていない。
791デフォルトの名無しさん:2012/01/31(火) 20:39:10.55
C言語ならゼロか非ゼロしかねーよ
792デフォルトの名無しさん:2012/01/31(火) 20:39:50.47
#undef TRUE
#undef FALSE

#define TRUE 0
#define FALSE (!TRUE)
793デフォルトの名無しさん:2012/01/31(火) 20:40:02.15
((!!(a=2))==true)が絶対trueに成ればいいんだけど
そもそもCに即値trueなんて無いしな
794デフォルトの名無しさん:2012/01/31(火) 20:40:53.55
どんどんわけのわからないレスが増えていくなw
795デフォルトの名無しさん:2012/01/31(火) 20:41:49.09
>>776みたいに0と比較するのは良かったはず
796デフォルトの名無しさん:2012/01/31(火) 20:42:29.40
なぁ、自信がないならわざわざ発言しなくていいんだぞ?
797デフォルトの名無しさん:2012/01/31(火) 20:43:06.48
絶対大丈夫だよ(俺の脳内世界では)
798デフォルトの名無しさん:2012/01/31(火) 20:43:19.44
>>792
こいつ殺したくなった。コード見て殺意がわいたのは
↓これ書いた奴についで二人目だ。
#define void int
799デフォルトの名無しさん:2012/01/31(火) 20:44:24.02
通報した。
800デフォルトの名無しさん:2012/01/31(火) 20:44:36.06
昔はしょうがなかったんだよ
voidなんてハイソな予約語なんか無かった
801デフォルトの名無しさん:2012/01/31(火) 20:45:23.72
#define TRUE (1==1)
#define FALSE !TRUE
802デフォルトの名無しさん:2012/01/31(火) 20:47:01.44
正解書いとくか
#define TRUE (!0)
#define FALSE (!TRUE)
803デフォルトの名無しさん:2012/01/31(火) 20:49:52.46
正解なんてないんだよ。
何か型を導入したいならそのルール前提記述するしかない。
ルールを強制するならこれでいい。
typedef enum {
  false,
  true
} bool;
804デフォルトの名無しさん:2012/01/31(火) 20:57:41.07
!aとか!bとか書くことになるなら、a,bに入れるときに真偽値を反転させとくのがよい
a=(1==1)だったのならa=(1!=1)にする
でそのまま条件式に使えば真偽値の値がなんなのかなんて気にしなくて済む
805デフォルトの名無しさん:2012/01/31(火) 20:59:44.13
>>803
普通に整数書いてもコンパイル通るからあんまりありがたくない
806デフォルトの名無しさん:2012/01/31(火) 21:00:07.89
!aは別にいいんじゃね
個人てきにはa==0より!aのほうが分かりやすいと思う
807デフォルトの名無しさん:2012/01/31(火) 21:01:35.73
>>805
だからCならルールを強制するしかないと言ってるだろ。
defineでも同じだろ。
808デフォルトの名無しさん:2012/01/31(火) 21:02:57.15
そして僕はそっとタブを閉じた
809デフォルトの名無しさん:2012/01/31(火) 21:31:12.05
そこで私はブラウザのトップ画面をこのスレにしておいた。
810デフォルトの名無しさん:2012/01/31(火) 22:03:47.30
a==0の方がわかりやすいが、自分でコードを書くなら!aかな。
811デフォルトの名無しさん:2012/01/31(火) 22:06:45.51
!810
812デフォルトの名無しさん:2012/01/31(火) 22:09:36.68
論理値で扱うものなら!、そうでなければ==0。
それだけだろ。
813デフォルトの名無しさん:2012/01/31(火) 22:22:54.15
そのとおり
814デフォルトの名無しさん:2012/01/31(火) 22:31:12.11
C言語の仕事なんてほとんどないってほんと?
815デフォルトの名無しさん:2012/01/31(火) 22:52:21.60
組み込み系はガチC全盛なんじゃないか?
他はC++なら聞くがCってのは聞かないな
816デフォルトの名無しさん:2012/01/31(火) 23:07:03.26
組み込みでCで仕事してるよ
今のところC以外に移りそうな様子は微塵もないな
817デフォルトの名無しさん:2012/01/31(火) 23:07:48.32
ああ、でもCのコードを自動生成する方向には向かうかも
818デフォルトの名無しさん:2012/01/31(火) 23:26:15.60
>>816
組み込みって何?
TVだと思いっきりC++だったな。
819デフォルトの名無しさん:2012/02/01(水) 01:36:38.40
「携帯電話や自動販売機などの組み込み機器(中略)
組み込みシステムのソフトウェア開発には、C言語が主に使われています」

H8で学ぶマイコン開発入門(2):組み込みソフトウェア開発はC言語が主流だ (1/3) - @IT MONOist
http://monoist.atmarkit.co.jp/mn/articles/0610/12/news142.html
820デフォルトの名無しさん:2012/02/01(水) 08:16:11.14
>>818
携帯もC++でやったことがある。
821デフォルトの名無しさん:2012/02/01(水) 10:26:44.02
>>818
組込みってもPICマイコンの電子工作から産業機械の制御まで幅広いからな。。。
822デフォルトの名無しさん:2012/02/01(水) 10:53:03.24
組込系おもしろそう。どこで求人してるんだ?ないよ?
823デフォルトの名無しさん:2012/02/01(水) 11:09:21.30
組み込み 求人 でググレカス
824デフォルトの名無しさん:2012/02/01(水) 11:34:15.45
結局組み込み以外、Cの使い道はないんですね。
825デフォルトの名無しさん:2012/02/01(水) 11:45:01.82
2chで世間が判った気になるなよw
826デフォルトの名無しさん:2012/02/01(水) 11:47:10.58
>>819
ちょっwww それ2006年の記事じゃんw 古っ
827デフォルトの名無しさん:2012/02/01(水) 11:47:16.09
>>824
高級言語の拡張とかにも使われる
828デフォルトの名無しさん:2012/02/01(水) 11:52:28.64
マイコン用にCで書いてるけど、
プロトタイプ無しで呼べるとか
違う型のポインタが暗黙に変換できるとか
負の資産を感じる。

classとかtemplateとか使いたい訳じゃないが
CソースもC++コンパイラでコンパイルしたい。
829デフォルトの名無しさん:2012/02/01(水) 12:44:39.39
>>828
コンパイラが使いにくいとかの理由?
830デフォルトの名無しさん:2012/02/01(水) 12:55:16.29
C++じゃなくて純Cの環境だからC++の環境でコンパイルしたいってことだろ
純Cの仕様はかなり緩いところがあるから、ミスを誘発する…と
831デフォルトの名無しさん:2012/02/01(水) 13:00:50.75
それじゃあそういうコンパイラをCとかで書けばいいじゃん
Cにこだわらなくてもいいな、lispやらperlやらでもかけるぞ
832デフォルトの名無しさん:2012/02/01(水) 13:43:55.29
gccで最も厳しいチェックをするようにして凌いでた事もあったが、最新の組み込みは複雑化してるんだろうなあ。
833デフォルトの名無しさん:2012/02/01(水) 14:12:53.12
VisualStudio でCのソースをビルドすると、入出力関数を_s付きのセキュアな関数に
置き換えることを検討しろって出るんですけど、標準入出力関数って、あぶないの?
834デフォルトの名無しさん:2012/02/01(水) 14:15:11.72
とっても。
835デフォルトの名無しさん:2012/02/01(水) 14:17:19.17
文字列用のバッファに起因する脆弱性をついたものとか結構あったじゃないか
836デフォルトの名無しさん:2012/02/01(水) 14:26:42.38
(σ・∀・)σゲッツ!!
837デフォルトの名無しさん:2012/02/01(水) 14:28:52.87
なんで標準の関数を安全にしないの?
838デフォルトの名無しさん:2012/02/01(水) 14:29:44.43
またまたまた ホモキタ━━━━━━(゚∀゚)━━━━━━ !!
839デフォルトの名無しさん:2012/02/01(水) 14:37:32.19
標準の関数を安全にしようとすると、今までのコードを変更させなければならなくなる
840デフォルトの名無しさん:2012/02/01(水) 14:41:30.54
セキュア関数は脆弱性を減らすだけだから、攻撃への対処はやはり必要。
841デフォルトの名無しさん:2012/02/01(水) 14:43:38.68
ナイフをむき出しで売ってて取り扱い注意だったのが
鞘付きのバージョンが用意された、くらいだな。
ちゃんとした使い方しないと危ないことに変わりは無い。
842デフォルトの名無しさん:2012/02/01(水) 15:09:04.31
わかったようなこと書くなw
843デフォルトの名無しさん:2012/02/01(水) 16:50:08.80
低能のたとえ話は意味不明だな。自分ではうまい事言ったつもりなんだろうな。
844デフォルトの名無しさん:2012/02/01(水) 16:58:40.68
841ではないが、意味不明ではないだろ。塚、理解力ないのか?
845デフォルトの名無しさん:2012/02/01(水) 17:04:36.96
意味が通じるのはすでにわかってる人だろう
すでにわかってるんだから意味が無い
846デフォルトの名無しさん:2012/02/01(水) 17:08:20.21
じゃあなんで脆弱な標準関数を放置してるんですか?
847デフォルトの名無しさん:2012/02/01(水) 17:09:31.60
>>846
別の言語使えや
848デフォルトの名無しさん:2012/02/01(水) 17:11:32.51
849デフォルトの名無しさん:2012/02/01(水) 17:12:49.76
C# って、(C++)++ってことなんですか?
850デフォルトの名無しさん:2012/02/01(水) 17:55:17.44
ちがうよ
++をくっつけてちょっとおしゃれに斜めに配置しただけじゃないの?
もしくは音楽で#は半音上げるだからそこからきてるなかも
だとすると++は1上がるけど#は0.5しか上がらないから
C<<<<C#<<<<<C++
つまりC++には敵いませんという意味の謙虚なネーミングだな
851デフォルトの名無しさん:2012/02/01(水) 17:57:04.36
>>846
脆弱性があるだけで使っちゃダメなわけじゃない
勝手にかえられて勝手に速度が下がるとか勘弁願いたい
852デフォルトの名無しさん:2012/02/01(水) 18:07:13.92
g++を移植する、とか
853デフォルトの名無しさん:2012/02/01(水) 19:43:11.75
ウィンドウズの旗のイメージね
■■
■■
854デフォルトの名無しさん:2012/02/01(水) 20:07:54.57
C++-1+2 てとこかな、現状
855デフォルトの名無しさん:2012/02/01(水) 20:25:42.76
それはc+2になると思うが、何の話だ。
856デフォルトの名無しさん:2012/02/01(水) 20:27:11.30
もう 起動言語C+++ トリプルインクリメント とかいうアニメでも作っちゃえよ
857デフォルトの名無しさん:2012/02/01(水) 20:29:40.46
c+2はでねぇよぉ
858デフォルトの名無しさん:2012/02/01(水) 20:42:07.14
何の話だ。
859デフォルトの名無しさん:2012/02/01(水) 21:03:15.68
puts((c++-1+2 == c+2) ? ">>857 m9" : ">>854 m9");
860デフォルトの名無しさん:2012/02/01(水) 21:20:51.19
>>859
たった1行なのにバグってるとかw
C++なんだから評価後をチェックしないとアカン。
861デフォルトの名無しさん:2012/02/01(水) 21:29:54.14
不定?
862デフォルトの名無しさん:2012/02/01(水) 21:31:19.43
副作用完了点問題?
863デフォルトの名無しさん:2012/02/01(水) 21:32:05.62
バグってないよ
864デフォルトの名無しさん:2012/02/01(水) 21:34:03.24
いずれの時点でもc+2と同じ値になることはないが。
865デフォルトの名無しさん:2012/02/01(水) 21:35:26.50
>>860
こうか
a=b=c;
puts((a++-1+2 == b+2) ? ">>857 m9" : ">>854 m9");
866デフォルトの名無しさん:2012/02/01(水) 21:48:43.57
CとC++が同じという前提なんか?
C == C++
867デフォルトの名無しさん:2012/02/01(水) 22:22:10.99
Cの組み込み系はSEの中でもブラック率が高いって聞いたけど本当?
868デフォルトの名無しさん:2012/02/01(水) 22:52:12.37
まずは言った奴に聞けば?
869デフォルトの名無しさん:2012/02/01(水) 22:53:01.30
言ったやつが、いや嘘。なんて言う確率は相当低いと思うけどな。
870デフォルトの名無しさん:2012/02/01(水) 22:55:20.26
「括弧内に書いてあることは嘘です」
871デフォルトの名無しさん:2012/02/01(水) 23:03:55.27
何故なのかを、言った奴に聞けって事だろ。
872デフォルトの名無しさん:2012/02/01(水) 23:21:41.09
完全新規でCの大規模開発ってもうないんじゃね?
Cでやってる=過去の遺産を使ってる=謎設計コードを含んでる=?
873デフォルトの名無しさん:2012/02/01(水) 23:29:05.36
俺はゲハとはそういうものだと認識してるから煽りなんてどうでもいいし盛り上がる時もあるからいいだけど
嫌がるやつ多いからな
874デフォルトの名無しさん:2012/02/01(水) 23:47:20.86
恥ずかしいやつww
875デフォルトの名無しさん:2012/02/02(木) 04:10:25.73
>>873
ここ、ゲハじゃないっすよ
876デフォルトの名無しさん:2012/02/02(木) 04:11:27.30
誤爆を謝らない態度、潔し
877デフォルトの名無しさん:2012/02/02(木) 06:55:02.65
組み込み系はメーカー常駐だから偽装請負か特定派遣ということになる
結局は使い捨ての奴隷
878デフォルトの名無しさん:2012/02/02(木) 08:54:25.32
やめたげてよぉ
興味があっても趣味に留めておくのがいい
879デフォルトの名無しさん:2012/02/02(木) 10:27:02.00
>>878
趣味ならPICマイコンでアセンだな
880デフォルトの名無しさん:2012/02/02(木) 10:28:06.21
アセンって何だw
アセンブラのブラ消してたw
881デフォルトの名無しさん:2012/02/02(木) 11:10:53.09
組み込み以外でもドナドナIT。
882デフォルトの名無しさん:2012/02/02(木) 11:18:13.43
おまえらがそんなだから
大陸や半島に後れを取るんだよ
883デフォルトの名無しさん:2012/02/02(木) 11:53:06.84
>>880
ノーブラ
884デフォルトの名無しさん:2012/02/02(木) 12:24:05.26
Cというとご老人がスパゲッティ相手に悪戦苦闘するイメージだな
885デフォルトの名無しさん:2012/02/02(木) 12:28:33.03
使う人次第だな
886デフォルトの名無しさん:2012/02/02(木) 15:22:46.33
ttp://codepad.org/ZFyYfybI

このコードみたいなunionの使い方って安全?
x , y , zの間にパディングが入ることってあり得る?
887デフォルトの名無しさん:2012/02/02(木) 15:29:50.23
まぁ普通は大丈夫だろうけど、保証はないね。
#pragmaなりオプションなりそのコンパイラ固有のものを使わないと。
888デフォルトの名無しさん:2012/02/02(木) 15:35:25.22
同じものを並べてパディング入るケースってあるのか?
889デフォルトの名無しさん:2012/02/02(木) 15:41:30.36
ttp://codepad.org/vZr9h4fQ

これで勝つる
890デフォルトの名無しさん:2012/02/02(木) 15:43:41.03
>>888
80 ビットの long double とかならありそうじゃないか? 試してないけど
891デフォルトの名無しさん:2012/02/02(木) 15:56:08.84
並んでるのが同じものかどうかは関係ない
CPUの都合に合わない大きさのものに入る
892デフォルトの名無しさん:2012/02/02(木) 16:03:08.56
じゃあ例を出してみなw
893デフォルトの名無しさん:2012/02/02(木) 17:00:59.97
MIPS32だとchar a, b, c;は32bitごとになるんじゃないか?
894デフォルトの名無しさん:2012/02/02(木) 17:05:35.60
配列は例外なのか?
895デフォルトの名無しさん:2012/02/02(木) 17:07:52.00
コンパイラの実装依存だろ
どうこういっても意味なし
896デフォルトの名無しさん:2012/02/02(木) 17:08:02.45
いや、例外とかじゃなくMIPSはバイトアクセスのペナルティが大きいから
オプションによってはそうじゃなかったかなと。
897デフォルトの名無しさん:2012/02/02(木) 17:18:13.79
>>895
最初からそう言ってるんだが、>>892はそんなものは実在しないと言ってるんだ。
898デフォルトの名無しさん:2012/02/02(木) 21:01:28.93
周りにプログラミングのこと聞ける人がいないので、教えてください。
最近x code4のcommand line toolを使ってC言語を学びはじめました。
今まではrunを押せば、下に色々反応(文字の表示や入力を求める表示)があったの
ですが、今日はrunを押すとfinish runningとでるだけで、下にまったく反応がありません。
そこで違うコードを入力したところ今まで通り反応がありました。
色々ネットで原因を探してみたのですが、わかりませんでした。
コードに問題があるんでしょうか?
/*postagec*/
#include <stdio.h>
void input_data(void); void calculate(void); void output_data(void);
int distance,weight,size,postage;
int main (void){
void input_data(void); void calculate(void); void output_data(void);
return 0;}
void input_data(void){
printf("距離[%dkm]重さ[%dg]を入力してください",distance,weight);
scanf("%d%d",&distance,&weight);
return;}
void calculate(void){
if(weight<=100){size=1;
}else if(weight<=1000){size=2;
}else{size=3;}
if(distance<=100){size=size+10;
}else if(distance<=1000){size=size+20;}else{size=size+30;}
return;}
void output_data(void){printf("サイズは%dです\n",size);
printf("料金は%d円です\n",postage);return;}
どなたか解決方法がわかるかた教えてください。
よろしくお願いします。長文すいません。
899デフォルトの名無しさん:2012/02/02(木) 21:07:44.00
素直にあいぽんとか叫んじゃえよ
900デフォルトの名無しさん:2012/02/02(木) 21:16:47.23
スペースが全角になってるが?
901デフォルトの名無しさん:2012/02/02(木) 21:19:09.09
何も実行されないプログラムになってますしおすし
902デフォルトの名無しさん:2012/02/02(木) 21:22:52.46
>>898
このようになおせば動くと思うよ。
int main (void){
input_data();  calculate();  output_data();
return 0;}

> コードに問題があるんでしょうか?
プログラムは書かれた通りに動く。期待通りに動かないのは
キミ自身が期待するコードをキミが書いていないからだ。
903デフォルトの名無しさん:2012/02/02(木) 21:22:53.67
>900
スペースは書き込んだときに改行多すぎというエラーが
でたので改行減らすためにコードをいじったためかと・・・
x code上ではno issuesって出てます。
904デフォルトの名無しさん:2012/02/02(木) 21:23:31.91
905デフォルトの名無しさん:2012/02/02(木) 21:24:04.12
> printf("距離[%dkm]重さ[%dg]を入力してください",distance,weight);
ここに問題があるに1000ペリカ
906デフォルトの名無しさん:2012/02/02(木) 21:25:05.25
>>898
http://codepad.org/wD7XPijJ

b.c は私が書きたいように書いた。
b.c.orig は >>898 の書き方になるべく沿って書いた。

global 変数は余り使わないようにしよう。
変な癖がついて、糞野郎って思われるようになるよ。
907デフォルトの名無しさん:2012/02/02(木) 21:46:51.24
>>902
902さんのいう通りにしたら動きました。
コードの内容がまだ理解できていないので、なんで動かなかったか
調べてみます。
ありがとうございました。

global変数はだめなんですか?
ニコ動の動画通りにやってたので、プログラマーの常識(?)なんかは
全然知らないので勉強になりました。
ありがとうございました。
908デフォルトの名無しさん:2012/02/02(木) 22:08:32.44
C言語の解説動画って需要あるの?
ちょっとどの動画を見たのか教えて欲しい
あと検索単語も

> global変数はだめなんですか?
使わないで書けるなら使わない方が良い。
>>898のは数十行だからそこまで問題ないけど、

global変数の値の書き換えってどこでもできちゃうから、
数百行や数千行になってくると、
bugの温床となりやすい。
どこか〜〜_init()関数だけでglobal変数の設定をして
他の場所ではglobal変数の参照だけする。
とかならいいんだけど、なかなかうまくいかないんだ。

特に初心者のうちは使わない方が吉。
909デフォルトの名無しさん:2012/02/02(木) 22:12:44.41
C言語って初心者向けじゃない気がするんだよな
910デフォルトの名無しさん:2012/02/02(木) 22:14:51.48
>>898

書き方が汚かったので、多分書き方を知らないんだと思う。
Pythonのなんだけど、これを参考にして書くといいよ。

以下だけは、
タブは4個の空白に等しいとする。
って読み替えて。

PEP 7 -- Style Guide for C Code:
http://www-acc.kek.jp/WWW-ACC-exp/KEKB/control/Activity/Python/doc-j/pep-0007-J.html

ソースプログラムの配置

- Use single-tab indents, where a tab is worth 8 spaces.
- ソースのインデントには、タブ一つを使う。タブは八個の空白に等しいとする。
911デフォルトの名無しさん:2012/02/02(木) 22:52:10.79
スレ違いもいい加減にしろよ。
912デフォルトの名無しさん:2012/02/02(木) 23:00:44.01
???
913デフォルトの名無しさん:2012/02/02(木) 23:30:57.29
>>911自体が誤爆なんでしょ
高度な技を出しやがって
914デフォルトの名無しさん:2012/02/02(木) 23:42:19.21
C/C++の宿題スレの誤爆と思われる
915デフォルトの名無しさん:2012/02/03(金) 03:13:14.55
>>910
タブの使用未使用については特に問わないが、
タブは8タブ、インデントは4カラムがいいな。
916デフォルトの名無しさん:2012/02/03(金) 03:36:48.87
>>915
私はタブ使わない派です。
インデントは空白4つでやってます。

タブを8空白として使ったことないので、
空白4つ派です。。。

最後に。
タブって昔々KB辺りの単価が高かった頃、
1文字でインデントを表現するために必要だった文字なんだと思います。
今後は廃れてなくなっていくんじゃないかなー?
と思っていたりします。
917デフォルトの名無しさん:2012/02/03(金) 03:41:38.80
何をわけのわからないことを言ってるんだお前は。
918デフォルトの名無しさん:2012/02/03(金) 03:42:46.31
こういうスレって基本的にageないんですか?
そうだとするとなぜですか?
919デフォルトの名無しさん:2012/02/03(金) 03:54:16.45
韓国が貿易赤字に転落

韓国の知識経済省が1日発表した1月の貿易統計によると、輸出から輸入を差し引いた貿易収支は、19億5700万ドル(約1490億円)の赤字となった。
また輸出額も415億3700万ドルと前年同月比で6・6%減少した。

同省では、長引く欧州の財政危機と原油価格上昇の影響だとしている。
http://www.yomiuri.co.jp/world/news/20120201-OYT1T01150.htm
920デフォルトの名無しさん:2012/02/03(金) 03:57:58.10
専ブラが自動的にメル欄にsageって入れてくれるから
>>918はwebブラウザで2chしてるの?
921デフォルトの名無しさん:2012/02/03(金) 04:03:12.00
>>916
8空白として使うとかじゃなくて、タブの幅は8文字分を想定してほしいという話だよ。
で、インデントサイズを4とした場合に、1段なら4つの空白、2段分は8個の空白でもタブ1つでもいいよってだけ
922デフォルトの名無しさん:2012/02/03(金) 04:16:58.10
>>921
ああ、なーるほど。
変に読んじゃってましたね。失礼しました。
923デフォルトの名無しさん:2012/02/03(金) 04:24:25.82
>>922
補足しておくと、viの設定だとこう
set sts=4 sw=4 ts=8

ただ、書かれてるとおり、今はタブを使わないってのが主流かも。
924デフォルトの名無しさん:2012/02/03(金) 04:29:33.86
今時viかよ。
925デフォルトの名無しさん:2012/02/03(金) 04:45:44.30
>>920
設定でどうにでもなるだろ情弱
926デフォルトの名無しさん:2012/02/03(金) 04:48:41.25
viで何が悪いんだよ。
IDEとか使いづらいだろjk。

set expandtab
set shiftwidth=4
set ts=4

私はこんな感じ。
927デフォルトの名無しさん:2012/02/03(金) 04:49:39.93
>>925
なーんかトゲトゲしいですね。
困ったチャンですね。
もう寝ましょう。
928デフォルトの名無しさん:2012/02/03(金) 05:16:23.84
せめてemacs使えよ。
929デフォルトの名無しさん:2012/02/03(金) 05:27:59.14
emacs使う人ってやっぱGNUのインデントスタイルに慣れてるの?
930デフォルトの名無しさん:2012/02/03(金) 05:28:55.16
いや、おれはstroustrupに設定してるが。
931デフォルトの名無しさん:2012/02/03(金) 05:39:41.70
RMSよりスッポスッポの方がすきか
932デフォルトの名無しさん:2012/02/03(金) 05:42:10.12
stroustrupスタイルって
char* p; も含む?
933デフォルトの名無しさん:2012/02/03(金) 05:43:23.45
>>932
c-modeという意味では含まない。
934デフォルトの名無しさん:2012/02/03(金) 05:44:27.86
じゃあ完全にstroustrupの書き方をまねるわけではないんだ。アリガトン
935デフォルトの名無しさん:2012/02/03(金) 05:47:14.25
あぁ、主にインデンテーションだからね。
おれの設定はこの程度。
(setq tab-width 4)
(setq c-indent-level 4)
(setq c-continued-statement-offset 4)
(setq c-argdecl-indent 4)
(setq c-label-offset -4)
(setq indent-tabs-mode nil)
936デフォルトの名無しさん:2012/02/03(金) 05:49:18.69
emacs使いじゃないから雰囲気でしか設定見れないけど、ハードタブを4カラムに設定してんのかなぁ
937デフォルトの名無しさん:2012/02/03(金) 05:54:50.76
(setq indent-tabs-mode nil)
がいわゆるハードタブってのを使わない設定だね。
938デフォルトの名無しさん:2012/02/03(金) 06:00:18.19
あぁ、タブコードはtab-widthで4やね。
2/4/8で切り替えられるようにしてるから別にきにしてないけど。
939デフォルトの名無しさん:2012/02/03(金) 06:00:50.21
重ね重ねどうもです
940デフォルトの名無しさん:2012/02/03(金) 06:17:23.93
急に伸びるから何かと思ったら。。。
下らない
941デフォルトの名無しさん:2012/02/03(金) 06:28:27.78
Emacsは何度も挑戦したが
どうやってもMetaが押しづらくて挫折する
942デフォルトの名無しさん:2012/02/03(金) 06:50:41.16
vim一択
943 ◆QZaw55cn4c :2012/02/03(金) 06:53:01.15
>>941
altキーに換えられない?
944デフォルトの名無しさん:2012/02/03(金) 07:36:40.05
>>943
替えるまでもなくデフォルトでAltにマップされてない?
でも押しづらい
無変換に変えても大差ない
CapsLockってのも抵抗がある
端末上ならEmacsバインドでも構わないけど
エディタとしては出番多すぎてつらすぎ
945デフォルトの名無しさん:2012/02/03(金) 07:50:18.55
>>944
親指で押せばそうでもないと思うが、キーボード次第かも

Emacsに限らずviとかもだけど、昔のエディタって
キーボードによって結構能率に差が出る印象がある

因みに俺はMacではvi派、WindowsではEmacs派
Linuxはむしろ使うエディタにキーマップ合わせに行くw
946デフォルトの名無しさん:2012/02/03(金) 07:57:35.30
Metaキーは使ったことないな。Escで代用してる。
947デフォルトの名無しさん:2012/02/03(金) 08:02:02.28
HHKBとかならまだしも、
Escは押しづらい位置にあることが多い気がする
948デフォルトの名無しさん:2012/02/03(金) 08:05:01.88
もちろん日本語KBなら漢字キーてやつと入れ替えてるよ。
CAPS⇔CTRLとESC⇔漢字で、あとはASCII配列に変更して使ってる。
最近は英語キーボードがなかなか手にはいらないので。
949デフォルトの名無しさん:2012/02/03(金) 08:06:44.51
お前らいい加減にスレタイ読め
950デフォルトの名無しさん:2012/02/03(金) 08:08:32.24
まぁいつものこと。
951デフォルトの名無しさん:2012/02/03(金) 08:18:35.25
NICOLA配列だから
左親指に割り当ててる

同時押しいつもやってることだし
952デフォルトの名無しさん:2012/02/03(金) 08:27:22.04
Metaキーの位置に悩むそんなあなたにC-[。
問題は結局Ctrlの位置なんだよね。

まあ自分のコンピュータならキーバインドをカスタマイズすればいいんだろうけど、
ちょっと触るだけの環境とかでそういうのを使うわけにもいかず。
953デフォルトの名無しさん:2012/02/03(金) 09:44:10.41
プログラミング以外だと生き生きする奴が多いのはデフォ。
954デフォルトの名無しさん:2012/02/03(金) 10:09:22.95
viは環境変わっても使えるから、慣れておくといい
955デフォルトの名無しさん:2012/02/03(金) 10:35:36.47
汎用的関数化が他の機能に与える影響ってなに?
956デフォルトの名無しさん:2012/02/03(金) 12:22:30.01
>vi
大学で3年間「使いにくいー!!誰だこんな仕様考えたやつは!!」
と思ってたけど会社入っても結局これ一本だった。
957デフォルトの名無しさん:2012/02/03(金) 12:54:42.67
俺viになれすぎちゃってみんなが普通に使ってるエディタが使いにくい…
最初に必ずソースにjjjjjjjjjjjjjjjjjとかタイプするのはお約束w
958デフォルトの名無しさん:2012/02/03(金) 13:32:13.32
jjjjjjjjjjjjって操作をするのはvi初心者、とツッコミを入れられるのもお約束
959デフォルトの名無しさん:2012/02/03(金) 14:05:26.28
jjjjjjjjjjjjjjjjj > @さんにごあいさつにきますた
960デフォルトの名無しさん:2012/02/03(金) 14:51:00.16
C言語で小町算のプログラムつくってくれませんか?><
課題なのに一向にできません;;
961デフォルトの名無しさん:2012/02/03(金) 14:52:14.79
総当たりにすればいいだろ。
962デフォルトの名無しさん:2012/02/03(金) 15:32:25.14
いくら出すんだ?
963デフォルトの名無しさん:2012/02/03(金) 15:40:36.24
>>960
ググれ
964デフォルトの名無しさん:2012/02/03(金) 15:42:22.25
>>960
小町算っていってもローカルルールとかいろいろあるからちゃんと定義書いてくれないとこっちも困るよ
965デフォルトの名無しさん
perlで文字列でやって
それそのままevalしたほうがラクじゃん
perlじゃなくても、文字列が評価できるならなんでもいいけどさ

cなんて使うかよアフォ