トップページ⇒tech
1001コメント280KB

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

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001デフォルトの名無しさん2011/02/06(日) 18:33:49
C言語の*入門者*向け解説スレッドです。
★前スレ
C言語なら俺に聞け(入門編)Part 77
http://hibari.2ch.net/test/read.cgi/tech/1295721606/
★過去スレ
http://makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
★教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 146代目
http://hibari.2ch.net/test/read.cgi/tech/1296387672/
★C++言語については避けてください。C++対応明記スレへどうぞ
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
  # サイズが大きい場合は宿題スレのアップローダ等を利用してください
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
0809デフォルトの名無しさん2011/02/14(月) 06:57:58
今度はsizeof君か
0810デフォルトの名無しさん2011/02/14(月) 06:58:04
>>808
>>803が未定義だと、突き詰めて考えれば>>790も未定義なるから、小出しに聞いただけ
で、結論を教えてプリーズ
0811デフォルトの名無しさん2011/02/14(月) 06:59:21
いや規格読めよ
0812 ◆QZaw55cn4c 2011/02/14(月) 07:00:54
>>800
>>802
ヨフカシヨクナイ
0813デフォルトの名無しさん2011/02/14(月) 07:01:59
◆QZaw55cn4cが今度はスレをあげて荒らし始めた
0814デフォルトの名無しさん2011/02/14(月) 07:03:30
>>811
ネタを小出しに脹らませていけば、誰か調べてくれるかなと…
みんな興味あるでしょ?
0815デフォルトの名無しさん2011/02/14(月) 07:05:22
>>814
みんな知ってます
0816デフォルトの名無しさん2011/02/14(月) 07:06:36
>>814
氏ね
0817デフォルトの名無しさん2011/02/14(月) 07:08:32
>>816
まぁ、そう言わずに教えてくれ
手元に規格書なくて、JISも見れんのよ
0818デフォルトの名無しさん2011/02/14(月) 07:08:33
>>>803が未定義だと、突き詰めて考えれば>>790も未定義なるから
ならねーよ馬鹿じゃねーの
そもそも>>790は可変長配列関係ないし、変数へのアクセスと型のサイズと静的動的がごっちゃになってるよ
0819デフォルトの名無しさん2011/02/14(月) 07:10:55
これは低級な釣りだな
0820デフォルトの名無しさん2011/02/14(月) 07:13:00
未初期化変数の話が可変長配列のサイズの話になってる時点で論外だわ
0821デフォルトの名無しさん2011/02/14(月) 07:15:58
◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ
◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ
◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ
◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ
◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ
◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ
◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ
◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ
◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ
◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ
◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ
◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ
◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ
◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ
0822デフォルトの名無しさん2011/02/14(月) 07:22:00
>>8189 >>820
/* pは初期化してない */
ごめん、これtypo
/* *pは初期化してない */
が正しい
0823デフォルトの名無しさん2011/02/14(月) 07:22:03
typedef xxx foo;

foo *p;//未初期化のポ゚インタ
sizeof(*p);//アクセスによって未定義動作を引き起こす
0824デフォルトの名無しさん2011/02/14(月) 07:27:01
>>821
お前モナー
0825デフォルトの名無しさん2011/02/14(月) 07:28:07
そして急に答えられなくなった◆QZaw55cn4c
0826デフォルトの名無しさん2011/02/14(月) 07:28:53
>>824
ちゃんとトリップ付けて書き込めよクズ
0827デフォルトの名無しさん2011/02/14(月) 07:38:31
一応>>790の質問で聞きたかったことを省略しないで正しく書いて置きまふ

typedef xxx foo; /* sizeof(型名) を使いたくない */

foo s, *p;
p = &s;
sizeof( *p ); /* *pは初期化してない */
0828 ◆QZaw55cn4c 2011/02/14(月) 07:40:47
>>823
あげられている例でいえば、どちらも未定義でも処理系依存でもないですよ。
#Administrator@KORP ~/2ch
$ cat noninit.02.c
#include <stdio.h>
int main() {
  long long int *p;
  printf("sizeof(p)=%d\n", sizeof(p));
  printf("sizeof(*p)=%d\n", sizeof(*p));
  return 0;
}

#Administrator@KORP ~/2ch
$ gcc -Wall noninit.02.c

#Administrator@KORP ~/2ch
$ ./a.exe
sizeof(p)=4
sizeof(*p)=8

#Administrator@KORP ~/2ch
$
0829デフォルトの名無しさん2011/02/14(月) 07:42:19
はい釣れた
0830デフォルトの名無しさん2011/02/14(月) 07:49:57
int a;
sizeof(a);//aは初期化されてないため未定義動作
0831デフォルトの名無しさん2011/02/14(月) 07:53:13
>>830
それ本当に未定義だったら嫌だな…
0832デフォルトの名無しさん2011/02/14(月) 07:56:22
って思ったけど、使い道ないか
0833デフォルトの名無しさん2011/02/14(月) 08:06:58
>>828
xxx次第でしょ
typedef struct hoge{...};
typedef struct hoge xxx;
とかだったら処理系依存だし。
0834デフォルトの名無しさん2011/02/14(月) 08:13:04
何を処理系依存だと言ってるんだろう。
0835デフォルトの名無しさん2011/02/14(月) 08:29:41
>>823
typedef xxx foo; /* sizeof(型名) を使いたくない */

foo s, *p;
p = &s;
1; /* 1は初期化してない */
2; /* 2は初期化してない */
3; /* 3は初期化してない */
4; /* 4は初期化してない */
0836デフォルトの名無しさん2011/02/14(月) 16:10:19
スレ地かもだけど

プログラムがどの様にメモリ上に展開され、動作するか、
ヒープやスタックがどのように確保されるか、レジスタについて
などが解説されている本のオススメ教えてください。

Cの本にはプログラムがどう展開されるかとか載ってないし、
アセンブラの本にはヒープとかについてが載ってない。。
0837デフォルトの名無しさん2011/02/14(月) 16:57:23
書籍スレにどうぞ。あー、「推薦図書/必読書」か。
0838デフォルトの名無しさん2011/02/14(月) 17:23:52
ヒープやスタックはC言語がそういってるだけで、どちらも同じメモリ。
0839デフォルトの名無しさん2011/02/14(月) 18:04:10
char w[5] = 'a,b,c,d,e'
となっている配列からeだけを除去して、

w[5] = 'a,b,c,d'
にすることが出来ますか?
0840デフォルトの名無しさん2011/02/14(月) 18:09:01
出来ますん
0841デフォルトの名無しさん2011/02/14(月) 18:12:35
餌でか
0842デフォルトの名無しさん2011/02/14(月) 18:13:54
>>840
どうやってしますか?
0843デフォルトの名無しさん2011/02/14(月) 18:14:59
そもそも構文エラーです。
0844デフォルトの名無しさん2011/02/14(月) 18:18:31
>>843
すみません
わかりやすいように例をあげただけです。
0845デフォルトの名無しさん2011/02/14(月) 18:19:17
>>844
では言い換えましょう。
そもそも構文エラーです。
0846デフォルトの名無しさん2011/02/14(月) 18:22:24
>>845
char w[5] = {'a,b,c,d,e'}

こうですか?
0847デフォルトの名無しさん2011/02/14(月) 18:25:34
w[4]='\0'でおk
0848デフォルトの名無しさん2011/02/14(月) 18:29:36
>>846
構文エラーです。
0849デフォルトの名無しさん2011/02/14(月) 18:30:06
>>847
なるほど!
ありがとうございました!
0850デフォルトの名無しさん2011/02/14(月) 18:34:57
>>847
あなたは神ですね!
他のクズどもとは違いますね
0851デフォルトの名無しさん2011/02/14(月) 18:36:22
>>847以外の糞たちはこのスレに必要ない気がしますが、どうでしょう
0852デフォルトの名無しさん2011/02/14(月) 18:36:48
さすが>>847は格が違った
0853 ◆QZaw55cn4c 2011/02/14(月) 18:45:10
>>836
MS-DOS 時代は C とアセンブラをリンクしたりすることも多く、書籍も多かったのですが、たとえばWindows 上でアセンブラ由来のオブジェクトをリンクするような
書籍はみたことがないですね。cl にソースを吐かせて眺めることから着手するしかないかなあ。
0854デフォルトの名無しさん2011/02/14(月) 18:51:46
>>853
と無職の中年ジジイが申しております
使ってるソフトも多分全部割れ
0855デフォルトの名無しさん2011/02/14(月) 18:54:19
リンクでずっこけたときアセンブラの知識ないと詰みだろ
0856デフォルトの名無しさん2011/02/14(月) 19:09:45
ズッコケ三人組
コンパイラ、アセンブラ、リンカ
0857デフォルトの名無しさん2011/02/14(月) 19:19:33
>>839
Cの痛いところを突かれて土方発狂ww
0858デフォルトの名無しさん2011/02/14(月) 19:21:53
↑サドルマン
0859デフォルトの名無しさん2011/02/14(月) 19:26:41
文字列の置き換えさえも簡単にできないC哀れ
0860デフォルトの名無しさん2011/02/14(月) 19:29:18
↑Perl忍者
0861デフォルトの名無しさん2011/02/14(月) 19:43:41
callocの使い方忘れちゃったんだけど見直したら思い出すレベルだったらおk?
0862デフォルトの名無しさん2011/02/14(月) 19:44:38
>>861
おk。環境にもよるけど、manを読めればますますおk。
08638362011/02/14(月) 20:06:46
>>837
ありがとう
08648362011/02/14(月) 20:09:12
>>838
ヒープは低位メモリから、スタックは高位メモリから
確保されるらしいです。
そのあたりの違いを知りたくて。
0865デフォルトの名無しさん2011/02/14(月) 21:23:11
>>864
メモリの確保方法はコンパイラを作る人の自由
0866デフォルトの名無しさん2011/02/14(月) 21:28:24
>>864
heap grows up & stack grows down になるよう作れば
そのようになるってだけの話。
アーキテクチャのマニュアルに必ず明記されてるので
それを確認すればいいよ。
0867デフォルトの名無しさん2011/02/14(月) 22:01:00
>>830-832
いや、それ未定義だったら

int a[10];
int i;
for(i = 0; i < sizeof(a)/sizeof(a[0]); i++){
...
}

も未定義になるんじゃないか。

そうだったら困るよ、この手のコード山ほど書いてきたから。
0868デフォルトの名無しさん2011/02/14(月) 22:07:07
>>867
俺も困る
下記のコードがNGだから、sizeof演算子はアクセスしないって信じてます

sizeof(i++)
0869デフォルトの名無しさん2011/02/14(月) 22:11:33
>>867
大丈夫、ネタだって
GCCではARRAY_SIZEってマクロが同じ手法でlibiberty.hに定義されてるよ
0870デフォルトの名無しさん2011/02/14(月) 22:14:51
>>869
規格を語る時にgccを引き合いに出されても…
0871デフォルトの名無しさん2011/02/14(月) 22:19:43
◆QZaw55cn4cがまたやらかしたぞw

407 名前:404 ◆QZaw55cn4c [sage] 投稿日:2011/02/14(月) 22:15:20
>>406
C99 です。
codepad.org も gcc を C99 として使っているようで、だから、>>400 でもコンパイル時のエラーが表示されていません。

C99 の新仕様は、手近のここを参照しました。
http://seclan.dll.jp/c99d/c99d07.htm#dt19990927 の 7-7
権威のある規格を教えていただけるとうれしいです。

C99でCの宿題をあくまでもやると言い出したww
0872デフォルトの名無しさん2011/02/14(月) 22:27:23
>>867
i=0って初期化してるやん
0873デフォルトの名無しさん2011/02/14(月) 22:27:35
高卒低学歴のくせにこんなことを言い出す◆QZaw55cn4c

236 : ◆QZaw55cn4c :2011/02/14(月) 21:47:30
>>234
そうですか?「学食大盛り一杯分」あたりを狙ってみたんですが。
0874デフォルトの名無しさん2011/02/14(月) 22:40:04
415 名前:デフォルトの名無しさん[sage] 投稿日:2011/02/14(月) 22:27:10
おまいら細かいだろ、
ここは学校の課題をこなすところだぞ

416 名前:デフォルトの名無しさん[sage] 投稿日:2011/02/14(月) 22:27:56
>>415==◆QZaw55cn4c
通らないソースを呈示されても学生はかえって迷惑するだけなんですけど

417 名前:デフォルトの名無しさん[sage] 投稿日:2011/02/14(月) 22:28:06
>>412
それは流石に言いがかり
難癖つけたい気持ちは分かるが>>392の環境がgccなんだからgccで通ればOK
やるなら、gccのver xxで動きませんとか言わないと

>[3] 環境
> [3.1] OS:Linux
> [3.2] コンパイラ名とバージョン:gcc
> [3.3] 言語:C

418 名前:デフォルトの名無しさん[sage] 投稿日:2011/02/14(月) 22:29:38
>>417==◆QZaw55cn4c

419 名前:415[sage] 投稿日:2011/02/14(月) 22:29:44
おれ、ちがうぞ。学生だし

420 名前:デフォルトの名無しさん[sage] 投稿日:2011/02/14(月) 22:30:40
>>419==◆QZaw55cn4c
もうね、、、

421 名前:415[sage] 投稿日:2011/02/14(月) 22:32:20
>>420==◆QZaw55cn4c
おこったぞー、やりかえしてやるー
0875デフォルトの名無しさん2011/02/14(月) 22:46:11
>>870
あっゴメン、そういう流れだったのか

以下、JIS X3010:2003(ISO/IEC 9899:1999) 6.5.3.4 sizeof演算子 辺りより抜粋

オペランドの型が可変長配列型である場合は、オペランドを評価する。そうでない場合、
オペランドは評価せず、その結果は、整数定数とする。

例2. sizeof演算子のもう一つの用途は、次のようにして配列の要素の個数を求めることである。
sizeof array / sizeof array[0]

でいいかな?
0876デフォルトの名無しさん2011/02/14(月) 22:50:12
>>875
なるほど、今までのコードは安全だけど、可変長は駄目ってことだな。
ってことは、その例もarrayが可変長だと評価されてしまってNGになるってことか。
0877デフォルトの名無しさん2011/02/14(月) 22:51:04
当然
0878デフォルトの名無しさん2011/02/14(月) 22:55:45
初心者ですが質問します。
型は基本的にはint,double,charのみでいいんでしょうか
もちろんサイズなどもあるとおもいますが
解答よろしくお願いします。
0879デフォルトの名無しさん2011/02/14(月) 22:57:02
はいそれでいいです
0880デフォルトの名無しさん2011/02/14(月) 23:01:12
>>879
ありがとうございます
0881デフォルトの名無しさん2011/02/14(月) 23:04:16
>>879
ちょ、おま
0882デフォルトの名無しさん2011/02/14(月) 23:04:35
教えてエロい人
初期化してない変数へのアクセスってsizeofでも未定義なの?

typedef xxx foo;

foo *p;
sizeof( *p ); /* pは初期化してない */
0883デフォルトの名無しさん2011/02/14(月) 23:07:19
ホントくどいね
0884デフォルトの名無しさん2011/02/14(月) 23:07:48
恥ずかしい過去w
0885デフォルトの名無しさん2011/02/14(月) 23:10:28
「sizeofでアクセス」に突っ込まれる
↓
「は?可変長配列も含む話だしw」

で、その話はまだ続いてるようだが
0886デフォルトの名無しさん2011/02/14(月) 23:11:33
>>885
875で終わってる
0887デフォルトの名無しさん2011/02/14(月) 23:12:55
>>886
恥ずかしかったのは分かるよ
0888デフォルトの名無しさん2011/02/14(月) 23:13:31
餌でかすぎ
つーか、しつこい!
0889デフォルトの名無しさん2011/02/14(月) 23:14:03
で、結局sizeofは未定義なの?
0890デフォルトの名無しさん2011/02/14(月) 23:14:59
>>888
うんうん、恥ずかしいよね^^
餌デカイけど我慢してね^^

教えてエロい人
初期化してない変数へのアクセスってsizeofでも未定義なの?

typedef xxx foo;

foo *p;
sizeof( *p ); /* pは初期化してない */
0891デフォルトの名無しさん2011/02/14(月) 23:16:33
あぁ、可変長配列という逃げがあったわけね
0892デフォルトの名無しさん2011/02/14(月) 23:17:19
>>890
xxx次第
0893デフォルトの名無しさん2011/02/14(月) 23:17:27
ISOれks
0894デフォルトの名無しさん2011/02/14(月) 23:19:35
1時間でも2時間でもクンニし続けるタイプ
0895デフォルトの名無しさん2011/02/14(月) 23:19:37
>>892
可変の入り込む余地ないだろ
0896デフォルトの名無しさん2011/02/14(月) 23:19:51
>>892
あぁ、あれね。可変長配列を後出しにするんでしょ?分かってるよw
0897デフォルトの名無しさん2011/02/14(月) 23:20:56
>>894
頑張って餌に食らい付けよsizeof君
0898デフォルトの名無しさん2011/02/14(月) 23:21:16
>>876
確信ないけど、可変長配列でも大丈夫なような気がする。
「オペランドを評価する」というのは、静的=コンパイル時決定ではなく
動的=実行時決定のこと言ってるんだと思う。
もう一度言っておくと確信ないからね。
誰か原文(ISO/IEC 9899:1999)読んでフォローしてくれ。
0899デフォルトの名無しさん2011/02/14(月) 23:25:03
>>862
遅れましたがありがとうございました。
0900デフォルトの名無しさん2011/02/14(月) 23:25:09
可変長配列だと>>890は未定義になるの?
>>810にはそんなことが書いてあるけど
0901デフォルトの名無しさん2011/02/14(月) 23:25:25
>>898
sizeof array
↑って実行時評価だろ
sizeof array[0]
問題は↑が実行時評価になるかどうかだ
実装する上では素直にコンパイル時評価のはずだが、
規格を読むだけでは、どちらとでも取れるからな…
0902デフォルトの名無しさん2011/02/14(月) 23:26:12
>>897
よう、なめ達磨
0903デフォルトの名無しさん2011/02/14(月) 23:27:19
面白いねー
0904デフォルトの名無しさん2011/02/14(月) 23:28:49
あなたが解けないC言語/C++言語の問題を ◆QZaw55cn4c が有償で片付けるスレッドです。

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

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

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

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

ただし、最大限ご希望に応じたいと考えていますので、修正希望があれば、トリップを使用して投稿してください。
修正希望回数は、最大3回を目安としてください。3回を超えて修正を希望する場合は、新規に質問を投稿しなおしてください。
いずれも場合も、修正に応じることを保障するものではありません。
0905デフォルトの名無しさん2011/02/14(月) 23:29:52
sizeof演算子不要説
0906デフォルトの名無しさん2011/02/14(月) 23:31:13
>>905
それはない
0907デフォルトの名無しさん2011/02/14(月) 23:34:02
>>903
ぺろぺろぺろぺろ
09089052011/02/14(月) 23:34:26
>>906
ごめん、ネタで書いただけなんだけど、気分を害してしまったようですね。
sizeofは私も使ってるので、不要だと思ったことは一度もないです。
レス数が900を超えています。1000を超えると表示できなくなるよ。