↑
次スレを作る時は上記1行をコピーして2行に増やして必ず1行目に入るようにしてください。
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/
※前スレ
C言語なら俺に聞け 149
https://mevius.5ch.net/test/read.cgi/tech/1540731704/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
探検
C言語なら俺に聞け 150
レス数が900を超えています。1000を超えると表示できなくなるよ。
1デフォルトの名無しさん (アウアウクー MM57-IE4z)
2019/02/06(水) 13:39:03.21ID:c4bnQMl3M805はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 6f3e-kdx8)
2019/03/18(月) 15:56:04.05ID:YfgH0B4l0 >>804
数字 ('0'〜'9') に対応する文字コードが連続する保証は有る。
数字 ('0'〜'9') に対応する文字コードが連続する保証は有る。
806デフォルトの名無しさん (ワッチョイ 8369-QTaE)
2019/03/18(月) 16:33:31.22ID:CWr9PpIQ0 '0' 〜 '9' で挟んで '0' で引き算するのは保障されてるので成立するけど
'a' 〜 'f' , 'A' 〜 'F' で挟んで - 'a' + 10 や - 'A' + 10 は保障外のコードになる と。
'a' 〜 'f' , 'A' 〜 'F' で挟んで - 'a' + 10 や - 'A' + 10 は保障外のコードになる と。
807デフォルトの名無しさん (ワッチョイ 13b6-B/CD)
2019/03/18(月) 17:09:05.92ID:yKiI4G/I0 >>801
未定義じゃねえ処理系定義だ
未定義に該当するためには何らかの禁止を破らねばならない
禁止を破っていないのに決まっていない事項は未規定
未規定のうち文書化されるのが処理系定義だ
先輩方が変な言葉遣いをするから
若いのが勘違いするんだよ
気をつけな
未定義じゃねえ処理系定義だ
未定義に該当するためには何らかの禁止を破らねばならない
禁止を破っていないのに決まっていない事項は未規定
未規定のうち文書化されるのが処理系定義だ
先輩方が変な言葉遣いをするから
若いのが勘違いするんだよ
気をつけな
808デフォルトの名無しさん (ワッチョイ 738f-kbMb)
2019/03/18(月) 17:42:10.10ID:mCQ8i9jz0809デフォルトの名無しさん (アウアウカー Sa47-WmpR)
2019/03/18(月) 17:56:16.31ID:1YRHAy75a810デフォルトの名無しさん (ワッチョイ 13b6-B/CD)
2019/03/18(月) 21:11:30.38ID:yKiI4G/I0 >>808
> 「処理系が必ず定義しなければならない」
それが処理系定義
たとえば sizeof(int) が返す値だ
> 「純粋に処理系依存なので、規格としては何も触れない」
これは未規定
たとえば printf("%d %d", getchar(), getchar()); の場合の左右の getchar の実行順序だ
わかってないんなら、ちゃんと規格票で確認しとけ
> 「処理系が必ず定義しなければならない」
それが処理系定義
たとえば sizeof(int) が返す値だ
> 「純粋に処理系依存なので、規格としては何も触れない」
これは未規定
たとえば printf("%d %d", getchar(), getchar()); の場合の左右の getchar の実行順序だ
わかってないんなら、ちゃんと規格票で確認しとけ
811デフォルトの名無しさん (ワッチョイ ff33-h1+v)
2019/03/18(月) 23:08:12.32ID:wuyTgyGr0 >>795,801 ポインタの表現形式とは関係なく、未定義の動作になります。
https://www.jpcert.or.jp/sc-rules/c-fio47-c.html
実際の処理系での挙動を説明しようとするとポインタの表現形式で説明が付く
ことが多いだろうとは思います。
https://www.jpcert.or.jp/sc-rules/c-fio47-c.html
実際の処理系での挙動を説明しようとするとポインタの表現形式で説明が付く
ことが多いだろうとは思います。
812デフォルトの名無しさん (ワッチョイ 035f-7k5p)
2019/03/18(月) 23:15:18.00ID:5t+N6Jn90 C11 7.21.6.1.9で「変換指定子が不正である場合の動作は未定義」ってあるね
処理系定義は%pの時のポインタの値の表現形式と間違えてないか
処理系定義は%pの時のポインタの値の表現形式と間違えてないか
813デフォルトの名無しさん (ワッチョイ ff33-h1+v)
2019/03/18(月) 23:23:41.88ID:wuyTgyGr0 >>810
規格で「何も」触れられていないのは未定義 (undefined) なのでは?
禁止を破るほか、規格に定めのないところの動作も含まれます。
規格で示される選択肢のうちのどれを処理系が選ぶかが定められておらず
処理系任せ(文書化も不要)なのが未規定 (unspecified) かと。
規格で「何も」触れられていないのは未定義 (undefined) なのでは?
禁止を破るほか、規格に定めのないところの動作も含まれます。
規格で示される選択肢のうちのどれを処理系が選ぶかが定められておらず
処理系任せ(文書化も不要)なのが未規定 (unspecified) かと。
814デフォルトの名無しさん (ブーイモ MMff-ouNb)
2019/03/19(火) 08:12:11.66ID:qtB10olYM 自分はc言語とc#(pcツール開発用途)使うけど、
c言語は仕様がコンパクトで、このスレのような議論があって面白いな。
c#はライブラリが充実してて凄く便利
c言語は仕様がコンパクトで、このスレのような議論があって面白いな。
c#はライブラリが充実してて凄く便利
815デフォルトの名無しさん (ワッチョイ 13b6-B/CD)
2019/03/19(火) 09:23:10.29ID:LKFNCpsT0816デフォルトの名無しさん (ワッチョイ ff33-h1+v)
2019/03/19(火) 10:26:28.12ID:gyYe55lf0 >>815
http://kikakurui.com/x3/X3010-2003-01.html#9
> この規格の制約以外の箇所で現れる…(し)なければならない又は…(し)てはならないという要求をプログラムが守っていない場合,その動作は未定義とする。
> この規格では,このほかに,用語 未定義の動作を使うことによるか又は動作の明示的な定義を与えないことによって未定義の動作を示すこともある。
> これらの三つの書き方は強調度において何ら変わりはなく,それらはすべて未定義の動作を規定する。
http://kikakurui.com/x3/X3010-2003-01.html#9
> この規格の制約以外の箇所で現れる…(し)なければならない又は…(し)てはならないという要求をプログラムが守っていない場合,その動作は未定義とする。
> この規格では,このほかに,用語 未定義の動作を使うことによるか又は動作の明示的な定義を与えないことによって未定義の動作を示すこともある。
> これらの三つの書き方は強調度において何ら変わりはなく,それらはすべて未定義の動作を規定する。
817デフォルトの名無しさん (ワッチョイ 93d2-mVPS)
2019/03/19(火) 11:35:26.58ID:71/TIYaC0 未定義な動作っていうのはプログラムが未定義な動作をするわけじゃなくて
コンパイラー製作者が決める動作が未定義だから好きなように動作を決めれるってことだぞ
コンパイラー製作者が決める動作が未定義だから好きなように動作を決めれるってことだぞ
818デフォルトの名無しさん (ワッチョイ 13b6-B/CD)
2019/03/19(火) 11:43:35.24ID:LKFNCpsT0 >>816
こちらの指摘を認めたんだな?
こちらの指摘を認めたんだな?
819デフォルトの名無しさん (ドコグロ MM47-jA9u)
2019/03/19(火) 12:40:50.73ID:/V+FXtnWM ID:LKFNCpsT0は言語仕様の前に日本語を勉強すべき
> 動作の明示的な定義を与えないことによって未定義の動作を示すこともある。
> 動作の明示的な定義を与えないことによって未定義の動作を示すこともある。
820デフォルトの名無しさん (ワッチョイ 13b6-B/CD)
2019/03/19(火) 13:28:08.89ID:LKFNCpsT0821デフォルトの名無しさん (ワッチョイ 738f-kbMb)
2019/03/19(火) 17:11:50.12ID:qa7ql0+P0 >>816
> 未定義の動作を示すこともある
https://www.jpcert.or.jp/sc-rules/c-msc15-c.html
http://www.c-lang.org/detail/undefined_behavior.html
「この辺読んでおけ」ってかんじですか
> 未定義の動作を示すこともある
https://www.jpcert.or.jp/sc-rules/c-msc15-c.html
http://www.c-lang.org/detail/undefined_behavior.html
「この辺読んでおけ」ってかんじですか
822デフォルトの名無しさん (スフッ Sd1f-QpYv)
2019/03/19(火) 17:56:13.66ID:CsLrwzwwd >>815
JIS X 3010:2003 3.4.3
未規定の動作(unspecified behavior) この規格が,二つ以上の可能性を提供し,個々の場合にどの可能性を選択するかに関して何ら要求を課さない動作。
C11 3.4.4
未規定動作
不特定の値の使用、あるいは当国際標準が提示する2つかそれ以上の可能性があり、いずれを選ぶかに関してそれ以上の要求を課さないその他の動作。
一応選択肢は与えてるように見えるな
JIS X 3010:2003 3.4.3
未規定の動作(unspecified behavior) この規格が,二つ以上の可能性を提供し,個々の場合にどの可能性を選択するかに関して何ら要求を課さない動作。
C11 3.4.4
未規定動作
不特定の値の使用、あるいは当国際標準が提示する2つかそれ以上の可能性があり、いずれを選ぶかに関してそれ以上の要求を課さないその他の動作。
一応選択肢は与えてるように見えるな
823デフォルトの名無しさん (ワッチョイ 13b6-B/CD)
2019/03/19(火) 18:02:59.01ID:LKFNCpsT0 「異常なプログラム」、「正しくないプログラム」、「正しくないデータ」
↑
このへんのキーワードが、なぜ「未定義の動作」という用語をわざわざ作っているのかの存在意義だ
他の「処理系定義の動作」や「未規定の動作」と見比べてみな
「未定義」だけ異質な点はただ1つ
↑
このへんのキーワードが、なぜ「未定義の動作」という用語をわざわざ作っているのかの存在意義だ
他の「処理系定義の動作」や「未規定の動作」と見比べてみな
「未定義」だけ異質な点はただ1つ
824デフォルトの名無しさん (ドコグロ MM47-jA9u)
2019/03/19(火) 19:53:17.00ID:/V+FXtnWM >>820
あほか、そこに「正しくないプログラム構成要素」って書いてあるだろ
規格には正しいプログラムの定義は書いてある
書いてないことは全て正しくないプログラムだよ
そもそも全ての未定義を定義できるわけないことぐらいはアホでもわかるだろw
あほか、そこに「正しくないプログラム構成要素」って書いてあるだろ
規格には正しいプログラムの定義は書いてある
書いてないことは全て正しくないプログラムだよ
そもそも全ての未定義を定義できるわけないことぐらいはアホでもわかるだろw
825デフォルトの名無しさん (ワッチョイ b302-h1+v)
2019/03/19(火) 20:49:49.43ID:M/rPqWkP0 CとC++のことで少しはまったことがあったので質問です。
はまった部分を単純化して例を挙げます。
1.単純化した例
FuncC.c
#include <stdio.h>
void Func(void) { puts("FuncC"); }
FuncCpp.cpp
#include <stdio.h>
void Func(void) { puts("FuncCpp"); }
main.c
void Func(void);
int main(void) { Func(); return 0; }
上記3つのファイルを gcc *.c *.cpp でコンパイルリンクするとFuncC.cのFuncが呼ばれます。
main.cをmain.cppに名前を変更して同じことをするとFuncCpp.cppのFuncが呼ばれます。
clでも試しましたが同じ結果です。
2.はまったこと
拡張子によって呼ばれる関数が違うことに気づかず延々と的外れなことをやっていた。
3.知りたいこと
1の結果がなぜそうなるのかちゃんとは分かっていません。
なぜそうなるのか分かるサイト等あれば教えてもらえませんか?
はまった部分を単純化して例を挙げます。
1.単純化した例
FuncC.c
#include <stdio.h>
void Func(void) { puts("FuncC"); }
FuncCpp.cpp
#include <stdio.h>
void Func(void) { puts("FuncCpp"); }
main.c
void Func(void);
int main(void) { Func(); return 0; }
上記3つのファイルを gcc *.c *.cpp でコンパイルリンクするとFuncC.cのFuncが呼ばれます。
main.cをmain.cppに名前を変更して同じことをするとFuncCpp.cppのFuncが呼ばれます。
clでも試しましたが同じ結果です。
2.はまったこと
拡張子によって呼ばれる関数が違うことに気づかず延々と的外れなことをやっていた。
3.知りたいこと
1の結果がなぜそうなるのかちゃんとは分かっていません。
なぜそうなるのか分かるサイト等あれば教えてもらえませんか?
826デフォルトの名無しさん (アウアウウー Sae7-6Ib2)
2019/03/19(火) 20:58:40.16ID:BI7+7Q7/a >>825
C++ は extern "C" {} のブロック内にC言語書かないと駄目なんじゃなかったっけ?
で、C++って同じ関数名で引数の違う関数作れるよね。だからCと見た目そっくりでも作られるコードが少し違うんじゃないの?
C++ は extern "C" {} のブロック内にC言語書かないと駄目なんじゃなかったっけ?
で、C++って同じ関数名で引数の違う関数作れるよね。だからCと見た目そっくりでも作られるコードが少し違うんじゃないの?
827デフォルトの名無しさん (ワッチョイ 2301-QTaE)
2019/03/19(火) 21:04:51.38ID:Dro8a+Ew0 Cは関数名がそのままシンボル名になるけど
C++のほうは関数名に引数の型情報が付加されたmanglingされたシンボル名となるので
リンカーでリンケージする際に区別してる
C++ から C 関数を呼ぶには 明示的に extern "C" と宣言されてないとその機構を突破できない
んじゃなかったかな
C++のほうは関数名に引数の型情報が付加されたmanglingされたシンボル名となるので
リンカーでリンケージする際に区別してる
C++ から C 関数を呼ぶには 明示的に extern "C" と宣言されてないとその機構を突破できない
んじゃなかったかな
>>825
c++ から c の関数を呼ぶのなら extern "C"
c++ から c の関数を呼ぶのなら extern "C"
829デフォルトの名無しさん (アウアウウー Sae7-6Ib2)
2019/03/19(火) 21:14:21.98ID:BI7+7Q7/a おお。多分そうだ。
あとはもっと詳しい人に任せた。
あとはもっと詳しい人に任せた。
途中で投げてしまった
私がはまったのは、win32api で、 ::RegisterClass() にて登録する WindowProc を extern "C" しなかったために、凄く困った記憶があります
私がはまったのは、win32api で、 ::RegisterClass() にて登録する WindowProc を extern "C" しなかったために、凄く困った記憶があります
831デフォルトの名無しさん (ワッチョイ ff7c-NxE7)
2019/03/19(火) 21:45:25.26ID:zmaQJWrD0 >>825
main()からcallされるasm用関数名が違うのでは
FuncC.c func() ---> funcC()
FuncCpp.cpp func() --> _Z4Funcv()
main.c call func() ---> call func()
main.cpp : call func() --> call _Z4Funcv()
main()からcallされるasm用関数名が違うのでは
FuncC.c func() ---> funcC()
FuncCpp.cpp func() --> _Z4Funcv()
main.c call func() ---> call func()
main.cpp : call func() --> call _Z4Funcv()
832デフォルトの名無しさん (アウアウウー Sae7-WmpR)
2019/03/19(火) 22:56:54.72ID:ieOLeRQla まんぐり
833デフォルトの名無しさん (ワッチョイ 6f02-B/CD)
2019/03/19(火) 23:56:04.61ID:ni3gZ2OF0834デフォルトの名無しさん (ワッチョイ 13b6-B/CD)
2019/03/20(水) 05:59:53.51ID:Jx7dUCON0 >>824
規格では正しくないプログラムをill-formedという
つまり正しくないプログラムも記載されているということだ
別に規格に限ったことではない
あるものが何であって何でないという境界を明確化するのは
ごく当たり前のものの書き方だ
規格では正しくないプログラムをill-formedという
つまり正しくないプログラムも記載されているということだ
別に規格に限ったことではない
あるものが何であって何でないという境界を明確化するのは
ごく当たり前のものの書き方だ
835デフォルトの名無しさん (ドコグロ MMdf-jA9u)
2019/03/20(水) 06:44:57.57ID:nNN3jHgVM >>834
> あるものが何であって何でないという境界を明確化するのは
すでに明確だろ?
「正しいプログラムでないプログラム」は「正しくないプログラム」
正しいプログラムの定義は書いてあるから境界はすでに明確だよ
ill-formedとかの名前がどうのこうのは関係ない
> あるものが何であって何でないという境界を明確化するのは
すでに明確だろ?
「正しいプログラムでないプログラム」は「正しくないプログラム」
正しいプログラムの定義は書いてあるから境界はすでに明確だよ
ill-formedとかの名前がどうのこうのは関係ない
836デフォルトの名無しさん (ワッチョイ 13b6-B/CD)
2019/03/20(水) 06:54:48.64ID:Jx7dUCON0 >>835
もうやめろ見苦しいから
もうやめろ見苦しいから
837デフォルトの名無しさん (ドコグロ MMdf-jA9u)
2019/03/20(水) 07:09:56.04ID:nNN3jHgVM838デフォルトの名無しさん (ワッチョイ 13b6-B/CD)
2019/03/20(水) 07:25:49.13ID:Jx7dUCON0 どっちが見苦しいか他の連中に聞いてみな
839デフォルトの名無しさん (ワッチョイ a37b-47Me)
2019/03/20(水) 08:12:13.89ID:SCVZEQpp0 「未定義」と「不定」については Phinloda さんの↓も分かりやすいね。
少々古いのが難だけど、内容は今でも正しいと思う。
初級C言語Q&A(7)
ttp://www.st.rim.or.jp/~phinloda/cqa/cqa7.html
ところで、「不定の動作」であるが「未定義ではない」、
しかも「不定であることの影響をユーザが見ることができる」
コードの例って何かあるだろうか。
ちょいと考えてみたけど、不定の影響を見るために何かすると
そのせいで未定義の領域に突入しちゃうんだよ。
少々古いのが難だけど、内容は今でも正しいと思う。
初級C言語Q&A(7)
ttp://www.st.rim.or.jp/~phinloda/cqa/cqa7.html
ところで、「不定の動作」であるが「未定義ではない」、
しかも「不定であることの影響をユーザが見ることができる」
コードの例って何かあるだろうか。
ちょいと考えてみたけど、不定の影響を見るために何かすると
そのせいで未定義の領域に突入しちゃうんだよ。
840デフォルトの名無しさん (ドコグロ MMdf-jA9u)
2019/03/20(水) 08:12:56.46ID:nNN3jHgVM842デフォルトの名無しさん (ワッチョイ 13b6-B/CD)
2019/03/20(水) 09:38:01.32ID:Jx7dUCON0843デフォルトの名無しさん (ドコグロ MMdf-jA9u)
2019/03/20(水) 10:13:53.38ID:nNN3jHgVM844デフォルトの名無しさん (ドコグロ MMdf-jA9u)
2019/03/20(水) 10:14:13.87ID:nNN3jHgVM >>842
はいはい、一人で吠えてろよw
はいはい、一人で吠えてろよw
845デフォルトの名無しさん (ワッチョイ 93d2-mVPS)
2019/03/20(水) 10:40:40.56ID:3Av4Lhjq0846デフォルトの名無しさん (ワッチョイ 8f7c-kdx8)
2019/03/20(水) 10:45:39.91ID:L8bJW9Z40 未定義たぁ不定野郎だ
847デフォルトの名無しさん (ドコグロ MMdf-jA9u)
2019/03/20(水) 12:24:13.19ID:nNN3jHgVM >>845
そういう話をしたいならまずは君の言う「間違い」とやらをきちんと定義してくれ
そういう話をしたいならまずは君の言う「間違い」とやらをきちんと定義してくれ
848デフォルトの名無しさん (ワッチョイ 93d2-mVPS)
2019/03/20(水) 12:34:48.75ID:3Av4Lhjq0 そもそも間違いを定義したくないから未定義にしたんだから定義できるわけないよな
849デフォルトの名無しさん (アウアウウー Sae7-6Ib2)
2019/03/20(水) 12:48:55.48ID:OxEz5Koua [翻訳]あなたがプログラミングに向いていない10のサイン - Qiita
https://qiita.com/hareku/items/4bfc48e23e83e0d300f3
1 好奇心の欠如
2 自律性と機知の欠如
3 問題に直面しても粘り強さが無い
4 問題解決に成功した気持ちはない
5 学習と理解に焦る
6 思考に飽きたり疲れたりする
7 自分のことを考えられない
8 堅く、狭く、そして無秩序な考え
9 複数の答えの間の「良い」と「悪い」の連続性に気付かず、「正しい」答えを望んでいる
10 細部に注意を払っていない
https://qiita.com/hareku/items/4bfc48e23e83e0d300f3
1 好奇心の欠如
2 自律性と機知の欠如
3 問題に直面しても粘り強さが無い
4 問題解決に成功した気持ちはない
5 学習と理解に焦る
6 思考に飽きたり疲れたりする
7 自分のことを考えられない
8 堅く、狭く、そして無秩序な考え
9 複数の答えの間の「良い」と「悪い」の連続性に気付かず、「正しい」答えを望んでいる
10 細部に注意を払っていない
850デフォルトの名無しさん (ワッチョイ 13b6-B/CD)
2019/03/20(水) 15:33:42.99ID:Jx7dUCON0851デフォルトの名無しさん (ワッチョイ 93d2-mVPS)
2019/03/20(水) 15:42:05.78ID:3Av4Lhjq0852デフォルトの名無しさん (ワッチョイ 23dc-B/CD)
2019/03/20(水) 15:53:53.83ID:knvp6QUa0 ワロタw
853デフォルトの名無しさん (アークセー Sx07-kI3O)
2019/03/20(水) 15:57:42.67ID:+9jdpzuGx854デフォルトの名無しさん (ワッチョイ 13b6-B/CD)
2019/03/20(水) 16:28:25.34ID:Jx7dUCON0 ブーメランぶっ刺さってやんのwww
855デフォルトの名無しさん (ワッチョイ 13b6-B/CD)
2019/03/20(水) 16:36:56.04ID:Jx7dUCON0 日本語を勉強すべきだの、あほかだのと、無礼な態度は若気の至りと
こちらは目を瞑って色々と箇条番号やらキーワードやら出してやってたが
そろそろ見限る頃だな
こちらは目を瞑って色々と箇条番号やらキーワードやら出してやってたが
そろそろ見限る頃だな
856デフォルトの名無しさん (ワッチョイ cf63-kdx8)
2019/03/20(水) 16:44:53.17ID:fwuhbGCo0 暇でないなら、直ちに見限るべき
857デフォルトの名無しさん (ワッチョイ a37b-47Me)
2019/03/20(水) 17:24:29.94ID:SCVZEQpp0 >>841 >>843 (少々長くなった、読みにくくてすまぬ)
2つの関数があって、それらを「同時に」使う式で評価順が不定、
しかも未定義ではない、というのは分かるんだ。
int foo(void) {return 1;}
int bar(void) {return 2;}
func(foo(), bar()); // 関数引数の foo(), bar() どちらが先に呼ばれる?
int a = foo() + bar(); // 式中の foo(), bar() どちらが先に呼ばれる?
・どちらが先に呼ばれても同じ結果が得られる(後者では a の値は 3 になる)
・どちらが先に呼ばれたかをユーザが知ることは不可能
ところが、呼ばれた瞬間を捕まえてやろうと、関数に仕掛けを施すと…
int foo(void) {printf("foo()\n"); return 1;}
int bar(void) {printf("bar()\n"); return 2;}
「二つの副作用完了点の間に、オブジェクトの値を2回以上変更」という、
未定義の動作になっちゃうんだよ(俺はここで勘違いをしてるのだろうか?)。
printf() の内部状態もオブジェクトだろうからね。出力バッファとか。
・どちらが先に呼ばれるか表示される、おそらく結果は同じ(a == 3)だろう
・しかし、このプログラムには未定義の動作が含まれている
実際問題としては printf() を差し込んでも動作が変わらないように
うまくライブラリが作られてると思うけどね。
この投稿の趣旨は、「不定の動作であっても、結果を使うだけなら
プログラムとして正しい。しかし、不定の動作の内実を探ろうとすると、
その活動によって未定義動作を含んだプログラムになってしまう」っていう
不確定性原理みたいな何かが規格に仕込まれてるんじゃないか、という疑い。
(別に陰謀論をブチ上げようって意図はないので安心してくれ)
2つの関数があって、それらを「同時に」使う式で評価順が不定、
しかも未定義ではない、というのは分かるんだ。
int foo(void) {return 1;}
int bar(void) {return 2;}
func(foo(), bar()); // 関数引数の foo(), bar() どちらが先に呼ばれる?
int a = foo() + bar(); // 式中の foo(), bar() どちらが先に呼ばれる?
・どちらが先に呼ばれても同じ結果が得られる(後者では a の値は 3 になる)
・どちらが先に呼ばれたかをユーザが知ることは不可能
ところが、呼ばれた瞬間を捕まえてやろうと、関数に仕掛けを施すと…
int foo(void) {printf("foo()\n"); return 1;}
int bar(void) {printf("bar()\n"); return 2;}
「二つの副作用完了点の間に、オブジェクトの値を2回以上変更」という、
未定義の動作になっちゃうんだよ(俺はここで勘違いをしてるのだろうか?)。
printf() の内部状態もオブジェクトだろうからね。出力バッファとか。
・どちらが先に呼ばれるか表示される、おそらく結果は同じ(a == 3)だろう
・しかし、このプログラムには未定義の動作が含まれている
実際問題としては printf() を差し込んでも動作が変わらないように
うまくライブラリが作られてると思うけどね。
この投稿の趣旨は、「不定の動作であっても、結果を使うだけなら
プログラムとして正しい。しかし、不定の動作の内実を探ろうとすると、
その活動によって未定義動作を含んだプログラムになってしまう」っていう
不確定性原理みたいな何かが規格に仕込まれてるんじゃないか、という疑い。
(別に陰謀論をブチ上げようって意図はないので安心してくれ)
858デフォルトの名無しさん (ワッチョイ 13b6-B/CD)
2019/03/20(水) 17:44:50.88ID:Jx7dUCON0 >>857
そのコードが未定義かどうかは達成しようとしている目的による
たとえば、こういう場合
int x = 0;
int foo(void) { return ++x; }
int bar(void) { return ++x; }
int main(void)
{
int y = foo() - bar();
assert(y == -1);
}
fooとbarの実行順序に依存すると
実行順序は未規定だが、未規定に依存することは禁止で、
その禁止を破ったせいでmainの動作が未定義となる
これに対して、
int foo(void) {return 1;}
int bar(void) {return 2;}
int main(void)
{
int y = foo() - bar();
assert(y == -1);
}
この例では未規定の動作を含むが
その未規定がどう転んでも影響がない、
つまり依存していないので未定義の動作とはならない
そのコードが未定義かどうかは達成しようとしている目的による
たとえば、こういう場合
int x = 0;
int foo(void) { return ++x; }
int bar(void) { return ++x; }
int main(void)
{
int y = foo() - bar();
assert(y == -1);
}
fooとbarの実行順序に依存すると
実行順序は未規定だが、未規定に依存することは禁止で、
その禁止を破ったせいでmainの動作が未定義となる
これに対して、
int foo(void) {return 1;}
int bar(void) {return 2;}
int main(void)
{
int y = foo() - bar();
assert(y == -1);
}
この例では未規定の動作を含むが
その未規定がどう転んでも影響がない、
つまり依存していないので未定義の動作とはならない
859デフォルトの名無しさん (ワッチョイ 13b6-B/CD)
2019/03/20(水) 17:46:07.38ID:Jx7dUCON0 というわけで、printfで実行順序を見てやろうという目的なら
どちらが先でも、その目的が達成できるので未定義の動作ではない
どちらが先でも、その目的が達成できるので未定義の動作ではない
860デフォルトの名無しさん (ワッチョイ 8369-QTaE)
2019/03/20(水) 17:52:06.04ID:11QE5ZAQ0 >>857
printf(..., printf(), printf()); こういうのとは違って
仕込んだ printf() の完了点はあくまで文末の; であって
printf() の内部状態変遷による未定義は踏まずに済むような気がする
printf(..., printf(), printf()); こういうのとは違って
仕込んだ printf() の完了点はあくまで文末の; であって
printf() の内部状態変遷による未定義は踏まずに済むような気がする
861はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 6f3e-kdx8)
2019/03/20(水) 18:12:44.03ID:K9L8gFp50862デフォルトの名無しさん (スフッ Sd1f-QpYv)
2019/03/20(水) 18:13:55.67ID:xQ4G2GlCd863デフォルトの名無しさん (スッップ Sd1f-wbaK)
2019/03/20(水) 18:18:36.19ID:fE2Kl8w7d 冷静な議論ならともかく、レスバ状態になると各々有利な立場になろうとしてだんだんと話が逸れてくんだよな。
864デフォルトの名無しさん (ワッチョイ 738f-kbMb)
2019/03/20(水) 18:27:17.55ID:Or7antuS0 「レスバ状態」というのは「レスバトル状態」の意味ということでよろしいか
20世紀の「レスって何」を思い出すが…
20世紀の「レスって何」を思い出すが…
865デフォルトの名無しさん (スッップ Sd1f-wbaK)
2019/03/20(水) 18:30:12.38ID:fE2Kl8w7d >>864
yes
yes
866デフォルトの名無しさん (ドコグロ MMdf-jA9u)
2019/03/20(水) 18:35:51.85ID:nNN3jHgVM >>857
2回以上変更しなきゃいいんなら
int i=0;
int a[2]={0,0};
int foo(void){i=1; return 0;}
int bar(void){a[i]=1; return 0;}
でいいんじゃね?
a[0]=0; a[1]=1; ならfoo() ⇒ bar()
a[0]=1; a[1]=0; ならbar() ⇒ foo()
の順
2回以上変更しなきゃいいんなら
int i=0;
int a[2]={0,0};
int foo(void){i=1; return 0;}
int bar(void){a[i]=1; return 0;}
でいいんじゃね?
a[0]=0; a[1]=1; ならfoo() ⇒ bar()
a[0]=1; a[1]=0; ならbar() ⇒ foo()
の順
867デフォルトの名無しさん (ワッチョイ 13b6-B/CD)
2019/03/20(水) 19:15:28.64ID:Jx7dUCON0868857 == 839 (ワッチョイ a37b-47Me)
2019/03/20(水) 19:18:49.33ID:SCVZEQpp0869デフォルトの名無しさん (ブーイモ MMe7-ouNb)
2019/03/20(水) 19:22:36.34ID:TUtYbyGsM >>867
端末になにか表示されている、ファイルに文字が追記されている、というのが「状態」だよ。
端末になにか表示されている、ファイルに文字が追記されている、というのが「状態」だよ。
870デフォルトの名無しさん (ドコグロ MMdf-jA9u)
2019/03/20(水) 19:25:59.48ID:nNN3jHgVM871デフォルトの名無しさん (ワッチョイ 13b6-B/CD)
2019/03/20(水) 19:39:28.59ID:Jx7dUCON0 >>869
つまりstdioさらにはデバドラがRENTかREUSかって問題ということで
じゃあ別プロセスでprintfを使われたら未定義動作ならHello worldすらill-formedって話だな
つまりstdioさらにはデバドラがRENTかREUSかって問題ということで
じゃあ別プロセスでprintfを使われたら未定義動作ならHello worldすらill-formedって話だな
872857 == 839 (ワッチョイ a37b-47Me)
2019/03/20(水) 21:01:55.22ID:SCVZEQpp0 >>866 の案も未定義な感じ。
EXP30-C. 副作用が発生する式の評価順序に依存しない
ttps://www.jpcert.or.jp/sc-rules/c-exp30-c.html
本文冒頭の引用部 (ISO/IEC 9899:2011 セクション 6.5 らしい) より再引用
> スカラオブジェクトへの副作用が、このオブジェクトへの別の副作用、
> または、このオブジェクトの値を使った演算、のいずれかに対して
> 順序が規定されていない場合、未定義の動作となる。
foo() の i=1; が「スカラオブジェクト i への副作用(代入)」
bar() の a[i]=1; が「このオブジェクト i の値を使った演算(配列の添字)」
に該当するかと。
ちなみに前述の Phinloda さんのページだと【未定義の例】にある
二つの副作用完了点の間に、オブジェクトの値を2回以上変更している場合、
又は変更した後で新しい値を得ること以外の目的でそのオブジェクトを
アクセスしている場合。
の部分と思われるが、ちょいと分かりにくいね。
…いや、自分で紹介しといて、その言い草はないだろ、と我ながら思うけど。
EXP30-C. 副作用が発生する式の評価順序に依存しない
ttps://www.jpcert.or.jp/sc-rules/c-exp30-c.html
本文冒頭の引用部 (ISO/IEC 9899:2011 セクション 6.5 らしい) より再引用
> スカラオブジェクトへの副作用が、このオブジェクトへの別の副作用、
> または、このオブジェクトの値を使った演算、のいずれかに対して
> 順序が規定されていない場合、未定義の動作となる。
foo() の i=1; が「スカラオブジェクト i への副作用(代入)」
bar() の a[i]=1; が「このオブジェクト i の値を使った演算(配列の添字)」
に該当するかと。
ちなみに前述の Phinloda さんのページだと【未定義の例】にある
二つの副作用完了点の間に、オブジェクトの値を2回以上変更している場合、
又は変更した後で新しい値を得ること以外の目的でそのオブジェクトを
アクセスしている場合。
の部分と思われるが、ちょいと分かりにくいね。
…いや、自分で紹介しといて、その言い草はないだろ、と我ながら思うけど。
873857 == 839 (ワッチョイ a37b-47Me)
2019/03/20(水) 21:33:10.02ID:SCVZEQpp0 >>867 返答が前後して失礼。
printf() が持つ(かもしれない)状態ってのは、例えば
出力バッファ(fflush() で強制的に吐き出させるアレ)の
使用量を管理するカウンタかポインタか、そのあたりを考えてた。
もちろん stdout のバッファリングを禁止すれば、この場合に
printf() を安全に使えると考えてるわけでもないのだけど。
むしろ「不定の評価順序を調べるのに printf() を使えるなら、もっと簡単で
末端プログラマに読めるソースコードで実現できるんじゃないか」って感じ。
ライブラリ関数だと、中で実際に何をやってるか見えないからね。
>>849 の 3, 6 あたりに該当してきたので、本日はここまで。
…というか「バーナム効果」って奴じゃないの?
printf() が持つ(かもしれない)状態ってのは、例えば
出力バッファ(fflush() で強制的に吐き出させるアレ)の
使用量を管理するカウンタかポインタか、そのあたりを考えてた。
もちろん stdout のバッファリングを禁止すれば、この場合に
printf() を安全に使えると考えてるわけでもないのだけど。
むしろ「不定の評価順序を調べるのに printf() を使えるなら、もっと簡単で
末端プログラマに読めるソースコードで実現できるんじゃないか」って感じ。
ライブラリ関数だと、中で実際に何をやってるか見えないからね。
>>849 の 3, 6 あたりに該当してきたので、本日はここまで。
…というか「バーナム効果」って奴じゃないの?
874デフォルトの名無しさん (ワッチョイ ff01-jA9u)
2019/03/20(水) 22:01:51.83ID:XMH8sO2j0 >>872
> bar() の a[i]=1; が「このオブジェクト i の値を使った演算(配列の添字)」
> に該当するかと。
なるほど
よくよく考えたらそのリンク先の未規定の例を参考にして
int i=0;
int foo(void){i=1; return 0;}
int bar(void){i=2; return 0;}
でいいと思う
> bar() の a[i]=1; が「このオブジェクト i の値を使った演算(配列の添字)」
> に該当するかと。
なるほど
よくよく考えたらそのリンク先の未規定の例を参考にして
int i=0;
int foo(void){i=1; return 0;}
int bar(void){i=2; return 0;}
でいいと思う
875KAC (ワッチョイ 6f68-YrE5)
2019/03/20(水) 22:13:24.28ID:47yan6gC0 なにやら話がややこしい方向に行ってるけど、
そもそも関数の呼び出しは副作用完了点だぞ?
そもそも関数の呼び出しは副作用完了点だぞ?
876デフォルトの名無しさん (アウアウエー Sac2-v7M6)
2019/03/21(木) 10:46:08.11ID:Jl2vA9O/a C言語初心者です。
やっとポインタの学習にさしかかったところです。
C言語におけるポインタという概念と、
メモリの間接アドレス指定とは似ていると思ったのですが、
この感覚は間違っていますか?
やっとポインタの学習にさしかかったところです。
C言語におけるポインタという概念と、
メモリの間接アドレス指定とは似ていると思ったのですが、
この感覚は間違っていますか?
877デフォルトの名無しさん (ワッチョイ 4aa5-1NWo)
2019/03/21(木) 10:57:18.81ID:BSODtxQx0 間違ってないです
>>876
いいセンスです
いいセンスです
879デフォルトの名無しさん (ワッチョイ de63-0zLl)
2019/03/21(木) 12:35:12.10ID:QKEEZEuZ0 ポインタの理解の前にメモリ間接アドレス指定をご存じな人ってすごいw
880デフォルトの名無しさん (ワッチョイ 4e7c-0zLl)
2019/03/21(木) 12:42:31.97ID:A52ypKFV0881デフォルトの名無しさん (スフッ Sdea-aUKp)
2019/03/21(木) 12:56:03.12ID:0TbsGGEWd 今どきその順番で始める初学者がどれだけいるのかね
882876 (アウアウエー Sac2-v7M6)
2019/03/21(木) 13:15:33.98ID:y6QadYkWa883デフォルトの名無しさん (アウアウカー Sacb-/mZx)
2019/03/21(木) 14:04:09.43ID:u3ljjJr7a まだCASLとかあんの?
884デフォルトの名無しさん (ワッチョイ 5f8f-VfNx)
2019/03/21(木) 16:01:46.89ID:hWT+U/v40885デフォルトの名無しさん (アウアウエー Sac2-0zLl)
2019/03/23(土) 02:49:51.66ID:OxlPANCja セミコロン2つ並ぶのってどういう意味でしょ?最初は誤植かとおもいましたが
for(i = n;;){ ←ここ
if(strcmp(hogehogehogehogehoge
for(i = n;;){ ←ここ
if(strcmp(hogehogehogehogehoge
886デフォルトの名無しさん (アウアウウー Sa2f-/mZx)
2019/03/23(土) 03:00:16.33ID:lRnozO4Da for のかっこの中は二個あるじゃん、いつも
887デフォルトの名無しさん (ワッチョイ de8f-VfNx)
2019/03/23(土) 03:14:04.86ID:0Wp5e8jo0 >>885 で for ループを使う必然性って何だろう
while でも良いように見える
while でも良いように見える
889デフォルトの名無しさん (ワッチョイ 0b7b-v3gc)
2019/03/23(土) 06:17:45.22ID:jegHMgvE0 確かに for (i = n;;) /* 初期化あり, 継続条件なし, 更新なし */ よりは
i = n; // 初期化
for (;;) // 無限ループ, 終了判定はループ内
の方が for の使い方では見慣れた書き方だよな。
というか for (i = n;;) を見せられたら、いったん立ち止まって
頭の中で2行分けに翻訳して理解すると思うわ。
i = n; // 初期化
for (;;) // 無限ループ, 終了判定はループ内
の方が for の使い方では見慣れた書き方だよな。
というか for (i = n;;) を見せられたら、いったん立ち止まって
頭の中で2行分けに翻訳して理解すると思うわ。
890デフォルトの名無しさん (ワッチョイ 07f5-rXtv)
2019/03/23(土) 06:25:51.88ID:2BzPzaMr0 while(1) に難癖つけてくるコンパイラって具体的に何だ?
891デフォルトの名無しさん (ワッチョイ dbab-aIip)
2019/03/23(土) 06:42:04.57ID:WDi4jE890 HPUXだった気がす
892デフォルトの名無しさん (ワッチョイ de8f-VfNx)
2019/03/23(土) 07:22:12.89ID:0Wp5e8jo0 https://www.sejuku.net/blog/25197#continue
で
if(i + 1 < 3) {
と書かれていて i < 2 でないのは何故でしょうか
先進的なコンパイラだと自動的に最適化されるものなのでしょうか
で
if(i + 1 < 3) {
と書かれていて i < 2 でないのは何故でしょうか
先進的なコンパイラだと自動的に最適化されるものなのでしょうか
893デフォルトの名無しさん (ワッチョイ b301-rXtv)
2019/03/23(土) 07:38:42.49ID:lQ0YIRmF0 while (1 == 1)
894デフォルトの名無しさん (ワッチョイ 0b7b-v3gc)
2019/03/23(土) 08:03:50.35ID:jegHMgvE0 >>892
実行結果を見ると、最初に表示されるのは「3回目の処理です」だね。
この 3 はループ変数 i から算出される値。
最初に表示したい値である 3 を if の条件式の中にも書いておく方が
プログラムが何をやってるか(3を表示する状態になるまで continue する)を
読み取りやすいという考え方かと。
if (i < 2) を見て「i < 2 の間は continue される。i == 2 になったら
continue されずに下の処理に進む。すると最初に表示される数字は i + 1 で 3」
と理解するより簡単だろう(とプログラムを書いた人が考えたのだろう)。
実験したところ、ちゃんと最適化されるみたいね。
if (i + 1 < 3) でも、アセンブリの方では 2 との比較になってた。
実行結果を見ると、最初に表示されるのは「3回目の処理です」だね。
この 3 はループ変数 i から算出される値。
最初に表示したい値である 3 を if の条件式の中にも書いておく方が
プログラムが何をやってるか(3を表示する状態になるまで continue する)を
読み取りやすいという考え方かと。
if (i < 2) を見て「i < 2 の間は continue される。i == 2 になったら
continue されずに下の処理に進む。すると最初に表示される数字は i + 1 で 3」
と理解するより簡単だろう(とプログラムを書いた人が考えたのだろう)。
実験したところ、ちゃんと最適化されるみたいね。
if (i + 1 < 3) でも、アセンブリの方では 2 との比較になってた。
895デフォルトの名無しさん (ワッチョイ 07f5-rXtv)
2019/03/23(土) 08:08:46.89ID:2BzPzaMr0896デフォルトの名無しさん (ワッチョイ 07f5-rXtv)
2019/03/23(土) 08:09:19.77ID:2BzPzaMr0 >>893
それを言うなら while(!0) だろ
それを言うなら while(!0) だろ
897デフォルトの名無しさん (スフッ Sdea-aUKp)
2019/03/23(土) 08:16:45.51ID:hkiXoQ0jd everlasting的な英単語を1でdefineしてwhileに突っ込んで無限ループ作ってるコードなら見たことある
却って分かりにくかった
却って分かりにくかった
898デフォルトの名無しさん (ワッチョイ 0777-9FTr)
2019/03/23(土) 08:20:29.61ID:3KsHUf0Y0 >>897
悪いなのび太、それ単体試験用のマクロなんだ
悪いなのび太、それ単体試験用のマクロなんだ
899デフォルトの名無しさん (ワッチョイ 07f5-rXtv)
2019/03/23(土) 08:30:38.60ID:2BzPzaMr0 #define forever while(1)
これでええやん
これでええやん
900デフォルトの名無しさん (アウアウエー Sac2-0zLl)
2019/03/23(土) 14:07:37.70ID:OxlPANCja 知りたいことが答えてもらえないが文脈からさっすると
for(i = n;;)は ;; こいつが無限ループさせる whileのときの (1)みたいなもんなんかな
そうなると i = n って表記は i が nといっしょやったらずっと無限ループしとけってことになるんかな
んーそうう考えると for(;;)だったら無条件でループやっとけって感じでつかえそうだけど i = nならとかなんか条件はいるなら ;; こんなん
つかわんでももっと他になかったんじゃろかと思うな。 しかしこのテキスト何の説明もなくいきなりあんな技使いやがってやぶりすてたろか
for(i = n;;)は ;; こいつが無限ループさせる whileのときの (1)みたいなもんなんかな
そうなると i = n って表記は i が nといっしょやったらずっと無限ループしとけってことになるんかな
んーそうう考えると for(;;)だったら無条件でループやっとけって感じでつかえそうだけど i = nならとかなんか条件はいるなら ;; こんなん
つかわんでももっと他になかったんじゃろかと思うな。 しかしこのテキスト何の説明もなくいきなりあんな技使いやがってやぶりすてたろか
901デフォルトの名無しさん (ワッチョイ c602-rXtv)
2019/03/23(土) 14:23:08.16ID:Bvojjkpo0 >>900
for 分のカッコ内は必ずセミコロンが2つ必要で、最初の項目は変数の初期化、2番目の項目は終了条件、
3番目の項目はブロックの最後に実行させる(主に変数をインクリメントしたりデクリメントしたりする)処理だ。
この項目が抜けていた場合はその処理に関して何もしない。例えば2番目の項目が抜けていたら終了条件なし
(つまり無限ループ)になる。
まあ入門書見ればわかると思うが、これの置き換えだ。
i = 1;
while (i < 3) {
/* 何かの処理 */
i++;
}
↓
for (i = 1; i < 3; i++) {
/* 何かの処理 */
}
特別なのは終了条件が空の場合は終了させなくなる事だけ。
for 分のカッコ内は必ずセミコロンが2つ必要で、最初の項目は変数の初期化、2番目の項目は終了条件、
3番目の項目はブロックの最後に実行させる(主に変数をインクリメントしたりデクリメントしたりする)処理だ。
この項目が抜けていた場合はその処理に関して何もしない。例えば2番目の項目が抜けていたら終了条件なし
(つまり無限ループ)になる。
まあ入門書見ればわかると思うが、これの置き換えだ。
i = 1;
while (i < 3) {
/* 何かの処理 */
i++;
}
↓
for (i = 1; i < 3; i++) {
/* 何かの処理 */
}
特別なのは終了条件が空の場合は終了させなくなる事だけ。
902デフォルトの名無しさん (ワッチョイ c602-rXtv)
2019/03/23(土) 14:23:33.00ID:Bvojjkpo0 for 分じゃない for 文だ。
903デフォルトの名無しさん (ワッチョイ 0b7b-v3gc)
2019/03/23(土) 15:44:48.19ID:jegHMgvE0 >>900
すまんね。>>885 の質問を見て、普通の for の使い方、つまり
for (初期化; 継続条件; 再初期化) は理解してると感じたのだ。
その辺の説明は >>901 を見てもらうとして、ちょっと気になった点。
for (i = n;;) の i = n は「i が n に等しければ…」ではなく、
「i に n の値を代入する」だよ。等しいかの判定には == (イコール2個)を使う。
for の普通の使い方では「ループ制御変数 i の値を n に初期化」ということ。
代入の = (イコール1個)と、等値判定の == (イコール2個)は、
携帯端末で見分けにくかったりするのかな。
自分では新式の装置を使わないので、そういう部分に思い至らなくてな。
すまんね。>>885 の質問を見て、普通の for の使い方、つまり
for (初期化; 継続条件; 再初期化) は理解してると感じたのだ。
その辺の説明は >>901 を見てもらうとして、ちょっと気になった点。
for (i = n;;) の i = n は「i が n に等しければ…」ではなく、
「i に n の値を代入する」だよ。等しいかの判定には == (イコール2個)を使う。
for の普通の使い方では「ループ制御変数 i の値を n に初期化」ということ。
代入の = (イコール1個)と、等値判定の == (イコール2個)は、
携帯端末で見分けにくかったりするのかな。
自分では新式の装置を使わないので、そういう部分に思い至らなくてな。
904デフォルトの名無しさん (ワッチョイ 6f02-DTGA)
2019/03/23(土) 16:17:36.63ID:dHpVxeMm0 お願いします。OSはcentos7です
メルセンヌツイスタを使って、ひとつだけ乱数を出したいのですが
乱数を出す間隔が非常に狭く、以下の関数でtime(NULL)を用いると
同じ乱数ばっかり出てきてしまいます。
※関数はコレを使ってます
http://www.sat.t.u-tokyo.ac.jp/~omi/random_variables_generation.html
たとえば、1回関数を実行して、ひとつ乱数を生成。
それを、秒間20や、30繰り返したとしても異なる乱数が出てくる方法ってありませんでしょうか
勝手なお願いですが、できる限り簡単な方法でお願いします。
VBAでパチンコシミュレーターを作ったのですが、
実行速度が非常に遅く、もっと高速化するためにCの勉強を始めたばっかりです
メルセンヌツイスタを使って、ひとつだけ乱数を出したいのですが
乱数を出す間隔が非常に狭く、以下の関数でtime(NULL)を用いると
同じ乱数ばっかり出てきてしまいます。
※関数はコレを使ってます
http://www.sat.t.u-tokyo.ac.jp/~omi/random_variables_generation.html
たとえば、1回関数を実行して、ひとつ乱数を生成。
それを、秒間20や、30繰り返したとしても異なる乱数が出てくる方法ってありませんでしょうか
勝手なお願いですが、できる限り簡単な方法でお願いします。
VBAでパチンコシミュレーターを作ったのですが、
実行速度が非常に遅く、もっと高速化するためにCの勉強を始めたばっかりです
レス数が900を超えています。1000を超えると表示できなくなるよ。
ニュース
- 【日本は5位に】インドの名目GDPが日本を抜き5位へ… ★2 [BFU★]
- 備蓄米、売り渡し価格47%安く 「店頭5キロ2000円」水準 [少考さん★]
- 【国民民主】支持率下落に危機感…山尾氏ら擁立にSNS「変な流れになってきた」 ★2 [蚤の市★]
- 【日本は5位に】インドの名目GDPが日本を抜き4位へ… ★3 [BFU★]
- 【テレビ】『サンモニ』寺島実郎氏、高騰するコメに「日本人は賢くならないと」「各家庭が10%消費減らしたら価格は下がる」 [ネギうどん★]
- 【音楽】Mrs. GREEN APPLEメンバー 生放送で衝撃姿「可愛すぎてやばい」「お人形さんみたい」 [ネギうどん★]
- 【朗報】小泉大臣「玄米60キロあたり11000円で放出します!」(前回22000円) [455679766]
- 農林水産省、5kgあたり963円で業者に備蓄米を売却!!!業者は5kg2160円で愚民に売却!!! [252835186]
- お尻の~♪アナルの前で~♪
- 日本政府、税金50兆円を使ってアメリカのための投資ファンドを設立へ。投資対象はアメリカのAI企業とインフラだけで孫正義に全権委任 [709039863]
- 野田佳彦「今の年金はあんこが入っていないんですよ。あんこなしのアンパンじゃやなせたかしさんに申し訳ないと思わないの?」 [402859164]
- 【悲報】万博の虫さん、自販機にびっしり張り付き、飲み物もろくに買えない事態に😭👉 [359965264]