C言語なら俺に聞け(入門編)Part 78
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001デフォルトの名無しさん
2011/02/06(日) 18:33:49★前スレ
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:580810デフォルトの名無しさん
2011/02/14(月) 06:58:04>>803が未定義だと、突き詰めて考えれば>>790も未定義なるから、小出しに聞いただけ
で、結論を教えてプリーズ
0811デフォルトの名無しさん
2011/02/14(月) 06:59:210813デフォルトの名無しさん
2011/02/14(月) 07:01:590814デフォルトの名無しさん
2011/02/14(月) 07:03:30ネタを小出しに脹らませていけば、誰か調べてくれるかなと…
みんな興味あるでしょ?
0815デフォルトの名無しさん
2011/02/14(月) 07:05:22みんな知ってます
0816デフォルトの名無しさん
2011/02/14(月) 07:06:36氏ね
0817デフォルトの名無しさん
2011/02/14(月) 07:08:32まぁ、そう言わずに教えてくれ
手元に規格書なくて、JISも見れんのよ
0818デフォルトの名無しさん
2011/02/14(月) 07:08:33ならねーよ馬鹿じゃねーの
そもそも>>790は可変長配列関係ないし、変数へのアクセスと型のサイズと静的動的がごっちゃになってるよ
0819デフォルトの名無しさん
2011/02/14(月) 07:10:550820デフォルトの名無しさん
2011/02/14(月) 07:13:000821デフォルトの名無しさん
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って糞だよなぁ
0823デフォルトの名無しさん
2011/02/14(月) 07:22:03foo *p;//未初期化のポ゚インタ
sizeof(*p);//アクセスによって未定義動作を引き起こす
0824デフォルトの名無しさん
2011/02/14(月) 07:27:01お前モナー
0825デフォルトの名無しさん
2011/02/14(月) 07:28:070826デフォルトの名無しさん
2011/02/14(月) 07:28:53ちゃんとトリップ付けて書き込めよクズ
0827デフォルトの名無しさん
2011/02/14(月) 07:38:31typedef xxx foo; /* sizeof(型名) を使いたくない */
foo s, *p;
p = &s;
sizeof( *p ); /* *pは初期化してない */
あげられている例でいえば、どちらも未定義でも処理系依存でもないですよ。
#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:190830デフォルトの名無しさん
2011/02/14(月) 07:49:57sizeof(a);//aは初期化されてないため未定義動作
0831デフォルトの名無しさん
2011/02/14(月) 07:53:13それ本当に未定義だったら嫌だな…
0832デフォルトの名無しさん
2011/02/14(月) 07:56:220833デフォルトの名無しさん
2011/02/14(月) 08:06:58xxx次第でしょ
typedef struct hoge{...};
typedef struct hoge xxx;
とかだったら処理系依存だし。
0834デフォルトの名無しさん
2011/02/14(月) 08:13:040835デフォルトの名無しさん
2011/02/14(月) 08:29:41typedef 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:230838デフォルトの名無しさん
2011/02/14(月) 17:23:520839デフォルトの名無しさん
2011/02/14(月) 18:04:10となっている配列からeだけを除去して、
w[5] = 'a,b,c,d'
にすることが出来ますか?
0840デフォルトの名無しさん
2011/02/14(月) 18:09:010841デフォルトの名無しさん
2011/02/14(月) 18:12:350842デフォルトの名無しさん
2011/02/14(月) 18:13:54どうやってしますか?
0843デフォルトの名無しさん
2011/02/14(月) 18:14:590844デフォルトの名無しさん
2011/02/14(月) 18:18:31すみません
わかりやすいように例をあげただけです。
0845デフォルトの名無しさん
2011/02/14(月) 18:19:17では言い換えましょう。
そもそも構文エラーです。
0846デフォルトの名無しさん
2011/02/14(月) 18:22:24char w[5] = {'a,b,c,d,e'}
こうですか?
0847デフォルトの名無しさん
2011/02/14(月) 18:25:340848デフォルトの名無しさん
2011/02/14(月) 18:29:36構文エラーです。
0849デフォルトの名無しさん
2011/02/14(月) 18:30:06なるほど!
ありがとうございました!
0850デフォルトの名無しさん
2011/02/14(月) 18:34:57あなたは神ですね!
他のクズどもとは違いますね
0851デフォルトの名無しさん
2011/02/14(月) 18:36:220852デフォルトの名無しさん
2011/02/14(月) 18:36:48MS-DOS 時代は C とアセンブラをリンクしたりすることも多く、書籍も多かったのですが、たとえばWindows 上でアセンブラ由来のオブジェクトをリンクするような
書籍はみたことがないですね。cl にソースを吐かせて眺めることから着手するしかないかなあ。
0854デフォルトの名無しさん
2011/02/14(月) 18:51:46と無職の中年ジジイが申しております
使ってるソフトも多分全部割れ
0855デフォルトの名無しさん
2011/02/14(月) 18:54:190856デフォルトの名無しさん
2011/02/14(月) 19:09:45コンパイラ、アセンブラ、リンカ
0857デフォルトの名無しさん
2011/02/14(月) 19:19:33Cの痛いところを突かれて土方発狂ww
0858デフォルトの名無しさん
2011/02/14(月) 19:21:530859デフォルトの名無しさん
2011/02/14(月) 19:26:410860デフォルトの名無しさん
2011/02/14(月) 19:29:180861デフォルトの名無しさん
2011/02/14(月) 19:43:410862デフォルトの名無しさん
2011/02/14(月) 19:44:38おk。環境にもよるけど、manを読めればますますおk。
0863836
2011/02/14(月) 20:06:46ありがとう
0864836
2011/02/14(月) 20:09:12ヒープは低位メモリから、スタックは高位メモリから
確保されるらしいです。
そのあたりの違いを知りたくて。
0865デフォルトの名無しさん
2011/02/14(月) 21:23:11メモリの確保方法はコンパイラを作る人の自由
0866デフォルトの名無しさん
2011/02/14(月) 21:28:24heap grows up & stack grows down になるよう作れば
そのようになるってだけの話。
アーキテクチャのマニュアルに必ず明記されてるので
それを確認すればいいよ。
0867デフォルトの名無しさん
2011/02/14(月) 22:01:00いや、それ未定義だったら
int a[10];
int i;
for(i = 0; i < sizeof(a)/sizeof(a[0]); i++){
...
}
も未定義になるんじゃないか。
そうだったら困るよ、この手のコード山ほど書いてきたから。
0868デフォルトの名無しさん
2011/02/14(月) 22:07:07俺も困る
下記のコードがNGだから、sizeof演算子はアクセスしないって信じてます
sizeof(i++)
0869デフォルトの名無しさん
2011/02/14(月) 22:11:33大丈夫、ネタだって
GCCではARRAY_SIZEってマクロが同じ手法でlibiberty.hに定義されてるよ
0870デフォルトの名無しさん
2011/02/14(月) 22:14:51規格を語る時にgccを引き合いに出されても…
0871デフォルトの名無しさん
2011/02/14(月) 22:19:43407 名前: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:23i=0って初期化してるやん
0873デフォルトの名無しさん
2011/02/14(月) 22:27:35236 : ◆QZaw55cn4c :2011/02/14(月) 21:47:30
>>234
そうですか?「学食大盛り一杯分」あたりを狙ってみたんですが。
0874デフォルトの名無しさん
2011/02/14(月) 22:40:04おまいら細かいだろ、
ここは学校の課題をこなすところだぞ
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あっゴメン、そういう流れだったのか
以下、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なるほど、今までのコードは安全だけど、可変長は駄目ってことだな。
ってことは、その例もarrayが可変長だと評価されてしまってNGになるってことか。
0877デフォルトの名無しさん
2011/02/14(月) 22:51:040878デフォルトの名無しさん
2011/02/14(月) 22:55:45型は基本的にはint,double,charのみでいいんでしょうか
もちろんサイズなどもあるとおもいますが
解答よろしくお願いします。
0879デフォルトの名無しさん
2011/02/14(月) 22:57:020880デフォルトの名無しさん
2011/02/14(月) 23:01:12ありがとうございます
0881デフォルトの名無しさん
2011/02/14(月) 23:04:16ちょ、おま
0882デフォルトの名無しさん
2011/02/14(月) 23:04:35初期化してない変数へのアクセスってsizeofでも未定義なの?
typedef xxx foo;
foo *p;
sizeof( *p ); /* pは初期化してない */
0883デフォルトの名無しさん
2011/02/14(月) 23:07:190884デフォルトの名無しさん
2011/02/14(月) 23:07:480885デフォルトの名無しさん
2011/02/14(月) 23:10:28↓
「は?可変長配列も含む話だしw」
で、その話はまだ続いてるようだが
0886デフォルトの名無しさん
2011/02/14(月) 23:11:33875で終わってる
0887デフォルトの名無しさん
2011/02/14(月) 23:12:55恥ずかしかったのは分かるよ
0888デフォルトの名無しさん
2011/02/14(月) 23:13:31つーか、しつこい!
0889デフォルトの名無しさん
2011/02/14(月) 23:14:030890デフォルトの名無しさん
2011/02/14(月) 23:14:59うんうん、恥ずかしいよね^^
餌デカイけど我慢してね^^
教えてエロい人
初期化してない変数へのアクセスってsizeofでも未定義なの?
typedef xxx foo;
foo *p;
sizeof( *p ); /* pは初期化してない */
0891デフォルトの名無しさん
2011/02/14(月) 23:16:330892デフォルトの名無しさん
2011/02/14(月) 23:17:19xxx次第
0893デフォルトの名無しさん
2011/02/14(月) 23:17:270894デフォルトの名無しさん
2011/02/14(月) 23:19:350895デフォルトの名無しさん
2011/02/14(月) 23:19:37可変の入り込む余地ないだろ
0896デフォルトの名無しさん
2011/02/14(月) 23:19:51あぁ、あれね。可変長配列を後出しにするんでしょ?分かってるよw
0897デフォルトの名無しさん
2011/02/14(月) 23:20:56頑張って餌に食らい付けよsizeof君
0898デフォルトの名無しさん
2011/02/14(月) 23:21:16確信ないけど、可変長配列でも大丈夫なような気がする。
「オペランドを評価する」というのは、静的=コンパイル時決定ではなく
動的=実行時決定のこと言ってるんだと思う。
もう一度言っておくと確信ないからね。
誰か原文(ISO/IEC 9899:1999)読んでフォローしてくれ。
0899デフォルトの名無しさん
2011/02/14(月) 23:25:03遅れましたがありがとうございました。
0900デフォルトの名無しさん
2011/02/14(月) 23:25:09>>810にはそんなことが書いてあるけど
0901デフォルトの名無しさん
2011/02/14(月) 23:25:25sizeof array
↑って実行時評価だろ
sizeof array[0]
問題は↑が実行時評価になるかどうかだ
実装する上では素直にコンパイル時評価のはずだが、
規格を読むだけでは、どちらとでも取れるからな…
0902デフォルトの名無しさん
2011/02/14(月) 23:26:12よう、なめ達磨
0903デフォルトの名無しさん
2011/02/14(月) 23:27:190904デフォルトの名無しさん
2011/02/14(月) 23:28:49・モリタポ(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:520906デフォルトの名無しさん
2011/02/14(月) 23:31:13それはない
0907デフォルトの名無しさん
2011/02/14(月) 23:34:02ぺろぺろぺろぺろ
0908905
2011/02/14(月) 23:34:26ごめん、ネタで書いただけなんだけど、気分を害してしまったようですね。
sizeofは私も使ってるので、不要だと思ったことは一度もないです。
レス数が900を超えています。1000を超えると表示できなくなるよ。