- 1 名前:デフォルトの名無しさん [2020/09/28(月) 14:41:30.00 ID:QxfbhGyV0.net]
- !extend:checked:vvvvv:1000:512
(新スレ立ての際上記コマンドを2行書き込んでください) C言語の話題のみ取り扱います C++の話題はC++スレへ 質問には最低限の情報(ソース/コンパイラ/OS)を付ける 数行で収まらないソースは以下を適当に使ってURLを晒す https://paiza.io/ https://ideone.com/ codepad.org/ C11 www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf C99 www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf kikakurui.com/x3/X3010-2003-01.html C FAQ 日本語訳 www.kouno.jp/home/c_faq/ JPCERT C コーディングスタンダード https://www.jpcert.or.jp/sc-rules/ ※前スレ C言語なら俺に聞け 155 https://mevius.5ch.net/test/read.cgi/tech/1589120427/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
- 982 名前:デフォルトの名無しさん mailto:sage [2021/06/21(月) 23:06:35.04 ID:jHz8GYW10.net]
- // b.c
int b[] = {123, 456}; // a.c #include <stdio.h> int a[] = {123, 456}; int main() { extern int *b; printf("val b\n"); printf("%d\n", *(b + 1)); // printf("val a\n"); // printf("%d\n", *(a + 1)); return 0; } こういう分割ソースをコンパイル、リンクして実行すると、何も表示無しで終了する デバッガー使って実行してみると、SEGVになってる 分割せず、コメント部分のaの表示だけにすると、動く 院生の人、何故かを説明して
- 983 名前:デフォルトの名無しさん mailto:sage [2021/06/21(月) 23:10:51.91 ID:imPHrgSTa.net]
- こういうの、昔 柴田何某のポインタ本で勉強したけど、みんな忘れたな…
- 984 名前:デフォルトの名無しさん mailto:sage [2021/06/22(火) 02:41:53.17 ID:UBIESj0w0.net]
- extern int b[];にすると動いたから配列型とポインタ型の違いっぽい
- 985 名前:デフォルトの名無しさん mailto:sage [2021/06/22(火) 06:19:00.39 ID:jiZrgPwV0.net]
- 配列とポインタを混同するなと教えるときの典型的なサンプルだね
- 986 名前:デフォルトの名無しさん mailto:sage [2021/06/22(火) 22:30:25.89 ID:dO7B5XH7a.net]
- 外部りんけーじだと、bのメモリに配置されているのが値なのかポインタなのか分からないからかな
この場合、使用側はbに配置されたのがポインタと決めつけてるけど、実態は値だから?
- 987 名前:デフォルトの名無しさん mailto:sage [2021/06/23(水) 00:13:40.21 ID:4uPMP2M7M.net]
- int b[] = {123, 456};
*b で期待されるのは b=&123; b[] で期待されるのは b[2]={123,456} b[]の中身をスタックに積んだ後に*bの場合必要ないからextern更新して無いんじゃね?
- 988 名前:デフォルトの名無しさん mailto:sage [2021/06/23(水) 05:17:30.22 ID:m16dmNKT0.net]
- 現象としてはコンパイル後のアセンブリを見ればいいけど, 一般論としてはODR違反だからどう扱おうがコンパイラの自由だとしか
- 989 名前:デフォルトの名無しさん mailto:sage [2021/06/23(水) 06:27:58.72 ID:rIfoeFmJ0.net]
- >>980
ここはCスレなのでCで表現してくれ オレ語じゃわからん
- 990 名前:デフォルトの名無しさん mailto:sage [2021/06/23(水) 12:05:27.59 ID:qvRJvNKF0.net]
- >>982
アホは無理して答えなくていいぞ
- 991 名前:デフォルトの名無しさん mailto:sage [2021/06/23(水) 12:26:06.31 ID:5TaXVwksM.net]
- extern int *b; じゃスタックに何も積んだりしないしどう見ても>>980がアホなんですが
- 992 名前:デフォルトの名無しさん mailto:sage [2021/06/24(木) 12:32:06.50 ID:OZF9neOD0.net]
- >>983
自己紹介乙
- 993 名前: mailto:sage [2021/06/24(木) 19:56:26.10 ID:i6kIKJxB0.net]
- >>980
>&123 お前、何をいっているんだ? ちゃんと日本語とC言語で記述しろ、馬鹿、死ね
- 994 名前:デフォルトの名無しさん mailto:sage [2021/06/24(木) 20:21:39.46 ID:y6Bfeav/M.net]
- じゃあ
b&=123; でお願いしまつ。
- 995 名前:デフォルトの名無しさん mailto:sage [2021/06/24(木) 20:45:24.69 ID:alz36GlD0.net]
- ビットandしながら代入
- 996 名前:デフォルトの名無しさん mailto:sage [2021/06/25(金) 15:41:59.61 ID:rcGmQQfw0.net]
- 2進で 0111 1011 か
マスクでありそうなパターンだ
- 997 名前:デフォルトの名無しさん mailto:sage [2021/06/25(金) 17:37:21.28 ID:+QaNJXlp0.net]
- 127より4小さい数か
- 998 名前:デフォルトの名無しさん mailto:sage [2021/06/25(金) 19:59:22.30 ID:jSzR7q5R0.net]
- ビット and ラーン
- 999 名前:デフォルトの名無しさん mailto:sage [2021/06/25(金) 23:07:19.68 ID:crztuVLoM.net]
- (int)123を.data sectionに置きアドレスを取得する方法。
- 1000 名前:デフォルトの名無しさん [2021/06/26(土) 02:00:51.59 ID:RjjpcdnV0.net]
- int a[] = { 123 };
って初期化すれば a が (int) 123 の入っている先頭アドレスになる。 もちろん *a が作られたわけではないので a に対しては代入できない。 あくまでも a を使おうとすると 123 の入っているアドレスに置き換わるだけ。
- 1001 名前:デフォルトの名無しさん mailto:sage [2021/06/26(土) 07:06:52.87 ID:MV3qzcHy0.net]
- キャストしなくても元々intだろうが
- 1002 名前:デフォルトの名無しさん [2021/06/26(土) 14:00:05.06 ID:RjjpcdnV0.net]
- 気分の問題。
- 1003 名前:デフォルトの名無しさん mailto:sage [2021/06/28(月) 09:33:23.09 ID:so+vl3vs0.net]
- printf("%d", sizeof (char)123); とやろうとしたら
キャストのカッコがsizeofのカッコと解釈されてエラーになるのな printf("%d", sizeof((char)123)); ならおkなんだけど なんだか気持ち悪い
- 1004 名前:デフォルトの名無しさん mailto:sage [2021/06/28(月) 10:13:18.97 ID:x/UkG1ge0.net]
- >>996
sizeofって括弧なしで使えるの? 知らなかった
- 1005 名前:デフォルトの名無しさん mailto:sage [2021/06/28(月) 10:20:43.69 ID:WejOUFlX0.net]
- >>996
sizeof演算子の優先順位はcast演算子の優先順位より高いので、括弧がないと まず最初にsizeofと数値リテラルが評価されてその後でその結果をcastで評価するという おかしな状態になるのでエラーになったのでは?
- 1006 名前:デフォルトの名無しさん mailto:sage [2021/06/28(月) 10:38:03.51 ID:so+vl3vs0.net]
- sizeofとキャストはどちらも単項式なので右から結合するはず
にも関わらずキャストが先に読まれないので気持ち悪いと言ったんだ 字句解析と意味解析ってことかな
- 1007 名前:デフォルトの名無しさん [2021/06/28(月) 11:05:48.75 ID:HW6dR9O/0.net]
- そもそも
sizeof (char) だけでいいものをそう記述してるのが気持ち悪い。
- 1008 名前:1001 [Over 1000 Thread.net]
- このスレッドは1000を超えました。
新しいスレッドを立ててください。 life time: 272日 20時間 24分 19秒
- 1009 名前:過去ログ ★ [[過去ログ]]
- ■ このスレッドは過去ログ倉庫に格納されています
|

|