C言語なら俺に聞け 142 [無断転載禁止]©2ch.net

レス数が1000を超えています。これ以上書き込みはできません。
1デフォルトの名無しさん 転載ダメ©2ch.net (ワッチョイ 8a6f-bDrV)
垢版 |
2017/08/10(木) 20:21:23.44ID:hEocmkh50
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf

C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html

C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/

JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/


http://mevius.2ch.net/test/read.cgi/tech/1500293207/
http://www.geocities.jp/c_cpp_cs/about_c/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
917デフォルトの名無しさん (ワッチョイ 7a87-DwBb)
垢版 |
2017/10/23(月) 19:25:26.97ID:nagTo3YF0
>>915
そこって、デバッガがCPUレジスタ参照する為の窓だから、プログラムがその領域指すと、デバッグが困難になるから禁止してるんじゃね?
918デフォルトの名無しさん (ワッチョイ 7a87-DwBb)
垢版 |
2017/10/23(月) 19:29:22.87ID:nagTo3YF0
デバッガー専用の作業メモリー領域もプログラムから使用禁止だったりするだろ?
919デフォルトの名無しさん (ワッチョイ c575-G561)
垢版 |
2017/10/23(月) 19:30:14.37ID:HemzWECS0
レクサスRXに見えた
2017/10/23(月) 20:21:25.70ID:WoZMAj8B0
>>917
その通りだと思うよ
2017/10/23(月) 20:22:52.11ID:WoZMAj8B0
>>916
sfrをアクセス禁止領域に置いてどーすんだよw
922デフォルトの名無しさん (ワッチョイ 7a87-DwBb)
垢版 |
2017/10/23(月) 20:30:23.77ID:nagTo3YF0
>>921
アクセス禁止じゃねーよw
使用禁止だ。
デバッガー使わないなら好きに使えばいい。
923デフォルトの名無しさん (ワッチョイ 7a87-DwBb)
垢版 |
2017/10/23(月) 20:37:44.96ID:nagTo3YF0
あ、レス間違えたわw
2017/10/24(火) 03:02:06.36ID:75BFZUbG0
int i=1,n
n=i/2*2

n=0になる理由教えてください
2017/10/24(火) 03:50:48.19ID:senjN+vb0
int型は小数が扱えないので0方向に丸められる
2017/10/24(火) 05:57:30.66ID:2rmlfNW20
>>924 https://ideone.com/HQ4Zos
2017/10/24(火) 06:48:50.75ID:kt50Dt6N0
負の除算の丸め方は処理系依存
2017/10/24(火) 07:33:37.46ID:VjHIGh6G0
左結合で i/2 の後に *2 が処理される

整数どおしの除算なので丸めが発生
丸めた値に 乗算が行われる
2017/10/24(火) 07:45:07.35ID:75BFZUbG0
おおおお!
なるほど!ありがとうございます!
2017/10/24(火) 12:07:36.73ID:SPAXueit0
int func(int) は、引数が int 型で、int 型の値を返す関数
int func(void) は、引数が無しで、int 型の値を返す関数

というのは分かったのですが

int func() のように () の中が空の場合は、どうゆう意味になりますか?
int func(void) と同じ?
931デフォルトの名無しさん (ガックシ 06ee-G561)
垢版 |
2017/10/24(火) 12:12:42.21ID:b8RDVE7X6
https://i.imgur.com/DWw6T08.png
2017/10/24(火) 12:24:20.33ID:SPAXueit0
わかりました、ありがとうございます
2017/10/24(火) 12:51:09.78ID:k+hUXLmG0
>>931
包茎手術じゃなくて脱毛で良かったな
934デフォルトの名無しさん (ワッチョイ 8dd2-U5aN)
垢版 |
2017/10/24(火) 13:44:26.08ID:/a/Ldfbw0
DMAでも使うならともかく
レジスタをメモリ空間にマッピングする利点なんてないだろ
2017/10/24(火) 13:58:10.44ID:48RRVnNoM
PCI以降DMAでデータ転送なんてのは無い。
あるのはバースト転送モードだ。

当然、転送に必要なレジスタはメモリにマッピングされている。
936デフォルトの名無しさん (ササクッテロラ Sp85-DwBb)
垢版 |
2017/10/24(火) 14:14:56.50ID:gWGoT/ywp
>>934
むしろデメリットさえあるな。だからデバッガが使う以外は利用されてないだろ?
937デフォルトの名無しさん (ワッチョイ cee7-h3yZ)
垢版 |
2017/10/24(火) 14:24:36.56ID:fybDUnFS0
ふふ、トヨ〇の要求。今は知らん。
938デフォルトの名無しさん (ガックシ 06ee-G561)
垢版 |
2017/10/24(火) 16:20:50.45ID:b8RDVE7X6
まだやってたのかよレジスタ
939デフォルトの名無しさん (ササクッテロラ Sp85-DwBb)
垢版 |
2017/10/24(火) 18:07:58.27ID:gWGoT/ywp
内部レジスタと外部レジスタは意味がまるっきり違うんだがなぁ
2017/10/24(火) 18:48:56.59ID:ffssQfLj0
>>939
二重帳簿やっているように聞こえる
2017/10/25(水) 01:31:11.21ID:a9TiLHl10
>>930
同じなんだけどコンパイル時の引数チェックをしなくなる。
int func(void) の関数に対して func(123) みたいにして呼ぶとコンパイルエラーだが
int func() の関数に対して func(123) で呼び出す記述があってもエラーにならない。

なんでこうなっているのかというと、昔のCにはvoidがなくて引数なしの関数は
int func() のように書くしか方法がなく、尚且つ昔のC言語は引数のチェックを
していなかったため。つまり過去のC言語ソースをコンパイルできるようにする
ためにこのような記述が残されている。今となっては余程の事がない限りこんな
書き方はしない方が良い。バグの元だ。
942デフォルトの名無しさん (ワッチョイ cee7-LaKm)
垢版 |
2017/10/25(水) 15:47:29.67ID:Ls3qnFv30
ヤフー知恵袋って色んな奴がC言語勉強してるやつがいるな、素人みたいな質問やら専門的な質問や大学の問題の質問やらのプログラミング質問が
943デフォルトの名無しさん (ワッチョイ 51c9-aYWJ)
垢版 |
2017/10/25(水) 17:13:54.92ID:3egWGIK90
>>941

へーへー
2017/10/25(水) 18:14:39.48ID:2J1yyAIT0
https://ideone.com/0GCZnF
がエラーになるのですが、
どうすればいいでしょうか?
2017/10/25(水) 18:15:57.84ID:16XMr+7o0
DDOS攻撃してサイト毎潰す
946デフォルトの名無しさん (ワッチョイ cee7-LaKm)
垢版 |
2017/10/25(水) 18:20:37.33ID:Ls3qnFv30
>>944
まず何のプログラミングか言わなきゃダメでしょうみんなプロだから挙動で読めちゃう人いるけどさ
947デフォルトの名無しさん (ワッチョイ c575-G561)
垢版 |
2017/10/25(水) 18:28:36.51ID:Ho4Id2OA0
>>944
printfでNULL->valueをしてるから
2017/10/25(水) 18:35:07.38ID:2J1yyAIT0
>>946
>>947
hoge()でdata->valueに値をセットしたいです。
10を表示したいです。
2017/10/25(水) 19:06:17.58ID:N2zX2Cru0
void hoge(data_t **data, int value) {
 *data = NULL;
 *data = malloc(sizeof(data_t));
 if (data == NULL) return;
 (*data)->value = value;
}

呼び出しを
 hoge(&data,10);

これではどうか
2017/10/25(水) 19:07:10.40ID:N2zX2Cru0
if (*data == NULL) return;

ここ間違えた、訂正
2017/10/25(水) 19:12:01.89ID:2J1yyAIT0
>>949
ありがとうございます。
できました!超天才!
952デフォルトの名無しさん (ワッチョイ c575-G561)
垢版 |
2017/10/25(水) 19:16:50.46ID:Ho4Id2OA0
そういうことか
全然分からんかった
引数に受け渡されたポインタ変数のコピーに新しく確保したメモリのアドレス入れても呼び出し元のポインタ変数はなんも変化しないのか
2017/10/25(水) 19:21:03.77ID:BohOgQqE0
引数で int の変数を書き換えても 呼び出し元には伝わらない それの延長線
int を data_t* に読み替えれば同じ理屈よ
954デフォルトの名無しさん (ワッチョイ cee7-LaKm)
垢版 |
2017/10/25(水) 20:39:40.86ID:Ls3qnFv30
俺の頭じゃあ理解できなかったわアロー関数は苦手だ、ここには天才がやっぱいるわ
2017/10/25(水) 22:59:11.01ID:SHE9E59e0
この程度でプロとか天才とかw レベル低っ
2017/10/25(水) 23:31:22.55ID:A9sEwxck0
追い詰められてる時って、ちょっとしたことを見落としたりしがちだし。
そういうときにちょっとしたつまらない問題点を指摘してくれる人が神様に思えることはある。
本当に何でこれに気づかない?って問題に延々と気づかないことあるから。
2017/10/26(木) 01:05:20.57ID:WmOJzpQL0
実務の世界だと、開発リーダーにとっては、この程度はさらさらと書いて欲しいと思うだろうな
この辺の考え方が理解できてないと、構造体を使ったリスト構造、木構造が作れないと思う
958デフォルトの名無しさん (ワッチョイ 7102-rVGZ)
垢版 |
2017/10/26(木) 01:22:11.08ID:FPgm8C1h0
急に語り出したぞ、おい
959デフォルトの名無しさん (ワッチョイ 719f-a4mA)
垢版 |
2017/10/26(木) 03:22:11.49ID:kwyo2eDl0
リスト構造、木構造という言葉がわからなかったのかな?
2017/10/26(木) 03:35:02.17ID:ByFyiJTd0
分からなくてもググれば速攻定義出ますがな
2017/10/26(木) 06:24:41.35ID:8UQnYlEC0
>>944 からの流れだとすると、実務で使う人とは感じなかったな。
専門外の学生さんが単位を取るために四苦ハック、
進級できたら思い出しもしない、という立場からの質問だろうと。
962デフォルトの名無しさん (ガックシ 068b-rVGZ)
垢版 |
2017/10/26(木) 10:26:24.17ID:Z8IKw2VS6
リスト構造木構造とか理系大学の情報系科目で誰でもやるがな
こんなところ見てる奴が知らんわけないだらアホ
963デフォルトの名無しさん (ササクッテロラ Sp9d-aRZk)
垢版 |
2017/10/26(木) 10:46:18.77ID:DmfMCHFwp
リストもツリーも基本の構造は一緒だろ。
ただ、鎖ね繋がってる数が違うから、
扱いが違うだけでな。
2017/10/26(木) 12:26:11.84ID:nuX2FTeTa
文系経済学部ですわ
2017/10/26(木) 12:46:06.22ID:oyaJ8gC3M
>>962
> こんなところ見てる奴が知らんわけないだらアホ
>>952みたいな奴もいるのに何を言ってるんだよ w
966デフォルトの名無しさん (ガックシ 068b-rVGZ)
垢版 |
2017/10/26(木) 12:51:34.13ID:jbwuNtau6
>>965
リスト構造とか知ってるからってポインタ受け渡しのトリックに気付くとは限らんだろ
2017/10/26(木) 13:41:10.56ID:VaLFaSbf0
怪しくなったら戻り値で返せ
2017/10/26(木) 14:50:55.37ID:ujDNQjK/M
そういうときに限って二つ返したくなる
969デフォルトの名無しさん (ワッチョイ 1be7-J/p5)
垢版 |
2017/10/26(木) 18:29:14.01ID:l+WAoJAx0
自分の知ってる関数解ってる宣言の仕方ならわかるけどさ解らない奴使ってたらもう変数が動いてるかわからんだろう
そうなったらもう謎でコードなんか読めないだろ?
2017/10/26(木) 18:40:00.02ID:6866r+hk0
んなこたぁ、ない
2017/10/26(木) 18:44:09.81ID:AI1MxGuX0
引数の書き戻し系は 渡すときに値を必要としてるのかどうかは仕様次第なので 少し気を使う
972デフォルトの名無しさん (ササクッテロラ Sp9d-jmG0)
垢版 |
2017/10/26(木) 20:03:01.42ID:DmfMCHFwp
それより、そのアドレスはアクセス権のある場所を指してるんだよな?
2017/10/26(木) 21:41:04.91ID:oyaJ8gC3M
>>966
レベルの問題
> リスト構造とか知ってるからってポインタ受け渡しのトリックに気付くとは限らんだろ
そんな奴がいないとは言わないがそう言う奴はごろごろいるとは思えないだろ
974デフォルトの名無しさん (ワッチョイ d175-rVGZ)
垢版 |
2017/10/26(木) 21:42:34.03ID:Fjma9sq90
とりまリスト構造なんて誰でもしってること
>>959のレスはイミフ
2017/10/27(金) 03:11:40.50ID:QY+Fa/Ak0
>>966
これはトリック、か?
2017/10/27(金) 06:49:46.56ID:VPed4ksO0
「関数の引数に値渡ししかないから、
ポインタを渡すことで呼出側の変数の内容を関数側で変更する」
というのが他の言語と比較した場合、C特有のトリックと呼べるかも。

もちろん、Cの村では当然かつ基本のことだけど。
977デフォルトの名無しさん (ワッチョイ 1387-jmG0)
垢版 |
2017/10/27(金) 08:36:39.71ID:JYNAFOfl0
たくさん値を返したいなら、
戻り値を型宣言した構造体にしたらいい。
2017/10/27(金) 09:39:08.11ID:a5gmSSmH0
残念だったな、トリックだよ
979デフォルトの名無しさん (ワッチョイ 1be7-DRuk)
垢版 |
2017/10/27(金) 09:42:57.69ID:Q7q08ysx0
>>977
autoでもできるのですか?
980デフォルトの名無しさん (ササクッテロラ Sp9d-jmG0)
垢版 |
2017/10/27(金) 09:57:16.24ID:CUGbjFhkp
ああ、昔はauto変数に取った構造体を戻り値にして割り込み系で散々な目に遭ったよな。
あれは言語仕様に沿って無いコンパイラが悪いんだがな。
2017/10/27(金) 10:00:31.70ID:v/FEPkkV0
古いコンパイラではNGだったけど
構造体の引数での値渡し、戻り値での値戻しは可能
982デフォルトの名無しさん (ササクッテロラ Sp9d-jmG0)
垢版 |
2017/10/27(金) 10:18:09.15ID:CUGbjFhkp
古くなくてもニッチな環境では要注意だ。
コンパイラの吐き出すコードが言語仕様に沿って無い場合がある。
2017/10/27(金) 10:27:32.22ID:8fSPZcAJ0
>>976
トリックと言うか他の言語ではコンパイラがやってることをアセンブラやCでは明示的に書くと言うだけ
2017/10/27(金) 13:06:16.96ID:v/FEPkkV0
>>982
なんてこったw
ニッチな環境だとメンテもされてないことあるだろうしねー
2017/10/27(金) 15:36:47.12ID:dGyUnw2Y0
ホワイトスミスなんて、printfすら無いような処理系作って
いた人がANSIの役員していて2度びっくり
986デフォルトの名無しさん (ワッチョイ 1be7-DNJs)
垢版 |
2017/10/27(金) 18:41:59.37ID:BvMxy0d+0
C言語のポインタで
int *a;
int b;
a = 10;
これは理解できるんだけど
a = &b;
*a = 10;
これはどうなってるん?aにアドレス入ってるのにどうやって10を送ってるん?
2017/10/27(金) 18:47:48.96ID:/LUCvRWS0
> int *a;
> a = 10;
> これは理解できるんだけど
説明できるのなら その先も分かるはず
2017/10/27(金) 18:49:13.82ID:xRxq9X9wd
>>986
> int *a;
> int b;
> a = 10; //エラー。ポインタに整数は代入できない。そもそも全角文字と半角文字を間違っている。
> a = &b;
> *a = 10;
アスタリスク(*)で実体の整数データを手繰り寄せているイメージね。
989デフォルトの名無しさん (ワッチョイ 1be7-DNJs)
垢版 |
2017/10/27(金) 18:55:00.02ID:BvMxy0d+0
>>988
*aで中にあるアドレスで探って送ってるイメージ?
2017/10/27(金) 18:57:22.58ID:xRxq9X9wd
うん。アスタリスクを付ければ、アドレス先への代入になる。

ポインタにゼロ以外の整数は代入できないに訂正。
991デフォルトの名無しさん (ササクッテロラ Sp9d-jmG0)
垢版 |
2017/10/27(金) 19:14:00.54ID:CUGbjFhkp
宣言とフィールドで意味の違う*が悪い。
2017/10/27(金) 19:16:29.79ID:t/XrhBpFM
アーキテクチャとアセンブリ言語勉強するのが早道な気がする
2017/10/27(金) 19:19:35.75ID:t/XrhBpFM
>>991
意味は同じだよ。*aがintだと宣言してるから整合してる。
初期化構文がちょいと怪しいが。
994デフォルトの名無しさん (ササクッテロラ Sp9d-jmG0)
垢版 |
2017/10/27(金) 19:21:42.60ID:CUGbjFhkp
>>993
宣言ではポインタである事を表すが、
フィールドでは、掛け算記号だったり、ポインタの内容だったりするだろ?
995デフォルトの名無しさん (ワッチョイ 1be7-DNJs)
垢版 |
2017/10/27(金) 19:56:47.39ID:BvMxy0d+0
char *c;
int *a;
この二つはポインタだけど使い方が違うのか?
2017/10/27(金) 20:00:41.33ID:xRxq9X9wd
sizeof(*c) == sizeof(char)で、
sizeof(*a) == sizeof(int)だ。
2017/10/27(金) 20:11:43.60ID:HlvRN0vUF
Cの文法特にポインタ宣言周辺は、
頭が悪いと読めないよう定められてる。

ソフトウェア開発は馬鹿でも手伝わせる
必要があるくらい人手不足なのに、
なんでこんな文法にしたのか不思議。
2017/10/27(金) 20:21:32.42ID:3Ly7XcHr0
えっ、Cの由来を知らないの?
2017/10/27(金) 20:26:24.89ID:xRxq9X9wd
次スレお願い
2017/10/27(金) 21:22:14.66ID:zFbk1AXy0
あぼーん
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 78日 1時間 0分 51秒
レス数が1000を超えています。これ以上書き込みはできません。