!extend:checked:vvvvv:1000:512
(新スレ立ての際上記コマンドを2行書き込んでください)
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/
C17
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4713.pdf
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/
※前スレ
C言語なら俺に聞け 157
https://mevius.5ch.net/test/read.cgi/tech/1624846971/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
C言語なら俺に聞け 158
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ブーイモ MMcf-4SjH)
2021/12/25(土) 12:11:46.61ID:xxeaCAplM680デフォルトの名無しさん (ワッチョイ cf63-GGE9)
2022/06/13(月) 16:34:27.02ID:cwJzo4Jp0 nantoka()と呼び出した場合、
呼び出された関数は、
nanntoka(char adress)として
スタック上からadressを取り出そうとするが
ここにある値はNULLではなく、不定値(所謂ゴミ)
NULL判定で回避はできない
呼び出された関数は、
nanntoka(char adress)として
スタック上からadressを取り出そうとするが
ここにある値はNULLではなく、不定値(所謂ゴミ)
NULL判定で回避はできない
681デフォルトの名無しさん (スップ Sd1f-7fB6)
2022/06/13(月) 16:37:54.51ID:ir4nxYTVd >>678
Once again, once again, you're on your own
Who's to blame? who's to blame? it's such a shame
No-one ever hears your name, or plays your game
Once again, once again, you're on your own
Who's to blame? who's to blame? it's such a shame
No-one ever hears your name, or plays your game
682デフォルトの名無しさん (アウアウウー Sa67-MmlY)
2022/06/13(月) 18:45:35.75ID:+5MOS3Faa683デフォルトの名無しさん (スッップ Sd1f-asUV)
2022/06/13(月) 18:53:43.72ID:HsopZ7m+d グローバル変数 int exists_adress; を介してやれば引数あり/なし のモードを未定義動作を回避しつつ設定できそう
実用性など皆無だが
実用性など皆無だが
684デフォルトの名無しさん (スップ Sd1f-7fB6)
2022/06/13(月) 19:17:35.58ID:ir4nxYTVd >>682
読み出すまではできるだろ
戻りアドレスか関係ないレジスタの退避値が入っている
問題はここではエラーにならず次にこの値で何かしようとしたらクラッシュする可能性が高い
これは単にコンパイラを騙して原因がわかりにくいエラーを出す方法なだけ
全くなんの意味もない
読み出すまではできるだろ
戻りアドレスか関係ないレジスタの退避値が入っている
問題はここではエラーにならず次にこの値で何かしようとしたらクラッシュする可能性が高い
これは単にコンパイラを騙して原因がわかりにくいエラーを出す方法なだけ
全くなんの意味もない
685デフォルトの名無しさん (ワッチョイ cf63-GGE9)
2022/06/13(月) 19:21:03.88ID:cwJzo4Jp0 分からないなら、試して見れば良いのに
686デフォルトの名無しさん (アウアウウー Sa67-MmlY)
2022/06/13(月) 19:40:41.59ID:+5MOS3Faa687デフォルトの名無しさん (ワッチョイ cf63-GGE9)
2022/06/13(月) 19:46:28.66ID:cwJzo4Jp0 読み出さなければ、実行時エラーにならないだろう
なんで、なるの?
なんで、なるの?
688デフォルトの名無しさん (ワッチョイ cf63-GGE9)
2022/06/13(月) 19:48:48.04ID:cwJzo4Jp0 呼ばれた側の関数は、adressに入っている(はずの)値を使うんだぜ
コード吐かなければ、それこそコンパイラのバグになるぞ
コード吐かなければ、それこそコンパイラのバグになるぞ
689デフォルトの名無しさん (ワッチョイ cf63-GGE9)
2022/06/13(月) 19:52:23.50ID:cwJzo4Jp0 実際に呼び出すコードは、呼ばれた側の関数に実装されるが、
呼び出し側の引数セットありと、引数セット無しで、
違うコードが実行されたりするのか?
呼び出し側の引数セットありと、引数セット無しで、
違うコードが実行されたりするのか?
690デフォルトの名無しさん (ワッチョイ 2301-UmXv)
2022/06/13(月) 20:03:29.40ID:Q7R38T3J0 何が起こっても不思議ではない未定義派と、コンパイラ実装は実質こうなってる派で話が噛み合うはずがないと思うの。
691デフォルトの名無しさん (ワッチョイ cf63-GGE9)
2022/06/13(月) 20:05:01.34ID:cwJzo4Jp0 信仰と言うより、勘違いだろう
恥ずかしくて後に引けなくなった感じ
恥ずかしくて後に引けなくなった感じ
692デフォルトの名無しさん (ワッチョイ cf63-GGE9)
2022/06/13(月) 20:09:56.04ID:cwJzo4Jp0 引数セットするのは、呼び出し側
コンパイラが呼び出し側で引数がないと判定した結果、
気を利かせて呼び出さないコードを吐くって一体どういうことだろう
呼ばれた側は機械的にあるはずの引数にアクセスする
呼ばれる側はセットしてないなんて分からないからアクセスしてしまうぞ
コンパイラが呼び出し側で引数がないと判定した結果、
気を利かせて呼び出さないコードを吐くって一体どういうことだろう
呼ばれた側は機械的にあるはずの引数にアクセスする
呼ばれる側はセットしてないなんて分からないからアクセスしてしまうぞ
693デフォルトの名無しさん (オッペケ Sr87-bFL4)
2022/06/13(月) 20:10:29.53ID:8KDu5nutr >「罠」がある(キリッ
とかお寒いこと書いちゃうくらいだしよほど視野が狭くなってたんだろうなぁ
とかお寒いこと書いちゃうくらいだしよほど視野が狭くなってたんだろうなぁ
694デフォルトの名無しさん (アウアウウー Sa67-hiZJ)
2022/06/13(月) 20:15:33.10ID:iGSNe98na stdcall と cdecl の話か?
どっちにしても引数省略されたのかされてないのか呼ばれた方では判らん
C++なら省略の代わりにデフォルト引数入れたりマングリングしたり出来るが
Cではどうしようもない
どっちにしても引数省略されたのかされてないのか呼ばれた方では判らん
C++なら省略の代わりにデフォルト引数入れたりマングリングしたり出来るが
Cではどうしようもない
695デフォルトの名無しさん (ブーイモ MM27-Uj9G)
2022/06/13(月) 20:17:50.97ID:6K7aQgyCM >>693
コピペで使えそうだなw
コピペで使えそうだなw
696デフォルトの名無しさん (ワッチョイ ff01-MmlY)
2022/06/13(月) 21:42:41.32ID:PLcvpN2h0 >>688-689,691-692
コンパイルエラーとして全くコードを吐かないという事すら可能なのに何を言ってるんだよ...
今時未定義動作すら考慮して最適化したりしてる時代なんだぞw
https://qiita.com/kaityo256/items/d2677e178be0180482e8
コンパイルエラーとして全くコードを吐かないという事すら可能なのに何を言ってるんだよ...
今時未定義動作すら考慮して最適化したりしてる時代なんだぞw
https://qiita.com/kaityo256/items/d2677e178be0180482e8
697デフォルトの名無しさん (スップ Sd1f-7fB6)
2022/06/13(月) 21:44:17.84ID:ir4nxYTVd698デフォルトの名無しさん (ワッチョイ cf63-GGE9)
2022/06/13(月) 22:00:44.23ID:cwJzo4Jp0 ワーニング笑
699デフォルトの名無しさん (ワッチョイ cf63-GGE9)
2022/06/13(月) 22:05:19.85ID:cwJzo4Jp0 一体どこのコンパイラがコード吐かずに停止するんだよ
700デフォルトの名無しさん (ワッチョイ ff01-MmlY)
2022/06/13(月) 22:14:04.47ID:PLcvpN2h0701デフォルトの名無しさん (ワッチョイ cf63-GGE9)
2022/06/13(月) 22:42:16.41ID:cwJzo4Jp0 つまり実在しないコンパイラってことだな
702デフォルトの名無しさん (ワッチョイ cf63-GGE9)
2022/06/13(月) 22:44:07.87ID:cwJzo4Jp0 オレ以外、全員狂ってるって言ってるのと同じ
703デフォルトの名無しさん (ワッチョイ cf63-GGE9)
2022/06/13(月) 22:44:55.56ID:cwJzo4Jp0 こいつと同じ職場でなくて良かった
704デフォルトの名無しさん (ワッチョイ 7f69-GGE9)
2022/06/13(月) 23:54:32.34ID:uF/nHRZy0 法解釈論「人殺しは違法であり罰される」
実運用論「証拠を完璧に隠滅できれば罰されない」
意固地になっちゃってるから何言っても無駄
実運用論「証拠を完璧に隠滅できれば罰されない」
意固地になっちゃってるから何言っても無駄
705デフォルトの名無しさん (オイコラミネオ MM47-Uj9G)
2022/06/14(火) 03:02:34.64ID:bOBoFDUrM 意固地になるとアスペチックになるのか
アスペチックだから意固地になりやすいのか
アスペチックだから意固地になりやすいのか
706デフォルトの名無しさん (ワッチョイ ff01-MmlY)
2022/06/14(火) 06:01:33.60ID:WigeF4Tr0 意固地もなにも未定義動作なんて規格の話なんだから実運用論とか言われてもねw
707デフォルトの名無しさん (ワッチョイ cfae-/e9c)
2022/06/14(火) 06:16:24.48ID:XpDhKBGs0708デフォルトの名無しさん (ワッチョイ 03cf-zEfY)
2022/06/14(火) 07:36:21.84ID:/Eif446V0 自分で言った言葉に?みつく芸なんだろうか
709デフォルトの名無しさん (ワッチョイ 835f-GGE9)
2022/06/14(火) 10:22:14.90ID:2fucKJss0 >>707
>654が言ってるのはどうせこんなのだろうと思ってた。
https://wandbox.org/permlink/aiZH8Ytc91RyQ7HL
#include <stdio.h>
void func();
int main() { func(); }
void func(int x) { printf("%d\n", x); }
>654が言ってるのはどうせこんなのだろうと思ってた。
https://wandbox.org/permlink/aiZH8Ytc91RyQ7HL
#include <stdio.h>
void func();
int main() { func(); }
void func(int x) { printf("%d\n", x); }
710デフォルトの名無しさん (ワッチョイ f369-Aiv4)
2022/06/14(火) 10:32:47.66ID:rBU/2bdp0 実体記述時と、宣言&呼び出し時とで、引数の型や個数の不一致
コンパイルが通るかもしれんけど、どう動くかわからないし
俺の環境ではこう動くからと、それを信じて採用するには怖すぎる
コンパイルが通るかもしれんけど、どう動くかわからないし
俺の環境ではこう動くからと、それを信じて採用するには怖すぎる
711デフォルトの名無しさん (ワッチョイ cfae-/e9c)
2022/06/14(火) 10:33:48.55ID:XpDhKBGs0712デフォルトの名無しさん (ワッチョイ 835f-GGE9)
2022/06/14(火) 10:44:32.74ID:2fucKJss0 >>711 え? 679 (ワッチョイ 835f-GGE9) だから答えたのに何でよくわからんイチャモンつけられてんの?
いやまぁ、予想通りで結論に異論無いならいいんだけどさ。
いやまぁ、予想通りで結論に異論無いならいいんだけどさ。
713デフォルトの名無しさん (ワッチョイ f369-Aiv4)
2022/06/14(火) 10:50:39.67ID:rBU/2bdp0 省略時のデフォルト引数と(マングリング等による)別実装
C以前の言語でもありそうだし前者は検討してそうなもんだけど見送ったなりの理由があるんだろうか
C以前の言語でもありそうだし前者は検討してそうなもんだけど見送ったなりの理由があるんだろうか
714デフォルトの名無しさん (ワッチョイ 835f-GGE9)
2022/06/14(火) 10:52:59.20ID:2fucKJss0 想定が合ってたということで改めて結論も明記しとくと、
>709 のプログラムが未定義動作を起こすのは不定な x の値を使用するからではなく、
func(int x) に対して引数の数が不正な関数呼び出し func() を行うからであって、
x の値を使用しない場合(例えば関数内を空にした場合など)ても未定義動作になる、という話ね。
>709 のプログラムが未定義動作を起こすのは不定な x の値を使用するからではなく、
func(int x) に対して引数の数が不正な関数呼び出し func() を行うからであって、
x の値を使用しない場合(例えば関数内を空にした場合など)ても未定義動作になる、という話ね。
715デフォルトの名無しさん (ワッチョイ cfae-/e9c)
2022/06/14(火) 10:53:17.30ID:XpDhKBGs0 >>712
ほらな、やっぱり自分の手の内は晒さない
ほらな、やっぱり自分の手の内は晒さない
716デフォルトの名無しさん (ワッチョイ f369-Aiv4)
2022/06/14(火) 11:13:15.99ID:rBU/2bdp0 661の立場だと
void func(int x) { }
・・・・・
func();
は、記述のほうで x をリファレンスしてないからセーフで未定義には該当しないと読めるが
そいう主張なのかな
void func(int x) { }
・・・・・
func();
は、記述のほうで x をリファレンスしてないからセーフで未定義には該当しないと読めるが
そいう主張なのかな
717デフォルトの名無しさん (オッペケ Sr87-bFL4)
2022/06/14(火) 11:51:03.61ID:2oEiwFQbr 引っ込みつかなくなると大変だね
718デフォルトの名無しさん (ワッチョイ cf63-GGE9)
2022/06/14(火) 12:19:58.97ID:zr4Ezotf0 単に使われない変数があるってだけだと思うが
719デフォルトの名無しさん (ワッチョイ ff01-NwEC)
2022/06/14(火) 12:58:48.08ID:WigeF4Tr0720デフォルトの名無しさん (ワッチョイ f369-Aiv4)
2022/06/14(火) 13:36:14.16ID:rBU/2bdp0 実装の話
関数側でスタックに詰まれた引数をクリーンアップする呼び出し規約(pascalcall や stdcall) だと
明後日に飛んでいくのか
関数側でスタックに詰まれた引数をクリーンアップする呼び出し規約(pascalcall や stdcall) だと
明後日に飛んでいくのか
721デフォルトの名無しさん (ワッチョイ ffad-L0LW)
2022/06/14(火) 19:11:20.40ID:DieH08Hx0 引き数の値で関数内の処理を分けるか普通に関数分ければいいやん
722デフォルトの名無しさん (ワンミングク MM9f-+bKn)
2022/06/14(火) 21:11:51.49ID:VPcVb+UNM 普通の人ならそうするが、
普通で無い方法が無いかを
いろいろ議論している
暇つぶしとも言う
普通で無い方法が無いかを
いろいろ議論している
暇つぶしとも言う
723デフォルトの名無しさん (ワッチョイ cfae-/e9c)
2022/06/14(火) 21:17:41.30ID:XpDhKBGs0 特定されない限りあらゆるケースを想定するからな
724デフォルトの名無しさん (ワッチョイ ffad-/fjj)
2022/06/14(火) 23:50:32.80ID:dnqAP5Hg0 >>718
DLLの呼び出しみたいに呼び出し先の実装をコンパイラが知らない場合
例えば引数をスタックに積む呼び出し規約だと
↓正常な動作
1)戻り先のアドレスをスタックに積む
2)引数をスタックに積む
3)DLL側のコード実行時にpopしてスタックから引数ゲット
4)いろいろ処理してpopして戻り先アドレスをゲットしてりたーん
これが↓異常な動作
1)戻り先のアドレスをスタックに積む
2)なんもない
3)DLL側のコード実行時にpopしてスタックから引数ゲット
4)いろいろ処理してpopして戻り先アドレスをゲットしてりたーん
5)わし、迷子
ってなるんちゃうん?
引数がレジスタ渡しなら、ただ変な数値受け取るだけで済むけど、今ここでの話じゃ限定してないようだし
DLLの呼び出しみたいに呼び出し先の実装をコンパイラが知らない場合
例えば引数をスタックに積む呼び出し規約だと
↓正常な動作
1)戻り先のアドレスをスタックに積む
2)引数をスタックに積む
3)DLL側のコード実行時にpopしてスタックから引数ゲット
4)いろいろ処理してpopして戻り先アドレスをゲットしてりたーん
これが↓異常な動作
1)戻り先のアドレスをスタックに積む
2)なんもない
3)DLL側のコード実行時にpopしてスタックから引数ゲット
4)いろいろ処理してpopして戻り先アドレスをゲットしてりたーん
5)わし、迷子
ってなるんちゃうん?
引数がレジスタ渡しなら、ただ変な数値受け取るだけで済むけど、今ここでの話じゃ限定してないようだし
725デフォルトの名無しさん (ワッチョイ cf63-GGE9)
2022/06/15(水) 00:28:34.16ID:kIvvyTdz0 呼び出しって引数をスタックに積んでから、呼び出すんじゃなかったかな
726デフォルトの名無しさん (ワッチョイ ffad-/fjj)
2022/06/15(水) 00:38:49.11ID:3+VQJWvy0727デフォルトの名無しさん (ワッチョイ cf63-GGE9)
2022/06/15(水) 00:43:20.78ID:kIvvyTdz0 引数をスタックに積んでから、戻りアドレスを積んでCallするなら、
func関数はスタック先頭位置にあるアドレスに戻るだけではないかな
積まれている引数はその下だからズレないと思う
func関数はスタック先頭位置にあるアドレスに戻るだけではないかな
積まれている引数はその下だからズレないと思う
728デフォルトの名無しさん (ワッチョイ ffad-/fjj)
2022/06/15(水) 00:57:26.32ID:3+VQJWvy0 >>727
>引数をスタックに積んでから、戻りアドレスを積んでCallするなら、
逆だぞ
戻りアドレスをスタックに積んでから引数をスタックに積む、その状態でfuncをコールする
そうしないと、次のpopでは戻りアドレスを受け取ることになり、引数を受け取れない
コールされたfuncはpopし引数を受け取って処理(この間にスタックへのpush/popがあったりして)、最後にpopして戻りアドレスを受け取って呼び出し元に帰る
>引数をスタックに積んでから、戻りアドレスを積んでCallするなら、
逆だぞ
戻りアドレスをスタックに積んでから引数をスタックに積む、その状態でfuncをコールする
そうしないと、次のpopでは戻りアドレスを受け取ることになり、引数を受け取れない
コールされたfuncはpopし引数を受け取って処理(この間にスタックへのpush/popがあったりして)、最後にpopして戻りアドレスを受け取って呼び出し元に帰る
729デフォルトの名無しさん (ワッチョイ cf63-GGE9)
2022/06/15(水) 01:08:25.20ID:kIvvyTdz0 戻りアドレスをスタックに積むのは、機械語のCALL命令が行うんでしょう?
730デフォルトの名無しさん (ワッチョイ cf63-GGE9)
2022/06/15(水) 01:16:07.05ID:kIvvyTdz0 VCでアセンブラソース出力させてみました
int main()
{
call(1);
call();
return 0;
}
int call()
{
return 0;
}
int main()
{
call(1);
call();
return 0;
}
int call()
{
return 0;
}
731デフォルトの名無しさん (ワッチョイ cf63-GGE9)
2022/06/15(水) 01:17:50.09ID:kIvvyTdz0 _main PROC
; Line 2
push ebp
mov ebp, esp
; Line 3
push 1
call _call
add esp, 4
; Line 4
call _call
; Line 5
xor eax, eax
; Line 6
pop ebp
ret 0
_main ENDP
; Line 2
push ebp
mov ebp, esp
; Line 3
push 1
call _call
add esp, 4
; Line 4
call _call
; Line 5
xor eax, eax
; Line 6
pop ebp
ret 0
_main ENDP
732デフォルトの名無しさん (ワッチョイ cf63-GGE9)
2022/06/15(水) 01:18:18.33ID:kIvvyTdz0 _call PROC
; Line 8
push ebp
mov ebp, esp
; Line 9
xor eax, eax
; Line 10
pop ebp
ret 0
_call ENDP
; Line 8
push ebp
mov ebp, esp
; Line 9
xor eax, eax
; Line 10
pop ebp
ret 0
_call ENDP
733デフォルトの名無しさん (ワッチョイ ffad-/fjj)
2022/06/15(水) 01:22:13.35ID:3+VQJWvy0 そうでした
うんこは消えます
うんこは消えます
734デフォルトの名無しさん (アウアウウー Sa67-QAJi)
2022/06/15(水) 05:01:22.73ID:oeHjaPLHa フレームポインタってのもあって
まあなんでもいいんです
まあなんでもいいんです
735デフォルトの名無しさん (アウアウウー Sa67-iSSN)
2022/06/15(水) 15:38:51.27ID:IEWflW3Ga >>728
馬鹿発見
馬鹿発見
736デフォルトの名無しさん (ワッチョイ 7f36-GGE9)
2022/06/15(水) 18:22:38.94ID:mSaBC5As0 >729
全てのCPUにCALL相当の命令があるとは限らないってことを頭の片隅に。
全てのCPUにCALL相当の命令があるとは限らないってことを頭の片隅に。
737デフォルトの名無しさん (ワッチョイ cf63-GGE9)
2022/06/15(水) 19:14:29.02ID:kIvvyTdz0 CALL命令のないCPUにCってどういう風に実装するのかな
キッと神様のような人だろうと思う
キッと神様のような人だろうと思う
738デフォルトの名無しさん (アウアウウー Sa67-QAJi)
2022/06/15(水) 19:34:49.70ID:vqdnmmaIa 最近call見ないよね
命令はあるけど
命令はあるけど
739デフォルトの名無しさん (ワッチョイ ff01-NwEC)
2022/06/15(水) 19:53:29.20ID:XKwaNEU70 >>736
C言語で書いたコードが実行できるようなCPUでCALL相当の命令がない奴なんてあるのか?
まさかと思うけどBSR(Branch SubRoutin)とかBAS(Branch and Save)はCALLと綴りが違うんだーっていう主張じゃないよね
C言語で書いたコードが実行できるようなCPUでCALL相当の命令がない奴なんてあるのか?
まさかと思うけどBSR(Branch SubRoutin)とかBAS(Branch and Save)はCALLと綴りが違うんだーっていう主張じゃないよね
740デフォルトの名無しさん (ワッチョイ ff01-NwEC)
2022/06/15(水) 19:55:51.69ID:XKwaNEU70 >>737
汎用機みたいにスタックが無いマシンだとソフトでスタック作るとかする
汎用機みたいにスタックが無いマシンだとソフトでスタック作るとかする
741デフォルトの名無しさん (ワッチョイ cf63-GGE9)
2022/06/15(水) 20:05:59.02ID:kIvvyTdz0 呼出も戻りも、ジャンプ命令で実装するんかい?
「食らえ、GOTO攻撃!」
「食らえ、GOTO攻撃!」
742デフォルトの名無しさん (ワッチョイ 2301-UmXv)
2022/06/15(水) 20:06:30.10ID:gppE9X5h0743デフォルトの名無しさん (ワッチョイ 2301-UmXv)
2022/06/15(水) 20:07:41.69ID:gppE9X5h0744デフォルトの名無しさん (ワッチョイ 7f36-GGE9)
2022/06/15(水) 20:29:16.05ID:mSaBC5As0 >739
2000年あたりのスパコンのデバッグやってたけどスタックポインタ自体無かったよ。
汎用レジスタの一つをスタックポインタの様に使ってた。
スパコンのPEはCPUじゃ無いっていうならそれまでだけど。
OSがCで書かれてたよ。
2000年あたりのスパコンのデバッグやってたけどスタックポインタ自体無かったよ。
汎用レジスタの一つをスタックポインタの様に使ってた。
スパコンのPEはCPUじゃ無いっていうならそれまでだけど。
OSがCで書かれてたよ。
745はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 6f3e-GGE9)
2022/06/15(水) 20:38:36.75ID:VY0KZJ3n0 専用のレジスタを用意するかわりにアドレシングモードを充実させてるタイプの CPU もあるとは聞いたことは有る。
複数のスタックを用途別に使ったりする運用も出来るので便利っぽいよ。
複数のスタックを用途別に使ったりする運用も出来るので便利っぽいよ。
746デフォルトの名無しさん (ワッチョイ cf46-IaEQ)
2022/06/15(水) 20:42:40.26ID:Z7kfo4VR0 リンクレジスタを使うアーキテクチャは
呼び出しも戻りもジャンブだよ
呼び出しも戻りもジャンブだよ
747デフォルトの名無しさん (ワッチョイ ff01-NwEC)
2022/06/15(水) 21:27:21.82ID:XKwaNEU70748デフォルトの名無しさん (ワッチョイ 7f36-GGE9)
2022/06/15(水) 21:32:09.09ID:mSaBC5As0 JMPで呼び出した関数に飛んで、
JMPで呼び出し元に戻って行ってたよ。
RET、それ相当の命令が無かった(使われてなかった?)。
JMPで呼び出し元に戻って行ってたよ。
RET、それ相当の命令が無かった(使われてなかった?)。
749デフォルトの名無しさん (アウアウウー Sa67-QAJi)
2022/06/15(水) 21:47:48.01ID:vqdnmmaIa ぴゅう太のCPUとか全然レジスタなかった
750デフォルトの名無しさん (ワッチョイ ff01-NwEC)
2022/06/15(水) 21:51:15.67ID:XKwaNEU70 >>748
どこのスパコン?
どこのスパコン?
751デフォルトの名無しさん (ワッチョイ cfbb-D3sd)
2022/06/15(水) 21:56:54.74ID:Ltc382Vw0 Z8スーパーコンピュータ
752デフォルトの名無しさん (ワッチョイ ff01-NwEC)
2022/06/15(水) 21:58:58.10ID:XKwaNEU70 >>749
あれはレジスタはメモリー上に置くって言う設計思想だから
あれはレジスタはメモリー上に置くって言う設計思想だから
753デフォルトの名無しさん (ワッチョイ 7f36-GGE9)
2022/06/15(水) 22:55:33.80ID:mSaBC5As0 >750
富士通。
実機は見たこと無い。
なんかアメリカに設置されてて、日本の端末(FMVにFreeBSDかなんか入れてた)からtelnetで入って作業してた。
入社1年目だったんでテスト作業員+フリーズした場所の特定と原因予想してた。
富士通。
実機は見たこと無い。
なんかアメリカに設置されてて、日本の端末(FMVにFreeBSDかなんか入れてた)からtelnetで入って作業してた。
入社1年目だったんでテスト作業員+フリーズした場所の特定と原因予想してた。
754デフォルトの名無しさん (ワッチョイ cfae-/e9c)
2022/06/16(木) 07:08:44.59ID:ilsRfae90 STM 14,12,12(13)
LR 12,15
GETMAIN RU,LV=72
ST 13,4(,1)
ST 1,8(,13)
LR 13,1
LR 12,15
GETMAIN RU,LV=72
ST 13,4(,1)
ST 1,8(,13)
LR 13,1
755デフォルトの名無しさん (ワッチョイ ff01-NwEC)
2022/06/16(木) 07:48:03.24ID:acnLqVz40756デフォルトの名無しさん (ワッチョイ 93bb-zkCy)
2022/06/16(木) 14:04:28.10ID:6d6damS40 ① struct _Hoge;
② typedef struct _Hoge Hoge;
③ struct _Hoge { int a; };
④ typedef struct _Hoge { int a; } Hoge;
↑の①~④はどれが「定義」でどれが「宣言」かよくわからんです
typedef の def は define(定義)の def ですが
変数作って値を定義していないので全部宣言ですかね?
② typedef struct _Hoge Hoge;
③ struct _Hoge { int a; };
④ typedef struct _Hoge { int a; } Hoge;
↑の①~④はどれが「定義」でどれが「宣言」かよくわからんです
typedef の def は define(定義)の def ですが
変数作って値を定義していないので全部宣言ですかね?
757デフォルトの名無しさん (ワッチョイ cfae-/e9c)
2022/06/16(木) 14:15:11.58ID:ilsRfae90 原則、重複が許されるのが宣言、許されないのが定義
ただし仮定義のような例外も一部ある
ただし仮定義のような例外も一部ある
758デフォルトの名無しさん (ワッチョイ 93bb-zkCy)
2022/06/16(木) 14:18:30.74ID:6d6damS40 そうすると①は宣言ですね
759デフォルトの名無しさん (ワッチョイ cfae-/e9c)
2022/06/16(木) 14:37:35.99ID:ilsRfae90 うむ
760デフォルトの名無しさん (アウアウウー Sa67-iSSN)
2022/06/16(木) 19:53:21.43ID:hEUIHdUOa コンパイラが単語を覚えるのが宣言
メモリに実態が産まれるのが定義
メモリに実態が産まれるのが定義
761デフォルトの名無しさん (ブーイモ MM7f-a+sK)
2022/06/16(木) 20:19:36.30ID:2MvWGhryM ③書いたところでメモリに実体生まれんだろ
762デフォルトの名無しさん (ワッチョイ 93bb-zkCy)
2022/06/16(木) 22:26:58.67ID:6d6damS40 ③を2回書くとエラーになりますね
この辺は沼でしょうか?
厳密に分けても何かに役立つというものでもないし・・・
この辺は沼でしょうか?
厳密に分けても何かに役立つというものでもないし・・・
763デフォルトの名無しさん (ワッチョイ cf63-GGE9)
2022/06/16(木) 23:14:06.95ID:y5qePP6X0 そういう風に決めたなら仕方がないが
意味的には、定義と宣言って逆な印象を受けます
数学でいうと、
点や直線の定義では実際の描画はまだですが
点や直線の宣言っていうと、その場に描画すると言うイメージ
意味的には、定義と宣言って逆な印象を受けます
数学でいうと、
点や直線の定義では実際の描画はまだですが
点や直線の宣言っていうと、その場に描画すると言うイメージ
764はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 6f3e-GGE9)
2022/06/16(木) 23:16:16.53ID:yR1zGyRS0 宣言と定義の意味については C99 だと 6.7 に記述がある
> 宣言は、幾つかの識別子の解釈及び属性を指定する。
> 識別子の定義 (definition) とは、宣言のうち次のものをいう。
> ・ オブジェクトに対しては、そのオブジェクトの記憶域を確保する宣言
> ・ 関数に対しては、関数本体を含む宣言
> ・ 列挙定数又は型定義名に対しては、その識別子の (唯一の) 宣言
逆に言えば定義は常に宣言でもある。
> 宣言は、幾つかの識別子の解釈及び属性を指定する。
> 識別子の定義 (definition) とは、宣言のうち次のものをいう。
> ・ オブジェクトに対しては、そのオブジェクトの記憶域を確保する宣言
> ・ 関数に対しては、関数本体を含む宣言
> ・ 列挙定数又は型定義名に対しては、その識別子の (唯一の) 宣言
逆に言えば定義は常に宣言でもある。
765デフォルトの名無しさん (ワッチョイ cfae-/e9c)
2022/06/17(金) 05:27:18.60ID:zopwF6/i0 実体が作られるといっても
プログラムイメージにスペースが確保されるとは限らない
静的記憶域期間を持つものはプログラムイメージに作られるが
自動記憶域期間を持つものは実行中に割付と解放が行われるし
構造体のメンバ宣言並びはコンパイラのメモリに作られる
これらのいずれも「定義」となる
プログラムイメージにスペースが確保されるとは限らない
静的記憶域期間を持つものはプログラムイメージに作られるが
自動記憶域期間を持つものは実行中に割付と解放が行われるし
構造体のメンバ宣言並びはコンパイラのメモリに作られる
これらのいずれも「定義」となる
766デフォルトの名無しさん (ワッチョイ ff01-NwEC)
2022/06/17(金) 07:51:59.32ID:bL392TY50767デフォルトの名無しさん (ワッチョイ 0310-GGE9)
2022/06/17(金) 08:44:28.03ID:rAke7YJm0 なんとなくのイメージ
・宣言
「xxxxって名前の変数(関数)がどっかにあるらしいよ。詳しいことは知らん。」
・定義
「xxxxの詳細はココに書かれたxxxxxである!これは決定事項である!!」
・宣言
「xxxxって名前の変数(関数)がどっかにあるらしいよ。詳しいことは知らん。」
・定義
「xxxxの詳細はココに書かれたxxxxxである!これは決定事項である!!」
768デフォルトの名無しさん (ワッチョイ cfae-/e9c)
2022/06/17(金) 13:54:11.29ID:zopwF6/i0 >>766
struct _Hoge;
struct _Hoge; // OK
これは _Hoge という識別子がタグ名という定型データとして作られ、
その後、定型データの中の属性フラグが検査されて一致が確認される
struct _Hoge;
union _Hoge; // NG
これは定型データの中の属性フラグが検査され不一致が検出される
struct _Hoge;
struct _Hoge { int a; }; // OK
これは定型データの中のポインタがまずNULLで作られ、
次に、そのポインタでメンバ宣言列という不定型データを指す
struct _Hoge { int a; };
struct _Hoge { int a; }; // NG
これは既にNULLでなくなったポインタの貼りかえで拒否される
宣言の重複は矛盾の検出のみを行い
定義の重複は不定型データの再作成で拒否される
{ } は無結合
struct _Hoge;
struct _Hoge; // OK
これは _Hoge という識別子がタグ名という定型データとして作られ、
その後、定型データの中の属性フラグが検査されて一致が確認される
struct _Hoge;
union _Hoge; // NG
これは定型データの中の属性フラグが検査され不一致が検出される
struct _Hoge;
struct _Hoge { int a; }; // OK
これは定型データの中のポインタがまずNULLで作られ、
次に、そのポインタでメンバ宣言列という不定型データを指す
struct _Hoge { int a; };
struct _Hoge { int a; }; // NG
これは既にNULLでなくなったポインタの貼りかえで拒否される
宣言の重複は矛盾の検出のみを行い
定義の重複は不定型データの再作成で拒否される
{ } は無結合
769デフォルトの名無しさん (アウアウウー Sa67-iSSN)
2022/06/17(金) 16:09:04.52ID:G79h5Zera >>763
誤訳
誤訳
770デフォルトの名無しさん (アウアウウー Sa67-iSSN)
2022/06/17(金) 16:13:44.68ID:G79h5Zera struct _Hoge { int a; };
struct _Hoge { int a; }; // NG
この場合でもコンパイル単位が別ファイルだと(ほぼ)問題無い訳で
一致していなければ一致していないなりの結果が産まれる
struct _Hoge { int a; }; // NG
この場合でもコンパイル単位が別ファイルだと(ほぼ)問題無い訳で
一致していなければ一致していないなりの結果が産まれる
771デフォルトの名無しさん (ワッチョイ cfae-/e9c)
2022/06/17(金) 16:33:58.20ID:zopwF6/i0772デフォルトの名無しさん (ワッチョイ ff01-NwEC)
2022/06/17(金) 19:28:59.11ID:bL392TY50 >>768
なにを言いたいのかさっぱりわからんw
なにを言いたいのかさっぱりわからんw
773デフォルトの名無しさん (アウアウウー Sa47-vQ73)
2022/06/18(土) 20:10:05.11ID:cOcEcivya ヘッダ include したことないとか
ヘッダに実装描くとか
分割コンパイルしたことないとか
そういうアホのにおいがプンプン丸
ヘッダに実装描くとか
分割コンパイルしたことないとか
そういうアホのにおいがプンプン丸
774デフォルトの名無しさん (ワッチョイ ffad-P2F3)
2022/06/18(土) 23:11:41.82ID:eg6b2Ems0 どこにそんな話出てた…?
775デフォルトの名無しさん (ワッチョイ 1769-gg/4)
2022/06/20(月) 15:11:40.00ID:BalXxnr90 定義と宣言の区別に関して
同一翻訳単位の中で 重複が許されるのが宣言 の実例の話やろ
同一翻訳単位の中で 重複が許されるのが宣言 の実例の話やろ
776デフォルトの名無しさん (ワッチョイ 9a01-ylO7)
2022/06/20(月) 20:05:57.84ID:3bt1t/j50 聞きたいのは内容じゃなくてなぜそんな話をいきなり始めたのか?なんだけどw
777デフォルトの名無しさん (オッペケ Sr3b-P2F3)
2022/06/20(月) 20:11:30.62ID:8GsqMDfwr ヘッダに実装書いたっていうレスもヘッダをincludeしたことないっていうレスも見当たらないけど…
778デフォルトの名無しさん (スップ Sdba-JtvC)
2022/06/20(月) 20:27:07.42ID:aPzFu0cfd 別ソースから同じヘッダをincludeしていてもコンパイル時には必ず別ファイルとなるわけで(ほぼ)じゃ困る
779デフォルトの名無しさん (ワッチョイ ffad-DcGD)
2022/06/25(土) 17:14:53.88ID:g21tYZQo0 if ( a == 0 )
{ port &= 0b11011111 ;
}
else
{ port |= 0b00100000 ;
}
これ条件文使わずに書けるよね?
{ port &= 0b11011111 ;
}
else
{ port |= 0b00100000 ;
}
これ条件文使わずに書けるよね?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 小野田紀美・経済安保担当相「何か気に入らないことがあればすぐに経済的威圧をする国への依存はリスク」 ★2 [Hitzeschleier★]
- 【中国局長】両国関係に「深刻な影響」 首相発言の撤回要求 [蚤の市★]
- 【インバウンド】中国人観光客の日本での消費額は年間約2兆円超…中国政府は公務員の出張取り消し [1ゲットロボ★]
- 外務省局長は無言で厳しい表情…日中の高官協議終了か 高市首相“台湾”発言で中国が強硬対応 発言撤回求めたか…★3 [BFU★]
- 【維新】吉村知事「中国人観光客だけに頼るビジネスモデル変えていかないといけない」「高市総理の発言は撤回する必要はない」 [Hitzeschleier★]
- 【社会】40代以上のおじさん・おばさんは叩いてオッケーという風潮はなぜ加速したのか [七波羅探題★]
- 自分に自信がない女の子、陽キャ美容室で80cmのエクステを付けた結果wwwwwwwwwwwwwwwwwww [329329848]
- 【高市速報】日本人の3割「中国への武力行使に踏み切る必要がある」ANN世論調査 [931948549]
- 外務省局長、よくわからないまま帰国へ [834922174]
- 【実況】博衣こよりのえちえち歌枠🧪
- 【朗報】外務省局長、中国側の要求を断固拒否。「高市さんの答弁は日本政府の立場を変えるものではないし、撤回しない」 [519511584]
- 農林水産省「春頃にはコメ価格落ち着くのでは」新米の取引価格、過去最高を更新。 [256556981]
