!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
C23 最新ドラフト
https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3047.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言語なら俺に聞け 160
https://mevius.5ch.net/test/read.cgi/tech/1672191630/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
探検
C言語なら俺に聞け 161
レス数が1000を超えています。これ以上書き込みはできません。
1デフォルトの名無しさん (ワッチョイ 0f63-sFbk)
2023/04/21(金) 14:05:20.18ID:rqj2HSDF02デフォルトの名無しさん (ワッチョイ a702-em59)
2023/04/21(金) 16:20:56.29ID:cgpIrgwq0 >>1
大儀である
大儀である
3デフォルトの名無しさん (ワッチョイ 87da-S3w6)
2023/04/21(金) 16:21:57.14ID:5coQdqNr0 久々に麻呂のクソースを見たいでおじゃるか?
4デフォルトの名無しさん (ワッチョイ 87da-S3w6)
2023/04/21(金) 22:04:31.33ID:euEROcVR0 久々に来たけど、C言語はもう人気が無いんかね・・・
5デフォルトの名無しさん (ワッチョイ 5fad-soEM)
2023/04/21(金) 22:53:09.84ID:kZ6jl2XB0 人気って
C言語で作れなんて非効率的なことする人はそういないのでは?
C言語じゃないとダメな環境を除いて
C言語で作れなんて非効率的なことする人はそういないのでは?
C言語じゃないとダメな環境を除いて
6はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5f3e-S3w6)
2023/04/21(金) 23:38:19.84ID:Ro9IllZr0 各分野に適したものがあるならそれを使うに越したことは無い。
C が本当に「適している」と言える分野ってそんなに広くないじゃろ……。
どういう言語が適しているのかよくわからんかちょうどよい言語なければ長い物にまかれることになるわけだけど、
様々な分野でそれぞれのよりよい言語が生まれて「長い物」の価値が薄れるならそれは喜ばしいことだと思う。
C が本当に「適している」と言える分野ってそんなに広くないじゃろ……。
どういう言語が適しているのかよくわからんかちょうどよい言語なければ長い物にまかれることになるわけだけど、
様々な分野でそれぞれのよりよい言語が生まれて「長い物」の価値が薄れるならそれは喜ばしいことだと思う。
7デフォルトの名無しさん (ワッチョイ 6dda-ASru)
2023/04/22(土) 00:24:12.00ID:PKFQM5A+0 プログラムをする人が、コンピュータの基本的な知識が無いまましてしまうから
簡単な記述で出来る言語が登場したからかね?
単純に同じ演算を繰り返して比較すると、C言語は処理速度が一番速いとのこと
データを処理するには適しているかと
簡単な記述で出来る言語が登場したからかね?
単純に同じ演算を繰り返して比較すると、C言語は処理速度が一番速いとのこと
データを処理するには適しているかと
8デフォルトの名無しさん (ワッチョイ 6663-RykB)
2023/04/22(土) 01:13:10.92ID:pp00Xtk80 FFTやらせたら、どの言語が一番速いだろうか
9デフォルトの名無しさん (テテンテンテン MM3e-HodF)
2023/04/22(土) 01:14:00.87ID:BwPMbYSuM Cの知識はC++をする時に当然必要になる
CはTIOBE言語ランキングで2位で、C++は4位だ
逆に使えない奴はモグリだろw
CはTIOBE言語ランキングで2位で、C++は4位だ
逆に使えない奴はモグリだろw
10デフォルトの名無しさん (ワッチョイ 7502-PEO9)
2023/04/22(土) 03:04:47.05ID:WcjcWdD/0 Cを知り、アセンブラを知って、ハードアーキテクチャが分かる
11デフォルトの名無しさん (ワッチョイ 5963-/Rus)
2023/04/22(土) 07:44:16.17ID:rMU69DRU0 ハードの入り口に立つというだけ
Cより遙かに深い世界の
Cより遙かに深い世界の
12デフォルトの名無しさん (ワッチョイ 6663-RykB)
2023/04/22(土) 12:23:54.03ID:pp00Xtk80 それにしても、ネットは広大だわ。
13デフォルトの名無しさん (ワッチョイ 1146-0EuI)
2023/04/22(土) 16:05:32.27ID:QfqbbaWF0 Cの奥地が広いと言うならネットはなお広いではないか。
14デフォルトの名無しさん (ワッチョイ 5963-/Rus)
2023/04/22(土) 16:39:16.87ID:rMU69DRU0 デジタル3年
アナログ5年
高周波10年
なんて言うね
で、おまえらCはどのくらいでおぼえた?
仕事で使えるレベルになるまでに
アナログ5年
高周波10年
なんて言うね
で、おまえらCはどのくらいでおぼえた?
仕事で使えるレベルになるまでに
>>14
高周波は、あの分布定数の立体回路が謎に満ちていましたよね、あれ、どうやって設計するんだろう?
高周波は、あの分布定数の立体回路が謎に満ちていましたよね、あれ、どうやって設計するんだろう?
16デフォルトの名無しさん (ワッチョイ 5d2d-YWDm)
2023/04/22(土) 18:24:03.40ID:RQNj/O5w0 この世にはプログラミング言語はPHPとJavascriptしか無いと思ってるエンジニア()がたくさんいるから
Pythonの存在も知ってるけどあれはオシャレな感じがしないしオタクがやるものだと思ってる
Pythonの存在も知ってるけどあれはオシャレな感じがしないしオタクがやるものだと思ってる
17デフォルトの名無しさん (スッププ Sd0a-kSx0)
2023/04/22(土) 19:05:57.81ID:Ul/bNVNnd >>14
蟹飯の本は事前に読んでたけど、半年かかった
周りが旧帝工学系院卒ばっかだったから勉強したわ
おれ、旧帝数学だったからポインタとか分からんかった
でも、今ではわしの方が崇められる
日々「チャラい関数、マクロで被せろ」を軸に頑張っとる
蟹飯の本は事前に読んでたけど、半年かかった
周りが旧帝工学系院卒ばっかだったから勉強したわ
おれ、旧帝数学だったからポインタとか分からんかった
でも、今ではわしの方が崇められる
日々「チャラい関数、マクロで被せろ」を軸に頑張っとる
18デフォルトの名無しさん (アウウィフ FF21-1cZQ)
2023/04/23(日) 18:42:16.06ID:y593Lq73F PHPはホントごみ
19デフォルトの名無しさん (ワッチョイ aa97-+JPf)
2023/04/24(月) 12:59:52.39ID:6nEVjUPW0 親を殺されたのか
かわいそうに
かわいそうに
20デフォルトの名無しさん (スププ Sd0a-hOeP)
2023/04/24(月) 14:15:55.03ID:U9n/COjud21デフォルトの名無しさん (オイコラミネオ MMb1-U1Ip)
2023/04/24(月) 18:03:05.84ID:IXNCOIDlM int (func) (int n)
みたいに関数に()付けるのって何の意味(機能)ですか?
みたいに関数に()付けるのって何の意味(機能)ですか?
22デフォルトの名無しさん (スプッッ Sd6d-LN7w)
2023/04/24(月) 18:08:06.16ID:MExTF0xDd 関数ポインタ
23デフォルトの名無しさん (ワッチョイ 5963-/Rus)
2023/04/24(月) 20:21:25.09ID:TGYcq0jn0 違う! 関数そのもの
#define func(x) (func)(x)
マクロではない「本物の」funcを呼び出すのに使う
#define func(x) (func)(x)
マクロではない「本物の」funcを呼び出すのに使う
24デフォルトの名無しさん (ワッチョイ c55f-ASru)
2023/04/24(月) 21:25:50.42ID:4M8+MweU0 int (func) (int n) となると宣言の文脈だからそれも違うだろう。
>>21 その記述だけでは a*b+c を (a*b)+c と書いたのと同じで、少なくともその括弧自体には何の効果もない。
何か意味があると思うなら書いた人に聞くしかない。
>>21 その記述だけでは a*b+c を (a*b)+c と書いたのと同じで、少なくともその括弧自体には何の効果もない。
何か意味があると思うなら書いた人に聞くしかない。
25デフォルトの名無しさん (オイコラミネオ MMb1-U1Ip)
2023/04/24(月) 21:43:56.47ID:IXNCOIDlM いやまあ愚痴なんだけど教科書や入門書ってなんでか知らんけど関数ポインタもったいつけて教えたがらないよね…
26デフォルトの名無しさん (ワッチョイ 7502-kSx0)
2023/04/24(月) 23:20:26.15ID:MovxHIrx0 素人さんには関数ポインタはむずいだろ
関数のポインタをベクトル化してジャンプテーブル代わりになるんもん
つまりスイッチケースが要らない、言う事
関数のポインタをベクトル化してジャンプテーブル代わりになるんもん
つまりスイッチケースが要らない、言う事
27デフォルトの名無しさん (ワッチョイ 6663-RykB)
2023/04/24(月) 23:23:14.11ID:CIhFKz1G0 ジャンプテーブル使うのと、switch case と、
どちらが高速でしょうね?
どちらが高速でしょうね?
28デフォルトの名無しさん (テテンテンテン MM3e-HodF)
2023/04/24(月) 23:32:25.83ID:RQPVcVj5M >>23
それが上手く行くのは、マクロが再帰呼び出しされないような処理が入ってるからだろ
それが上手く行くのは、マクロが再帰呼び出しされないような処理が入ってるからだろ
29デフォルトの名無しさん (テテンテンテン MM3e-HodF)
2023/04/24(月) 23:45:11.28ID:RQPVcVj5M ジャンプテーブルを使うと、変数の引き渡しに手間が掛かる
構造体のポインタを渡すとか、引数を沢山渡すとかグローバル変数を使うとか
なので、switch文にして最適化でテーブルジャンプになるのを確認するのがベストかなと
構造体のポインタを渡すとか、引数を沢山渡すとかグローバル変数を使うとか
なので、switch文にして最適化でテーブルジャンプになるのを確認するのがベストかなと
30デフォルトの名無しさん (スプッッ Sdea-8Xzj)
2023/04/25(火) 08:47:58.80ID:2JpsSRmdd gcc拡張機能のラベルのジャンプテーブルが速かった思い出
あれは規格に取り込むべきだと思う
あれは規格に取り込むべきだと思う
31デフォルトの名無しさん (ワッチョイ 5e5f-RykB)
2023/04/25(火) 10:23:58.24ID:dvdIAVRA0 それってどんなのだっけか
関数を配列にぶっこんだの?
関数を配列にぶっこんだの?
32デフォルトの名無しさん (ワッチョイ 5963-/Rus)
2023/04/25(火) 10:35:38.43ID:VJ90Sqw80 FORTRANの算術GOTOみたいなもんかな
33デフォルトの名無しさん (ワッチョイ 5963-/Rus)
2023/04/25(火) 10:36:32.19ID:VJ90Sqw80 switch caseを最適化させるとジャンプテーブルになっていることはよくあるね
34デフォルトの名無しさん (ワッチョイ 11c9-+rDk)
2023/04/25(火) 11:21:54.95ID:RcvlMMml0 開発環境の都合で C言語しか選択できず
C++ の virtual に相当する機構をなんとか捏造しようと
構造体に関数のポインタをメンバに持つ
あと qsort のまねっこ
(具体的な比較は外に丸投げして そういう関数がある前提でコードを書く
C++ の virtual に相当する機構をなんとか捏造しようと
構造体に関数のポインタをメンバに持つ
あと qsort のまねっこ
(具体的な比較は外に丸投げして そういう関数がある前提でコードを書く
35デフォルトの名無しさん (スフッ Sd0a-8Xzj)
2023/04/25(火) 11:33:32.92ID:Y1VsObgtd36デフォルトの名無しさん (ワッチョイ c55f-ASru)
2023/04/25(火) 12:02:12.18ID:zIgvDwJV0 >>28 (func)(x) に対して関数型マクロ func(x) の展開は起こらないよ。
37デフォルトの名無しさん (ワッチョイ 5963-/Rus)
2023/04/25(火) 12:24:03.71ID:VJ90Sqw80 調べてみた
Computed gotoってやつね
int main(void)
{
void *table[] = { &&L1, &&L2 };
goto *table[1];
L1: ;
L2: ;
}
Computed gotoってやつね
int main(void)
{
void *table[] = { &&L1, &&L2 };
goto *table[1];
L1: ;
L2: ;
}
38デフォルトの名無しさん (ワッチョイ 5963-/Rus)
2023/04/25(火) 12:27:03.54ID:VJ90Sqw8039デフォルトの名無しさん (スップ Sdea-kSx0)
2023/04/25(火) 12:52:44.87ID:HIwqDhB5d お、そんなん出来るんか
40デフォルトの名無しさん (スプッッ Sdea-i/u1)
2023/04/25(火) 14:07:55.49ID:xfobd0gld 話の流れからして
#define func(arg) hoge(arg)
みたいな関数形式マクロがいた場合、
単に void func(int a){} と書くと void hoge(int a){}に置換されて死ぬ。
回避策で void (func)(int a){} としとけば展開されないよ
ってことじゃないの?
#define func(arg) hoge(arg)
みたいな関数形式マクロがいた場合、
単に void func(int a){} と書くと void hoge(int a){}に置換されて死ぬ。
回避策で void (func)(int a){} としとけば展開されないよ
ってことじゃないの?
41デフォルトの名無しさん (ワッチョイ c55f-ASru)
2023/04/25(火) 14:18:02.95ID:zIgvDwJV0 確かに、そういう効果はあるね。
それが必要になる状況は思い浮かばないけども。
それが必要になる状況は思い浮かばないけども。
42デフォルトの名無しさん (スップ Sd0a-cnX/)
2023/04/25(火) 18:35:24.79ID:uZ/SnCfyd 関数と同名のマクロがわざわざ定義されてるとしたらなんか事情がありそうだが
#undef func
したほうが早くね
#undef func
したほうが早くね
43デフォルトの名無しさん (ワッチョイ 7d01-+rDk)
2023/04/25(火) 18:49:03.51ID:xUlKX7o40 #undef の後に undef する前へリカバーできるようにする機構ってコンパイラの環境依存だよね
(リカバーのための仕込み)
#undef func
:
void func()
{
}
:
undefのリカバー (以下 func はマクロ側)
:
(リカバーのための仕込み)
#undef func
:
void func()
{
}
:
undefのリカバー (以下 func はマクロ側)
:
44デフォルトの名無しさん (スップ Sd0a-cnX/)
2023/04/25(火) 19:09:41.44ID:uZ/SnCfyd ひょっとして>>21って
void qsort(void *base, size_t nmemb, size_t size,
int (*compar)(const void *, const void *));
みたいな書き方のこと?
この場合はカッコなし int *compar(const void *, const void *)
だとintへのポインタを返す関数の実体ということになり
引数宣言内に関数の実体を書くなと言われてしまうだろう
void qsort(void *base, size_t nmemb, size_t size,
int (*compar)(const void *, const void *));
みたいな書き方のこと?
この場合はカッコなし int *compar(const void *, const void *)
だとintへのポインタを返す関数の実体ということになり
引数宣言内に関数の実体を書くなと言われてしまうだろう
45デフォルトの名無しさん (オイコラミネオ MMb1-U1Ip)
2023/04/25(火) 21:38:43.47ID:ZKj27A06M46デフォルトの名無しさん (オイコラミネオ MMb1-U1Ip)
2023/04/25(火) 21:43:41.07ID:ZKj27A06M47デフォルトの名無しさん (ワッチョイ 66cf-/HYv)
2023/04/25(火) 22:14:03.47ID:OJFKrU7J0 要は関数ポインタ知らなくてバカにされただけのおじさんか
const voidだもんな
const voidだもんな
48デフォルトの名無しさん (ワッチョイ 5963-/Rus)
2023/04/25(火) 22:18:12.16ID:VJ90Sqw80 アホすぎて笑う価値もないな
49デフォルトの名無しさん (スップ Sd0a-cnX/)
2023/04/25(火) 22:25:14.13ID:T6e/oFBcd50デフォルトの名無しさん (スップ Sd0a-cnX/)
2023/04/25(火) 22:37:41.81ID:T6e/oFBcd ああ、それで「関数」ではなく「関数へのポインタ」が定義できるのか
関数の型をtypedefしてからやったほうがわかりやすくない?
WindowsAPIでは大体そんな形になってるから真似してるけど
宣言
typedef int COMP_FUNC(const void *, const void *);
COMP_FUNC comp_A;
COMP_FUNC comp_B;
COMP_FUNC *comp_func = comp_A;
切り替える時
comp_func = comp_B;
呼び出す時
comp_func(...);
関数の型をtypedefしてからやったほうがわかりやすくない?
WindowsAPIでは大体そんな形になってるから真似してるけど
宣言
typedef int COMP_FUNC(const void *, const void *);
COMP_FUNC comp_A;
COMP_FUNC comp_B;
COMP_FUNC *comp_func = comp_A;
切り替える時
comp_func = comp_B;
呼び出す時
comp_func(...);
51デフォルトの名無しさん (ワッチョイ 66cf-/HYv)
2023/04/25(火) 22:50:45.68ID:OJFKrU7J0 typedefがめっちゃ気持ち悪い宣言だな
普通はアスタリスクつけてポインタとしてtypedefするもんだと思うよ
sizeof(COMP_FUNC)がいくつになるのか見当がつかない不気味なオブジェクトだ
普通はアスタリスクつけてポインタとしてtypedefするもんだと思うよ
sizeof(COMP_FUNC)がいくつになるのか見当がつかない不気味なオブジェクトだ
52はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2a3e-ASru)
2023/04/25(火) 23:29:28.69ID:ug7UW9j70 sizeof は関数型の式に対して適用してはならないと制約されているから
関数だったときの結果は未定義で、常識的に考えればコンパイラはエラー扱いにするべきだと思うんだけど
gcc や clang だと何故かエラーにならず 1 を返すんだよな。
(警告は出るけど。)
検出が難しいはずもない (実際に警告は出せてるわけだし) のになんでこうなってんだろ。
1 でなんか便利なことある?
関数だったときの結果は未定義で、常識的に考えればコンパイラはエラー扱いにするべきだと思うんだけど
gcc や clang だと何故かエラーにならず 1 を返すんだよな。
(警告は出るけど。)
検出が難しいはずもない (実際に警告は出せてるわけだし) のになんでこうなってんだろ。
1 でなんか便利なことある?
53デフォルトの名無しさん (ワッチョイ c55f-uFYM)
2023/04/26(水) 02:32:17.99ID:2SSTMM1B0 まあ、入門書は比較的難しいことを書かないほうが売れそうだけどな
でもそれを勿体つけるというのは違うかと
でもそれを勿体つけるというのは違うかと
54デフォルトの名無しさん (ワッチョイ eaad-WJN6)
2023/04/26(水) 03:51:37.33ID:5gh45PFo0 >>50
WINAPIの書き方はこうじゃない?
typedef int (WINAPI *COMP_FUNC)(const void *, const void *);
int WINAPI comp_A(const void *, const void *);
COMP_FUNC comp_func = comp_A;
WINAPIの書き方はこうじゃない?
typedef int (WINAPI *COMP_FUNC)(const void *, const void *);
int WINAPI comp_A(const void *, const void *);
COMP_FUNC comp_func = comp_A;
55デフォルトの名無しさん (ワッチョイ a5cf-aV8w)
2023/04/26(水) 07:41:17.76ID:wJGIaQxR0 >>51
C++だとポインタじゃない方は関数メンバの宣言にも使えて便利だったりする。
C++だとポインタじゃない方は関数メンバの宣言にも使えて便利だったりする。
56デフォルトの名無しさん (ワッチョイ 11c9-+rDk)
2023/04/26(水) 08:44:09.62ID:dG3YoJcz057デフォルトの名無しさん (ワッチョイ 5d2d-YWDm)
2023/04/26(水) 08:54:20.40ID:v/InlOgJ0 前者は関数名そのものをポインタとして使い、後者はポインタを明示的に指定することで関数ポインタとして扱う
58デフォルトの名無しさん (ワッチョイ 5963-YWDm)
2023/04/26(水) 09:12:09.71ID:UWqGaqQz059デフォルトの名無しさん (ワッチョイ c55f-ASru)
2023/04/26(水) 09:27:27.18ID:mF8gxL16060デフォルトの名無しさん (ワッチョイ 5963-/Rus)
2023/04/26(水) 09:46:45.42ID:UWqGaqQz0 COMP_FUNC comp_A;
COMP_FUNC comp_B;
こう書かれても仮引数や返却値の型が見えないので
可読性を落としているな
COMP_FUNC comp_B;
こう書かれても仮引数や返却値の型が見えないので
可読性を落としているな
61デフォルトの名無しさん (アウアウウー Sa21-YWDm)
2023/04/26(水) 09:48:32.91ID:N7+hGpB4a >>48
ほんそれ
ほんそれ
62はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2a3e-ASru)
2023/04/26(水) 10:33:18.60ID:NF11/Xrv0 >>56
* をいくつ付けても通るのは有名なネタだな。
#include <stdio.h>
int main(void) {
(**********printf)("hello, world\n");
}
関数指示子 (結果が関数型であるような式) は sizeof や & の
オペランドであるときを除いて関数ポインタに (暗黙に) 型変換されるという規則があって、
普通に printf("hello, world\n"); とか書いてあるときでもこの printf は関数ポインタに変換されてる。
関数呼出しは関数に対してではなく関数ポインタに対して行われる。
関数ポインタに * を付けると関数指示子になるけどそれもやっぱり関数ポインタに変換されるので
* をいくつつけても結果は関数ポインタという変なことになる。
* をいくつ付けても通るのは有名なネタだな。
#include <stdio.h>
int main(void) {
(**********printf)("hello, world\n");
}
関数指示子 (結果が関数型であるような式) は sizeof や & の
オペランドであるときを除いて関数ポインタに (暗黙に) 型変換されるという規則があって、
普通に printf("hello, world\n"); とか書いてあるときでもこの printf は関数ポインタに変換されてる。
関数呼出しは関数に対してではなく関数ポインタに対して行われる。
関数ポインタに * を付けると関数指示子になるけどそれもやっぱり関数ポインタに変換されるので
* をいくつつけても結果は関数ポインタという変なことになる。
63デフォルトの名無しさん (アウアウウー Sa21-YWDm)
2023/04/26(水) 11:39:43.86ID:N7+hGpB4a そもそもポインタに代入するときも
int a(int b)
{
return b + 1;
}
int (*f)(int) = &a;
じゃなくて
int (*f)(int) = a;
で通るからな
int a(int b)
{
return b + 1;
}
int (*f)(int) = &a;
じゃなくて
int (*f)(int) = a;
で通るからな
64デフォルトの名無しさん (ワッチョイ 5963-/Rus)
2023/04/26(水) 13:38:42.38ID:UWqGaqQz0 f(0); //こうできるしな
65デフォルトの名無しさん (ワッチョイ 11c9-+rDk)
2023/04/26(水) 14:31:03.82ID:dG3YoJcz066はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2a3e-ASru)
2023/04/26(水) 17:00:12.69ID:NF11/Xrv0 余談だが >>62 はあくまでも C の場合の話で、
C++ では名前解決の話が合わさって複雑になってる。
関数呼出しのときに関数名を括弧で囲むかどうかで結果が変わってしまう場合がある。
https://wandbox.org/permlink/MO8NWeVmjoLTLly6
C のコードを C++ に持っていくことはそれなりにあることなので
変な書き方をしてると組み合わせの妙で引っかかることもあるかもね。
C++ では名前解決の話が合わさって複雑になってる。
関数呼出しのときに関数名を括弧で囲むかどうかで結果が変わってしまう場合がある。
https://wandbox.org/permlink/MO8NWeVmjoLTLly6
C のコードを C++ に持っていくことはそれなりにあることなので
変な書き方をしてると組み合わせの妙で引っかかることもあるかもね。
67デフォルトの名無しさん (スップ Sd0a-cnX/)
2023/04/26(水) 20:23:11.35ID:WMGk7nvid 正直どうでもいい
遠い昔Z80のニモニックでJP (HL)と書くけど本来はJP HLとなるはずじゃないかなと思ってたけどそれと同じw
遠い昔Z80のニモニックでJP (HL)と書くけど本来はJP HLとなるはずじゃないかなと思ってたけどそれと同じw
68デフォルトの名無しさん (ワッチョイ 2a4b-ywdm)
2023/04/26(水) 20:32:10.51ID:XZbLdYRG0 まぁ普通は関数名をカッコで括ったりしないし
69デフォルトの名無しさん (ワッチョイ ea79-lTfL)
2023/04/26(水) 21:13:49.50ID:zbbRZmOB0 Cで関数のポインタガーとかやってる暇あったらC#のデレゲートとかラムダとか覚えた方がいいとおもった午後
70デフォルトの名無しさん (ワッチョイ 0afb-i/u1)
2023/04/26(水) 21:41:13.75ID:tw2MKSIb0 「min」と「max」の関数形式マクロをわざわざ定義する.hがあるらしい
71デフォルトの名無しさん (ワッチョイ 5d2d-YWDm)
2023/04/27(木) 00:02:52.04ID:6BBE08oV0 stdbool.hでも覗いてみればいい
72デフォルトの名無しさん (ワッチョイ 7502-kSx0)
2023/04/27(木) 05:12:28.80ID:sEk/rgYZ073デフォルトの名無しさん (ワッチョイ a902-V++f)
2023/04/27(木) 08:37:39.22ID:OthllRbe0 コンバイラ?
74デフォルトの名無しさん (テテンテンテン MM3e-HodF)
2023/04/27(木) 09:03:22.20ID:AVBMGEcwM コンバトラーV
75デフォルトの名無しさん (ワッチョイ 2a7c-fzJl)
2023/04/27(木) 13:43:25.58ID:kFL/uqTX0 JP (HL)って8080だとPCHLだっけ
アセンブラがとことん楽するようなニモニックだったな…
アセンブラがとことん楽するようなニモニックだったな…
76デフォルトの名無しさん (テテンテンテン MM8f-HoNx)
2023/05/01(月) 16:24:43.62ID:8iWiof/XM 関数の引数リストの中で新たな構造体を定義するってことってできないの?
void func(struct X{int a;} b){
... something ...
}
みたいに?
構文上は可能だと思うんだけどどうなんですか?
void func(struct X{int a;} b){
... something ...
}
みたいに?
構文上は可能だと思うんだけどどうなんですか?
77デフォルトの名無しさん (スフッ Sdbf-oZQI)
2023/05/01(月) 18:21:57.14ID:sEB4u3D3d 構造体が使われる場所より前で定義する必要がある
78デフォルトの名無しさん (オイコラミネオ MM4f-ylw9)
2023/05/01(月) 19:09:18.47ID:Cn3LrXy/M79デフォルトの名無しさん (オイコラミネオ MM4f-ylw9)
2023/05/01(月) 19:15:34.08ID:Cn3LrXy/M80デフォルトの名無しさん (オイコラミネオ MM4f-ylw9)
2023/05/01(月) 19:29:42.98ID:Cn3LrXy/M 未だに初っ端からコンソールにハローワールド表示させるとこから教えてるんだろうね勿体つけオジサンたちは
81デフォルトの名無しさん (オイコラミネオ MM4f-ylw9)
2023/05/01(月) 19:36:49.71ID:Cn3LrXy/M 勿体つけオジサンたちはChatGTPで「C言語で関数名に()付けるのって何ですか?」って聞いてみればいいよ
機械以下のゴミw
機械以下のゴミw
82デフォルトの名無しさん (ワッチョイ 3702-ITaW)
2023/05/01(月) 19:44:56.10ID:cY285a3R0 医者から処方された薬は指示通り飲まないとだめだぞ
83デフォルトの名無しさん (ワッチョイ ff63-fitb)
2023/05/01(月) 20:12:14.98ID:kp1qtDVi0 配列に対してポインタでアクセスするとか、単純な者だと絵に描けば大体理解出来るが
構造体内のポインタ変数やら、さらに配列かして行くと、記述もすんなりとできなくなるし
ましてや別人が書いたソースで、それらが一体何をアクセスしているのか理解するのは大変だ
構造体内のポインタ変数やら、さらに配列かして行くと、記述もすんなりとできなくなるし
ましてや別人が書いたソースで、それらが一体何をアクセスしているのか理解するのは大変だ
84デフォルトの名無しさん (スプッッ Sd3f-rFN3)
2023/05/01(月) 20:21:43.22ID:RHMPP4K9d >>76
返り値のほうならなぜかgccでいけた
まあ型推論がないC言語じゃあ役に立たないんだけど
// main.c
struct {int a;} func();
int main(){
printf("%d\n", func());
}
// other.c
int func(){ return 42;}
返り値のほうならなぜかgccでいけた
まあ型推論がないC言語じゃあ役に立たないんだけど
// main.c
struct {int a;} func();
int main(){
printf("%d\n", func());
}
// other.c
int func(){ return 42;}
85デフォルトの名無しさん (ワッチョイ 572d-wHlW)
2023/05/02(火) 02:30:44.97ID:FbQbKVUa0 void func(struct {int a;} b){
b.a = 10;
printf("%d\n", b.a);
}
tccでもこれ通るな
b.a = 10;
printf("%d\n", b.a);
}
tccでもこれ通るな
86はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9f3e-By2c)
2023/05/02(火) 11:04:32.32ID:HpVmkNB+0 >>76
私が知る限りにおいて文法上は正しい。
しかし X の有効範囲 (スコープ) は関数内だけなので
関数の外で struct X に対応する値を生成できず、
まともな方法では適切な実引数を与えることができない。
内容が同じ構造体は「適合」するし引数が適合する関数も適合するはずなので
強引にキャストして呼出しても言語仕様に反しないと思うのだけど
適合の概念をちゃんと理解できてる自信はない……
void func(struct X{int a;} b){}
int main(void) {
struct X{int a;} b = {1};
// このキャストはたぶんアリだと思うけど自信はない
void (*f)(struct X) = (void(*)(struct X))func;
f(b);
}
私が知る限りにおいて文法上は正しい。
しかし X の有効範囲 (スコープ) は関数内だけなので
関数の外で struct X に対応する値を生成できず、
まともな方法では適切な実引数を与えることができない。
内容が同じ構造体は「適合」するし引数が適合する関数も適合するはずなので
強引にキャストして呼出しても言語仕様に反しないと思うのだけど
適合の概念をちゃんと理解できてる自信はない……
void func(struct X{int a;} b){}
int main(void) {
struct X{int a;} b = {1};
// このキャストはたぶんアリだと思うけど自信はない
void (*f)(struct X) = (void(*)(struct X))func;
f(b);
}
87デフォルトの名無しさん (スップ Sdbf-s2+g)
2023/05/02(火) 20:11:42.15ID:ovfmjnkKd >>76
素直に最初に構造体をtypedef しとけば楽だと思うんですが
文法上で言えばstruct Xとだけ書いといて後でstruct Xの中身を定義しても正しい
もちろんそれでは関数スタックのサイズを計算できないのでエラーになるだろうが
素直に最初に構造体をtypedef しとけば楽だと思うんですが
文法上で言えばstruct Xとだけ書いといて後でstruct Xの中身を定義しても正しい
もちろんそれでは関数スタックのサイズを計算できないのでエラーになるだろうが
88デフォルトの名無しさん (アウアウウー Sa1b-wHlW)
2023/05/03(水) 14:42:04.19ID:wz1HqF7Da Cは
struct Hoge {int a;} b;
と
struct {int a;} b;
を区別しない
struct Hoge {int a;} b;
と
struct {int a;} b;
を区別しない
89デフォルトの名無しさん (ワッチョイ 975f-By2c)
2023/05/03(水) 15:45:19.73ID:1ndhLr9O090デフォルトの名無しさん (ワッチョイ 975f-By2c)
2023/05/03(水) 18:10:57.61ID:1ndhLr9O0 >>86
「内容が同じ構造体は「適合」する」について確認すると策定中の C23 から
内容に加えてタグ名まで同じ場合に限り適合する(compatible になる)ように変更されるようで、
現時点では正しくない模様。
https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3037.pdf
「内容が同じ構造体は「適合」する」について確認すると策定中の C23 から
内容に加えてタグ名まで同じ場合に限り適合する(compatible になる)ように変更されるようで、
現時点では正しくない模様。
https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3037.pdf
91はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f3e-By2c)
2023/05/04(木) 00:37:13.28ID:zfmlH8qj092デフォルトの名無しさん (ワッチョイ 975f-By2c)
2023/05/04(木) 01:26:39.82ID:KJPnL+/P0 >>91
あ、ごめん書き方が悪かった。
これまではタグ及び内容が同じでも適合しなかったところ、 C23 から適合するようになるという話。
有効になるプログラムが増えるので、どちらかというと緩くなる変更。
あ、ごめん書き方が悪かった。
これまではタグ及び内容が同じでも適合しなかったところ、 C23 から適合するようになるという話。
有効になるプログラムが増えるので、どちらかというと緩くなる変更。
93デフォルトの名無しさん (ワッチョイ 572d-wHlW)
2023/05/04(木) 04:12:02.40ID:W+5O3yqN0 急に凄くレベル低い話して申し訳ないんだけど
#include <stdio.h>
int main()
{
int a[101] = {};
a[0] = 2;
a[1] = 3;
for (int i = 4; i < 1000; i++) {
int r = 1, j;
for (j = 0; j <= 100 && a[j] != 0; j++) {
if ((i % a[j]) == 0) {
r = 0;
break;
}
}
printf("%d %d %d %d %d \n", i, j, a[j], i % a[j], r);
if (r)
a[j + 1] = i;
}
for (int i = 0; i < 100; i++)
printf("%d ", a[i]);
}
なんでこれ上手く動かないんだろう
#include <stdio.h>
int main()
{
int a[101] = {};
a[0] = 2;
a[1] = 3;
for (int i = 4; i < 1000; i++) {
int r = 1, j;
for (j = 0; j <= 100 && a[j] != 0; j++) {
if ((i % a[j]) == 0) {
r = 0;
break;
}
}
printf("%d %d %d %d %d \n", i, j, a[j], i % a[j], r);
if (r)
a[j + 1] = i;
}
for (int i = 0; i < 100; i++)
printf("%d ", a[i]);
}
なんでこれ上手く動かないんだろう
94デフォルトの名無しさん (ワッチョイ 9f79-zzYQ)
2023/05/04(木) 05:17:57.46ID:P5ZkmciJ0 このスレいつもレベル低いから大丈夫でしょ
上手く動かない?そもそもそのコードはどう動いて欲しいのか読み取れないんだよな
日頃から入出力を意識して書けって言われてない?まるで実践できてないからダメか
上手く動かない?そもそもそのコードはどう動いて欲しいのか読み取れないんだよな
日頃から入出力を意識して書けって言われてない?まるで実践できてないからダメか
95デフォルトの名無しさん (ワッチョイ ffe4-HoNx)
2023/05/04(木) 07:37:53.19ID:6SJC1K3b0 >>93
二つ目の for ループから抜ける条件の一つが「a[j]がゼロ」なのに、そのループから抜けた直後で i % a[j] とかやってて、jが2のときにa[2]が0でループから抜けるから、ゼロ除算で落ちる
それとこっちは直接の原因ではないけど、int a[101]と宣言すると a[0]~a[100]までしかアクセスできないのにa[102]までアクセスする可能性があるようなコードになってるのもダメだな
二つ目の for ループから抜ける条件の一つが「a[j]がゼロ」なのに、そのループから抜けた直後で i % a[j] とかやってて、jが2のときにa[2]が0でループから抜けるから、ゼロ除算で落ちる
それとこっちは直接の原因ではないけど、int a[101]と宣言すると a[0]~a[100]までしかアクセスできないのにa[102]までアクセスする可能性があるようなコードになってるのもダメだな
96デフォルトの名無しさん (スップ Sdbf-s2+g)
2023/05/04(木) 08:36:39.17ID:Hj8mrajJd とりあえず初期化するとき
int a[101] = {0,1,2};
と書いたほうが楽じゃん
ちなみに初期値がない部分は0になる
後はめんどくさいから明日読むわ
int a[101] = {0,1,2};
と書いたほうが楽じゃん
ちなみに初期値がない部分は0になる
後はめんどくさいから明日読むわ
97デフォルトの名無しさん (スップ Sdbf-s2+g)
2023/05/04(木) 08:46:33.13ID:Hj8mrajJd 間違えた
int a[101] = {1,2};
か
ちなみに int a[101] = {};
ではまったく初期化されないからこのプログラムでは[0][1]以外のところには0ではなく不定値が入ってるのでうまく動かないのはそれなんじゃね
int a[101] = {0};
と書いておけば省略した部分もすべての要素が0で初期化されるよ
int a[101] = {1,2};
か
ちなみに int a[101] = {};
ではまったく初期化されないからこのプログラムでは[0][1]以外のところには0ではなく不定値が入ってるのでうまく動かないのはそれなんじゃね
int a[101] = {0};
と書いておけば省略した部分もすべての要素が0で初期化されるよ
98デフォルトの名無しさん (ワッチョイ 9fad-/0wk)
2023/05/04(木) 09:36:07.29ID:GmhF7zKn0 >>93
i と j ってわかりづらいから j は k に置き換えて言うけど
i=4 のとき k=0 で 4%2 となり割り切れるため、何もせずに次
i=5 のとき k=2 で a[k]==0 なので k のループを抜ける(このときk==2でa[2])
抜けた後のif (r) a[k + 1] = i; で a[3] = 5 になっていて a[2] は 0 のまま
で0除算でドボン
まずはif (r) a[k + 1] = i; ではなく if (r) a[k] = i; だね
i と j ってわかりづらいから j は k に置き換えて言うけど
i=4 のとき k=0 で 4%2 となり割り切れるため、何もせずに次
i=5 のとき k=2 で a[k]==0 なので k のループを抜ける(このときk==2でa[2])
抜けた後のif (r) a[k + 1] = i; で a[3] = 5 になっていて a[2] は 0 のまま
で0除算でドボン
まずはif (r) a[k + 1] = i; ではなく if (r) a[k] = i; だね
99デフォルトの名無しさん (ワッチョイ 9fad-/0wk)
2023/05/04(木) 09:58:25.07ID:GmhF7zKn0 >>93
それとこれって素数を見つけるプログラムと思うけど、 1000までの間に163個あるっぽい
a の要素数はそれ以上必要
(0除算している部分のprintfがデバッグ用のように、デバッグで100までに制限しているのかもしれないけど)
一応言っておくと0除算でドボンは本質とはちょっと違うからね
if (r) a[j] = i;
printf("%d %d %d %d %d \n", i, j, a[j], i % a[j], r);
とa[j] への代入とデバッグ用のprintfの位置を入れ替えれば0除算は起きないから
それとこれって素数を見つけるプログラムと思うけど、 1000までの間に163個あるっぽい
a の要素数はそれ以上必要
(0除算している部分のprintfがデバッグ用のように、デバッグで100までに制限しているのかもしれないけど)
一応言っておくと0除算でドボンは本質とはちょっと違うからね
if (r) a[j] = i;
printf("%d %d %d %d %d \n", i, j, a[j], i % a[j], r);
とa[j] への代入とデバッグ用のprintfの位置を入れ替えれば0除算は起きないから
100デフォルトの名無しさん (ワッチョイ 572d-wHlW)
2023/05/04(木) 10:19:34.63ID:W+5O3yqN0101デフォルトの名無しさん (ワッチョイ 9710-fitb)
2023/05/04(木) 11:22:57.44ID:qhvAhFwp0 初期化は自動変数と静的変数で変わるんでしょ?
102デフォルトの名無しさん (ワッチョイ b7da-o+T5)
2023/05/04(木) 12:22:57.41ID:gcRtXg3v0 右辺のない変数宣言だけのパターンでは変わってくるけど
静的だろうが自動だろうが 初期化の = { } は 省略部以降すべて0 → 全部0フィル でしょ
静的だろうが自動だろうが 初期化の = { } は 省略部以降すべて0 → 全部0フィル でしょ
103デフォルトの名無しさん (ワッチョイ ff63-fitb)
2023/05/04(木) 12:26:03.41ID:ZxdTo52k0 初期化って必ず初期値を設定するものとばかり思ってた
104デフォルトの名無しさん (スッップ Sdbf-rFN3)
2023/05/04(木) 12:29:51.46ID:ocVXr2wXd 配列を「={};」で初期化したときの挙動は全要素が0埋めされるとC言語規格で決まってる
105はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f3e-By2c)
2023/05/04(木) 12:50:52.53ID:zfmlH8qj0106デフォルトの名無しさん (ワッチョイ 77bb-KSub)
2023/05/05(金) 01:44:39.83ID:Dgp4PAAq0 むかしニコ動で動画上げたらそのこと教えてくれた人いたな
今でも覚えてるわ
今でも覚えてるわ
107デフォルトの名無しさん (ワッチョイ cbc9-uTC/)
2023/05/08(月) 08:20:55.10ID:o4wr0iPb0 なので 全省略せずに = { 0 }; と書くことは多いね
108デフォルトの名無しさん (ワッチョイ 9354-ouLR)
2023/05/10(水) 14:54:20.05ID:Sp9BCNLV0 規制解除テスト
109デフォルトの名無しさん (ワッチョイ ff2d-GUq3)
2023/05/12(金) 07:37:29.65ID:uK8Qnmg70 https://ideone.com/Kj806d
うちの環境(tcc)だと
ビット操作の実行時間: 0.634000秒
一時変数の利用の実行時間: 0.444000秒
ポインタの利用の実行時間: 0.471000秒
になるんですね、最適化が弱いにしても完全に想像と逆の結果になって驚いてる
うちの環境(tcc)だと
ビット操作の実行時間: 0.634000秒
一時変数の利用の実行時間: 0.444000秒
ポインタの利用の実行時間: 0.471000秒
になるんですね、最適化が弱いにしても完全に想像と逆の結果になって驚いてる
110デフォルトの名無しさん (スプッッ Sd32-8wHc)
2023/05/12(金) 08:42:01.03ID:7oN7jOgdd ポインタのそれ交換できてるか?
111はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 123e-tcUg)
2023/05/12(金) 08:58:12.44ID:AJ54S3Uh0 CPU の性質も考慮する必要がある。
ビット演算はメモリのロード/ストアとは並列化できない分が効いて遅くなるんじゃないかと思う。
間接参照があればその分だけ遅くなるのも自然だし、想像通りだろ。
ビット演算はメモリのロード/ストアとは並列化できない分が効いて遅くなるんじゃないかと思う。
間接参照があればその分だけ遅くなるのも自然だし、想像通りだろ。
112デフォルトの名無しさん (スップ Sd32-c8cy)
2023/05/12(金) 08:58:57.96ID:dEJrL9Tpd gcc(-O2)で見てみたら核の部分はswap_bitsが6命令、swap_tempが4命令になってるね
swap_bits:
.LFB0:
.cfi_startproc
endbr64
cmpq %rsi, %rdi
je .L1
movl (%rdi), %eax
xorl (%rsi), %eax
movl %eax, (%rdi)
xorl (%rsi), %eax
movl %eax, (%rsi)
xorl %eax, (%rdi)
.L1:
ret
.cfi_endproc
swap_temp:
.LFB1:
.cfi_startproc
endbr64
cmpq %rsi, %rdi
je .L4
movl (%rdi), %eax
movl (%rsi), %edx
movl %edx, (%rdi)
movl %eax, (%rsi)
.L4:
ret
.cfi_endproc
swap_bits:
.LFB0:
.cfi_startproc
endbr64
cmpq %rsi, %rdi
je .L1
movl (%rdi), %eax
xorl (%rsi), %eax
movl %eax, (%rdi)
xorl (%rsi), %eax
movl %eax, (%rsi)
xorl %eax, (%rdi)
.L1:
ret
.cfi_endproc
swap_temp:
.LFB1:
.cfi_startproc
endbr64
cmpq %rsi, %rdi
je .L4
movl (%rdi), %eax
movl (%rsi), %edx
movl %edx, (%rdi)
movl %eax, (%rsi)
.L4:
ret
.cfi_endproc
113デフォルトの名無しさん (スプープ Sd52-V+RR)
2023/05/12(金) 22:24:54.99ID:josTNWjFd ビット演算はそりゃ遅いだろ
読んで演算して書く
よりも
読んで書く
のほうが早いに決まってるじゃん
読んで演算して書く
よりも
読んで書く
のほうが早いに決まってるじゃん
114はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 123e-tcUg)
2023/05/12(金) 23:57:42.36ID:AJ54S3Uh0 ビット演算バージョンの特徴は一時的な格納場所が不要なところにある。
レジスタに空きが無いときにメモリに退避するよりはビット演算のほうが
マシということはありうると思う。
素朴なアーキテクチャだとメモリの読み書きが (レジスタと比べて) だいぶん遅かったり
レジスタの数が少なかったりするし。
色々な条件が絡み合うので「決まってる」とまでは言い切れない。
レジスタに空きが無いときにメモリに退避するよりはビット演算のほうが
マシということはありうると思う。
素朴なアーキテクチャだとメモリの読み書きが (レジスタと比べて) だいぶん遅かったり
レジスタの数が少なかったりするし。
色々な条件が絡み合うので「決まってる」とまでは言い切れない。
115デフォルトの名無しさん (スプープ Sd1f-Ynfg)
2023/05/13(土) 07:20:30.86ID:q/ntHDOzd この件の場合は
関数の形でメモリから読んで書くことは確定だからそれ以上の最適化は不可能なので決まってるのだ
関数の形でメモリから読んで書くことは確定だからそれ以上の最適化は不可能なので決まってるのだ
116デフォルトの名無しさん (スッップ Sd1f-paFp)
2023/05/13(土) 12:31:34.66ID:scApfF3jd 大昔の技術
今使うやつはアホ
ビット演算の方が有意に速い事なんか無いよ
今使うやつはアホ
ビット演算の方が有意に速い事なんか無いよ
117デフォルトの名無しさん (ワッチョイ 335f-eWQc)
2023/05/13(土) 13:31:03.33ID:77gpFXkp0 論理演算はマシン語1命令だろw
118デフォルトの名無しさん (テテンテンテン MM7f-PaoB)
2023/05/13(土) 14:34:03.15ID:ToDbeQGOM std::swap使えばマシン語のxchgを使ってくれそうな気がするけどね
xchg使うのが最速だろう
Cにはstd::swapに相当するもんが無いな
xchg使うのが最速だろう
Cにはstd::swapに相当するもんが無いな
119デフォルトの名無しさん (スッップ Sd1f-paFp)
2023/05/13(土) 15:37:18.91ID:trdeSgBWd120デフォルトの名無しさん (スプープ Sd1f-Ynfg)
2023/05/13(土) 18:27:17.14ID:0CcYb4xxd121デフォルトの名無しさん (ワッチョイ cf34-TSnC)
2023/05/13(土) 18:39:48.47ID:Er9DBy9d0122デフォルトの名無しさん (スッップ Sd1f-paFp)
2023/05/13(土) 18:43:02.66ID:trdeSgBWd ×自分の頭で考える必要はない
○アホが工夫すると遅くなる
○アホが工夫すると遅くなる
123デフォルトの名無しさん (スッップ Sd1f-paFp)
2023/05/13(土) 18:46:13.79ID:trdeSgBWd 今では通用しない技術を偉そうに語る
老害の典型
==>はちみつ
老害の典型
==>はちみつ
124デフォルトの名無しさん (ワッチョイ cf34-TSnC)
2023/05/13(土) 18:50:59.33ID:Er9DBy9d0 身に覚えのあるやつがファビョってるね
ん~いい返事だ
ん~いい返事だ
125デフォルトの名無しさん (テテンテンテン MM7f-PaoB)
2023/05/13(土) 22:00:35.83ID:8DjxrcvEM >>119
遅いってのは、レジスタを余計に1つ消費する方法よりも更にデメリットが有るぐらい遅いのか?
遅いってのは、レジスタを余計に1つ消費する方法よりも更にデメリットが有るぐらい遅いのか?
126デフォルトの名無しさん (スプープ Sd1f-h+xE)
2023/05/13(土) 22:53:11.07ID:w2ITJ0dJd 最適化されてもmovより遅くならない程度で決して速くなることはない
おそらくもっと複雑な処理の途中でレジスタが全て使用中の場合にレジスタをスタック等に退避することなく値を交換するテクニックとして使われたら速くなるのかもしれんが
こんなシンプルなコードでは起きないだろう
おそらくもっと複雑な処理の途中でレジスタが全て使用中の場合にレジスタをスタック等に退避することなく値を交換するテクニックとして使われたら速くなるのかもしれんが
こんなシンプルなコードでは起きないだろう
127デフォルトの名無しさん (ワッチョイ ff79-ScEU)
2023/05/13(土) 23:18:57.76ID:6X/C93dk0 xorスワップは昔クヌースのメモリを使わないGCのマーク&スイープ手法だかで多用されてた気がする
当時はこれが神が作りしコードかあみたいに感動しかなかった
当時はこれが神が作りしコードかあみたいに感動しかなかった
128デフォルトの名無しさん (テテンテンテン MM7f-PaoB)
2023/05/13(土) 23:46:50.93ID:TLDrNKkXM >>126
普通のコードだとレジスタは常に足りてないだろ
ベンチマーク的なコードは本当の速度を表してないな
Benchmarks gameとかそれぐらい複雑なコードを複数動かしてやっと分かるもんだろうね
普通のコードだとレジスタは常に足りてないだろ
ベンチマーク的なコードは本当の速度を表してないな
Benchmarks gameとかそれぐらい複雑なコードを複数動かしてやっと分かるもんだろうね
129はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff3e-Phjm)
2023/05/13(土) 23:49:44.86ID:vqN1nVlv0 >>125
現代的な CPU だと直接的に使われるレジスタのほかに内部にはもっと多くのレジスタがあって
見かけ上はレジスタを余計に消費していても実際には一時的に割り当てられるレジスタなことがある。
いわるゆる「機械語」も CPU 内部ではさらに分解されてよりよい命令列に置き換えられるので
同じ機械語でも文脈によって違うことをしてる。
複雑すぎて詳細な挙動を事前に予測するのは無理。
xchg が存在するからには有用な場面もあるんだろうとは思うが、
結局のところは実際にやってみないとよくわからん。
現代的な CPU だと直接的に使われるレジスタのほかに内部にはもっと多くのレジスタがあって
見かけ上はレジスタを余計に消費していても実際には一時的に割り当てられるレジスタなことがある。
いわるゆる「機械語」も CPU 内部ではさらに分解されてよりよい命令列に置き換えられるので
同じ機械語でも文脈によって違うことをしてる。
複雑すぎて詳細な挙動を事前に予測するのは無理。
xchg が存在するからには有用な場面もあるんだろうとは思うが、
結局のところは実際にやってみないとよくわからん。
130デフォルトの名無しさん (ワッチョイ cfd6-aKqn)
2023/05/14(日) 01:15:20.67ID:XjDIggiO0 xchgはスピンロックを作るときに使うよね
131デフォルトの名無しさん (ワッチョイ cf34-TSnC)
2023/05/14(日) 07:12:36.39ID:YUNKAbGY0 変数のswapって、マシン語に限らずどこででも高い頻度で使うぞ
132デフォルトの名無しさん (スッップ Sd1f-paFp)
2023/05/14(日) 11:51:05.47ID:eMKrHX/5d133デフォルトの名無しさん (オイコラミネオ MMc7-UNvf)
2023/05/14(日) 19:49:42.92ID:9VZQjQ6WM アトミックのことかな
はちみつ氏のレスは慎重で丁寧だし、噛みつく必要はないだろう
はちみつ氏のレスは慎重で丁寧だし、噛みつく必要はないだろう
134デフォルトの名無しさん (ワッチョイ 335f-eWQc)
2023/05/14(日) 19:54:24.09ID:B0168DkC0 そもそもアセンブラででも書かない限りある値がレジスタに維持される期間は人間の考えとは異なるんだよなぁ
135デフォルトの名無しさん (ワッチョイ cf34-TSnC)
2023/05/14(日) 22:22:28.93ID:YUNKAbGY0 人間の考えw
人情っすか?
人情っすか?
136デフォルトの名無しさん (ワッチョイ cf63-ZkZz)
2023/05/14(日) 23:14:42.36ID:fNcGY7kH0 レジスター猫
137デフォルトの名無しさん (ワッチョイ 0310-ZkZz)
2023/05/15(月) 07:45:53.34ID:wYJ4tfRu0 シュレーディンガーのレジスター猫猫
138デフォルトの名無しさん (ワッチョイ cf46-1d5q)
2023/05/15(月) 10:53:41.51ID:Ro1LlfRG0 レンジ猫?
139デフォルトの名無しさん (ワッチョイ 3302-Cej3)
2023/05/15(月) 11:26:46.74ID:qSKQiR6e0 猫は電子レンジで乾かせません
140デフォルトの名無しさん (ワッチョイ ffad-ZkZz)
2023/05/15(月) 11:51:40.11ID:Bppn4Lb30 じゃあ何なら乾かせるんですか?
141デフォルトの名無しさん (ラクッペペ MM7f-fulC)
2023/05/15(月) 12:00:56.43ID:Uo8X26KHM タオルとドライヤー
142デフォルトの名無しさん (ワッチョイ ff97-7xmi)
2023/05/15(月) 12:22:52.88ID:L2eqquJo0 愛情を込めて暖める
143デフォルトの名無しさん (スプープ Sd1f-Ynfg)
2023/05/15(月) 20:16:31.37ID:8Cq/OAued つまんないボケはどうつっこんでもつまんない
144デフォルトの名無しさん (スプッッ Sd07-zj+H)
2023/05/16(火) 08:51:47.45ID:gG4dlKgfd 技術ないやつが妬みで荒らしてるだけだからな
145デフォルトの名無しさん (アウアウウー Sa67-+/XS)
2023/05/16(火) 15:56:44.97ID:mGp2Y9l5a DJNZがatomicだと思っていた時期が私にもありました
146デフォルトの名無しさん (ワッチョイ c301-Np+b)
2023/05/16(火) 20:31:19.40ID:afLAkRaY0 日本はC言語さえ難しいエンジニアもいるんだよな
147デフォルトの名無しさん (スッププ Sd1f-9cn8)
2023/05/16(火) 20:55:13.02ID:bTPsQg7Pd148デフォルトの名無しさん (スプッッ Sd1f-zj+H)
2023/05/17(水) 07:09:46.32ID:s9zxu+xkd 異分野からきた地頭のいい人がCも使えるようになると
おまえら仕事取られるぞ
おまえら仕事取られるぞ
149デフォルトの名無しさん (ワッチョイ 0310-ZkZz)
2023/05/17(水) 07:46:38.82ID:BUhbFeo00 外国人労働者が来たら、AI化されたら、昔から色んな業種で何度も言われてるわな。
150デフォルトの名無しさん (ワッチョイ ff97-7xmi)
2023/05/17(水) 13:27:27.48ID:hbqXME+r0 いろんな分野で確かに仕事を奪われている
151デフォルトの名無しさん (スプッッ Sd07-zj+H)
2023/05/17(水) 16:15:47.93ID:ZA2j/mjnd > AI化されたら
ここム板だよな
ここム板だよな
152デフォルトの名無しさん (スプープ Sd1f-Ynfg)
2023/05/17(水) 19:23:47.84ID:HVYpBx2Dd153デフォルトの名無しさん (スププ Sdea-i/qU)
2023/05/24(水) 06:34:08.09ID:TwXy7dIZd 前回のこのスレの投稿で関数名に()をつける場合があるという意味がわかった。#undefを使わなく
てもいいように関数に()をつける場合がある。
例
ans = (sqr)(n);
という具合に。
てもいいように関数に()をつける場合がある。
例
ans = (sqr)(n);
という具合に。
154デフォルトの名無しさん (ワッチョイ 6746-3pER)
2023/05/24(水) 07:05:53.93ID:ea8bFP4r0 void laugh(笑);
155デフォルトの名無しさん (ワンミングク MMbf-4z7j)
2023/05/31(水) 15:57:04.61ID:fnFbD7jZM 誰か笑いをとめてやってくれ
156デフォルトの名無しさん (ワッチョイ 0b6e-jMfM)
2023/05/31(水) 16:11:38.59ID:ck+UIxN/0 abort();
157デフォルトの名無しさん (ワッチョイ 1f36-S+HU)
2023/05/31(水) 18:02:31.09ID:vB7s5b6d0 GotoBlueScreen();
158デフォルトの名無しさん (ワッチョイ 0f63-S+HU)
2023/05/31(水) 18:16:26.97ID:i7J0Z4vH0 __halt();
159デフォルトの名無しさん (ワッチョイ 0b6e-jMfM)
2023/05/31(水) 21:00:07.40ID:ck+UIxN/0 void a() __attribute__((naked));
void a()
{
asm(" halt");
}
int main(void)
{
a();
}
void a()
{
asm(" halt");
}
int main(void)
{
a();
}
160デフォルトの名無しさん (ワッチョイ 7b02-lntT)
2023/05/31(水) 21:19:20.18ID:soKXUOD/0 [STOP]+[A]
161デフォルトの名無しさん (ワッチョイ 6ebb-tVFH)
2023/06/03(土) 19:40:08.42ID:hD2oGIQP0 文字列処理用のリングバッファ作ったんですが、同じ処理をint型でも行いたいです。
当たり前ですが、同じプログラムをint型に変えればできると思います。
ですが、処理自体は同じなので、共通化できないものでしょうか?
C++ではテンプレート関数を使えばできるようですが、純粋なC言語では難しいですか?
当たり前ですが、同じプログラムをint型に変えればできると思います。
ですが、処理自体は同じなので、共通化できないものでしょうか?
C++ではテンプレート関数を使えばできるようですが、純粋なC言語では難しいですか?
162蟻人間 ◆T6xkBnTXz7B0 (スフッ Sda2-lF3g)
2023/06/03(土) 19:48:40.44ID:Pce1Bw+fd >>161
#defineと#includeを使えばできるよ。
#defineと#includeを使えばできるよ。
163デフォルトの名無しさん (ワッチョイ 916e-aXLw)
2023/06/03(土) 20:14:57.23ID:SlTHxzvh0 俺的には#includeよりtypedefかな
164はちみつ餃子 ◆8X2XSCHEME (ワッチョイ c23e-N/Lw)
2023/06/03(土) 20:15:08.00ID:uQ0tYGRP0 もしくは void* と型の大きさにする形で型を消去してしまう (たとえば qsort のように) という選択肢もある。
間違った使い方をしても (型が消えているので) コンパイル時にエラーとして検出しづらくなる可能性があるけど。
まあどちらにしても C でやるのは煩雑。
使う型が二種類だけであることがわかっている状況だと仮定してよいなら
共通化しようとするよりもコピペしたほうがかえって楽というのもよくあること。
間違った使い方をしても (型が消えているので) コンパイル時にエラーとして検出しづらくなる可能性があるけど。
まあどちらにしても C でやるのは煩雑。
使う型が二種類だけであることがわかっている状況だと仮定してよいなら
共通化しようとするよりもコピペしたほうがかえって楽というのもよくあること。
165>>161 (ワッチョイ 6ebb-tVFH)
2023/06/03(土) 20:37:32.54ID:hD2oGIQP0 勉強目的なので、試してみます。
#defineでやるやり方は何となくわかるのですが、#includeよりtypedefとはどういうことですか?
void*もよくわからないので、こっちはまだ早そうです。
#defineでやるやり方は何となくわかるのですが、#includeよりtypedefとはどういうことですか?
void*もよくわからないので、こっちはまだ早そうです。
166デフォルトの名無しさん (ワッチョイ 916e-aXLw)
2023/06/03(土) 20:59:14.37ID:SlTHxzvh0 >>165
//fig1
#define ITERATOR int*
ITERATOR enq, deq;
//fig2
typedef int* ITERATOR;
ITERATOR enq, deq;
fig1ではdeqがポインタではなくなってしまうが
fig2ならこうした問題が起こらない
//fig1
#define ITERATOR int*
ITERATOR enq, deq;
//fig2
typedef int* ITERATOR;
ITERATOR enq, deq;
fig1ではdeqがポインタではなくなってしまうが
fig2ならこうした問題が起こらない
167163 (ワッチョイ 916e-aXLw)
2023/06/04(日) 12:47:37.50ID:u2u7Kc0T0 あ、言い間違えてんの今気がついたw
- #include
+ #define
すまんこ
- #include
+ #define
すまんこ
168デフォルトの名無しさん (オイコラミネオ MMe9-N/Lw)
2023/06/04(日) 21:00:21.62ID:/SPLhkOjM リストなどのコンテナ実装でデータの実態へはvoid*でポインタ指定すれば何でも格納できる
基本的にこれで汎用化できる
基本的にこれで汎用化できる
169デフォルトの名無しさん (スッププ Sda2-KKRM)
2023/06/04(日) 21:37:23.80ID:wPljDWped リングバッファくらい簡単なのはその都度作ればいいんじゃないと思う
細かく改良していけばスキルアップになるぞ
細かく改良していけばスキルアップになるぞ
170デフォルトの名無しさん (ワッチョイ 7d5f-6/Kp)
2023/06/04(日) 22:10:36.35ID:AabPy4gc0 初心者質問失礼します
scanf_sやfopen_sなどの関数が含まれたソースをgcc 9.4.0でコンパイルすると失敗するのですがこれは仕様でしょうか?
これらの関数はC11で定義されていますが基本的にMSVCでしか使えないという感じでしょうか?
scanf_sやfopen_sなどの関数が含まれたソースをgcc 9.4.0でコンパイルすると失敗するのですがこれは仕様でしょうか?
これらの関数はC11で定義されていますが基本的にMSVCでしか使えないという感じでしょうか?
171デフォルトの名無しさん (ワッチョイ 8279-BzDF)
2023/06/04(日) 22:33:01.16ID:ktuQYTFv0 やれやれ…初心者質問あるあるだけ回答しておこうか
「失敗する」とは一体をもって判断したのか。そもそも処理系から何かメッセージは出ていなかったのか。初心者と自覚するなら質問に主観は一切不要だからそれを書きなよ
「失敗する」とは一体をもって判断したのか。そもそも処理系から何かメッセージは出ていなかったのか。初心者と自覚するなら質問に主観は一切不要だからそれを書きなよ
172蟻人間 ◆T6xkBnTXz7B0 (スフッ Sda2-lF3g)
2023/06/04(日) 22:34:54.92ID:iTf1qDcyd -std=c11
173はちみつ餃子 ◆8X2XSCHEME (ワッチョイ c23e-N/Lw)
2023/06/04(日) 23:06:52.44ID:MHoxWKtY0 >>170
C11 で規定されているけれど仕様としてはオプショナルなもの。
つまり処理系はそれを提供しなくても仕様準拠を名乗れる。
ただし、提供するならばマクロ __STDC_LIB_EXT1__ も定義しておくことになってる。
そんで使うときにはヘッダのインクルード前に __STDC_WANT_LIB_EXT1__ を define しておく必要がある。
MSVC は C11 が発行される前から scanf_s などを提供していた
(というかマイクロソフトがこれらを標準に入れるように働きかけていた)
のでバージョンによっては __STDC_WANT_LIB_EXT1__ を定義するという手順を介さなくても使えるのかもしれない。
私は MSVC を使ってないのでよう知らん。
C11 で規定されているけれど仕様としてはオプショナルなもの。
つまり処理系はそれを提供しなくても仕様準拠を名乗れる。
ただし、提供するならばマクロ __STDC_LIB_EXT1__ も定義しておくことになってる。
そんで使うときにはヘッダのインクルード前に __STDC_WANT_LIB_EXT1__ を define しておく必要がある。
MSVC は C11 が発行される前から scanf_s などを提供していた
(というかマイクロソフトがこれらを標準に入れるように働きかけていた)
のでバージョンによっては __STDC_WANT_LIB_EXT1__ を定義するという手順を介さなくても使えるのかもしれない。
私は MSVC を使ってないのでよう知らん。
174デフォルトの名無しさん (ワッチョイ 7d5f-6/Kp)
2023/06/04(日) 23:52:26.98ID:AabPy4gc0 >>171
失礼しました
gccでコンパイルしたところfopen_sという関数は定義されていないという趣旨のエラーが出た形です
以下詳細になります
環境:WSL2 Ubuntu
コマンド(bash):gcc sample.c -o sample.out
出力:
/home/hoge/Code/sample.c:17:13: warning: implicit declaration of function ‘fopen_s’; did you mean ‘fopen’? [-Wimplicit-function-declaration]
17 | if((error=fopen_s(&fp,filename,"r")) != 0){
| ^~~~~~~
| fopen
/usr/bin/ld: /tmp/ccIXo3dN.o: in function `main':
/home/hoge/Code/sample.c:17: undefined reference to `fopen_s'
collect2: error: ld returned 1 exit status
失礼しました
gccでコンパイルしたところfopen_sという関数は定義されていないという趣旨のエラーが出た形です
以下詳細になります
環境:WSL2 Ubuntu
コマンド(bash):gcc sample.c -o sample.out
出力:
/home/hoge/Code/sample.c:17:13: warning: implicit declaration of function ‘fopen_s’; did you mean ‘fopen’? [-Wimplicit-function-declaration]
17 | if((error=fopen_s(&fp,filename,"r")) != 0){
| ^~~~~~~
| fopen
/usr/bin/ld: /tmp/ccIXo3dN.o: in function `main':
/home/hoge/Code/sample.c:17: undefined reference to `fopen_s'
collect2: error: ld returned 1 exit status
175デフォルトの名無しさん (ワッチョイ 7d5f-6/Kp)
2023/06/04(日) 23:59:42.49ID:AabPy4gc0176デフォルトの名無しさん (ワッチョイ 82ad-N/Lw)
2023/06/05(月) 00:18:53.38ID:6AEqxzj80177デフォルトの名無しさん (アウアウウー Sac5-Rr/m)
2023/06/05(月) 10:37:04.03ID:ejs/048Ga legacy_stdio_definitions.lib
178デフォルトの名無しさん (スッププ Sda2-KKRM)
2023/06/05(月) 18:03:48.62ID:7VR84C5ud fopen_sって初めて知った
MS社内だけで通じる方言って感じでイヤな感じだな
fopenで書くようにしたほうがいい
MS社内だけで通じる方言って感じでイヤな感じだな
fopenで書くようにしたほうがいい
179デフォルトの名無しさん (スッププ Sda2-KKRM)
2023/06/05(月) 18:11:20.30ID:7VR84C5ud だいたいwinAPIはファイルを開く時はCreateFile()系を標準にする方針だと思ってたんだが
なんでfopenのパチモノを作るのか理解に苦しむ
なんでfopenのパチモノを作るのか理解に苦しむ
180デフォルトの名無しさん (ワッチョイ ee63-N/Lw)
2023/06/05(月) 18:32:16.74ID:OwVyUwPA0 世界征服に決まってるだろ
181蟻人間 ◆T6xkBnTXz7B0 (スフッ Sda2-lF3g)
2023/06/05(月) 18:47:37.75ID:Fd2GxywXd CreateFile はファイルロックの制御が細かくできたり、ファイルがすでに存在する場合の
処理や、セキュリティなどを考慮した処理など細かい設定ができる。
WindowsではfopenはCreateFileで実装されてるようだ。
処理や、セキュリティなどを考慮した処理など細かい設定ができる。
WindowsではfopenはCreateFileで実装されてるようだ。
182デフォルトの名無しさん (ワッチョイ 82ad-rilk)
2023/06/05(月) 19:09:52.27ID:SzwJbur+0 >>179
CreateFileなんかで書いたら移植のとき困るだろ
そもそもプラットフォーム気にせず書けるようにCライブラリとして標準化させようとしているんだし
Windowsは移植性を考慮しないならCreateFile系のほうが柔軟に高度なプログラミングが出来るからCreateFile系使えと言っているだけ
CreateFileなんかで書いたら移植のとき困るだろ
そもそもプラットフォーム気にせず書けるようにCライブラリとして標準化させようとしているんだし
Windowsは移植性を考慮しないならCreateFile系のほうが柔軟に高度なプログラミングが出来るからCreateFile系使えと言っているだけ
183デフォルトの名無しさん (ワッチョイ 82fb-prIY)
2023/06/05(月) 20:35:19.71ID:ZwQJL2Eg0 APIを使うと毎回特権リングを呼び出すから、
小さい読み書きが多いとオーバーヘッドになる
Cランタイムはバッファを使って特権リングの
呼び出しを減らしている
小さい読み書きが多いとオーバーヘッドになる
Cランタイムはバッファを使って特権リングの
呼び出しを減らしている
184デフォルトの名無しさん (スッププ Sda2-KKRM)
2023/06/05(月) 20:40:56.74ID:LsGdvfPCd185デフォルトの名無しさん (ワッチョイ 82ad-rilk)
2023/06/05(月) 20:52:58.24ID:SzwJbur+0 >>184
あくまでCライブラリとして標準化
古い関数に仕様を合わせる必要はないべ
>これじゃ初心者はわざわざerrnoを受け取る変数を作らなければならないんだなと勘違いするだろ
仕様を読まない初心者が悪いと思うんだが
あくまでCライブラリとして標準化
古い関数に仕様を合わせる必要はないべ
>これじゃ初心者はわざわざerrnoを受け取る変数を作らなければならないんだなと勘違いするだろ
仕様を読まない初心者が悪いと思うんだが
186デフォルトの名無しさん (ワッチョイ ee63-N/Lw)
2023/06/05(月) 20:54:52.49ID:OwVyUwPA0 委員長、読まなきゃ使えない関数は捨てられてしまうと思います!
187デフォルトの名無しさん (ワッチョイ 82ad-rilk)
2023/06/05(月) 20:58:18.67ID:SzwJbur+0 初めて使う関数なら一度は仕様見ろよ
188デフォルトの名無しさん (ワッチョイ ee63-N/Lw)
2023/06/05(月) 21:10:47.13ID:OwVyUwPA0 じゃあ、使う必要が出てきたら読むことにします
当分、読むことなさそう
当分、読むことなさそう
189デフォルトの名無しさん (スッププ Sda2-KKRM)
2023/06/05(月) 21:43:17.97ID:EJphWr1dd >>185
必要はある
今回のようにfopen_sをfopenに書き換えようとする(または逆)場合に変なミスを誘発する
大した理由もなく戻り値を変更すべきじゃない(またはfopenの名前を使うべきじゃない)
必要はある
今回のようにfopen_sをfopenに書き換えようとする(または逆)場合に変なミスを誘発する
大した理由もなく戻り値を変更すべきじゃない(またはfopenの名前を使うべきじゃない)
190デフォルトの名無しさん (ワッチョイ 6ebb-tVFH)
2023/06/05(月) 23:26:16.43ID:wc9Gft1n0 >>168
void*について学習してきました。
キャストしないと使えないようですが、キャストする型の指定はswitch-caseや#ifなどで分岐する感じでしょうか?
それとももっと賢いやり方がありますか?
void*について学習してきました。
キャストしないと使えないようですが、キャストする型の指定はswitch-caseや#ifなどで分岐する感じでしょうか?
それとももっと賢いやり方がありますか?
191蟻人間 ◆T6xkBnTXz7B0 (スフッ Sda2-lF3g)
2023/06/05(月) 23:46:37.21ID:pW8wFDDTd >>190
memcpyなら型が分からなくとも無理やりコピーできる。
memcpyなら型が分からなくとも無理やりコピーできる。
192デフォルトの名無しさん (ワッチョイ 22fb-w9Bk)
2023/06/06(火) 00:27:27.18ID:WKo3IR4c0 void*は元の形がint*でもchar*でもとりあえず何でもありで受け付けるやつ
元の型が何だったかは結局はプログラマ側が保証しとかないといけないので取り扱いは結構危険
元の型が何だったかは結局はプログラマ側が保証しとかないといけないので取り扱いは結構危険
193デフォルトの名無しさん (ワッチョイ 82ad-rilk)
2023/06/06(火) 03:21:52.62ID:JM/jMtmO0 >>189
>大した理由もなく戻り値を変更すべきじゃない
関数の戻り値でエラーを返すことでグローバル変数のerrno読み出しタイミングの問題(マルチスレッド対策)に対応したいところって意図だと思うけど違うんかね?
まあ戻り値ではハンドル返してアドレス渡しでエラーを受け取るという方法もあるとは思うけど
>またはfopenの名前を使うべきじゃない
機能としては同じだし俺は別にfopen系の名前のほうが分かりやすくて良いと思う
言いたいことは分かるけどさ、初心者やベテランに関わらずちゃんと仕様を確認するってだけのことじゃね?
>大した理由もなく戻り値を変更すべきじゃない
関数の戻り値でエラーを返すことでグローバル変数のerrno読み出しタイミングの問題(マルチスレッド対策)に対応したいところって意図だと思うけど違うんかね?
まあ戻り値ではハンドル返してアドレス渡しでエラーを受け取るという方法もあるとは思うけど
>またはfopenの名前を使うべきじゃない
機能としては同じだし俺は別にfopen系の名前のほうが分かりやすくて良いと思う
言いたいことは分かるけどさ、初心者やベテランに関わらずちゃんと仕様を確認するってだけのことじゃね?
194デフォルトの名無しさん (スプッッ Sd02-w9Bk)
2023/06/06(火) 08:23:57.44ID:Wehdob+6d fprintf_sとかの他の関数がerrnoを返さない以上、
fopen_sでだけerrnoを返しても一貫性がなくて無意味に感じられるんだよな。
結局のところerrno自体をスレッドセーフになるように作るしかなくて、
それで解消したんじゃなかったっけ?
fopen_sでだけerrnoを返しても一貫性がなくて無意味に感じられるんだよな。
結局のところerrno自体をスレッドセーフになるように作るしかなくて、
それで解消したんじゃなかったっけ?
195デフォルトの名無しさん (ワッチョイ 85c9-1DxI)
2023/06/06(火) 08:40:25.14ID:SiwHVjTU0 >>161 を見てると
コンテナに入れたいのは int な整数なんよな
リングバッファだから 積む側と引っ張り出す側のそれぞれのインターフェースが必要になるけど
void push(int); 実体を受けて内部で malloc してそっちに格納
void pop(int*); malloc された内容を 引数に渡して mallocしたポインタは free しとく
この int の部分が任意の型でよしなにしようとすると
void push(void* , size_t size);
コンテナに入れたいのは int な整数なんよな
リングバッファだから 積む側と引っ張り出す側のそれぞれのインターフェースが必要になるけど
void push(int); 実体を受けて内部で malloc してそっちに格納
void pop(int*); malloc された内容を 引数に渡して mallocしたポインタは free しとく
この int の部分が任意の型でよしなにしようとすると
void push(void* , size_t size);
196デフォルトの名無しさん (ワッチョイ 85c9-1DxI)
2023/06/06(火) 08:42:43.61ID:SiwHVjTU0 途中送信してもた
void push(const void* , size_t); 実体はポインタで渡す
void pop(void* , size_t);
のように size_t で実体のサイズもらうしかないよね
void push(const void* , size_t); 実体はポインタで渡す
void pop(void* , size_t);
のように size_t で実体のサイズもらうしかないよね
197はちみつ餃子 ◆8X2XSCHEME (ワッチョイ c23e-N/Lw)
2023/06/06(火) 08:43:39.37ID:TmtPJsyo0 >>193
errno は C11 以降は thread local storage ということになってる。
errno をセットした後に別のスレッドによって内容が書き換えられるということはない。
(やろうとすれば出来なくはないが……。 普通に使ってて間違ってやってしまうということはないだろう。)
C99 でも errno は変更可能な左辺値 (に展開されるマクロ) であることは要求されているが
それが関数呼出しによって得られるものであってもかまわないという記述もあり、
スレッドまわりで問題を起こさないようにする処理はその関数に入れることが出来る。
C99 ではスレッドローカルの概念は提供していないが事実上はスレッドローカル的な
実装に出来るように配慮されてる。
errno が不格好な設計であるのは確かだが、マルチスレッドでは問題にはならない。
errno は C11 以降は thread local storage ということになってる。
errno をセットした後に別のスレッドによって内容が書き換えられるということはない。
(やろうとすれば出来なくはないが……。 普通に使ってて間違ってやってしまうということはないだろう。)
C99 でも errno は変更可能な左辺値 (に展開されるマクロ) であることは要求されているが
それが関数呼出しによって得られるものであってもかまわないという記述もあり、
スレッドまわりで問題を起こさないようにする処理はその関数に入れることが出来る。
C99 ではスレッドローカルの概念は提供していないが事実上はスレッドローカル的な
実装に出来るように配慮されてる。
errno が不格好な設計であるのは確かだが、マルチスレッドでは問題にはならない。
198デフォルトの名無しさん (アウアウウー Sac5-Rr/m)
2023/06/06(火) 13:00:47.04ID:h4TMdgn6a >>182
そんなのは fork を先にさっさと実装してから家
そんなのは fork を先にさっさと実装してから家
199デフォルトの名無しさん (アウアウウー Sac5-Rr/m)
2023/06/06(火) 13:06:36.37ID:h4TMdgn6a >>190
void *hoge は hoge++ 出来ないけど
int *i は i++ 出来るし
double *d も d++ 出来るし
i++ と d++ で足される数も違う
switch case で対応するのはおすすめしない
void *hoge は hoge++ 出来ないけど
int *i は i++ 出来るし
double *d も d++ 出来るし
i++ と d++ で足される数も違う
switch case で対応するのはおすすめしない
200デフォルトの名無しさん (テテンテンテン MMe6-1cSO)
2023/06/06(火) 13:23:11.34ID:Ydo+/HsJM201デフォルトの名無しさん (スッップ Sda2-NC7J)
2023/06/06(火) 15:35:36.55ID:DWV+4S+md GetLastErrorみたいにスレッドローカルにすればいいんだよ
202デフォルトの名無しさん (スッププ Sda2-KKRM)
2023/06/06(火) 21:21:59.69ID:XFiIFtrgd >>190
そろそろそのやり方自体が賢くないって気づかないかな
そろそろそのやり方自体が賢くないって気づかないかな
203デフォルトの名無しさん (ワッチョイ ee63-N/Lw)
2023/06/06(火) 21:26:13.17ID:9F60+Uyo0 是非賢いお手本をお願い
204デフォルトの名無しさん (オイコラミネオ MMe9-N/Lw)
2023/06/06(火) 21:43:27.13ID:t5k+pzJSM switchは良くないと思うよ
利用側でそれぞれの型用に別々の関数を書いて使う人が使い分ける感じじゃないかな
それこそ知らんけどレベルで申し訳ないが
利用側でそれぞれの型用に別々の関数を書いて使う人が使い分ける感じじゃないかな
それこそ知らんけどレベルで申し訳ないが
205デフォルトの名無しさん (スッププ Sda2-KKRM)
2023/06/06(火) 22:36:35.79ID:QLr+SdPOd206デフォルトの名無しさん (アウアウウー Sac5-tVFH)
2023/06/07(水) 07:49:00.73ID:uhVmgr37a >>203
お手本の定番は qsort() だろ
お手本の定番は qsort() だろ
207デフォルトの名無しさん (ワッチョイ 916e-aXLw)
2023/06/07(水) 08:29:44.13ID:MtVH7DHg0 >>205
そういうのはライブラリ化しておくべき
そういうのはライブラリ化しておくべき
208デフォルトの名無しさん (スフッ Sda2-Kf9f)
2023/06/07(水) 09:26:39.45ID:PykR7vOnd fread(void *buf, size_t size, size_t n, …
の順もあれば
qsort(void *base, size_t num, size_t size, …
の順もあって
行き当たりばったり感
の順もあれば
qsort(void *base, size_t num, size_t size, …
の順もあって
行き当たりばったり感
209デフォルトの名無しさん (スッププ Sda2-KKRM)
2023/06/07(水) 12:34:45.81ID:hQs7a5Jyd >>207
じゃあ、ほい
struct CUE{
int size;
int max;
int inp;
int out;
char buf[1];
};
struct CUE *create_cue(int size, int max)
{
struct CUE *cue =malloc(sizeof(struct CUE)+size*max);
if(cue){
cue->size=size;
cue->max=max;
cue->inp=cue->out=0
}
return cue;
}
int cue_get(struct CUE *cue, void*data)
{
if( cue->inp ==cue->out )
return 0;//buffer empty
memcpy(data,&cue->buf[cue->out* cue->size],cue->size);
if(++cue->out>=cue->max) cue->out=0;
return 1;
}
int cue_add(struct CUE *cue, void*newdata)
{
int index = cue->inp;
if(++index>=cue->max) index=0;
if( index ==cue->out ) return 0;//buffer full
memcpy(&cue->buf[cue->inp* cue->size],newdata,cue->size);
cue->inp=index;
return 1;
}
目をつぶって作ったのでバグがあっても知らない
要するにこういうことでしょ
他の人が言ってるように型チェックがまったく働かないので俺は使いたくない
じゃあ、ほい
struct CUE{
int size;
int max;
int inp;
int out;
char buf[1];
};
struct CUE *create_cue(int size, int max)
{
struct CUE *cue =malloc(sizeof(struct CUE)+size*max);
if(cue){
cue->size=size;
cue->max=max;
cue->inp=cue->out=0
}
return cue;
}
int cue_get(struct CUE *cue, void*data)
{
if( cue->inp ==cue->out )
return 0;//buffer empty
memcpy(data,&cue->buf[cue->out* cue->size],cue->size);
if(++cue->out>=cue->max) cue->out=0;
return 1;
}
int cue_add(struct CUE *cue, void*newdata)
{
int index = cue->inp;
if(++index>=cue->max) index=0;
if( index ==cue->out ) return 0;//buffer full
memcpy(&cue->buf[cue->inp* cue->size],newdata,cue->size);
cue->inp=index;
return 1;
}
目をつぶって作ったのでバグがあっても知らない
要するにこういうことでしょ
他の人が言ってるように型チェックがまったく働かないので俺は使いたくない
210デフォルトの名無しさん (スッップ Sda2-NC7J)
2023/06/07(水) 13:05:36.32ID:xTW5tL3jd memcpyは余計だな。ポインタを返して後は使用者(自分)に委ねるね俺は
211デフォルトの名無しさん (ワッチョイ eecf-sceX)
2023/06/07(水) 14:05:23.13ID:lsOQP3og0 見てないけどCUEって時点でもう程度が知れる
212デフォルトの名無しさん (ワッチョイ 5146-rNJ6)
2023/06/07(水) 15:08:50.29ID:hYVl7Kw10 重箱の鬼の首をとる応用例
・(Perlを)Pearl って時点でもう程度が知れる
・(Daemon を)Demon って時点でもう程度が知れる
・(Perlを)Pearl って時点でもう程度が知れる
・(Daemon を)Demon って時点でもう程度が知れる
213デフォルトの名無しさん (ワッチョイ ee63-N/Lw)
2023/06/07(水) 16:05:48.27ID:e1NBMLRC0 Luciferの事もたまには思い出してあげて
214デフォルトの名無しさん (ササクッテロラ Sp91-4ePv)
2023/06/07(水) 21:46:42.98ID:xi4mV2dDp ダブルスラッシュがコメントに採用されたのどの版から?
215デフォルトの名無しさん (スッププ Sda2-KKRM)
2023/06/07(水) 22:41:36.55ID:JgjHIelbd >>210
概念的にはgetした瞬間にリングバッファから取り除かれてるはずなので
実際にはバッファが一回りするまで残っているが
消えてるかどうか曖昧で気持ち悪いのでコピーで返したほうが望ましい
まあ好みかもしれんが
概念的にはgetした瞬間にリングバッファから取り除かれてるはずなので
実際にはバッファが一回りするまで残っているが
消えてるかどうか曖昧で気持ち悪いのでコピーで返したほうが望ましい
まあ好みかもしれんが
216デフォルトの名無しさん (アウアウウー Sac5-tVFH)
2023/06/08(木) 11:06:02.87ID:rxjbLVG0a >>214
MSVC じゃなくて MS-C の 3 くらいからあったかも
MSVC じゃなくて MS-C の 3 くらいからあったかも
217デフォルトの名無しさん (スプッッ Sd02-w9Bk)
2023/06/08(木) 12:46:07.00ID:m0+KFU8md C99から
それ以前でもコンパイラ拡張で//コメントをサポートしてるのはあるらしいけど
以下のようなエッジケースで解釈が変わる
b=a//**/ 2
;
//コメントを認めないならb=a/2;
//コメントを認めるならb=a;
それ以前でもコンパイラ拡張で//コメントをサポートしてるのはあるらしいけど
以下のようなエッジケースで解釈が変わる
b=a//**/ 2
;
//コメントを認めないならb=a/2;
//コメントを認めるならb=a;
218デフォルトの名無しさん (ワッチョイ 916e-aXLw)
2023/06/08(木) 12:55:42.05ID:ldHYl5bi0 > 目をつぶって作ったのでバグがあっても知らない
そういうのは「作った」とは言わない
そういうのは「作った」とは言わない
219デフォルトの名無しさん (ワッチョイ 5146-rNJ6)
2023/06/08(木) 13:01:02.12ID:5qYvg3Wg0 盲者のモノ作りなど認めない。
220デフォルトの名無しさん (ワッチョイ 4297-UW6r)
2023/06/08(木) 13:06:43.94ID:2i+h5Gbt0 目開けても何も見てない奴いるからな
221デフォルトの名無しさん (スッププ Sda2-KKRM)
2023/06/08(木) 13:39:09.53ID:JhrUsqpHd 野良審査員には餌をやらん主義
222はちみつ餃子 ◆8X2XSCHEME (ワッチョイ e53e-N/Lw)
2023/06/08(木) 14:35:42.49ID:Iro3x2NJ0 >>214
C99 からだが経緯としては先に C++ で採用されていたという事情がある。
C with Classes から C++ になる 1984 年頃に BCPL 風を参考にして
スラッシュふたつで始めるコメント記法が導入され、
更に 1998 年にそのコメント記法も含めて ISO の規格として確立した。
C と C++ でプリプロセッサは共用することも多いだろうし
コメントはプリプロセッサで除去するだろうから
C++ で採用された段階で実際には C でもスラッシュふたつのコメント記法を
使えていた環境は割と有ったのだと思う。
C99 からだが経緯としては先に C++ で採用されていたという事情がある。
C with Classes から C++ になる 1984 年頃に BCPL 風を参考にして
スラッシュふたつで始めるコメント記法が導入され、
更に 1998 年にそのコメント記法も含めて ISO の規格として確立した。
C と C++ でプリプロセッサは共用することも多いだろうし
コメントはプリプロセッサで除去するだろうから
C++ で採用された段階で実際には C でもスラッシュふたつのコメント記法を
使えていた環境は割と有ったのだと思う。
223デフォルトの名無しさん (ワッチョイ 916e-aXLw)
2023/06/08(木) 14:52:55.41ID:ldHYl5bi0 マイクロソフトが独自拡張で当時C++のみのはずの//をCでも許していた
言わずと知れた屈指の大手がやっているので規格が追認することとなった
言わずと知れた屈指の大手がやっているので規格が追認することとなった
224デフォルトの名無しさん (ワッチョイ ee63-N/Lw)
2023/06/08(木) 16:45:48.60ID:JA9B62300 gccも使えてた気がする
225デフォルトの名無しさん (ワッチョイ 1379-hEWj)
2023/06/10(土) 18:04:06.65ID:Yvl44ooC0 90年後半からしか実務で使ってないけどVCでは普通に書けてたな
UNIX系はベンダー製のCの制限が酷かった思い出
UNIX系はベンダー製のCの制限が酷かった思い出
226デフォルトの名無しさん (ワッチョイ d9f0-cgqc)
2023/06/10(土) 18:47:34.87ID:Yrme8ZC10 borlandやwatcomでも使えなかったっけか?
227デフォルトの名無しさん (スッププ Sd33-r9BM)
2023/06/10(土) 20:49:31.43ID:6EfmWVuRd 便利だからね
オプションで使えなくすることもできたはず
オプションで使えなくすることもできたはず
228デフォルトの名無しさん (ワッチョイ c1bb-s+nx)
2023/06/16(金) 01:45:49.62ID:q8ApsJJ90 int a[3] = {};
int b[3] = {0};
aの初期化はgcc拡張で規格に沿っているのはbの初期化だと記憶していたんだけど、
規格の6.7.8を見るとメンバの個数より波カッコで囲まれた初期化子が少ない場合は暗黙的に静的に初期化するとあった。
この規格の文章を見る限りはaも規格に合致していると思えるんだけど、aがgcc拡張っていうのは本当ですか?
int b[3] = {0};
aの初期化はgcc拡張で規格に沿っているのはbの初期化だと記憶していたんだけど、
規格の6.7.8を見るとメンバの個数より波カッコで囲まれた初期化子が少ない場合は暗黙的に静的に初期化するとあった。
この規格の文章を見る限りはaも規格に合致していると思えるんだけど、aがgcc拡張っていうのは本当ですか?
229228 (ワッチョイ c1bb-s+nx)
2023/06/16(金) 02:08:30.52ID:q8ApsJJ90 参照した規格はX 3010:2003 (ISO/IEC 9899:1999) です
230デフォルトの名無しさん (ワッチョイ e95f-2rqm)
2023/06/16(金) 08:46:04.94ID:qgM8i0iT0 >>228
本当。文法が空の {} を許していない。
initializer:
assignment-expression
{ initializer-list }
{ initializer-list , }
initializer-list:
designation(opt) initializer
initializer-list , designation(opt) initializer
C23 から↓で initializer に {} が追加されてようやく通るようになる。
https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2900.htm
本当。文法が空の {} を許していない。
initializer:
assignment-expression
{ initializer-list }
{ initializer-list , }
initializer-list:
designation(opt) initializer
initializer-list , designation(opt) initializer
C23 から↓で initializer に {} が追加されてようやく通るようになる。
https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2900.htm
231デフォルトの名無しさん (アウアウウー Sadd-g1CP)
2023/06/16(金) 16:12:05.48ID:ly+Q1cW8a struct hoge {
char a[];
};
struct fuga {
char a[0];
};
char a[];
};
struct fuga {
char a[0];
};
232デフォルトの名無しさん (ワッチョイ c1bb-s+nx)
2023/06/16(金) 16:20:37.85ID:q8ApsJJ90233はちみつ餃子 ◆8X2XSCHEME (ワッチョイ c13e-2rqm)
2023/06/16(金) 17:28:57.05ID:QEmhRLek0234デフォルトの名無しさん (ワッチョイ 0dbb-p8ty)
2023/06/17(土) 21:50:15.83ID:q+Kf8pNU0235デフォルトの名無しさん (ワッチョイ a52d-wYA+)
2023/06/25(日) 08:36:37.75ID:D6GgnyEK0 int main(void)って書く流派ってどこでそんなの身に着けたの?
236デフォルトの名無しさん (ワッチョイ 856e-gmRT)
2023/06/25(日) 09:20:49.86ID:yrM2OONq0 >>235
ISO/IEC 9899:2011
5.1.2.2.1 Program startup
1 The function called at program startup is named main. The implementation declares no
prototype for this function. It shall be defined with a return type of int and with no
parameters:
int main(void) { /* ... */ }
ISO/IEC 9899:2011
5.1.2.2.1 Program startup
1 The function called at program startup is named main. The implementation declares no
prototype for this function. It shall be defined with a return type of int and with no
parameters:
int main(void) { /* ... */ }
237デフォルトの名無しさん (ワッチョイ 4b46-GfJH)
2023/06/25(日) 10:53:26.83ID:/MLTigPj0 >>235
この指摘をしばしば見るが、int main(void) が違反だった時代はいつ頃なの。
この指摘をしばしば見るが、int main(void) が違反だった時代はいつ頃なの。
238デフォルトの名無しさん (ワッチョイ a52d-wYA+)
2023/06/25(日) 10:56:42.79ID:D6GgnyEK0 C99からint main(void)と書いてもいいらしい
239はちみつ餃子 ◆8X2XSCHEME (ワッチョイ dd3e-F8yx)
2023/06/25(日) 11:13:38.04ID:+vRVyhzX0 main については C89 のときから変わってないよ。
240デフォルトの名無しさん (ワッチョイ 856e-gmRT)
2023/06/25(日) 11:58:52.46ID:yrM2OONq0 >>237
K&R Cにはvoidというキーワードが存在しなかった
K&R Cにはvoidというキーワードが存在しなかった
241デフォルトの名無しさん (ワッチョイ a52d-wYA+)
2023/06/25(日) 12:22:01.62ID:D6GgnyEK0 K&R第2版にint main(void)なんて書き方出てきた記憶がないんだよね
242デフォルトの名無しさん (ワッチョイ a397-HUf/)
2023/06/25(日) 12:38:23.47ID:6RRGV0Qg0 printf(null);
243はちみつ餃子 ◆8X2XSCHEME (ワッチョイ dd3e-F8yx)
2023/06/25(日) 12:38:51.73ID:+vRVyhzX0244はちみつ餃子 ◆8X2XSCHEME (ワッチョイ dd3e-F8yx)
2023/06/25(日) 17:09:36.88ID:+vRVyhzX0 関数定義のときに仮引数がゼロ個なら void を書くのは当然の作法なんだから
main についてはどうでも良いとはいえども main だけ空にするのもなんか変じゃない?
main についてはどうでも良いとはいえども main だけ空にするのもなんか変じゃない?
245デフォルトの名無しさん (ワッチョイ 1b79-SnHJ)
2023/06/25(日) 19:26:05.36ID:20Xxe9+j0 処理系は引数で任意のスタートアップを指定できるからmain書きたくない需要も満たせるよ
246デフォルトの名無しさん (スッププ Sd43-W+UZ)
2023/06/25(日) 22:39:44.42ID:7VFzLtX7d >>235
めんどくさいだけだろ
めんどくさいだけだろ
247デフォルトの名無しさん (ワッチョイ 955f-bte+)
2023/06/26(月) 06:14:35.93ID:F8cl0T7T0 めんどくさい流免許皆伝
248デフォルトの名無しさん (ワッチョイ 4b46-GfJH)
2023/06/26(月) 07:16:23.26ID:xzT4Agq20 初級、めんどくさいので略記
初段、めんどくさいので無注釈
免許皆伝、めんどくさいので無ドキュメント
初段、めんどくさいので無注釈
免許皆伝、めんどくさいので無ドキュメント
249デフォルトの名無しさん (ワッチョイ ad5f-9QlF)
2023/06/26(月) 08:07:26.96ID:5ZBA7oeF0 組み込み系ならmainに引き数なんて不用
250デフォルトの名無しさん (スプッッ Sd03-+QuN)
2023/06/26(月) 08:52:43.48ID:r2qj24yMd 元々プログラムはまんどくさいを代行するものだし・・・
251デフォルトの名無しさん (ワッチョイ 856e-gmRT)
2023/06/26(月) 12:05:19.83ID:TXNTP2LF0 組み込みでmainか・・・
ベクタテーブル作るときのラベルがマングリングされてないから短く済むけどそれだけ
ベクタテーブル作るときのラベルがマングリングされてないから短く済むけどそれだけ
252デフォルトの名無しさん (ワッチョイ 856e-gmRT)
2023/06/26(月) 12:06:17.67ID:TXNTP2LF0 あ、ここCだっけ
サーセン
サーセン
253はちみつ餃子 ◆8X2XSCHEME (ワッチョイ dd3e-F8yx)
2023/06/26(月) 13:00:03.75ID:DZPgqn/v0 >>249
main に引数が有るか無いかの話じゃなくて、無いときに void を書くという話題だよ。
main に引数が有るか無いかの話じゃなくて、無いときに void を書くという話題だよ。
254デフォルトの名無しさん (ササクッテロラ Sp81-9QlF)
2023/06/26(月) 13:16:56.95ID:6bPwUIFfp 実際の組み込み系には、二つのmainエントリーがある
引数のある奴と、無い奴な
引数のある奴と、無い奴な
255デフォルトの名無しさん (ワッチョイ 856e-gmRT)
2023/06/26(月) 13:20:15.17ID:TXNTP2LF0256デフォルトの名無しさん (ササクッテロラ Sp81-9QlF)
2023/06/26(月) 13:24:00.16ID:6bPwUIFfp 意味なんて知るか
ブートローダとか色々都合があるんだよ
ブートローダとか色々都合があるんだよ
257デフォルトの名無しさん (ワッチョイ 9dc9-3ptY)
2023/06/26(月) 13:31:08.91ID:yiohjGaX0 環境依存しまくってる部分だとは思うけど
組み込み用のコンパイラでも エントリは main のままなのね
組み込み用のコンパイラでも エントリは main のままなのね
258デフォルトの名無しさん (ササクッテロラ Sp81-9QlF)
2023/06/26(月) 13:43:40.71ID:6bPwUIFfp 組込みの真のエントリーはresetな
でも普通はそこからmainまではハード会社が提供してる
初期化処理が入るからあんまり触らない
でも普通はそこからmainまではハード会社が提供してる
初期化処理が入るからあんまり触らない
259デフォルトの名無しさん (スッププ Sdab-W+UZ)
2023/06/26(月) 16:47:50.70ID:D5GxB3wJd リンカにわたすオプションで_startだか_resetだかを指定してるだけ(例えばld -e _start)
自分で初期化を書きたければmakefileに先頭ラベルを記述すればいい
自分で初期化を書きたければmakefileに先頭ラベルを記述すればいい
260デフォルトの名無しさん (ラクッペペ MM4b-d+Ca)
2023/06/26(月) 17:33:04.45ID:O3f/yVVZM 割込みベクタテーブルのリセット割込みのアドレスがエントリポイント
マイコンのリセットでプログラムカウンタのアドレスが設定される
マイコンのリセットでプログラムカウンタのアドレスが設定される
261デフォルトの名無しさん (ササクッテロラ Sp81-9QlF)
2023/06/26(月) 20:20:34.26ID:6bPwUIFfp >>260
石によるだろそんなん
石によるだろそんなん
262デフォルトの名無しさん (ワッチョイ 856e-gmRT)
2023/06/26(月) 20:39:52.87ID:TXNTP2LF0 K&R Cで「死産だった」とされるentryというキーワードは、多分このへんの話だったんだろうな
263デフォルトの名無しさん (スプッッ Sd03-eK8M)
2023/06/26(月) 20:56:23.88ID:aG57g/0Md そもそもCPU(マイコン)と、そのCPUの命令セットに翻訳するコンパイラに自由度を与えるためにC言語規格で明言することを少なめにしてる
0x100からカウンタが始まるだのブートローダーが必要だの環境依存の初期化はコンパイラが知ってれば十分。
0x100からカウンタが始まるだのブートローダーが必要だの環境依存の初期化はコンパイラが知ってれば十分。
264デフォルトの名無しさん (ササクッテロラ Sp81-9QlF)
2023/06/26(月) 21:02:50.78ID:6bPwUIFfp コンパイラは知らないよ
スタートアップライブラリが知ってる
スタートアップライブラリが知ってる
265デフォルトの名無しさん (ワッチョイ 856e-gmRT)
2023/06/26(月) 21:10:49.81ID:TXNTP2LF0 そそ
266デフォルトの名無しさん (ワッチョイ e3fb-eK8M)
2023/06/26(月) 21:26:51.56ID:L7dTsKCZ0 ああそうかコンパイラ自体は初期化手段知らなくてもいいのね
267デフォルトの名無しさん (ワッチョイ bb2d-ctHD)
2023/07/07(金) 14:46:28.07ID:Cp8NbwGm0 #include <stdio.h>
void stack_size_estimate()
{
int dummy; // スタック上に確保するダミー変数
// スタック上のポインタとダミー変数の差を計算
unsigned long stack_size = (unsigned long)&dummy - (unsigned long)&stack_size_estimate;
printf("Estimated stack size: %lu bytes\n", stack_size);
}
int main()
{
stack_size_estimate();
return 0;
}
Windowsで実行すると毎回結果がばらばらになる
void stack_size_estimate()
{
int dummy; // スタック上に確保するダミー変数
// スタック上のポインタとダミー変数の差を計算
unsigned long stack_size = (unsigned long)&dummy - (unsigned long)&stack_size_estimate;
printf("Estimated stack size: %lu bytes\n", stack_size);
}
int main()
{
stack_size_estimate();
return 0;
}
Windowsで実行すると毎回結果がばらばらになる
268デフォルトの名無しさん (ワッチョイ e26a-3VO7)
2023/07/07(金) 14:52:43.24ID:RkflWXNN0 .textと.bssを比較すりゃさもありなん
269デフォルトの名無しさん (ササクッテロラ Sp5f-SBEo)
2023/07/07(金) 15:00:57.31ID:Rpkmzd56p プログラムとデータは別れてんだよなぁ
270デフォルトの名無しさん (テテンテンテン MM8e-OS6S)
2023/07/07(金) 16:12:54.67ID:h0HZTRPQM アドレス空間レイアウトのランダム化 (ASLR)だろ
差じゃなくてポインターの中身を表示してみればいいじゃん
差じゃなくてポインターの中身を表示してみればいいじゃん
271はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 433e-hRAP)
2023/07/07(金) 16:20:17.47ID:gGTaLgTI0 >>267
64bit 版の Windows だとしたら unsigned long はポインタを表すのに十分なサイズではない。
上位バイトが丸ごと抜け落ちて意図した計算が出来てないと思う。
へんなところを引き算するよりベースアドレスを基準に観察したほうがわかりやすいよ。
歴史的事情で Windows ではインスタンスハンドルがベースアドレスそのものということになってる。
64bit 版の Windows だとしたら unsigned long はポインタを表すのに十分なサイズではない。
上位バイトが丸ごと抜け落ちて意図した計算が出来てないと思う。
へんなところを引き算するよりベースアドレスを基準に観察したほうがわかりやすいよ。
歴史的事情で Windows ではインスタンスハンドルがベースアドレスそのものということになってる。
272デフォルトの名無しさん (スップ Sd22-PY2F)
2023/07/07(金) 16:42:49.80ID:LOYSagRvd そういやlongはWindows環境だと32bitだっけか
size_t使ったほうが面倒がなさそう
size_t使ったほうが面倒がなさそう
273はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 433e-hRAP)
2023/07/07(金) 16:53:06.75ID:gGTaLgTI0 Windows だとどっちでもいいけど意味の上では uintptr_t のほうが妥当だと思う。
274デフォルトの名無しさん (ワッチョイ 0e79-p0MK)
2023/07/07(金) 16:55:15.60ID:tybFBPle0 いやもう露骨にbit数書いてくれた方がいいわ
int128とか
int128とか
275デフォルトの名無しさん (ワッチョイ bb2d-ctHD)
2023/07/07(金) 17:07:14.08ID:Cp8NbwGm0 #include <stdio.h>
#include <Windows.h>
void stack_size_estimate()
{
int dummy; // スタック上に確保するダミー変数
SIZE_T stack_size;
// ダミー変数のアドレスを取得
LPVOID dummy_addr = &dummy;
// メモリ領域の情報を取得
MEMORY_BASIC_INFORMATION mbi;
VirtualQuery(dummy_addr, &mbi, sizeof(mbi));
// スタックサイズを計算
stack_size = (SIZE_T)dummy_addr - (SIZE_T)mbi.AllocationBase;
printf("Estimated stack size: %lu bytes\n", stack_size);
}
int main()
{
stack_size_estimate();
return 0;
}
2096444 bytes
になります、予想の5分の1くらいでした
#include <Windows.h>
void stack_size_estimate()
{
int dummy; // スタック上に確保するダミー変数
SIZE_T stack_size;
// ダミー変数のアドレスを取得
LPVOID dummy_addr = &dummy;
// メモリ領域の情報を取得
MEMORY_BASIC_INFORMATION mbi;
VirtualQuery(dummy_addr, &mbi, sizeof(mbi));
// スタックサイズを計算
stack_size = (SIZE_T)dummy_addr - (SIZE_T)mbi.AllocationBase;
printf("Estimated stack size: %lu bytes\n", stack_size);
}
int main()
{
stack_size_estimate();
return 0;
}
2096444 bytes
になります、予想の5分の1くらいでした
276デフォルトの名無しさん (ワッチョイ c67c-mdfO)
2023/07/07(金) 17:38:01.25ID:GxNDHmP50277はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 433e-hRAP)
2023/07/07(金) 17:44:32.91ID:gGTaLgTI0 ここで欲しいのは「ポインタを格納するのに適した整数型」であって
具体的に何ビットなのかをプログラム上で表現するのは筋違いだと思うんだけど
でもまあどうせ処理系に依存するなら抽象を挟んでもあまり得なことも無いかな
とも思うし、まあそこらへんは感覚的なもんやからね……。
具体的に何ビットなのかをプログラム上で表現するのは筋違いだと思うんだけど
でもまあどうせ処理系に依存するなら抽象を挟んでもあまり得なことも無いかな
とも思うし、まあそこらへんは感覚的なもんやからね……。
278デフォルトの名無しさん (ワッチョイ c67c-mdfO)
2023/07/07(金) 17:46:08.50ID:GxNDHmP50279はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 433e-hRAP)
2023/07/07(金) 17:49:07.83ID:gGTaLgTI0280デフォルトの名無しさん (ワッチョイ c67c-mdfO)
2023/07/07(金) 17:55:31.01ID:GxNDHmP50 Windowsならこうなってるね
LONG_PTR SetWindowLongPtrA(
[in] HWND hWnd,
[in] int nIndex,
[in] LONG_PTR dwNewLong
);
LONG_PTR SetWindowLongPtrA(
[in] HWND hWnd,
[in] int nIndex,
[in] LONG_PTR dwNewLong
);
281デフォルトの名無しさん (ラクッペペ MM8f-VHD8)
2023/07/08(土) 09:25:06.78ID:ZG00xBJMM それハンドルを取得する関数なのでポインタとはちょっと違う
282デフォルトの名無しさん (スプープ Sd3f-4U7T)
2023/07/08(土) 11:55:06.89ID:pEcLN/B5d >>275
それで本当にスタックサイズ計算できてるの?
MSの文書だとデフォルトでは1MBと書いてあるし
もし不足が予想されるのならリンクオプションでサイズ変更できるし
本来大きいメモリはalloc系で確保すべき
それで本当にスタックサイズ計算できてるの?
MSの文書だとデフォルトでは1MBと書いてあるし
もし不足が予想されるのならリンクオプションでサイズ変更できるし
本来大きいメモリはalloc系で確保すべき
283はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f73e-kkOg)
2023/07/08(土) 12:43:32.13ID:svQTfB7/0 メモリ空間は 64bit あるけどその全てに実メモリが割り当てられているわけでは当然ない。
仮想的なメモリを管理するから API の名前に Virtual とついてて、
AllocationBase は管理している一塊の単位のベースってだけ。
その単位の中の全てがスタック用とは限らないので基準にはならないと思う。
各スレッドのスタックの底は thread information block に格納されているはず。
仮想的なメモリを管理するから API の名前に Virtual とついてて、
AllocationBase は管理している一塊の単位のベースってだけ。
その単位の中の全てがスタック用とは限らないので基準にはならないと思う。
各スレッドのスタックの底は thread information block に格納されているはず。
284デフォルトの名無しさん (ワッチョイ ff7c-DxV6)
2023/07/08(土) 19:02:15.63ID:wtJKE3gc0 >>281
????
????
285蟻人間 ◆T6xkBnTXz7B0 (スフッ Sdbf-yJMt)
2023/07/08(土) 19:05:04.15ID:E2jAOZHYd286デフォルトの名無しさん (スップ Sd3f-hfg2)
2023/07/09(日) 12:33:23.59ID:6bAebKnHd 井の中の蛙だったか
あーくだらん
あーくだらん
287デフォルトの名無しさん (ワッチョイ 17b3-S1Rn)
2023/07/09(日) 18:21:47.85ID:nGZbLr+D0 #include <stdio.h>
void main(void) {
int card[5][5];
int *p;
p = card;
}
gccでコンパイルすると
aa.c:7:11: warning: assignment to ‘int *’ from incompatible pointer type ‘int (*)[5]’ [-Wincompatible-pointer-types]
7 | p = card;
となります。
エラーではないので動くのですが・・・この警告はどうすれば消えますか?
やりたいことは、2次元で宣言してる変数cardを2次元を意識することなくアクセスしたくて*pに代入しています。
void main(void) {
int card[5][5];
int *p;
p = card;
}
gccでコンパイルすると
aa.c:7:11: warning: assignment to ‘int *’ from incompatible pointer type ‘int (*)[5]’ [-Wincompatible-pointer-types]
7 | p = card;
となります。
エラーではないので動くのですが・・・この警告はどうすれば消えますか?
やりたいことは、2次元で宣言してる変数cardを2次元を意識することなくアクセスしたくて*pに代入しています。
289はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f73e-kkOg)
2023/07/09(日) 18:31:02.01ID:6ZzBc/+b0 >>287
この場合に card の型は int[5][5] なんだけど
配列は配列の先頭要素を指すポインタに暗黙に型変換されるのが基本ルール
だから式中に card が出てきたら int(*)[5] として扱われる。
この型は int* と互換性のない型ということを警告は言ってる。
型が int(*)[5] であるような式に * を付けたら int[5] ということになるんだけど
上述の暗黙の型変換のルールで int* ということになって p の型と一致するようになる。
故に p = *card; で通る。
この場合に card の型は int[5][5] なんだけど
配列は配列の先頭要素を指すポインタに暗黙に型変換されるのが基本ルール
だから式中に card が出てきたら int(*)[5] として扱われる。
この型は int* と互換性のない型ということを警告は言ってる。
型が int(*)[5] であるような式に * を付けたら int[5] ということになるんだけど
上述の暗黙の型変換のルールで int* ということになって p の型と一致するようになる。
故に p = *card; で通る。
290デフォルトの名無しさん (ワッチョイ 17b3-6GCC)
2023/07/09(日) 18:37:18.48ID:nGZbLr+D0 サンクス
291デフォルトの名無しさん (ワッチョイ 9ffb-9JJG)
2023/07/09(日) 18:49:34.69ID:vTvbeyL00 この場合ってpを長さ25の1次元配列として使っていいという保証あるっけ?
`card[0]`の長さ5の配列と`card[1]`の長さ5の配列に隙間がないことが保証されてればいいんだけど
`card[0]`の長さ5の配列と`card[1]`の長さ5の配列に隙間がないことが保証されてればいいんだけど
292はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f73e-kkOg)
2023/07/09(日) 19:43:00.43ID:6ZzBc/+b0293デフォルトの名無しさん (ワッチョイ ff7c-DxV6)
2023/07/09(日) 20:21:15.21ID:DZU7rHSU0 アフォはこう書く
p = (int*)card;
先輩方に見捨てられるので気をつけて
p = (int*)card;
先輩方に見捨てられるので気をつけて
294デフォルトの名無しさん (スプープ Sd3f-4U7T)
2023/07/09(日) 20:52:22.88ID:QgBW0FA9d >>291
心配なら
int card[5*5];
とでも宣言すれば安心だけど
パディングがもしあるなら card[5];の各要素の間にすでに挟まってるはずなので
card[5][5];も同じようにアクセスできるはず
心配なら
int card[5*5];
とでも宣言すれば安心だけど
パディングがもしあるなら card[5];の各要素の間にすでに挟まってるはずなので
card[5][5];も同じようにアクセスできるはず
295デフォルトの名無しさん (ワッチョイ 175f-kkOg)
2023/07/09(日) 23:01:01.58ID:uNLQZN7w0 >>291-292
隙間の有無とアクセス保証は関係ないでしょ。少なくとも規格上は。
隙間の有無とアクセス保証は関係ないでしょ。少なくとも規格上は。
296はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f73e-kkOg)
2023/07/10(月) 00:28:02.91ID:EhhseXmK0 規格上の規定は要素のレイアウトの規定として私は理解してたので
そのレイアウトと矛盾しなければ一次元の配列として
扱っても仕様に反しないという解釈でいたんだが……。
直接的に書かれている演算方法を経由した場合しか許さん
と捉えたなら保証はないのかもしれない。
そのレイアウトと矛盾しなければ一次元の配列として
扱っても仕様に反しないという解釈でいたんだが……。
直接的に書かれている演算方法を経由した場合しか許さん
と捉えたなら保証はないのかもしれない。
297デフォルトの名無しさん (ワッチョイ ff63-kkOg)
2023/07/10(月) 00:33:20.12ID:SSHQru750 保証がないと、困るよ・・
298はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f73e-kkOg)
2023/07/10(月) 00:36:21.43ID:EhhseXmK0 解釈の余地があるときは安全側 (制約が厳しい側) で解釈しておくのが筋ではある。
299デフォルトの名無しさん (ワッチョイ ff63-kkOg)
2023/07/10(月) 00:53:08.94ID:SSHQru750 元々配列なんて一次元が基本だし、mallocで確保して多次元配列として扱うなんてのもよくあるし
300はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f73e-kkOg)
2023/07/10(月) 01:20:39.58ID:EhhseXmK0301デフォルトの名無しさん (スプープ Sd3f-4U7T)
2023/07/10(月) 08:43:48.54ID:Xrxae+evd 先頭と領域が確保されていればその間にアクセスできない部分があることはないだろう
そんな器用なことをする必然性がないわ
そんな器用なことをする必然性がないわ
302デフォルトの名無しさん (アウアウウー Sa9b-8N3f)
2023/07/10(月) 08:47:35.15ID:7JEyTvQka #include <stdio.h>
void main(void) {
int card[5][5];
int **p1;
int *p2
p1 = card;
p2 = card[0];
}
void main(void) {
int card[5][5];
int **p1;
int *p2
p1 = card;
p2 = card[0];
}
303デフォルトの名無しさん (ワッチョイ ff7c-DxV6)
2023/07/10(月) 09:02:15.74ID:BD2ve/J+0304デフォルトの名無しさん (アウアウウー Sa9b-8N3f)
2023/07/10(月) 09:24:10.89ID:dS/bwvgRa305デフォルトの名無しさん (ワッチョイ ff7c-DxV6)
2023/07/10(月) 09:29:04.81ID:BD2ve/J+0 >>304
何のことだよ?
何のことだよ?
306はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f73e-kkOg)
2023/07/10(月) 09:53:48.86ID:EhhseXmK0 >>301
オブジェクトのレイアウトについての話じゃなくてポインタ演算に制約がある。
ポインタの演算の結果は配列の要素か配列の最後の要素を
ひとつ過ぎた位置を指さなければならない。
その位置にアクセスする (単項演算子 * を適用する) かどうかに関係なく
ポインタの演算の結果がその条件を満たさない場所を指すときは未定義となる。
(C99 なら 6.5.6 の加減演算子の項目に書いてある。)
今回の場合は *card が返すのは二次元配列の「最初の行」を指すポインタなので
このポインタを元に演算した結果が最初の行の外を指してしまったらダメと解釈できる。
仕様に書かれている演算はその演算に相当するレイアウトで配置される
という意味で解釈することも出来ると私は考えていたが
仕様の文面に厳密に言えば駄目かもわからん。
現代的な処理系ではポインタは由来 (provenance) という概念を持っていて
演算の元になったオブジェクトを外れたら未定義であるということを
利用して最適化することもある。
これは実際にある話で、必然性を言うならそれで速くなる可能性があるという理由がある。
仕様に厳密にしないとわけのわからないことが起こるのが C というものなので
仕様の解釈は大事だよ。
オブジェクトのレイアウトについての話じゃなくてポインタ演算に制約がある。
ポインタの演算の結果は配列の要素か配列の最後の要素を
ひとつ過ぎた位置を指さなければならない。
その位置にアクセスする (単項演算子 * を適用する) かどうかに関係なく
ポインタの演算の結果がその条件を満たさない場所を指すときは未定義となる。
(C99 なら 6.5.6 の加減演算子の項目に書いてある。)
今回の場合は *card が返すのは二次元配列の「最初の行」を指すポインタなので
このポインタを元に演算した結果が最初の行の外を指してしまったらダメと解釈できる。
仕様に書かれている演算はその演算に相当するレイアウトで配置される
という意味で解釈することも出来ると私は考えていたが
仕様の文面に厳密に言えば駄目かもわからん。
現代的な処理系ではポインタは由来 (provenance) という概念を持っていて
演算の元になったオブジェクトを外れたら未定義であるということを
利用して最適化することもある。
これは実際にある話で、必然性を言うならそれで速くなる可能性があるという理由がある。
仕様に厳密にしないとわけのわからないことが起こるのが C というものなので
仕様の解釈は大事だよ。
307デフォルトの名無しさん (ワッチョイ 9fad-kkOg)
2023/07/10(月) 10:31:52.15ID:ifz8cUKw0 >>302
p1 = card; の所はコンパイルエラーが出て欲しいところだが、Cだと警告だけ出して先に進んじゃうかな。
p1 = card; の所はコンパイルエラーが出て欲しいところだが、Cだと警告だけ出して先に進んじゃうかな。
308デフォルトの名無しさん (ワッチョイ ff7c-DxV6)
2023/07/10(月) 10:34:39.51ID:BD2ve/J+0 int card[5][5]; となっているとき
&card 二次元配列全体へのポインタ
card 最初の行へのポインタ
*card 最初の要素へのポインタ
&card 二次元配列全体へのポインタ
card 最初の行へのポインタ
*card 最初の要素へのポインタ
309デフォルトの名無しさん (ワッチョイ bf79-CBkq)
2023/07/10(月) 12:23:15.05ID:pvSg+WfU0 2次元配列なんてExcelのRangeオブジェクトが返す配列ぐらいでしかお世話になったことないわ
特に効率的でもないし構造体でええやろ
特に効率的でもないし構造体でええやろ
310デフォルトの名無しさん (スップ Sd3f-hfg2)
2023/07/10(月) 12:47:58.91ID:Wg7MEfSed 何でそこで構造体?
311デフォルトの名無しさん (ワッチョイ 175f-kkOg)
2023/07/10(月) 12:53:57.17ID:AzWw4sMa0 >>308 下2行は正しくない。
312デフォルトの名無しさん (スップ Sd3f-hfg2)
2023/07/10(月) 13:25:18.46ID:Wg7MEfSed §6.3.2.1の段落2で定める例外にあたらない場合という但し書きが足りないね
悪かったよ
悪かったよ
313デフォルトの名無しさん (ワッチョイ ff63-/79E)
2023/07/10(月) 18:04:08.51ID:SSHQru750 5ch、専用ブラウザがサポート終了し、撤退する様です。
FireFoxだと書き込める様です。
それ以外のブラウザも多分大丈夫なんでしょうが、試してはいません。
FireFoxだと書き込める様です。
それ以外のブラウザも多分大丈夫なんでしょうが、試してはいません。
314デフォルトの名無しさん (ワッチョイ ff7c-rqKn)
2023/07/10(月) 18:05:43.31ID:BD2ve/J+0 ソースplz
315デフォルトの名無しさん (スップ Sd3f-9JJG)
2023/07/10(月) 18:24:57.71ID:EIZKDTevd 処理系が16byte境界に合うように
「card[0][4]とcard[1][0]の間にパディングを入れる」ってのが起こりうるか不安
わざわざコンパイラがそんなことする理由は
1. 16byte境界の合わせたほうがindexの計算が速い
2. card[0][5]へのアクセスを不正とみなして、ここへの書き込みを検知するフラグを入れる
規格上パディングが入らないことが保証されるならこの話は忘れてくれ
「card[0][4]とcard[1][0]の間にパディングを入れる」ってのが起こりうるか不安
わざわざコンパイラがそんなことする理由は
1. 16byte境界の合わせたほうがindexの計算が速い
2. card[0][5]へのアクセスを不正とみなして、ここへの書き込みを検知するフラグを入れる
規格上パディングが入らないことが保証されるならこの話は忘れてくれ
316デフォルトの名無しさん (ワッチョイ ff63-/79E)
2023/07/10(月) 18:29:02.59ID:SSHQru750 Talk専用ブラウザ 「Jane Style」 ← 5chの記述が消えました
20230710
Version 5.00 公開
・Talk に対応しました
* 5ch.net のサポートを終了しました
http://janesoft.net/janestyle/
20230710
Version 5.00 公開
・Talk に対応しました
* 5ch.net のサポートを終了しました
http://janesoft.net/janestyle/
317デフォルトの名無しさん (アウアウウー Sa9b-HEX/)
2023/07/10(月) 18:54:15.08ID:ebofKpc7a >int **p1;
無いわωωω
無いわωωω
318デフォルトの名無しさん (ワッチョイ 9fad-OD6X)
2023/07/11(火) 02:24:43.39ID:vn98dBP10 >>314
https://agree.5ch.net/test/read.cgi/operate/9240230711/
正確にはJaneStyleが離反した
> 00015ちゃんねる ★2023/07/11(火) 00:00:00.00ID:LokiTech
> Janestyleはもう5ch.netと提携していません。
> Janestyle以外の専用ブラウザをご利用ください。
> 旧バージョンの5chブラウザ(API前)は近く再度利用可能となります。
> (以下略)
https://agree.5ch.net/test/read.cgi/operate/9240230711/
正確にはJaneStyleが離反した
> 00015ちゃんねる ★2023/07/11(火) 00:00:00.00ID:LokiTech
> Janestyleはもう5ch.netと提携していません。
> Janestyle以外の専用ブラウザをご利用ください。
> 旧バージョンの5chブラウザ(API前)は近く再度利用可能となります。
> (以下略)
319はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 3732-/79E)
2023/07/11(火) 11:41:03.76ID:MoKwTryZ0 >>315
おそらく連続 (contiguously) というのは間に余計なものが入ることはないという意味で書いてると思う。
おそらく連続 (contiguously) というのは間に余計なものが入ることはないという意味で書いてると思う。
320デフォルトの名無しさん (ワッチョイ b702-VAl4)
2023/07/11(火) 12:37:10.33ID:UJem4sQV0 テスト
> どういう理屈か知らんけど
> chmateで『URLから開く』で見たい板のURL貼り付けして
> 「5ch」の部分を「5Ch」に変えて開くと
> 5chのスレchmateで見れて草
https://twitter.com/motokamin_/status/1678473238177783835
https://twitter.com/5chan_nel (5ch newer account)
> どういう理屈か知らんけど
> chmateで『URLから開く』で見たい板のURL貼り付けして
> 「5ch」の部分を「5Ch」に変えて開くと
> 5chのスレchmateで見れて草
https://twitter.com/motokamin_/status/1678473238177783835
https://twitter.com/5chan_nel (5ch newer account)
321デフォルトの名無しさん (ワッチョイ e2ad-/jfo)
2023/07/17(月) 05:23:15.01ID:0PvTd+Ok0 chmate はもう対応できてないかな。俺は読み書きできるようになったよ。
今これはPCからで Siki っていうの使って書いてるが。
今これはPCからで Siki っていうの使って書いてるが。
322デフォルトの名無しさん (ワッチョイ 163e-MI76)
2023/07/17(月) 09:16:25.38ID:YifLUjyU0 旧 API を復活させて制限が緩くなったから昔の専ブラがそのままかちょっとした設定変更で使えるよ。
今のところ PC 用の専ブラとしては JaneXeno か Siki が決定版だと思われているようだ。
今のところ PC 用の専ブラとしては JaneXeno か Siki が決定版だと思われているようだ。
323デフォルトの名無しさん (ワッチョイ 3279-EJzg)
2023/07/17(月) 11:31:18.04ID:SG+RSRxx0 >>321
PCはAPI対応前の昔のlive2ch(live5ch)が使える
PCはAPI対応前の昔のlive2ch(live5ch)が使える
324デフォルトの名無しさん (ワッチョイ 4d46-am1z)
2023/07/17(月) 11:33:54.45ID:o8kBjP6A0 ninja は make を完全に置き換え可能になったでござるかニンニン?
325はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 163e-MI76)
2023/07/17(月) 11:48:18.17ID:YifLUjyU0 >>324
設計思想が異なる。
ninja は make ほど多機能ではなく、メタビルドツール (cmake など) と組み合わせるのを前提としている。
どうせメタビルドツールは使うという前提なら ninja のほうが使い勝手が良いと思うが、
そうでないなら make のほうが楽だと思う。
設計思想が異なる。
ninja は make ほど多機能ではなく、メタビルドツール (cmake など) と組み合わせるのを前提としている。
どうせメタビルドツールは使うという前提なら ninja のほうが使い勝手が良いと思うが、
そうでないなら make のほうが楽だと思う。
326デフォルトの名無しさん (ワッチョイ dfad-onGn)
2023/07/22(土) 17:50:40.48ID:ZqN2VkQO0 Siki はおすすめ記事が出ていた。
5chブラウザー、JaneStyle代わりのオススメは「Siki」
https://news.yahoo.co.jp/articles/adfd44b291fbc07686ea4735e1397a3287aa4045
5chブラウザー、JaneStyle代わりのオススメは「Siki」
https://news.yahoo.co.jp/articles/adfd44b291fbc07686ea4735e1397a3287aa4045
327デフォルトの名無しさん (ワッチョイ 7f63-cTWz)
2023/07/27(木) 01:32:04.41ID:z625zk2O0 現状専用ブラウザJaneStyle4.23を落としてきて修正パッチを当てて動かしてます。
修正パッチは有志が機械語レベルまで降りて解析し対処してます。
今まで無かった機能まで追加してます。その技術力はスゴイですね。
ただ、専用ブラウザは今後5ちゃんねるの仕様が変わったときに
開発者がメンテできるかどうかで生死が決まりそうですね。
修正パッチは有志が機械語レベルまで降りて解析し対処してます。
今まで無かった機能まで追加してます。その技術力はスゴイですね。
ただ、専用ブラウザは今後5ちゃんねるの仕様が変わったときに
開発者がメンテできるかどうかで生死が決まりそうですね。
328デフォルトの名無しさん (ワッチョイ 7310-X/lp)
2023/08/02(水) 10:02:23.97ID:6slkiMgF0 なんか昔「コンパイル言語は消滅してスクリプト言語が主流になる!!」って主張聞いて
オープンソースアプリはともかく商業アプリでスクリプト言語使ってたら
速攻解析されてコピーなりクラックされて(その結果どうなるかはわからんけど)商売にならないんじゃないのかと思ったけど
現状どうなのかな?
JaneStyleの 不具合発生→ねらー修正 っての見てるとバイナリーコードでもスクリプトコードでも解析難易度は変わらないのかなとも思うけど。
オープンソースアプリはともかく商業アプリでスクリプト言語使ってたら
速攻解析されてコピーなりクラックされて(その結果どうなるかはわからんけど)商売にならないんじゃないのかと思ったけど
現状どうなのかな?
JaneStyleの 不具合発生→ねらー修正 っての見てるとバイナリーコードでもスクリプトコードでも解析難易度は変わらないのかなとも思うけど。
329デフォルトの名無しさん (ワッチョイ 1746-ZTxv)
2023/08/02(水) 10:53:42.75ID:19FN81hV0330デフォルトの名無しさん (ラクッペペ MMe6-Fuds)
2023/08/02(水) 11:00:33.97ID:Vv20iihFM バイナリクラックなら開発言語そのものにはあまり意味はない気がするけどな
バイナリエディタで稼働中の実行コード覗かれれば元の言語が何であろうが同じこと
バイナリエディタで稼働中の実行コード覗かれれば元の言語が何であろうが同じこと
331デフォルトの名無しさん (ワッチョイ be63-1j9t)
2023/08/02(水) 11:10:57.90ID:STym7Vrv0 こういうのはやはりファームやってた人は強いのだろうか?笑
332はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b73e-yh3V)
2023/08/02(水) 11:11:56.50ID:Vhf3uqZN0 暗号化やら難読化やらを駆使しても
実行中には実行できる形になってるのは
どうしようもないもんな。
だからライセンスで制約を付けるんだが、
不特定多数をユーザーとするビジネスモデルだと
制約を守らせるのも難しいのだと思う。
実行中には実行できる形になってるのは
どうしようもないもんな。
だからライセンスで制約を付けるんだが、
不特定多数をユーザーとするビジネスモデルだと
制約を守らせるのも難しいのだと思う。
333デフォルトの名無しさん (ワッチョイ be63-1j9t)
2023/08/02(水) 11:38:35.24ID:STym7Vrv0 不具合を何度も指摘されても放置していて
痺れ切らしたユーザーが解析してパッチを公開した
これが最初だったと思う
痺れ切らしたユーザーが解析してパッチを公開した
これが最初だったと思う
334デフォルトの名無しさん (ワッチョイ 4af0-0TAO)
2023/08/02(水) 11:45:48.58ID:JKibevwe0 あれ難読化してあるの?
335デフォルトの名無しさん (ワッチョイ 6aad-kNqZ)
2023/08/02(水) 11:54:41.63ID:na1pjdup0 業務用アプリならサブスクとクラウドって感じだろうけど
個人向けのだとどうなんだろうね
まあそういう海賊版はアップロードした奴を捕まえることで対処しているっぽいけど
アプリの制限取っ払われるのはもうどうしようもないんじゃないかな
個人向けのだとどうなんだろうね
まあそういう海賊版はアップロードした奴を捕まえることで対処しているっぽいけど
アプリの制限取っ払われるのはもうどうしようもないんじゃないかな
336デフォルトの名無しさん (ワッチョイ 6aad-kNqZ)
2023/08/02(水) 11:55:36.50ID:na1pjdup0 難読化はしてない
いやらしいほどに丸見え
いやらしいほどに丸見え
337デフォルトの名無しさん (スッププ Sdb6-FXAW)
2023/08/02(水) 20:21:52.90ID:Zi22N3SKd >>328
オープンソースを勘違いしてる?
オープンソースを勘違いしてる?
338デフォルトの名無しさん (ワッチョイ be63-1j9t)
2023/08/02(水) 20:58:10.27ID:STym7Vrv0 質問型式ではなく、自分はこう考えていると書いて
339デフォルトの名無しさん (スッププ Sdb6-FXAW)
2023/08/02(水) 23:54:36.96ID:W7+oBwzNd >>328
次元の違う問題を比較してると思う
スクリプトでコンパイル言語を代替できるようになったとしても
商業ソフトを供給するほうがスクリプトでないと実装できないことにはならないし
サーバーサイドで重要な処理を行うようにすればスクリプトでもそこは解析できないわけだし(今回の5chのAPI仕様変更みたいに)
次元の違う問題を比較してると思う
スクリプトでコンパイル言語を代替できるようになったとしても
商業ソフトを供給するほうがスクリプトでないと実装できないことにはならないし
サーバーサイドで重要な処理を行うようにすればスクリプトでもそこは解析できないわけだし(今回の5chのAPI仕様変更みたいに)
340デフォルトの名無しさん (ワッチョイ 6aad-Z/b2)
2023/08/03(木) 04:03:41.71ID:/xW45k0z0 >>328
主流かどうかはわからんけどJavaのような仮想マシンで動くやつは流行ったな(Androidスマホで採用されたので思い切り流行った)。Perlとかのインタープリタの言語も内部でコンパイルしてから動くのでなんとなく似ている。
こういう風に仮想マシンで動くようにするとOSやCPUが違っても互換性を保つのが楽になる。
主流かどうかはわからんけどJavaのような仮想マシンで動くやつは流行ったな(Androidスマホで採用されたので思い切り流行った)。Perlとかのインタープリタの言語も内部でコンパイルしてから動くのでなんとなく似ている。
こういう風に仮想マシンで動くようにするとOSやCPUが違っても互換性を保つのが楽になる。
341デフォルトの名無しさん (ワッチョイ 5b2d-IPSQ)
2023/08/03(木) 17:16:30.77ID:5KUHoXNc0 tiktokなんかjavascriptでVMを実装してその上で独自のコードが動いてるせいで解析が極めて困難になってる
342デフォルトの名無しさん (ワッチョイ 1746-ZTxv)
2023/08/04(金) 08:54:17.97ID:4oDPVLgw0 >>341
こわっ...
こわっ...
343デフォルトの名無しさん (スフッ Sd8a-KN61)
2023/08/04(金) 15:45:40.86ID:GMHK0FTid /* 文字列を反転させる */
#include <stdio.h>
#include <string.h>
void reverse(char *);
void reverse(char *cp)
{
char *p, *q, wk;
p = cp;
q = &cp[strlen(cp)]-1; // strlen()は'\0'を数えないのに1引かないと正しく動作しない
while (p < q) {
wk = *p;*p = *q;*q = wk;
p++;
q--;
}
}
int main(void)
{
char ss[] = "Program123456789";
reverse(ss);
printf("%s\n", ss);
return 0;
}
上記プログラムでstrlenは'\0'文字をカウントしないのに、1引かないと正しく動作しないのはなぜですか?
#include <stdio.h>
#include <string.h>
void reverse(char *);
void reverse(char *cp)
{
char *p, *q, wk;
p = cp;
q = &cp[strlen(cp)]-1; // strlen()は'\0'を数えないのに1引かないと正しく動作しない
while (p < q) {
wk = *p;*p = *q;*q = wk;
p++;
q--;
}
}
int main(void)
{
char ss[] = "Program123456789";
reverse(ss);
printf("%s\n", ss);
return 0;
}
上記プログラムでstrlenは'\0'文字をカウントしないのに、1引かないと正しく動作しないのはなぜですか?
344デフォルトの名無しさん (スフッ Sd8a-KN61)
2023/08/04(金) 15:49:34.67ID:GMHK0FTid 343の訂正です
q = &cp[strlen(cp)-1]です
q = &cp[strlen(cp)-1]です
345デフォルトの名無しさん (ワッチョイ 17c9-NYH+)
2023/08/04(金) 15:57:00.72ID:/AVxr1FX0 末尾の \0 を入れ替えたらあかんやろ
"AB" は strlen() == 2 になって
0 1 2
[A][B][\0]
こういう配置や
"AB" は strlen() == 2 になって
0 1 2
[A][B][\0]
こういう配置や
346デフォルトの名無しさん (ワッチョイ 17c9-NYH+)
2023/08/04(金) 16:03:23.77ID:/AVxr1FX0 strlen は文字数を返す一方で [ ] の中はオフセット量(0スタートの相対距離)だから
1文字目を指すのは オフセット0 の場所なんだわ
1文字目を指すのは オフセット0 の場所なんだわ
347デフォルトの名無しさん (スフッ Sd8a-rFCo)
2023/08/04(金) 16:09:46.38ID:GMHK0FTid348デフォルトの名無しさん (ワッチョイ 17c9-NYH+)
2023/08/04(金) 16:25:43.11ID:/AVxr1FX0 そこまで考えてというか ポインタ/配列添え字 が 0 から始まるだけの話でな
1文字目 = (オフセット)0
2文字目 = (オフセット)1
:
n文字目 = (オフセット)n-1
他所言語(特に古めのBASIC) だと配列の添え字は 1から始まるのが自然だから
その感覚のままだと およよ? ってなる
1文字目 = (オフセット)0
2文字目 = (オフセット)1
:
n文字目 = (オフセット)n-1
他所言語(特に古めのBASIC) だと配列の添え字は 1から始まるのが自然だから
その感覚のままだと およよ? ってなる
349デフォルトの名無しさん (ワッチョイ be63-1j9t)
2023/08/04(金) 16:33:03.37ID:h8ImZ1qQ0 COBOL, PL/I, RPG, FORTRAN, BASIC, R, Lua, Julia は、1で始まる
350はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b73e-yh3V)
2023/08/04(金) 16:45:56.55ID:vdf3rEq10 BASIC はバリエーションが多いよ。
0 と 1 を切り替える機能があるやつを知ってる。
0 と 1 を切り替える機能があるやつを知ってる。
351デフォルトの名無しさん (ブーイモ MMe6-rA3N)
2023/08/04(金) 22:18:35.44ID:3UzK9dfoM >>341
そのやり方だとapple審査通らないのでは?
そのやり方だとapple審査通らないのでは?
352デフォルトの名無しさん (ブーイモ MMe6-rA3N)
2023/08/04(金) 22:23:16.57ID:3UzK9dfoM 環境はwebkitでvm自体dlしてくるから問題ないということなのか…
353デフォルトの名無しさん (ワッチョイ e3ad-c/5M)
2023/08/05(土) 14:06:37.50ID:7Tp3cevL0 >>349
Pascal もよろしく
Pascal もよろしく
354デフォルトの名無しさん (ワッチョイ bb01-tyL0)
2023/08/05(土) 21:43:38.19ID:p8skrLMB0 >>353
Fortranは添字の開始値を指定しない場合は1から始まり、添字の開始値を指定する場合は任意の整数
(負も可)を指定できるが、Pascalは添字の開始値指定が必須で任意の整数(負も可)を指定できるから、
1から始まるとは言えない。
Fortranは添字の開始値を指定しない場合は1から始まり、添字の開始値を指定する場合は任意の整数
(負も可)を指定できるが、Pascalは添字の開始値指定が必須で任意の整数(負も可)を指定できるから、
1から始まるとは言えない。
355デフォルトの名無しさん (スプープ Sdc3-EMqx)
2023/08/05(土) 22:05:05.59ID:Rq9CiLOMd356デフォルトの名無しさん (ワッチョイ e3ad-c/5M)
2023/08/05(土) 23:14:06.26ID:7Tp3cevL0 >>354
そういやそうだった。忘れてた。
そういやそうだった。忘れてた。
357デフォルトの名無しさん (ワッチョイ c379-IXit)
2023/08/06(日) 12:09:56.49ID:SuulMMGF0 今時はExcelのセルをCellsでアクセスしたり配列に代入した場合だけ1オリジン固定でちょっと困る
歴史的経緯というよりExcelのCOMオブジェクトの仕様なんだろうけど
歴史的経緯というよりExcelのCOMオブジェクトの仕様なんだろうけど
358デフォルトの名無しさん (テテンテンテン MM17-2Tt6)
2023/08/06(日) 13:13:28.45ID:GDllPCgfM 配列って
array + sizeof(*array) * index
だから、0からの方が理にかなってると思う
1からの場合は、実行時にアドレスを割り出すときに絶対1引いてるよね…
そこまでしても人間の直感に合わせたかったのだろう
array + sizeof(*array) * index
だから、0からの方が理にかなってると思う
1からの場合は、実行時にアドレスを割り出すときに絶対1引いてるよね…
そこまでしても人間の直感に合わせたかったのだろう
359デフォルトの名無しさん (ワッチョイ ebad-9S8H)
2023/08/06(日) 13:25:15.07ID:jxDYmhFo0 1引いているのはあくまで内部的なもの
それこそ人間の直感に合わせたインターフェイスとコンピュータの都合の良い情報に相互変換するのがプログラムじゃなかろうか
0からのほうが分かりやすいと思うのはプログラマだからだろうし
10個のデータの最後のインデックスは10というのは添え字で考える場合は分かりやすいしね
それこそ人間の直感に合わせたインターフェイスとコンピュータの都合の良い情報に相互変換するのがプログラムじゃなかろうか
0からのほうが分かりやすいと思うのはプログラマだからだろうし
10個のデータの最後のインデックスは10というのは添え字で考える場合は分かりやすいしね
360デフォルトの名無しさん (ワッチョイ 7510-WTQk)
2023/08/06(日) 14:09:12.01ID:VdM0xi000 先頭をゼロと呼ぶか1と呼ぶかならまだマシよ
音楽なんて先頭要素を1と呼ぶだけじゃなく、要素間の差がない事まで、ゼロじゃなく1と呼ぶ
現代人からするとどう考えても頭おかしいが、仕方がない。ゼロの概念がなかった時代から定義が変わらず続いてるらしい
音楽なんて先頭要素を1と呼ぶだけじゃなく、要素間の差がない事まで、ゼロじゃなく1と呼ぶ
現代人からするとどう考えても頭おかしいが、仕方がない。ゼロの概念がなかった時代から定義が変わらず続いてるらしい
361デフォルトの名無しさん (ワッチョイ c379-IXit)
2023/08/06(日) 14:15:40.68ID:SuulMMGF0 Cはゼロに限らず何もないを示すvoidが無い頃は全部intでやってた時代もあるんだよ
頭おかしいな
頭おかしいな
362デフォルトの名無しさん (ワッチョイ ebad-9S8H)
2023/08/06(日) 14:37:12.68ID:jxDYmhFo0 voidが何もないことを示すならvoid*の存在のほうが気になる
363デフォルトの名無しさん (ワッチョイ e3ad-c/5M)
2023/08/06(日) 14:59:14.25ID:RhhSFLLO0 void だけ特殊な型と考えるしかないのではないかな。大きさが0ビットの型と考えても良いのかも知れないが。
364デフォルトの名無しさん (テテンテンテン MM17-2Tt6)
2023/08/06(日) 15:50:27.26ID:3R7VaRJUM sizeof(void) → 1 だな
これって正式な仕様なのか分からんけど
これって正式な仕様なのか分からんけど
365デフォルトの名無しさん (ワッチョイ 87cf-n4fA)
2023/08/06(日) 16:40:17.07ID:Raz9Sh7o0 それgccなんかの独自仕様のはず。void*をバイト単位で計算できるから便利なんだけどね。
366デフォルトの名無しさん (スッププ Sd03-EMqx)
2023/08/06(日) 17:35:17.48ID:/aV5Am17d それは気持ち悪いな
367はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b3e-tyL0)
2023/08/06(日) 17:46:22.79ID:Mgx3ApDu0 言語仕様上は void は不完全型とする扱い、かつ sizeof に不完全型を与えることは出来ない。
368デフォルトの名無しさん (スッププ Sd03-EMqx)
2023/08/06(日) 17:48:27.27ID:/aV5Am17d gccだとsizeof(関数名)も1なんでしょ
明らかにただの手抜き
明らかにただの手抜き
369デフォルトの名無しさん (ワッチョイ b363-aAN6)
2023/08/06(日) 17:52:12.98ID:wnylhiXb0 仕様上の問題は置いておいて
1として扱うと何か良いことあるんでしょうか?
1として扱うと何か良いことあるんでしょうか?
370はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b3e-tyL0)
2023/08/06(日) 17:56:04.37ID:Mgx3ApDu0 未定義な動作は規格として規格が何ら要求を課さないことを意味するが
但し書きの中に「文書化された環境に特有な方法で処理してもよい」ともある。
GNU C のドキュメントには void と関数 (関数指示子) の大きさについて記述がある。
https://gcc.gnu.org/onlinedocs/gcc/Pointer-Arith.html
これも規格が認める正しい動作のひとつ。
それはそうとして処理系に固有の挙動に依存するのを避けるに越したことは無いけど。
但し書きの中に「文書化された環境に特有な方法で処理してもよい」ともある。
GNU C のドキュメントには void と関数 (関数指示子) の大きさについて記述がある。
https://gcc.gnu.org/onlinedocs/gcc/Pointer-Arith.html
これも規格が認める正しい動作のひとつ。
それはそうとして処理系に固有の挙動に依存するのを避けるに越したことは無いけど。
371デフォルトの名無しさん (ワッチョイ 87cf-n4fA)
2023/08/06(日) 18:03:13.82ID:Raz9Sh7o0372はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b3e-tyL0)
2023/08/06(日) 18:10:14.29ID:Mgx3ApDu0 void* は演算させないという意思表示なこともあるんで
演算できることが良いわけでもないんだけどね。
演算できることが良いわけでもないんだけどね。
373デフォルトの名無しさん (ワッチョイ 87cf-n4fA)
2023/08/06(日) 18:29:53.89ID:Raz9Sh7o0 どんな用途があるかな?デリファレンス先にアクセスできないってだけで十分な気もするが。
374デフォルトの名無しさん (アウアウウー Sa9f-W3Bx)
2023/08/06(日) 18:36:51.14ID:mq8IFmf1a 任意に渡ってきたポインタ間の距離?
375デフォルトの名無しさん (ワッチョイ 7510-WTQk)
2023/08/07(月) 01:08:17.44ID:zJXXdP4R0 アレじゃないかな?メリットあるとしたら
【struct に含めたメンバーは、サイズゼロはダメ】っていう仕様があったかと思う。
正確には【structの違うメンバーが同じアドレスになったらダメ】だったか
----
以下は蛇足
ただサイズゼロだめってのは例外があって。
structの末尾メンバーでchar[] だか char[0]ってのが、確かC99あたりでアリになった気がする。
これは…それまでも使われてたテクで
【structの最後に char [1] のメンバーを置いて、実際にはメモリ確保の時structのサイズ+可変長部のサイズでメモリ確保し、最後のメンバーを使ってstructのサイズを超えてアクセスする】という慣用句があって、
それの目的で
C言語公式仕様風では char[1] と書き
確か昔は gccだとchar[]
vcだと char[0]
ていう書き方してた。(gccとvcは逆だったかも知れない)
のが、公式仕様でもサイズゼロokになった…という話だったかと。
【struct に含めたメンバーは、サイズゼロはダメ】っていう仕様があったかと思う。
正確には【structの違うメンバーが同じアドレスになったらダメ】だったか
----
以下は蛇足
ただサイズゼロだめってのは例外があって。
structの末尾メンバーでchar[] だか char[0]ってのが、確かC99あたりでアリになった気がする。
これは…それまでも使われてたテクで
【structの最後に char [1] のメンバーを置いて、実際にはメモリ確保の時structのサイズ+可変長部のサイズでメモリ確保し、最後のメンバーを使ってstructのサイズを超えてアクセスする】という慣用句があって、
それの目的で
C言語公式仕様風では char[1] と書き
確か昔は gccだとchar[]
vcだと char[0]
ていう書き方してた。(gccとvcは逆だったかも知れない)
のが、公式仕様でもサイズゼロokになった…という話だったかと。
376デフォルトの名無しさん (ワッチョイ 7510-WTQk)
2023/08/07(月) 01:23:44.93ID:zJXXdP4R0 あ、メリットの言い方をすると
処理系内でstructのサイズ計算を実装するにあたって、あらゆる型がサイズ1以上である事が分かっていれば、合算処理を合理的に実装する事ができる
…よね?
処理系内でstructのサイズ計算を実装するにあたって、あらゆる型がサイズ1以上である事が分かっていれば、合算処理を合理的に実装する事ができる
…よね?
377デフォルトの名無しさん (スッップ Sdd7-EMqx)
2023/08/07(月) 08:18:18.04ID:SwgOJiZRd 意味不明
メンバーにvoidを含められたとしても参照すればエラーになるはずなので使いようがない
(void*はもともと正しいサイズを持つ)
unionで似たようなことはできる
メンバーにvoidを含められたとしても参照すればエラーになるはずなので使いようがない
(void*はもともと正しいサイズを持つ)
unionで似たようなことはできる
378はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b3e-tyL0)
2023/08/07(月) 09:11:24.17ID:U9It/DCQ0 >>375
サイズゼロをOKとすると言ってしまうと語弊があると思う。
仕様上の理屈だと「不完全型を指定できる」だし、そうした場合の動作は
いくつかの特例で成立していて「長さ 0 の配列」は現れない。
sizeof などでは「フレキシブル配列メンバは無視される」だし、
メンバにアクセスするときは
> 置き換えられた配列が要素をもたないとき,それはただ一つの要素をもつのと同じ規則で動作する。
> しかし,その要素にアクセスした場合,又はその要素を一つ越えたポインタを生成した場合,
> その動作は未定義とする。
とあって、長さ 1 として扱うけど要素にはアクセスするなという回りくどい言い回しになってる。
サイズゼロをOKとすると言ってしまうと語弊があると思う。
仕様上の理屈だと「不完全型を指定できる」だし、そうした場合の動作は
いくつかの特例で成立していて「長さ 0 の配列」は現れない。
sizeof などでは「フレキシブル配列メンバは無視される」だし、
メンバにアクセスするときは
> 置き換えられた配列が要素をもたないとき,それはただ一つの要素をもつのと同じ規則で動作する。
> しかし,その要素にアクセスした場合,又はその要素を一つ越えたポインタを生成した場合,
> その動作は未定義とする。
とあって、長さ 1 として扱うけど要素にはアクセスするなという回りくどい言い回しになってる。
379デフォルトの名無しさん (アウアウウー Sa9d-mBaV)
2023/08/07(月) 10:17:41.09ID:wl/Lx6N5a >>375
typedef struct { int x; char a[1]; } A; A *p = (A *)malloc(sizeof(A) - 1 + N);
typedef struct { int y; char b[]; } B; B *q = (B *)malloc(sizeof(B) + N);
typedef struct { int z; char c[0]; } C; C *r = (C *)malloc(sizeof(C) + N);
かな
typedef struct { int x; char a[1]; } A; A *p = (A *)malloc(sizeof(A) - 1 + N);
typedef struct { int y; char b[]; } B; B *q = (B *)malloc(sizeof(B) + N);
typedef struct { int z; char c[0]; } C; C *r = (C *)malloc(sizeof(C) + N);
かな
380デフォルトの名無しさん (アウアウウー Sa9d-mBaV)
2023/08/07(月) 10:19:25.16ID:wl/Lx6N5a >>378 の主張だと
typedef struct { int y; char b[]; } B; B *q = (B *)malloc(sizeof(B) - 1 + N);
でなければならないのかな
typedef struct { int y; char b[]; } B; B *q = (B *)malloc(sizeof(B) - 1 + N);
でなければならないのかな
381はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b3e-tyL0)
2023/08/07(月) 11:05:26.04ID:U9It/DCQ0 >>379
配列の大きさとして 1 を指定して可変長のように扱うやり方については
ちょっと不明瞭なんだが仕様に厳密にいうと準拠してない方法だと考えられている。
https://c-faq.com/struct/structhack.html
配列の大きさが 0 より大きくなければならないということについては
例外を見つけられないのでどこであろうと 0 を指定したら未定義と解釈していいと思う。
GNU C では構造体メンバの最後の配列要素に 0 を指定した場合は
C99 でフレキシブル配列メンバにしたときとほぼ同じような扱いになることがドキュメント化されてる。
https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html
つまり GNU C では 0 を指定していいわけだが……結果が同じならあえてやる必要もないな。
GNU C でも構造体の最後の要素を除いて配列の大きさに 0 を指定するのは (可能だが) 推奨されていない。
アクセスした結果は未定義なのでなんの役に立つのかようわからん。
配列の大きさとして 1 を指定して可変長のように扱うやり方については
ちょっと不明瞭なんだが仕様に厳密にいうと準拠してない方法だと考えられている。
https://c-faq.com/struct/structhack.html
配列の大きさが 0 より大きくなければならないということについては
例外を見つけられないのでどこであろうと 0 を指定したら未定義と解釈していいと思う。
GNU C では構造体メンバの最後の配列要素に 0 を指定した場合は
C99 でフレキシブル配列メンバにしたときとほぼ同じような扱いになることがドキュメント化されてる。
https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html
つまり GNU C では 0 を指定していいわけだが……結果が同じならあえてやる必要もないな。
GNU C でも構造体の最後の要素を除いて配列の大きさに 0 を指定するのは (可能だが) 推奨されていない。
アクセスした結果は未定義なのでなんの役に立つのかようわからん。
382デフォルトの名無しさん (スッップ Sdd7-EMqx)
2023/08/07(月) 11:36:51.88ID:SwgOJiZRd383デフォルトの名無しさん (ブーイモ MMf3-DyKn)
2023/08/07(月) 14:20:51.17ID:Xd8Y6/QgM384はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b3e-tyL0)
2023/08/07(月) 14:26:13.65ID:U9It/DCQ0 >>382-383
どっちも間違い。 この場合は -1 をしてはいけない。
どっちも間違い。 この場合は -1 をしてはいけない。
385デフォルトの名無しさん (スッップ Sdd7-EMqx)
2023/08/07(月) 20:36:36.16ID:SwgOJiZRd386はちみつ餃子 ◆8X2XSCHEME (ワッチョイ eb32-oz9p)
2023/08/07(月) 21:06:32.92ID:+g1cDN8+0 >>385
1バイトごときのために余計なことをしないってのは理解できる理屈だが、不必要な1バイトを確保するってのもそれはそれで無駄に考えさせられてしまう感じがする。
やろうとしていることと合致しないコードなわけだから。
害はないが役に立ってもいないということを確信するのはどういう役に立っているのかを見つけるより難しい。
1バイトごときのために余計なことをしないってのは理解できる理屈だが、不必要な1バイトを確保するってのもそれはそれで無駄に考えさせられてしまう感じがする。
やろうとしていることと合致しないコードなわけだから。
害はないが役に立ってもいないということを確信するのはどういう役に立っているのかを見つけるより難しい。
387デフォルトの名無しさん (ブーイモ MMf3-DyKn)
2023/08/07(月) 21:30:20.59ID:6YHeZP2fM388デフォルトの名無しさん (スッップ Sdd7-EMqx)
2023/08/07(月) 22:08:57.23ID:SwgOJiZRd >>386
どうせmallocは1バイト単位では確保しないので正確なサイズを指定しても構造体一個につき数バイト以上の無駄な領域が確保されることになるし…
この構造体を数万個単位で使うような大規模プログラムで極力ムダを避けたいならmallocは使わず最初に大きなリニア領域を確保してそこから切り分けたほうがいいだろう
蛇足だが経験上こういう構造体を使うときはcopy=malloc(sizeof(A) + strlen(src)); strcpy(copy->a,src);のように使うことが多い
これなら正確なサイズ指定になる
>>387
どっちにしろ君は何か勘違いしてないかな
長ったらしく書くなら-sizeof(int)ではなく-sizeof(char)となる
どうせmallocは1バイト単位では確保しないので正確なサイズを指定しても構造体一個につき数バイト以上の無駄な領域が確保されることになるし…
この構造体を数万個単位で使うような大規模プログラムで極力ムダを避けたいならmallocは使わず最初に大きなリニア領域を確保してそこから切り分けたほうがいいだろう
蛇足だが経験上こういう構造体を使うときはcopy=malloc(sizeof(A) + strlen(src)); strcpy(copy->a,src);のように使うことが多い
これなら正確なサイズ指定になる
>>387
どっちにしろ君は何か勘違いしてないかな
長ったらしく書くなら-sizeof(int)ではなく-sizeof(char)となる
389デフォルトの名無しさん (ワッチョイ 7510-WTQk)
2023/08/07(月) 22:21:06.53ID:zJXXdP4R0 どんどん蛇足的になってしまってる気はするが
1バイトの加減算ってのはインクリ・デクリの1命令で演算できるし分岐しないし、
アライメント境界を1バイト超えたらバス幅分-1の無駄ができるかもなので
しかも100万個の「3d座標型」とかがその理屈で1個につき7バイト無駄にしたら700万バイトが無駄になるので
たかが1バイトと軽視して良いか否かは、状況によります
で、はちみつさんのちみつな調査に感謝。蛇足で変な事書いて仕事増やしてごめんなさい
1バイトの加減算ってのはインクリ・デクリの1命令で演算できるし分岐しないし、
アライメント境界を1バイト超えたらバス幅分-1の無駄ができるかもなので
しかも100万個の「3d座標型」とかがその理屈で1個につき7バイト無駄にしたら700万バイトが無駄になるので
たかが1バイトと軽視して良いか否かは、状況によります
で、はちみつさんのちみつな調査に感謝。蛇足で変な事書いて仕事増やしてごめんなさい
390デフォルトの名無しさん (ワッチョイ 7510-WTQk)
2023/08/07(月) 22:28:38.60ID:zJXXdP4R0 でも、ワシは(もしそれが有効だと判断したら)公式なC言語仕様上未定義になるとしても、
伝統的にgccとvcが「独自拡張」として許してきた書き方で
書くよ
もちろん責任者の許可は伺うけどね
ダメと言われたらもちろんやらない
伝統的にgccとvcが「独自拡張」として許してきた書き方で
書くよ
もちろん責任者の許可は伺うけどね
ダメと言われたらもちろんやらない
391デフォルトの名無しさん (ワッチョイ 0547-DyKn)
2023/08/07(月) 22:34:55.16ID:hZrkDm/B0 >>388
ちゃんとサイズ確かめた?そんなに簡単なら[]拡張なんて要らないと思わない?
ちゃんとサイズ確かめた?そんなに簡単なら[]拡張なんて要らないと思わない?
392デフォルトの名無しさん (ワッチョイ 7510-WTQk)
2023/08/07(月) 22:36:31.40ID:zJXXdP4R0 で
時には自分が、あるプロジェクトの最高責任者だったりする訳で
その環境は特定のカスタムgccの特定バージョンを使うしか選択肢がないから無用な心配は意味がなくて
次のプロジェクトではどうせ全部作り直しだったりする
時には自分が、あるプロジェクトの最高責任者だったりする訳で
その環境は特定のカスタムgccの特定バージョンを使うしか選択肢がないから無用な心配は意味がなくて
次のプロジェクトではどうせ全部作り直しだったりする
393デフォルトの名無しさん (スッップ Sdd7-EMqx)
2023/08/07(月) 22:48:24.16ID:SwgOJiZRd394デフォルトの名無しさん (ワッチョイ 0547-DyKn)
2023/08/07(月) 22:52:47.17ID:hZrkDm/B0 >>393
sizeof(A) != sizeof(int) + sizeof(char)
sizeof(A) != sizeof(int) + sizeof(char)
395デフォルトの名無しさん (ワッチョイ 0b01-W3Bx)
2023/08/07(月) 23:31:53.12ID:+QyISSA90396デフォルトの名無しさん (ワッチョイ 0b01-W3Bx)
2023/08/07(月) 23:39:40.36ID:+QyISSA90397デフォルトの名無しさん (スップ Sdcf-YWx9)
2023/08/08(火) 07:56:15.14ID:QQsYUamCd 引き算とか言ってる馬鹿初めて見たわ
398デフォルトの名無しさん (ワッチョイ b363-uQHI)
2023/08/08(火) 11:03:00.71ID:+jW/mKCz0 複素数使って計算すれば馬鹿にされませんよ?
399デフォルトの名無しさん (スッップ Sdd7-EMqx)
2023/08/08(火) 20:31:55.04ID:sLVQKk30d400デフォルトの名無しさん (ブーイモ MMf3-DyKn)
2023/08/08(火) 22:38:48.82ID:MjZ+EK1qM >>399
初歩的な構造体のパッキングルールを理解していたらどうって事無いはずなのだけども…この程度で可読性とか労力とか、そういうレベルの仕事なら使用禁止で良いんじゃないかな。
あと、何か勘違いしているようだけど、[1]だとややこしいけど出来るねって言ってだけで、使うなら[]だよ。c99標準な訳だし。
初歩的な構造体のパッキングルールを理解していたらどうって事無いはずなのだけども…この程度で可読性とか労力とか、そういうレベルの仕事なら使用禁止で良いんじゃないかな。
あと、何か勘違いしているようだけど、[1]だとややこしいけど出来るねって言ってだけで、使うなら[]だよ。c99標準な訳だし。
401デフォルトの名無しさん (スッップ Sdd7-EMqx)
2023/08/09(水) 00:47:58.70ID:3Zyc8vU6d 「-sizeof(int) が正解」とは言えないよ環境による
パッキングルールを変更できる#pragmaもあるから
それは単なる「思い込み」ということになるな
パッキングルールを変更できる#pragmaもあるから
それは単なる「思い込み」ということになるな
402デフォルトの名無しさん (ワッチョイ 7510-WTQk)
2023/08/09(水) 06:00:17.77ID:ye8eZ1o40403デフォルトの名無しさん (アウアウウー Sa9d-mBaV)
2023/08/09(水) 08:10:28.54ID:KudoDE9Va 言語仕様知らずに叩いてるんだから無理だろ
404デフォルトの名無しさん (ワッチョイ 915f-1PqA)
2023/08/11(金) 14:52:37.80ID:fYiGiCzQ0 質問失礼します
Windowsソフトが作りたく基礎を勉強したのですがここからソフトを作る道筋が見えてきません
SDKを用い制作するということまではわかったのですがそれについて解説しているサイトがなく詰まっている状態です
おすすめのサイトや参考書などあればご教示くさだい
Windowsソフトが作りたく基礎を勉強したのですがここからソフトを作る道筋が見えてきません
SDKを用い制作するということまではわかったのですがそれについて解説しているサイトがなく詰まっている状態です
おすすめのサイトや参考書などあればご教示くさだい
405デフォルトの名無しさん (スフッ Sd2f-SP/C)
2023/08/11(金) 15:39:30.67ID:zcS71Tbhd406はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b3e-oz9p)
2023/08/11(金) 15:46:47.16ID:EnF/lRSf0 モダンなフレームワークを使った方が良いが
Windows の基礎的な理念というか考え方をかなり平易に
説明したものということだと↓とかが有名だと思う。
http://www.kumei.ne.jp/c_lang/
ただ、古いので実情に合わない部分はある。
Windows には異なる系統の API があって、
現在では COM をベースにした WinRT がモダン API として
整備されているのでそちらを軸にしても良いかもしれない。
Windows の基礎的な理念というか考え方をかなり平易に
説明したものということだと↓とかが有名だと思う。
http://www.kumei.ne.jp/c_lang/
ただ、古いので実情に合わない部分はある。
Windows には異なる系統の API があって、
現在では COM をベースにした WinRT がモダン API として
整備されているのでそちらを軸にしても良いかもしれない。
407デフォルトの名無しさん (ワッチョイ b363-yDkU)
2023/08/11(金) 16:09:36.01ID:Ib19PZqn0 SDK使っての開発は30年位昔のやり方なんではないだろうか
408デフォルトの名無しさん (ワッチョイ 915f-1PqA)
2023/08/11(金) 16:11:15.49ID:fYiGiCzQ0409デフォルトの名無しさん (ワッチョイ 915f-1PqA)
2023/08/11(金) 16:12:13.55ID:fYiGiCzQ0 >>407
基礎しかわからない初心者なものでして、、、
基礎しかわからない初心者なものでして、、、
410デフォルトの名無しさん (ワッチョイ e3ad-c/5M)
2023/08/11(金) 16:53:28.21ID:j3k4ZyED0 Windows のネイティブなプログラム作りには C というよりは C++ の方がよく使われていたと思うので、C++ も覚えた方が作り易くなるような気がする。
411デフォルトの名無しさん (アウアウウー Sa9d-SP/C)
2023/08/11(金) 17:26:57.28ID:v1edpQDwa412デフォルトの名無しさん (ワッチョイ e3ad-c/5M)
2023/08/11(金) 17:52:29.73ID:j3k4ZyED0 なるほど。
413デフォルトの名無しさん (ワッチョイ b363-yDkU)
2023/08/11(金) 17:54:37.84ID:Ib19PZqn0 最初残ろは16ビットアプリだったから、
メモリーモデルやアプリが使用可能なリソースサイズなど
結構管理が大変だった記憶がある
メモリーモデルやアプリが使用可能なリソースサイズなど
結構管理が大変だった記憶がある
414デフォルトの名無しさん (ワッチョイ b363-yDkU)
2023/08/11(金) 17:55:37.06ID:Ib19PZqn0 最初のころは
なんて変換するんだよ・・・
なんて変換するんだよ・・・
415デフォルトの名無しさん (ワッチョイ 87cf-uQHI)
2023/08/11(金) 18:22:42.78ID:WGGkjKOg0 勉強目的の縛りプレイじゃなければ最初からCじゃなくC++使う方が良いと思うが。
416デフォルトの名無しさん (ワッチョイ c379-IXit)
2023/08/11(金) 18:30:11.06ID:I7dwFhkG0 いまだにCOM ATL DirectX IDL辺りの定義見るとC知識では手に負えないイメージ
C++MFC全盛の時代は本当に嫌いだった
C#でそれらに一切関わる必要がなくなってほんと良かったわ
C++MFC全盛の時代は本当に嫌いだった
C#でそれらに一切関わる必要がなくなってほんと良かったわ
417デフォルトの名無しさん (ワッチョイ 2f9f-mBaV)
2023/08/11(金) 18:52:16.19ID:DMm7pQwE0 古いAPIの設計思想が時代に合わないのも多いし、フレッシュな知識を蓄積したほうがいいという意味ではWinRTかな
418デフォルトの名無しさん (ワッチョイ c379-IXit)
2023/08/11(金) 19:09:53.39ID:I7dwFhkG0 >WinRTかな
名前が終わってる
名前が終わってる
419デフォルトの名無しさん (アウアウウー Sa9d-mBaV)
2023/08/11(金) 19:10:12.84ID:v1edpQDwa DirectXはCでも使える
420デフォルトの名無しさん (アウアウウー Sa9d-mBaV)
2023/08/11(金) 19:11:09.76ID:v1edpQDwa MFCは糞だから触るな危険
421デフォルトの名無しさん (アウアウウー Sa9d-mBaV)
2023/08/11(金) 19:12:06.88ID:v1edpQDwa WinRTはないな
422デフォルトの名無しさん (ワッチョイ 0902-MkJ9)
2023/08/11(金) 19:17:33.71ID:yxSWeMo+0 とりあえず現在でWindowsアプリのプログラミングを始めるにあたり、C言語というのはやめるべき
悪いこと言わないからせめてC++にしておけ
そして楽に作りたいならC#にしておけ
悪いこと言わないからせめてC++にしておけ
そして楽に作りたいならC#にしておけ
423はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b3e-oz9p)
2023/08/11(金) 19:26:30.18ID:EnF/lRSf0 C でやってみれば (やれるだけの知識を身に付ければ) 低レイヤで何が起こっているのかという具体的なメカニズムを理解できるという意味で悪くはないと思う。
ただ、今となっては日常的にやるもんではない。
ただ、今となっては日常的にやるもんではない。
424デフォルトの名無しさん (ワッチョイ c379-IXit)
2023/08/11(金) 19:26:45.26ID:I7dwFhkG0 C#で.NETにない事をやろうとするとpnvoke知識が必須だから
Cを適当に摘みつつC#でいいんじゃなかろうか
C++はもう時間の無駄
時間が無限にあるならどうぞ
Cを適当に摘みつつC#でいいんじゃなかろうか
C++はもう時間の無駄
時間が無限にあるならどうぞ
425デフォルトの名無しさん (ワッチョイ b363-yDkU)
2023/08/11(金) 19:35:56.75ID:Ib19PZqn0 Windowsの動作原理を学びたいなら、SDKやMFCは良いと思うよ
426デフォルトの名無しさん (テテンテンテン MM17-2Tt6)
2023/08/11(金) 19:53:56.21ID:eb/xI15cM 今のWindowsの最新のUIは全てWinRTの上に構築されている
Githubでソース見れば一目瞭然
完全に今のWindowsの基礎となるAPI
無知というのは罪だな
Githubでソース見れば一目瞭然
完全に今のWindowsの基礎となるAPI
無知というのは罪だな
427デフォルトの名無しさん (ワッチョイ c379-IXit)
2023/08/11(金) 19:58:54.93ID:I7dwFhkG0 まさかWinRTでマウント取ろうとする馬鹿が居ると思わないわ
428デフォルトの名無しさん (ワッチョイ 0f5f-4nYy)
2023/08/11(金) 20:00:58.18ID:xXGnDnZp0 黙NG
429デフォルトの名無しさん (テテンテンテン MM17-2Tt6)
2023/08/11(金) 20:32:13.88ID:iNvWur52M430デフォルトの名無しさん (テテンテンテン MM17-2Tt6)
2023/08/11(金) 20:35:15.14ID:iNvWur52M >>427
WinRT終わってるとか無いわーw
WinRT終わってるとか無いわーw
431デフォルトの名無しさん (ワッチョイ b363-yDkU)
2023/08/11(金) 21:00:42.88ID:Ib19PZqn0 変なのが湧いてきたね
432デフォルトの名無しさん (ワッチョイ 6b7a-o30X)
2023/08/11(金) 23:10:37.93ID:je510yk+0 mallocの戻り値は代入先のポインタ型にキャストして使おうと言ってる入門サイトがほとんどです。
これは正しくなくて、キャスト不要が正しいと思いますが達人の皆さんの意見はどうですか。
これは正しくなくて、キャスト不要が正しいと思いますが達人の皆さんの意見はどうですか。
433デフォルトの名無しさん (ワッチョイ 87cf-uQHI)
2023/08/11(金) 23:16:31.85ID:WGGkjKOg0 void*はキャストしなきゃ使いようがないだろ
434蟻人間 ◆T6xkBnTXz7B0 (スフッ Sdd7-38VD)
2023/08/11(金) 23:37:09.78ID:903ETN7Yd C++ならvoid*からのキャスト必須。C言語ならキャスト不要。
435デフォルトの名無しさん (ワッチョイ ab36-uQHI)
2023/08/11(金) 23:43:24.35ID:ayxoKHEe0 現場猫案件。
436デフォルトの名無しさん (テテンテンテン MMb6-v80P)
2023/08/12(土) 00:37:36.88ID:dWTISXa3M >>431
害悪はオマエだろ!
WinRTが終わったAPIみたいなフェイクを正したんだよ!
WinUIとかGithubでソース公開されてんだから、ソース見れば一目瞭然だろ!
2度とフェイクを書き込むなよ!
害悪はオマエだろ!
WinRTが終わったAPIみたいなフェイクを正したんだよ!
WinUIとかGithubでソース公開されてんだから、ソース見れば一目瞭然だろ!
2度とフェイクを書き込むなよ!
437デフォルトの名無しさん (ワッチョイ df9f-DXLR)
2023/08/12(土) 01:20:09.40ID:PG846lpi0 もしかしてWindowsRT(ARM版Windows8)と勘違いしてたりして
438デフォルトの名無しさん (テテンテンテン MMb6-v80P)
2023/08/12(土) 02:14:36.52ID:dWTISXa3M WindowsRTは失敗したプロダクトだけど、WinRTは完全にWin32を置き換える為のモダンな基盤APIになった
ちなみにWinRTに関する情報は全然出回ってないな(少なくとも日本では)
MSも直接使うAPIじゃないと考えてるのかもしれない
実際、WinUI3とかを通して使うことになるのだろう
ちなみにWinRTに関する情報は全然出回ってないな(少なくとも日本では)
MSも直接使うAPIじゃないと考えてるのかもしれない
実際、WinUI3とかを通して使うことになるのだろう
439デフォルトの名無しさん (テテンテンテン MMb6-v80P)
2023/08/12(土) 02:21:43.01ID:dWTISXa3M MSは一時的に、DirectXやActiveXみたいにRTを流行らそうと考えてたふしがある
でも、まったく浸透せずにRTに悪いイメージだけが残ったw
でも、まったく浸透せずにRTに悪いイメージだけが残ったw
440デフォルトの名無しさん (アウアウウー Sac7-DXLR)
2023/08/12(土) 04:30:30.39ID:XzrhAFZoa ないわ
441はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f3e-Z7S6)
2023/08/12(土) 11:53:24.11ID:BlsfQ4Nv0 >>432
型変換とキャストを混同して説明していることがそれなりにある。
それとは別に不要でもキャストすべきかどうかというのは習慣の問題。 人にとっての読みやすさは仕様上の要・不用とは別の話なので明瞭な答えはない。
型変換とキャストを混同して説明していることがそれなりにある。
それとは別に不要でもキャストすべきかどうかというのは習慣の問題。 人にとっての読みやすさは仕様上の要・不用とは別の話なので明瞭な答えはない。
442デフォルトの名無しさん (オイコラミネオ MMe3-vKG+)
2023/08/12(土) 12:15:02.77ID:ufIhf+igM UWPのWinRTでファイルアクセスなどに制約がある場合があって
APIレベルでセキュリティ上の制限があるのかと思ってたが間違いで
他のプラットフォームで呼ぶと普通に色々アクセス出来てしまう
APIレベルでセキュリティ上の制限があるのかと思ってたが間違いで
他のプラットフォームで呼ぶと普通に色々アクセス出来てしまう
443デフォルトの名無しさん (ワッチョイ 7679-BXQ2)
2023/08/12(土) 14:04:01.34ID:DbL0Mu2X0 そろそろ他所でやってくれんか
普段Windowsには世話になってるけどUWPの存在には憎しみさえ感じる
普段Windowsには世話になってるけどUWPの存在には憎しみさえ感じる
444デフォルトの名無しさん (ワッチョイ 9aad-eQmn)
2023/08/12(土) 14:18:40.69ID:2oorck2f0445はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f3e-po/e)
2023/08/12(土) 14:53:08.69ID:BlsfQ4Nv0446はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f3e-po/e)
2023/08/12(土) 14:54:12.64ID:BlsfQ4Nv0447デフォルトの名無しさん (ワッチョイ 9701-DXLR)
2023/08/12(土) 20:19:50.46ID:eS+ePZlf0 「毎日出社したい」わずか3.8% リモートワーク経験者に聞いた
学研ホールディングスのグループ会社であるベンド(東京都千代田区)は、リモートワーク
経験者を対象に「リモートワークに関するアンケート」を実施した。その結果、半数近くの
人が「週5(フルリモート)」(44.4%)をリモートワークの理想の頻度だと考えていること
が分かった。
次いで「週3〜4」(30.7%)、「週1〜2」(20.1%)と続き、96.2%の人がリモートワークの
継続を希望していることが分かった。毎日出社を希望する人は、わずか3.8%だった。
出社を希望しない理由は「通勤にかかる時間や体力がもったいない」「子どもの都合で、
リモートワークのほうが仕事と家庭のバランスが取りやすい」「職場の人と毎日顔を合わせる
のはさすがにつらい」といった意見が寄せられた。
一方、「コミュニケーションが取りにくくなる」「出社しないとできない業務がある」
「たまには出社もいい気分転換になる」など、完全リモートだと不都合だという声もあった。
学研ホールディングスのグループ会社であるベンド(東京都千代田区)は、リモートワーク
経験者を対象に「リモートワークに関するアンケート」を実施した。その結果、半数近くの
人が「週5(フルリモート)」(44.4%)をリモートワークの理想の頻度だと考えていること
が分かった。
次いで「週3〜4」(30.7%)、「週1〜2」(20.1%)と続き、96.2%の人がリモートワークの
継続を希望していることが分かった。毎日出社を希望する人は、わずか3.8%だった。
出社を希望しない理由は「通勤にかかる時間や体力がもったいない」「子どもの都合で、
リモートワークのほうが仕事と家庭のバランスが取りやすい」「職場の人と毎日顔を合わせる
のはさすがにつらい」といった意見が寄せられた。
一方、「コミュニケーションが取りにくくなる」「出社しないとできない業務がある」
「たまには出社もいい気分転換になる」など、完全リモートだと不都合だという声もあった。
448デフォルトの名無しさん (ワッチョイ b67a-TNXw)
2023/08/12(土) 22:15:14.90ID:jlvbpae70449はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f3e-Z7S6)
2023/08/12(土) 22:54:57.04ID:BlsfQ4Nv0450デフォルトの名無しさん (アウアウウー Sac7-DXLR)
2023/08/13(日) 11:59:59.00ID:mxfdwtiAa int *p = (int *)malloc(400);
冗長ではないよ
冗長ではないよ
451デフォルトの名無しさん (ワッチョイ 6301-vKG+)
2023/08/13(日) 22:00:40.70ID:37XsjItY0 C++でnewではなくmallocをあえて使う理由って何かあるのかな?
452デフォルトの名無しさん (ワッチョイ b67a-TNXw)
2023/08/13(日) 23:29:06.42ID:oUeYwTCa0453デフォルトの名無しさん (ワッチョイ 7679-BXQ2)
2023/08/14(月) 00:14:53.81ID:VnUPK1/b0 void *が無かった頃はmallocもintやchar *を返していた時代がある
処理系渡り歩いてきた老害ほどmallocでキャストしたがるだけだろ
大した話でも何でもない
処理系渡り歩いてきた老害ほどmallocでキャストしたがるだけだろ
大した話でも何でもない
454デフォルトの名無しさん (ワッチョイ 9aad-eQmn)
2023/08/14(月) 00:21:55.24ID:B5PklEie0 可読性を上げるためでもあるのでは?
455はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f3e-po/e)
2023/08/14(月) 00:30:57.60ID:sy90BXR10456デフォルトの名無しさん (ワッチョイ 9aad-eQmn)
2023/08/14(月) 00:38:36.06ID:B5PklEie0 まあ確かに型がすぐ分かる場合は意味ないな。
457デフォルトの名無しさん (ワッチョイ 4e46-8Neb)
2023/08/14(月) 09:03:40.40ID:6kZXa4aF0458デフォルトの名無しさん (オイコラミネオ MMe3-vKG+)
2023/08/14(月) 09:28:55.46ID:4XD1xMqSM この話が一番冗長だtoomou
kanjidenakunatta
kanjidenakunatta
459はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f3e-Z7S6)
2023/08/14(月) 10:36:19.28ID:sy90BXR10 >>452
K&R の第二版 (日本語版) でもキャストは必要だと書かれているんだよなあ……。
本の最後に仕様をまとめているところでは暗黙に変換されることも言及されているのでおそらく改定漏れなだけなんだろうけど。
かなり長く定番の入門書だったのでこの本の影響も大きいと思う。
K&R の第二版 (日本語版) でもキャストは必要だと書かれているんだよなあ……。
本の最後に仕様をまとめているところでは暗黙に変換されることも言及されているのでおそらく改定漏れなだけなんだろうけど。
かなり長く定番の入門書だったのでこの本の影響も大きいと思う。
460デフォルトの名無しさん (ワッチョイ 4e63-GMkv)
2023/08/14(月) 11:55:47.09ID:s6PscRDz0 暗黙に変換って、プログラム書いてる本人の意図通りなら良いんだけど
意図と違った変換するとやっかいだな
意図と違った変換するとやっかいだな
461デフォルトの名無しさん (オイコラミネオ MMe3-vKG+)
2023/08/14(月) 13:20:28.84ID:JlnnwsPwM ここがC言語スレだと思い出して欲しい
462デフォルトの名無しさん (スップ Sd5a-f0d0)
2023/08/14(月) 13:23:53.19ID:4NX3l0Vmd Cの暗黙の型変換なんて高が知れてるだろ
463デフォルトの名無しさん (テテンテンテン MMb6-v80P)
2023/08/14(月) 14:02:18.88ID:XhXbjspZM 昔のmalloc()ってchar*とか返してた気がするな
最初っからvoid*って有ったのだろうか?
最初っからvoid*って有ったのだろうか?
464デフォルトの名無しさん (オイコラミネオ MMe3-vKG+)
2023/08/14(月) 14:16:28.68ID:JlnnwsPwM すべての戻り値はintである
ポインタかどうかは書いた人間がが判断する
ポインタかどうかは書いた人間がが判断する
465デフォルトの名無しさん (ワッチョイ 4e63-GMkv)
2023/08/14(月) 15:03:08.99ID:s6PscRDz0 (void)main(void)
466蟻人間 ◆T6xkBnTXz7B0 (スフッ Sdba-F9Mj)
2023/08/14(月) 15:17:16.05ID:MULxLxBHd >>464
AIが混乱するようなことを言わないでほしいも
AIが混乱するようなことを言わないでほしいも
467はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f3e-po/e)
2023/08/14(月) 16:43:05.60ID:sy90BXR10 >>464
それ LLP64 でも同じこと言えるの?
それ LLP64 でも同じこと言えるの?
468デフォルトの名無しさん (ワッチョイ 4ecf-vKG+)
2023/08/14(月) 17:46:44.25ID:3TQy/ZGT0469デフォルトの名無しさん (ワッチョイ 4e63-GMkv)
2023/08/14(月) 18:03:50.08ID:s6PscRDz0 今は血を流さずに戦争ができます
470デフォルトの名無しさん (ワッチョイ 9710-8Nw3)
2023/08/14(月) 18:07:41.52ID:WVbdJjmk0 ポインタじゃない構造体の代入はメモリコピーで、intじゃないよね
471デフォルトの名無しさん (ワッチョイ 9710-8Nw3)
2023/08/14(月) 18:22:17.15ID:WVbdJjmk0 >>467
それですよ。
あと、実際の案件で
メモリバスが32より大きい環境でも、64ビット全部が使われてるとは限らないです。
あるビットにこう入ってたら40ビットのxxメモリ空間を指し、あるビットにこう入ってたら48ビットのyy空間を指す、とか
ポインタ値にも複数の種類がある(ように設計する事がある)
何が言いたいかというと全部intだなんてのは、分かってない証拠
それですよ。
あと、実際の案件で
メモリバスが32より大きい環境でも、64ビット全部が使われてるとは限らないです。
あるビットにこう入ってたら40ビットのxxメモリ空間を指し、あるビットにこう入ってたら48ビットのyy空間を指す、とか
ポインタ値にも複数の種類がある(ように設計する事がある)
何が言いたいかというと全部intだなんてのは、分かってない証拠
472デフォルトの名無しさん (ワッチョイ 4e63-GMkv)
2023/08/14(月) 18:39:04.59ID:s6PscRDz0 可変長のポインタって、すごいな
473デフォルトの名無しさん (オイコラミネオ MMe3-vKG+)
2023/08/14(月) 18:42:29.14ID:JlnnwsPwM 昔は関数から戻り値として構造体が返せなかった
MSか勝手に実装した
MSか勝手に実装した
474デフォルトの名無しさん (ワッチョイ 4e63-GMkv)
2023/08/14(月) 18:47:31.20ID:s6PscRDz0 返せなくても困らなかったけど
例えばポインタで返しているAPIはいくつかあるだろうし
呼出時に渡す構造体で返すやり方も普通にある(こちらの方が多いかも)
例えばポインタで返しているAPIはいくつかあるだろうし
呼出時に渡す構造体で返すやり方も普通にある(こちらの方が多いかも)
475デフォルトの名無しさん (ワッチョイ b67a-TNXw)
2023/08/14(月) 21:33:10.14ID:VCWTWKLb0 8051風のMCUにはメモリ空間が複数種類あるものがあって、どのメモリ空間をポイントするかによってポインタのサイズが1byteか2byteかに分かれるというのがありました。
476はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f3e-po/e)
2023/08/14(月) 22:08:33.35ID:sy90BXR10 >>473
K&R の初版 (1978 年) の段階では
構造体を関数の返却値に出来る仕様ではなかったのは確かだが
その制限は将来的に削除されるとも書いてある。
構造体を返せるようにするのは設計者の計画の内だ。
最初に実装したのが誰なのかは知らんが「勝手に」とは言えないだろう。
K&R の初版 (1978 年) の段階では
構造体を関数の返却値に出来る仕様ではなかったのは確かだが
その制限は将来的に削除されるとも書いてある。
構造体を返せるようにするのは設計者の計画の内だ。
最初に実装したのが誰なのかは知らんが「勝手に」とは言えないだろう。
477デフォルトの名無しさん (ワッチョイ 4e63-GMkv)
2023/08/14(月) 22:12:43.60ID:s6PscRDz0 えてして実装が先で、規格になるのは後
というのはよくある話
というのはよくある話
478デフォルトの名無しさん (ワッチョイ 7679-BXQ2)
2023/08/15(火) 18:53:02.89ID:hBALyWzq0 規格が先行することなんて無いでしょ
出来レースみたいな例外を除けば
出来レースみたいな例外を除けば
479デフォルトの名無しさん (ワッチョイ 4ecf-eQmn)
2023/08/15(火) 19:27:12.11ID:RzZaP1Xc0 仕様もクソもANSI Cが出来るまでCに仕様だの規格だの自体がなかったよ
K&Rにしても当時はあくまで標準って位置づけだったし、各処理系で互換性のない部分が結構ある時代だった
そもそもK&Rって本自体Cの言語としての仕様を示すための本じゃなくて、Cの使い方を説明するユーザーガイド的な書籍だしな
大体、当のデニスリッチーからしてK&R初版の時点で自分のコンパイラではすでに構造体のやりとりを実装させてたんだから
K&Rにしても当時はあくまで標準って位置づけだったし、各処理系で互換性のない部分が結構ある時代だった
そもそもK&Rって本自体Cの言語としての仕様を示すための本じゃなくて、Cの使い方を説明するユーザーガイド的な書籍だしな
大体、当のデニスリッチーからしてK&R初版の時点で自分のコンパイラではすでに構造体のやりとりを実装させてたんだから
480デフォルトの名無しさん (ワッチョイ f358-yhDR)
2023/08/17(木) 17:55:25.45ID:3zgw8j7r0 K&Rはバイブルってだけ
宗教に喩えて開祖だか教祖だかが著したもの
宗教に喩えて開祖だか教祖だかが著したもの
481デフォルトの名無しさん (ワッチョイ 8b01-vKG+)
2023/08/17(木) 17:57:11.47ID:PGwDphC60 バイブルに従え
482デフォルトの名無しさん (ワッチョイ 4e46-8Neb)
2023/08/17(木) 18:38:44.78ID:ZHeAFIgr0 C言語ルター派
483デフォルトの名無しさん (ワッチョイ 2702-4obo)
2023/08/17(木) 19:50:44.50ID:J3LrsntM0 般若心経
484デフォルトの名無しさん (スップ Sdba-QvTc)
2023/08/17(木) 20:29:24.71ID:o4Mq35bqd >>481
天国が来るだろう(構造体の戻り値)って書いてあるんだから天国の到来を疑ってはいかんだろw
天国が来るだろう(構造体の戻り値)って書いてあるんだから天国の到来を疑ってはいかんだろw
485デフォルトの名無しさん (アウアウウー Sa45-GdOV)
2023/08/19(土) 16:55:05.41ID:YiVhsdBOa 剣かK&Rか貢納か
486デフォルトの名無しさん (ワントンキン MMd3-3T4A)
2023/08/19(土) 21:36:28.88ID:cGpjgVdNM 天国から帰ってくるのはヨッパライくらい
487デフォルトの名無しさん (オッペケ Sr0d-/Zz/)
2023/08/19(土) 22:45:11.13ID:/061VjvDr なーおまえ、c言語ちゅーもんはそんなに甘いもんやおまへんのや。もっと真面目にやれー
488デフォルトの名無しさん (ワッチョイ 93ad-qLW0)
2023/08/20(日) 15:24:28.02ID:pbHEs6OP0 >>480
そういう感じでバイブルと呼ばれる本がいくつかあって、暫くしたら本のタイトルにバイブルって入ってるやつが出てきてアホかと思った事がある。
まあ、本のタイトルは出版社側がなんとなく売れそうな感じのものを考えて付ける事が多いらしいので仕方がない事なのかも知れないが。
そういう感じでバイブルと呼ばれる本がいくつかあって、暫くしたら本のタイトルにバイブルって入ってるやつが出てきてアホかと思った事がある。
まあ、本のタイトルは出版社側がなんとなく売れそうな感じのものを考えて付ける事が多いらしいので仕方がない事なのかも知れないが。
489デフォルトの名無しさん (ワッチョイ 93ad-qLW0)
2023/08/20(日) 15:26:20.60ID:pbHEs6OP0490デフォルトの名無しさん (ラクッペペ MM4b-pGo3)
2023/08/20(日) 16:08:23.89ID:CcD0k09aM 33回転、45回転、78回転
491デフォルトの名無しさん (ワッチョイ c946-6Yea)
2023/08/20(日) 16:45:30.39ID:bQFpfsbr0 LP 33+1/3 回転を更に Long Play 化したのが LLP64 なの?
492デフォルトの名無しさん (ワッチョイ 2b63-/QKx)
2023/08/20(日) 20:08:06.72ID:GxzweHHZ0 針ってまだ売ってるんだな、知らなかったw
493デフォルトの名無しさん (テテンテンテン MM4b-0mpE)
2023/08/20(日) 20:37:34.57ID:qQCDJN6bM 逆に今はレコードブームだし
494デフォルトの名無しさん (スッップ Sdb3-jt3B)
2023/08/20(日) 20:38:55.31ID:WX+gcEAed >>491
なんで回転数早くなってるねんw
なんで回転数早くなってるねんw
495デフォルトの名無しさん (テテンテンテン MM4b-0mpE)
2023/08/20(日) 20:40:51.45ID:qQCDJN6bM 回転数が速いと情報量が増える
要するに音質が良くなるんだろ
要するに音質が良くなるんだろ
496はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 893e-glFA)
2023/08/20(日) 21:28:54.03ID:CVtYBdI90497デフォルトの名無しさん (ワッチョイ 2b63-/QKx)
2023/08/20(日) 21:44:18.30ID:GxzweHHZ0 そのうち量子センサーなんてでてきて、
盤面を一瞬で読み取って再生する何て出てくるかもね
知らんけど
盤面を一瞬で読み取って再生する何て出てくるかもね
知らんけど
498デフォルトの名無しさん (ワッチョイ 93ad-hPrW)
2023/08/20(日) 22:47:50.93ID:pbHEs6OP0 盤面を写真撮影して凹凸を一度に全部読み、後は再生するだけ。なんてのはできそうだな。
499デフォルトの名無しさん (テテンテンテン MM4b-0mpE)
2023/08/20(日) 22:56:04.52ID:pKCQsYPtM >>498
盤面をスマホで読み取らせて、それを再生してると思わせといて、実はラベルを解析して事前に録音済みのデータを再生するという、イカサマサービスを思い付いたw
盤面をスマホで読み取らせて、それを再生してると思わせといて、実はラベルを解析して事前に録音済みのデータを再生するという、イカサマサービスを思い付いたw
500デフォルトの名無しさん (ワッチョイ 2bcf-YAjS)
2023/08/20(日) 23:03:56.28ID:P3ytobrG0 こまわりくんはレコードの溝読めたな。
501デフォルトの名無しさん (ワッチョイ 93ad-hPrW)
2023/08/20(日) 23:13:57.98ID:pbHEs6OP0 >>499
OCRプログラムでラベルの写真のタイトル部分の文字列読ませれば可能だが、問題は、ラベルに似せたものの上に書いた文字でも同じように読んで成功してしまうことだ。つまりレコード不要。
OCRプログラムでラベルの写真のタイトル部分の文字列読ませれば可能だが、問題は、ラベルに似せたものの上に書いた文字でも同じように読んで成功してしまうことだ。つまりレコード不要。
502デフォルトの名無しさん (ワッチョイ 2b63-/QKx)
2023/08/20(日) 23:16:52.12ID:GxzweHHZ0 そういえばオープンリールも速度とトラック数にこだわりがあったな
503デフォルトの名無しさん (テテンテンテン MM4b-0mpE)
2023/08/20(日) 23:22:22.29ID:pKCQsYPtM504デフォルトの名無しさん (スッップ Sdb3-jt3B)
2023/08/20(日) 23:46:32.25ID:WX+gcEAed 人間「このレコードかけて」
AIスピーカー「かしこまりました…あーあーはってしーないー」
人間「お前が歌うんかい!」
AIスピーカー「かしこまりました…あーあーはってしーないー」
人間「お前が歌うんかい!」
505デフォルトの名無しさん (ワッチョイ 5910-oBFI)
2023/08/21(月) 00:56:03.52ID:h/vumT/U0506デフォルトの名無しさん (ワッチョイ 2b63-/QKx)
2023/08/21(月) 00:58:44.27ID:EVtKvg8p0 曲を再生して、それをスマホに聴かせ、曲名やアルバム名を調べる
というのは割と使ってる
というのは割と使ってる
507デフォルトの名無しさん (ワッチョイ 7101-vfxM)
2023/08/23(水) 12:33:50.88ID:WRsTeN290 localtimeでtm型のポインタが返ってきますが
これはfreeのような後始末はしなくても良かったんでしたっけ?
以下のt1の後始末です
#include <time.h>
#include <stdio.h>
int main () {
time_t t0 = time (NULL);
struct tm *t1 = localtime (&t0);
return 0;
}
これはfreeのような後始末はしなくても良かったんでしたっけ?
以下のt1の後始末です
#include <time.h>
#include <stdio.h>
int main () {
time_t t0 = time (NULL);
struct tm *t1 = localtime (&t0);
return 0;
}
508デフォルトの名無しさん (ワッチョイ 93ad-Dfy6)
2023/08/23(水) 12:46:33.56ID:RWX4pd1L0 不要
静的な領域なんで
その代わりスレッドセーフじゃないし
次に呼び出したら値が変わっちゃうのでそのまま使うならコピー必須
静的な領域なんで
その代わりスレッドセーフじゃないし
次に呼び出したら値が変わっちゃうのでそのまま使うならコピー必須
509はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 893e-glFA)
2023/08/23(水) 13:08:22.64ID:d+s8esX90 時間系関数の一部では同じ型のポインタを返す他の関数が
内容を書き換えることもあるということにも気を付ける必要がある。
つまり localtime が返したポインタが指す先は
gmtime の呼び出しで内容が変わるかもしれないし変わらないかもしれない。
内容を書き換えることもあるということにも気を付ける必要がある。
つまり localtime が返したポインタが指す先は
gmtime の呼び出しで内容が変わるかもしれないし変わらないかもしれない。
510デフォルトの名無しさん (ワッチョイ 7101-vfxM)
2023/08/23(水) 13:18:07.19ID:WRsTeN290511デフォルトの名無しさん (スップ Sdb3-Vj9P)
2023/08/23(水) 13:23:04.60ID:Tm9lJ2oNd Cの標準ライブラリはメモリ操作関係やsprintfみたいな書式出力系以外は古臭くてほぼ使い物にならないから
システムのAPIを直接呼んだ方がいいよ
ガハハ
システムのAPIを直接呼んだ方がいいよ
ガハハ
512デフォルトの名無しさん (ワッチョイ 5910-oBFI)
2023/08/23(水) 13:57:11.07ID:dIB9DDlN0513デフォルトの名無しさん (ワッチョイ 7101-vfxM)
2023/08/23(水) 13:59:16.75ID:WRsTeN290 >>511
以前に以下のように書いてるところを
using boost::posix_time;
using std;
cout << to_simple_string (second_clock::local_time ()) << '\n';
C++にchronoが入ったので標準ではどう書けば良いのか調べてまして
以下の例を見つけそこでstd::localtime使ってるので聞きました
https://cpprefjp.github.io/reference/chrono/time_point.html
std::system_clock::time_pointってstd::ostreamに直接出力できないんですかね?
すれ違いかもしれんですが
以前に以下のように書いてるところを
using boost::posix_time;
using std;
cout << to_simple_string (second_clock::local_time ()) << '\n';
C++にchronoが入ったので標準ではどう書けば良いのか調べてまして
以下の例を見つけそこでstd::localtime使ってるので聞きました
https://cpprefjp.github.io/reference/chrono/time_point.html
std::system_clock::time_pointってstd::ostreamに直接出力できないんですかね?
すれ違いかもしれんですが
514デフォルトの名無しさん (ワッチョイ 7101-vfxM)
2023/08/23(水) 15:39:04.68ID:WRsTeN290 同じ出力になる以下を使用することにします
$ cat test.cpp
#include <iostream>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <chrono>
#include <ctime>
#include <iomanip>
int main () {
std::cout << boost::posix_time::to_simple_string (boost::posix_time::second_clock::local_time ()) << '\n';
std::chrono::system_clock::time_point p {std::chrono::system_clock::now ()};
std::time_t t {std::chrono::system_clock::to_time_t (p)};
std::tm lt; localtime_r (&t, <);
std::cout << std::put_time (<, "%Y-%b-%d %H:%M:%S\n");
return 0;
}
$ g++ test.cpp
$ ./a.out
2023-Aug-23 15:35:01
2023-Aug-23 15:35:01
$ cat test.cpp
#include <iostream>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <chrono>
#include <ctime>
#include <iomanip>
int main () {
std::cout << boost::posix_time::to_simple_string (boost::posix_time::second_clock::local_time ()) << '\n';
std::chrono::system_clock::time_point p {std::chrono::system_clock::now ()};
std::time_t t {std::chrono::system_clock::to_time_t (p)};
std::tm lt; localtime_r (&t, <);
std::cout << std::put_time (<, "%Y-%b-%d %H:%M:%S\n");
return 0;
}
$ g++ test.cpp
$ ./a.out
2023-Aug-23 15:35:01
2023-Aug-23 15:35:01
515デフォルトの名無しさん (テテンテンテン MM4b-0mpE)
2023/08/23(水) 16:21:15.95ID:mK4fJzJ6M >>512
Win32使ってCでコーディングするなら、Win32以外のAPIを呼び出す必要がないな
Win32使ってCでコーディングするなら、Win32以外のAPIを呼び出す必要がないな
516デフォルトの名無しさん (ワッチョイ c101-YAjS)
2023/08/23(水) 19:26:23.68ID:De6qHSvf0 標準入出力関数を Win32APIだけで実装しなおすのはなかなか
車輪の再発明くさい案件になるな
車輪の再発明くさい案件になるな
517デフォルトの名無しさん (オイコラミネオ MM1d-YAjS)
2023/08/23(水) 19:53:06.85ID:7GDemJR0M 残念ながらC標準ライブラリは古くて当たり前なんだ…
それを基準にして多くの人が回ってるから変えられないんだろう
でも人間の使える時間は限られてるので使えるものはうまく使ったほうがいい
メンテナンス性は知らないが
それを基準にして多くの人が回ってるから変えられないんだろう
でも人間の使える時間は限られてるので使えるものはうまく使ったほうがいい
メンテナンス性は知らないが
518デフォルトの名無しさん (スップ Sdb3-jt3B)
2023/08/23(水) 19:55:44.31ID:6N7MylZZd 新しく作り直したのに使い物にならないのがWIN32APIの凄いところなんだよなw
519デフォルトの名無しさん (オイコラミネオ MM1d-YAjS)
2023/08/23(水) 19:59:10.27ID:7GDemJR0M win95ってほぼ30年前でしょ…
520デフォルトの名無しさん (ワッチョイ 5910-oBFI)
2023/08/23(水) 20:09:03.11ID:dIB9DDlN0521デフォルトの名無しさん (ワッチョイ 5910-oBFI)
2023/08/23(水) 20:14:42.63ID:dIB9DDlN0 まあいいや。どうせ永遠に話通じないし、意味ないね、スレ汚しごめん> all
世界中のあらゆる人と意思疎通できる訳がない
世界中のあらゆる人と意思疎通できる訳がない
522デフォルトの名無しさん (ワッチョイ 5910-oBFI)
2023/08/23(水) 20:17:30.73ID:dIB9DDlN0 >>515
あなたもごめんね、信念に従ってそのまま生きて下さい
あなたもごめんね、信念に従ってそのまま生きて下さい
523デフォルトの名無しさん (ブーイモ MMab-NzR0)
2023/08/23(水) 20:26:41.70ID:magUjDjkM 何でWinで開発する人って標準ライブラリを毛嫌いしてるんですか?
524デフォルトの名無しさん (ワッチョイ 2b63-/QKx)
2023/08/23(水) 20:37:13.42ID:gVkUNQKt0 システムコールとか呼んでなかったか?
たしか、目標をセンターに入れてスイッチ、だった
たしか、目標をセンターに入れてスイッチ、だった
525デフォルトの名無しさん (テテンテンテン MM4b-0mpE)
2023/08/23(水) 23:51:05.54ID:Ed2C94gyM Win32とかゲーム開発する時は必須だろ
デバッグ中はprintf使ったりするけど、最終的にはバイナリに標準ライブラリのコードは含めない
デバッグ中はprintf使ったりするけど、最終的にはバイナリに標準ライブラリのコードは含めない
526デフォルトの名無しさん (スップ Sdb3-jt3B)
2023/08/23(水) 23:56:23.25ID:6N7MylZZd GNUみたいにそれなりの人たちがディスカッションして作ったものではなく
いかにもマイクロソフトのサラリーマンプログラマたちが適当に会議して作った仕様に見えるので信仰の対象にしてるのは気がしれんw
いかにもマイクロソフトのサラリーマンプログラマたちが適当に会議して作った仕様に見えるので信仰の対象にしてるのは気がしれんw
527デフォルトの名無しさん (ワッチョイ 4102-DaUO)
2023/08/24(木) 00:03:34.65ID:7wZt4qen0 >>523
Win16でmallocなんか使ってたらころされてしまいますよ
Win16でmallocなんか使ってたらころされてしまいますよ
528デフォルトの名無しさん (ワッチョイ 2b63-/QKx)
2023/08/24(木) 00:24:02.15ID:0ALYOmXL0 そこでfar pointerです
529デフォルトの名無しさん (スップ Sdb3-jt3B)
2023/08/24(木) 00:43:25.45ID:NfI5GYO1d 16ビットで十分なハンドル値をnearポインタにキャストするというのはいいアイデアだった
530デフォルトの名無しさん (ワッチョイ 7101-vfxM)
2023/08/24(木) 00:56:52.45ID:hEI/Eij50 あぁなるほど!
16bitの頃のMSの貧弱な開発環境で育ったせいで
標準Cに対しては屈折した気持ちのままなのねw
16bitの頃のMSの貧弱な開発環境で育ったせいで
標準Cに対しては屈折した気持ちのままなのねw
531デフォルトの名無しさん (ワッチョイ db79-wKkg)
2023/08/24(木) 01:06:43.62ID:W+JHQ2GG0 標準ライブラリは古いつーか実環境を考慮してないだけでbit数はあまり関係ない…
理解してないのに無理に話に入ってこんでもいいぞ
理解してないのに無理に話に入ってこんでもいいぞ
532デフォルトの名無しさん (テテンテンテン MM4b-0mpE)
2023/08/24(木) 01:26:43.52ID:WP7jiBq4M533デフォルトの名無しさん (テテンテンテン MM4b-0mpE)
2023/08/24(木) 01:40:06.60ID:WP7jiBq4M macOS(iOS)のアプリ作る時は、OPENSTEP由来のFoundationフレームワークを使うだろ
こうなるとprintfも使わずにNSLogばっかりだなw
こうなるとprintfも使わずにNSLogばっかりだなw
534デフォルトの名無しさん (ワッチョイ 93ad-hPrW)
2023/08/24(木) 02:24:55.77ID:LAGetXxi0 そもそもC言語で新規開発すること自体がほとんどないので標準ライブラリ使うかどうかは今となってはどうでも良い。
535デフォルトの名無しさん (スフッ Sdb3-G+yN)
2023/08/24(木) 07:36:25.07ID:6SD6OvDLd macOS以前のmacのCはもっとひどかった黒歴史
536デフォルトの名無しさん (スッププ Sdb3-jt3B)
2023/08/24(木) 12:16:23.79ID:50jyCEBUd537デフォルトの名無しさん (テテンテンテン MM4b-0mpE)
2023/08/24(木) 12:58:04.14ID:piehDxfAM538デフォルトの名無しさん (テテンテンテン MM4b-0mpE)
2023/08/24(木) 13:05:10.53ID:piehDxfAM 闘うプログラマーをディスる奴が居るとはな
さすがモグリは違うw
さすがモグリは違うw
539デフォルトの名無しさん (スッププ Sdb3-jt3B)
2023/08/24(木) 16:07:54.33ID:s7pHw0+wd お前の聖書を貶されて怒るのはわかるが
ただの宗教を他人におしつけるなw
ただの宗教を他人におしつけるなw
540はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 893e-glFA)
2023/08/24(木) 17:35:21.45ID:575mCkoc0 「綺麗なのは使われてないものだけ」みたいな格言をどっかで見た。
541デフォルトの名無しさん (オイコラミネオ MM1d-YAjS)
2023/08/24(木) 22:11:17.69ID:ypVJRmCUM 闘うプログラマー懐かしいな
随分と前に上下巻の頃に読んだ
うろ覚えで申し訳ないがwinodwsのAPIセットを考えるのにカトラーと幹部がクルーザーを1~2週間借りて
湖でクルージングしながらゆっくり考えたってところが印象的
クリエイターって感じで良かった
随分と前に上下巻の頃に読んだ
うろ覚えで申し訳ないがwinodwsのAPIセットを考えるのにカトラーと幹部がクルーザーを1~2週間借りて
湖でクルージングしながらゆっくり考えたってところが印象的
クリエイターって感じで良かった
542デフォルトの名無しさん (オイコラミネオ MM1d-YAjS)
2023/08/24(木) 22:22:10.52ID:ypVJRmCUM 残りの人生がどれだけあるか知らないけどそういう環境でそういう仕事してみたいなと思う
543デフォルトの名無しさん (ワッチョイ 2b63-/QKx)
2023/08/24(木) 22:45:31.31ID:0ALYOmXL0 C言語の開発って、
ジャングルの中、誰からも支援を受けずに
自給自足で生き残って敵に勝つイメージがあるな
必要な道具は自分で作るみたいな
恵まれた環境で使うには難しい世の中になってきた
ジャングルの中、誰からも支援を受けずに
自給自足で生き残って敵に勝つイメージがあるな
必要な道具は自分で作るみたいな
恵まれた環境で使うには難しい世の中になってきた
544デフォルトの名無しさん (ワッチョイ 9302-e/Qn)
2023/08/24(木) 23:08:24.66ID:egx7h1gE0 闘うプログラマー読んだことないモグリだけど
カトラーがDECから来る前からWindows APIはあったよね?
カトラーがDECから来る前からWindows APIはあったよね?
545デフォルトの名無しさん (オイコラミネオ MM1d-YAjS)
2023/08/24(木) 23:36:03.41ID:ypVJRmCUM Windowsは1.0からあるからなあw
闘うプログラマーはNTの開発物語
カトラーが関与したのはWindowsNTのAPIセット
闘うプログラマーはNTの開発物語
カトラーが関与したのはWindowsNTのAPIセット
546デフォルトの名無しさん (テテンテンテン MM4b-0mpE)
2023/08/24(木) 23:47:18.67ID:Nhyf7NRLM カトラーが実装したのはカーネルレベルのAPIでしょ
Win32はその上にある
Win32はその上にある
547デフォルトの名無しさん (オイコラミネオ MM1d-YAjS)
2023/08/25(金) 00:02:25.25ID:fBea/yqOM win32はもともとWindows NTの機能だよ
それにカーネルだけ実装してWindows NTを発売したとは思えないけど
3.1とかはwin16
ついでNTでwin32
そのあと95が出てくる
それにカーネルだけ実装してWindows NTを発売したとは思えないけど
3.1とかはwin16
ついでNTでwin32
そのあと95が出てくる
548デフォルトの名無しさん (ワッチョイ 2b63-/QKx)
2023/08/25(金) 00:08:33.68ID:NrcyVyXF0 フリーセルはWIn32sで動いていたんだよな
549はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 893e-glFA)
2023/08/25(金) 00:18:17.29ID:EDIsU9Tc0 あの頃はネット接続も一般的ではなかったから Win32s は雑誌の付録とかの形でよく入ってたのを覚えてる。
俺はテックウィンの付録CDから入れたわ。
俺はテックウィンの付録CDから入れたわ。
550デフォルトの名無しさん (ワッチョイ a19a-SOGH)
2023/08/25(金) 07:12:39.12ID:Fur8du0o0 >>533
macOS(Mac OS X)になって、旧Mac OS由来のCarbon APIのサポートのため
Foundationの下にCoreFoundationというCの共通ライブラリが作られたよね
すなわちC言語が基礎と。おそらく今でも
Carbon亡き今、CoreFoundationを直接使う必要はほぼないけど
書式出力は文字列のクラス(NSString/CFString)に含まれるというべきかな
NSLogも書式出力を受け付けるが、元々ログ出力関数なので
macOS(Mac OS X)になって、旧Mac OS由来のCarbon APIのサポートのため
Foundationの下にCoreFoundationというCの共通ライブラリが作られたよね
すなわちC言語が基礎と。おそらく今でも
Carbon亡き今、CoreFoundationを直接使う必要はほぼないけど
書式出力は文字列のクラス(NSString/CFString)に含まれるというべきかな
NSLogも書式出力を受け付けるが、元々ログ出力関数なので
551デフォルトの名無しさん (ワッチョイ 4d20-lN7b)
2023/08/31(木) 01:23:37.12ID:zNsdnZGD0 Cの規格書の 7.15.1.1 va̲arg には以下の記述があります。
次の実引数が実際にはない場合,又は型が実際の(既定の実引数拡張に従って拡張された)次の実引数の型と適合しない場合,次に掲げる二つの場合を除いて,その動作は,未定義とする。
− 一方の型が符号付き整数型であり,もう一方の型が対応する符号無し整数型であり,
そしてその値が,両方の型で表現可能な値である場合。
− 一方の型がvoid型へのポインタであり,もう一方の型が文字型へのポインタである場合。
これは例えば、可変長引数をとる関数にNULLポインタを渡し、呼び出された側で
FILE *fp = va_arg(ap, FILE *);
として受け取ってはいけない、という事を指すのだと理解しています。
なぜこのような規定が設けられたのでしょう?
次の実引数が実際にはない場合,又は型が実際の(既定の実引数拡張に従って拡張された)次の実引数の型と適合しない場合,次に掲げる二つの場合を除いて,その動作は,未定義とする。
− 一方の型が符号付き整数型であり,もう一方の型が対応する符号無し整数型であり,
そしてその値が,両方の型で表現可能な値である場合。
− 一方の型がvoid型へのポインタであり,もう一方の型が文字型へのポインタである場合。
これは例えば、可変長引数をとる関数にNULLポインタを渡し、呼び出された側で
FILE *fp = va_arg(ap, FILE *);
として受け取ってはいけない、という事を指すのだと理解しています。
なぜこのような規定が設けられたのでしょう?
552デフォルトの名無しさん (ワッチョイ 355f-vHpx)
2023/08/31(木) 04:18:42.26ID:0tscOvRb0 >>551
実引数と適合しない型で取り出す場合の組み合わせは無数にあり、
多くは無意味でそのすべてについて結果を規定するのは大変だし必要無いので
最低限必要と思われる範囲で動作が規定されている、と考えれば自然。
実引数と適合しない型で取り出す場合の組み合わせは無数にあり、
多くは無意味でそのすべてについて結果を規定するのは大変だし必要無いので
最低限必要と思われる範囲で動作が規定されている、と考えれば自然。
553デフォルトの名無しさん (ワッチョイ 86cf-TDjq)
2023/08/31(木) 06:17:20.33ID:2za9g7aR0 >>551
そこで規格がしてるのは特定の事柄を想定した話じゃなくて、単に責任の所在について言及してるだけだよ
va_argで指定する型と実引数の型を合わせるのはユーザーの仕事だ、合わない場合は動作を未定義にするよってこと
C FAQ 11.34を参照のこと
また、2つの例外事項はその部分はコンパイラ側が推測して補正出来る事項なのでそこは許容するよってこと
そこで規格がしてるのは特定の事柄を想定した話じゃなくて、単に責任の所在について言及してるだけだよ
va_argで指定する型と実引数の型を合わせるのはユーザーの仕事だ、合わない場合は動作を未定義にするよってこと
C FAQ 11.34を参照のこと
また、2つの例外事項はその部分はコンパイラ側が推測して補正出来る事項なのでそこは許容するよってこと
554デフォルトの名無しさん (テテンテンテン MMde-4wgn)
2023/08/31(木) 08:59:50.92ID:lOSXeWouM555551 (ワッチョイ 4d20-lN7b)
2023/08/31(木) 19:57:18.34ID:zNsdnZGD0 多数の回答ありがとうございます。
おおむね、先に挙げた例に対しては「問題ない。規格に適合している」とのご意見のようです。
しかし、先に挙げた問題を解決することを目的(の1つ)として、C23では新たに nullptr 定数が設けられる、とも聞いています。
実はそもそも「そんな問題などなかった」という事なのでしょうか?
おおむね、先に挙げた例に対しては「問題ない。規格に適合している」とのご意見のようです。
しかし、先に挙げた問題を解決することを目的(の1つ)として、C23では新たに nullptr 定数が設けられる、とも聞いています。
実はそもそも「そんな問題などなかった」という事なのでしょうか?
556デフォルトの名無しさん (ワッチョイ 3e79-FVin)
2023/08/31(木) 21:01:54.47ID:xuZfOSNk0 「逆に」とか「実は」とか中二病は好きだよね
その規格書の文章が判りやすいとも思えないから好きに解釈していいよ
その規格書の文章が判りやすいとも思えないから好きに解釈していいよ
557デフォルトの名無しさん (ワッチョイ a910-/+sI)
2023/08/31(木) 21:03:14.12ID:Ku+D9NQz0 クソどうでもいい。現実の問題を正しく定義しろカス
558はちみつ餃子 ◆8X2XSCHEME (ワッチョイ a13e-e+8E)
2023/08/31(木) 22:30:14.55ID:n7krQh8u0 >>554 >>555
私の解釈では規格に沿っているとは言えないと思う。
C では整数定数としての 0 は特別な地位にあって空ポインタの定数としても使えるので
#define NULL 0
といった定義でも言語仕様を満たすし実際にこういう定義になっていることも多いのだけれど
状況によっては単に整数と解釈されてしまうことが問題になる。
可変長引数で FILE* を期待しているところに空ポインタを渡すのは許されるが
NULL と書くと (それ単体では整数型なこともあるので) ポインタとは適合しないことがあり得る。
仕様に厳密に言えばその場合の実引数は (void*)0 とか (void*)NULL とか書かないといけない。
大抵の処理系では問題にならないように上手いこと調整されている。
#define NULL 0LL
みたいな感じで (その処理系における) ポインタと同じサイズの整数で定義しておけば一般的な ABI では大丈夫。
(だが言語仕様で保証しているわけではない。)
NULL は整数とポインタを兼ねる (ような定義でも許される) というのが
歴史的経緯によるあまりにもグダグダな場当たり的な規則なので常識的に考えてあかんやろという話。
私の解釈では規格に沿っているとは言えないと思う。
C では整数定数としての 0 は特別な地位にあって空ポインタの定数としても使えるので
#define NULL 0
といった定義でも言語仕様を満たすし実際にこういう定義になっていることも多いのだけれど
状況によっては単に整数と解釈されてしまうことが問題になる。
可変長引数で FILE* を期待しているところに空ポインタを渡すのは許されるが
NULL と書くと (それ単体では整数型なこともあるので) ポインタとは適合しないことがあり得る。
仕様に厳密に言えばその場合の実引数は (void*)0 とか (void*)NULL とか書かないといけない。
大抵の処理系では問題にならないように上手いこと調整されている。
#define NULL 0LL
みたいな感じで (その処理系における) ポインタと同じサイズの整数で定義しておけば一般的な ABI では大丈夫。
(だが言語仕様で保証しているわけではない。)
NULL は整数とポインタを兼ねる (ような定義でも許される) というのが
歴史的経緯によるあまりにもグダグダな場当たり的な規則なので常識的に考えてあかんやろという話。
559デフォルトの名無しさん (スプープ Sdca-+nJJ)
2023/08/31(木) 22:30:45.52ID:zVsC0t7Ed560デフォルトの名無しさん (ワッチョイ 355f-vHpx)
2023/08/31(木) 22:49:56.13ID:0tscOvRb0 >>554,555
可変長引数として渡したオブジェクトポインタは実引数拡張により全部 void* になるから、
typedef void FILE; とでもなっていない限りは適合するとは言えないよ。
va_arg(ap, FILE *) として受け取ってはいけない(移植性を損ねる)ということで合ってる。
そもそも適合は型と型の関係だから「NULLポインターはFILE*と適合」はおかしい。
可変長引数として渡したオブジェクトポインタは実引数拡張により全部 void* になるから、
typedef void FILE; とでもなっていない限りは適合するとは言えないよ。
va_arg(ap, FILE *) として受け取ってはいけない(移植性を損ねる)ということで合ってる。
そもそも適合は型と型の関係だから「NULLポインターはFILE*と適合」はおかしい。
561551 (ワッチョイ 4d20-lN7b)
2023/08/31(木) 23:05:28.70ID:zNsdnZGD0562はちみつ餃子 ◆8X2XSCHEME (ワッチョイ a13e-e+8E)
2023/08/31(木) 23:08:37.85ID:n7krQh8u0 >>560
よく確認してみたら確かにそうだわ……。
NULL が整数として解釈される可能性を考えるまでもなく
void* と FILE* は適合しないな。
ポインタが適合する条件としては同一の修飾がされていることに加えて
両者が適合する型のポインタでなければならないことになってる。
void と FILE は適合しないのだから void* と FILE* が適合することもない。
よく確認してみたら確かにそうだわ……。
NULL が整数として解釈される可能性を考えるまでもなく
void* と FILE* は適合しないな。
ポインタが適合する条件としては同一の修飾がされていることに加えて
両者が適合する型のポインタでなければならないことになってる。
void と FILE は適合しないのだから void* と FILE* が適合することもない。
563551 (ワッチョイ 4d20-lN7b)
2023/08/31(木) 23:38:40.05ID:zNsdnZGD0 NULLについては納得しましたが、まだ疑問が残っています。
同じポインタ型であっても、保証されているのは、
「一方の型がvoid型へのポインタであり,もう一方の型が文字型へのポインタである場合」
だけとなっています。この制約の意図が不明です。
例えば、可変長引数をとる関数に (void *)NULL を渡し、呼び出された側で
FILE *fp = va_arg(ap, FILE *);
として受け取るのも不適合に思えます。
この場合でも、(例えば)アライメントの問題があり、互換が保証できるのはvoid型へのポインタと文字型へのポインタだけ、といった事なのでしょうか?
同じポインタ型であっても、保証されているのは、
「一方の型がvoid型へのポインタであり,もう一方の型が文字型へのポインタである場合」
だけとなっています。この制約の意図が不明です。
例えば、可変長引数をとる関数に (void *)NULL を渡し、呼び出された側で
FILE *fp = va_arg(ap, FILE *);
として受け取るのも不適合に思えます。
この場合でも、(例えば)アライメントの問題があり、互換が保証できるのはvoid型へのポインタと文字型へのポインタだけ、といった事なのでしょうか?
564デフォルトの名無しさん (テテンテンテン MMde-4wgn)
2023/09/01(金) 00:09:17.26ID:EYRyaWRCM >>560
適合しない場合ってのは、FILE*とint*とかを言うのだろう
void*とFILE*は適合しないのか?
それとNULLを0なんかに定義してたら、NULLはintとしか適合しなくなる
なのでNULLポインターは((void*)0)と想定している
適合しない場合ってのは、FILE*とint*とかを言うのだろう
void*とFILE*は適合しないのか?
それとNULLを0なんかに定義してたら、NULLはintとしか適合しなくなる
なのでNULLポインターは((void*)0)と想定している
565はちみつ餃子 ◆8X2XSCHEME (ワッチョイ a13e-e+8E)
2023/09/01(金) 00:20:09.48ID:gaibfzWk0 >>563
適合する型なら許されるということに「加えて」
void* と char* の組み合わせの場合でも許されるという
規定になってるのはわかってる?
>>564
ポインタの適合に関するルールは C99 なら 6.7.5.1 に規定があって
void* と FILE* は適合しない。
> それとNULLを0なんかに定義してたら、NULLはintとしか適合しなくなる
> なのでNULLポインターは((void*)0)と想定している
・ 値0をもつ整数定数式又はその定数式を型void *にキャストした式を,空ポインタ定数(null pointer constant) と呼ぶ。 (§6.3.2.3)
・ NULL は,処理系定義の空ポインタ定数に展開する。 (§7.17)
とあり、 NULL が整数的数式の 0 であることは許容される。
適合する型なら許されるということに「加えて」
void* と char* の組み合わせの場合でも許されるという
規定になってるのはわかってる?
>>564
ポインタの適合に関するルールは C99 なら 6.7.5.1 に規定があって
void* と FILE* は適合しない。
> それとNULLを0なんかに定義してたら、NULLはintとしか適合しなくなる
> なのでNULLポインターは((void*)0)と想定している
・ 値0をもつ整数定数式又はその定数式を型void *にキャストした式を,空ポインタ定数(null pointer constant) と呼ぶ。 (§6.3.2.3)
・ NULL は,処理系定義の空ポインタ定数に展開する。 (§7.17)
とあり、 NULL が整数的数式の 0 であることは許容される。
566551 (ワッチョイ 4d20-lN7b)
2023/09/01(金) 01:19:09.35ID:APE9whcz0567はちみつ餃子 ◆8X2XSCHEME (ワッチョイ a13e-e+8E)
2023/09/01(金) 01:43:08.25ID:gaibfzWk0 >>566
総合的に言って不適合という理解で正しいということになる。
void* と char* は適合の規則からすると適合ではないのだけれど、
その表現や境界調整は等しいことを保証する規則があるので
この場合に適合と同等の扱いをしても問題にならないから、
まあ出来るようにしておけば便利なこともあるんとちゃうんかなぁ。
総合的に言って不適合という理解で正しいということになる。
void* と char* は適合の規則からすると適合ではないのだけれど、
その表現や境界調整は等しいことを保証する規則があるので
この場合に適合と同等の扱いをしても問題にならないから、
まあ出来るようにしておけば便利なこともあるんとちゃうんかなぁ。
568デフォルトの名無しさん (テテンテンテン MMde-4wgn)
2023/09/01(金) 02:40:24.68ID:EYRyaWRCM >>565
ポインターに0の代入は問題ないけど、ここでの話は可変個引数に渡した時の事を言ってるので((void*)0)じゃないと不味いでしょ
ポインターに0の代入は問題ないけど、ここでの話は可変個引数に渡した時の事を言ってるので((void*)0)じゃないと不味いでしょ
569デフォルトの名無しさん (テテンテンテン MMde-4wgn)
2023/09/01(金) 02:50:24.64ID:EYRyaWRCM >>565
6.7.5.1では、FILEとvoidが適合しないといけない旨の記述があるけど、voidというのは普通に比較して適合かどうか判定できる型なのか?
特別なルールが有って然るべきな気がするけどね
6.7.5.1では、FILEとvoidが適合しないといけない旨の記述があるけど、voidというのは普通に比較して適合かどうか判定できる型なのか?
特別なルールが有って然るべきな気がするけどね
570はちみつ餃子 ◆8X2XSCHEME (ワッチョイ a13e-e+8E)
2023/09/01(金) 09:38:35.84ID:gaibfzWk0 >>568
不味いけど NULL が 0 のことはあるという話。
不味いけど NULL が 0 のことはあるという話。
571はちみつ餃子 ◆8X2XSCHEME (ワッチョイ a13e-e+8E)
2023/09/01(金) 18:08:19.15ID:gaibfzWk0 何の話をしてたんだかよくわからんようになったので >>551 を読み返してたんだが
規定が設けられた理由が根本的な疑問ということでいいんかな。
当然だが引数を受け取る側の想定と異なるものを渡したら破綻する。
普通の関数ならコンパイル時に受け取る側と渡す側の型の間に不整合が合ったら
コンパイル時に検出できるし、条件に合えば暗黙の変換もするんだけど
可変長引数の場合は実行時にならないとわからないので
調整する必要なく渡せる条件を規定したらそうなったって感じだと思う。
整数は負数が絡まなければ同じ表現だし
void* と char* にも互換性があることも保証されているので
問題にならない。
規定が設けられた理由が根本的な疑問ということでいいんかな。
当然だが引数を受け取る側の想定と異なるものを渡したら破綻する。
普通の関数ならコンパイル時に受け取る側と渡す側の型の間に不整合が合ったら
コンパイル時に検出できるし、条件に合えば暗黙の変換もするんだけど
可変長引数の場合は実行時にならないとわからないので
調整する必要なく渡せる条件を規定したらそうなったって感じだと思う。
整数は負数が絡まなければ同じ表現だし
void* と char* にも互換性があることも保証されているので
問題にならない。
572デフォルトの名無しさん (ワッチョイ 8646-FlCC)
2023/09/01(金) 19:53:17.39ID:El2JpNjt0 ポインタ苦いか塩つぱいか
そが上に熱き涙をしたたらせて
コードを書くはいづこの里のならひぞや
「まずい」や「拙い」でなく「不味い」と書かれると、つい...
そが上に熱き涙をしたたらせて
コードを書くはいづこの里のならひぞや
「まずい」や「拙い」でなく「不味い」と書かれると、つい...
573デフォルトの名無しさん (アウアウウー Sa11-sVGh)
2023/09/01(金) 20:42:45.29ID:5C0TsKNSa メモリの先頭をいじっている時点で頭がおかしいが
574デフォルトの名無しさん (アウアウウー Sa11-sVGh)
2023/09/01(金) 21:08:05.68ID:5C0TsKNSa ヌル文字の実体が数値のゼロということから思いついた理屈なのかな?
ポインタはアドレスで、そのアドレスに格納されている値のことではない。
ポインタはアドレスで、そのアドレスに格納されている値のことではない。
575551 (ワッチョイ 4d20-lN7b)
2023/09/01(金) 21:13:54.66ID:APE9whcz0 >>571
色々ありがとうございました。
素朴に考えて、呼び元がポインタを渡し、
それを呼び先がポインタとして受け取れば
(それが何型へのポインタであろうとも)
普通に安全そうに見えるのに、何でこんなに厳しいのか?
そう決まった理由が知りたかった為の質問でした。
誰か、そこら辺の事情を知っている人はいないか? と。
色々ありがとうございました。
素朴に考えて、呼び元がポインタを渡し、
それを呼び先がポインタとして受け取れば
(それが何型へのポインタであろうとも)
普通に安全そうに見えるのに、何でこんなに厳しいのか?
そう決まった理由が知りたかった為の質問でした。
誰か、そこら辺の事情を知っている人はいないか? と。
576デフォルトの名無しさん (ワッチョイ d95f-sVGh)
2023/09/01(金) 21:37:10.15ID:qVeR1pY40 >>575
C言語のポインタは単にアドレス
ただし、構造体なら構造体、関数なら関数で、メモリ上に決まった配置をされるので、なんのポインタかわからないと、メモリのアドレスをずっと追いかけることになる。
コンピューターそのものにはデータ型というものは存在しない。
C言語のポインタは単にアドレス
ただし、構造体なら構造体、関数なら関数で、メモリ上に決まった配置をされるので、なんのポインタかわからないと、メモリのアドレスをずっと追いかけることになる。
コンピューターそのものにはデータ型というものは存在しない。
577デフォルトの名無しさん (スプープ Sdca-+nJJ)
2023/09/01(金) 22:14:19.34ID:LLAg+6GRd578はちみつ餃子 ◆8X2XSCHEME (ワッチョイ a13e-e+8E)
2023/09/01(金) 23:22:02.51ID:gaibfzWk0 >>575
ポインタの表現は、それが指す先の型によって異なることも言語仕様としては許されるはず。
§6.2.5 でポインタの表現や境界調整要求が等しくあるべき条件が規定されていて
それ以外の条件では同じ表現または境界調整要求を持つ必要はないと書かれてる。
まあそんなアーキテクチャがどれくらい存在するのかは知らんけど
ポインタの表現は、それが指す先の型によって異なることも言語仕様としては許されるはず。
§6.2.5 でポインタの表現や境界調整要求が等しくあるべき条件が規定されていて
それ以外の条件では同じ表現または境界調整要求を持つ必要はないと書かれてる。
まあそんなアーキテクチャがどれくらい存在するのかは知らんけど
579デフォルトの名無しさん (テテンテンテン MM7f-cJIa)
2023/09/02(土) 00:36:03.53ID:WsIZ4FVlM いやいや、ポインター(アドレス)自体はアライメントされてない所に格納されてるかもしれんけど、中身のアドレス自体は問題ないアライメントになってることが保証されてるでしょ
オマエらは何を言ってるんだ?
オマエらは何を言ってるんだ?
580デフォルトの名無しさん (ワッチョイ ffad-5+Xn)
2023/09/02(土) 00:41:32.42ID:VX6uRHRw0 farポインタみたいにバイト数の違うポインタも混在していたら余計にややこしい問題に・・・
581デフォルトの名無しさん (テテンテンテン MM7f-cJIa)
2023/09/02(土) 01:01:48.59ID:WsIZ4FVlM 例えばFILE*とshort*ならアドレスのアライメントが合わない場合があるだろうけど、これはそもそも型が適合しないわけでどうしようもない
でも、今考えたらvoid*はありとあらゆるアドレスを取る可能性が有るから、それに合うのはchar*しかないよ、ということを言いたかったのだろうなと気付いた
でも規格書を見ても、FILE*とvoid*が適合するかどうかはアンドキュメンテッドだなw
現実には((void*)0)とFILE*は完全に適合してるけどね
でも、今考えたらvoid*はありとあらゆるアドレスを取る可能性が有るから、それに合うのはchar*しかないよ、ということを言いたかったのだろうなと気付いた
でも規格書を見ても、FILE*とvoid*が適合するかどうかはアンドキュメンテッドだなw
現実には((void*)0)とFILE*は完全に適合してるけどね
582551 (ワッチョイ 2320-+GqY)
2023/09/02(土) 06:58:16.01ID:XjF1xIbI0 ここにこう書いてあるからには、何か(通常の関数呼び出しでは
問題にならないが)可変長引数特有の問題があり、
それを避けるためにこうしたのだろう、と思った訳です。
問題にならないが)可変長引数特有の問題があり、
それを避けるためにこうしたのだろう、と思った訳です。
583デフォルトの名無しさん (スプープ Sd1f-I+Vk)
2023/09/02(土) 11:49:29.07ID:+azsBNOBd584デフォルトの名無しさん (ワッチョイ cf63-yzHn)
2023/09/02(土) 11:59:23.66ID:R1w1jy3B0 安全かどうかは、環境によるんじゃ
585デフォルトの名無しさん (スプープ Sd1f-I+Vk)
2023/09/02(土) 12:34:31.87ID:DeBIPPsBd 「環境による」のは安全ではないんだよ
ここで取り上げられてるのは大元の公式文書なのであらゆる環境について言えることが書いてある
ここで取り上げられてるのは大元の公式文書なのであらゆる環境について言えることが書いてある
586デフォルトの名無しさん (ワッチョイ cf63-yzHn)
2023/09/02(土) 12:59:05.22ID:R1w1jy3B0 マイナーなCPUのことなんか気にしたことがなかったな
587はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 133e-A0va)
2023/09/02(土) 13:12:11.45ID:Ng1Dtdjk0 >>584
現在の文脈では「言語仕様をそう決めた理由」が主題。
だからその前提として言語仕様が保証している範囲がどこまでかを
理解しておく必要があって、そこで見当違いの主張に反論がされている
という話の流れ。
現在の文脈では「言語仕様をそう決めた理由」が主題。
だからその前提として言語仕様が保証している範囲がどこまでかを
理解しておく必要があって、そこで見当違いの主張に反論がされている
という話の流れ。
588デフォルトの名無しさん (スプープ Sd1f-I+Vk)
2023/09/02(土) 14:05:43.49ID:DeBIPPsBd589はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 133e-QWOy)
2023/09/02(土) 14:41:25.26ID:Ng1Dtdjk0 必要なら環境依存なことをしやすいのも C の良いところだが
不必要な依存は避けるに越したことはないわな
不必要な依存は避けるに越したことはないわな
590デフォルトの名無しさん (アウアウウー Sae7-fXI3)
2023/09/02(土) 14:45:40.34ID:mCX3wjBNa FILE *fp = fopen(...);
void *hoge = (void *)fp;
FILE *fuga = (FILE *)hoge;
みたいなことは禁止されてる?
void *hoge = (void *)fp;
FILE *fuga = (FILE *)hoge;
みたいなことは禁止されてる?
591デフォルトの名無しさん (スプープ Sd1f-I+Vk)
2023/09/02(土) 14:59:50.63ID:wu0IBgrgd どうしても必要ならやるしかない
ただfopenの戻り値でFILE構造体の安全性が保証されてるのにわざわざvoid*に代入してからFILE*に戻すのは
正統な金なのに闇銀行に預けて再びマネーロンダリングするような変な手間だ
ただfopenの戻り値でFILE構造体の安全性が保証されてるのにわざわざvoid*に代入してからFILE*に戻すのは
正統な金なのに闇銀行に預けて再びマネーロンダリングするような変な手間だ
592デフォルトの名無しさん (ラクッペペ MM7f-ymsf)
2023/09/02(土) 15:08:48.05ID:68c+QhTKM void *型って参照する先の変数のサイズが不明なので右辺値になるのは不可能な気がするけどな
キャストは無理でしょ
キャストは無理でしょ
593はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 133e-QWOy)
2023/09/02(土) 15:12:41.39ID:Ng1Dtdjk0594デフォルトの名無しさん (アウアウウー Sae7-fXI3)
2023/09/02(土) 15:26:23.14ID:mCX3wjBNa >>592
void じゃなくてもいいや
FILE *fp = fopen(...);
char *hoge = (char *)fp;
FILE *fuga = (FILE *)hoge;
みたいなことは禁止されてる?
void じゃなくてもいいや
FILE *fp = fopen(...);
char *hoge = (char *)fp;
FILE *fuga = (FILE *)hoge;
みたいなことは禁止されてる?
595デフォルトの名無しさん (スプープ Sd1f-I+Vk)
2023/09/02(土) 15:40:22.87ID:iw53wgLpd596デフォルトの名無しさん (ワッチョイ 7310-/gcr)
2023/09/02(土) 15:52:38.82ID:f6/YEIJg0 言葉をちゃんと使うとプログラマ意思疎通がよくなるのでは。
「void * が右辺値になるのは無理」って何だよ。ではなく、正常動作はプログラマの責任になる、って言いたかったんじゃないの?
>>590 みたいなコードは、これだけなら疑問に思うだろうが、こういうコードが有効になる事はあるよ。その一例は
「ここで言うFILE* みたいなモノが複数種類あり」
送信側 - 中継機能 - 受信側
のプログラム構造で送受信のペアは複数あり、中継機能には 実際の中身が何なのかは意識させたくない。
----
ポインタの話から外れて恐縮だが、
例としてタグ・レングス・バリュー形式ってのがあって、「中継者は送受信データがTLV形式の連続であることだけは知っていて」「TとLのサイズは一定」「タグの種類が何種類あるかなんて知らなくていい」
----
これにさらにポインタを含むデータ構造を通信可能にするには?って話で、ポインタ型をバッファ内インデックス値に変換して、ポインタが指す中身も通信データに含める、とか、
サブ構造がポインタ持ってたら再帰的に処理する、とか話は続くが
それはいいとして
>>590 みたいなコードは、現実にはあるよ。という話
「void * が右辺値になるのは無理」って何だよ。ではなく、正常動作はプログラマの責任になる、って言いたかったんじゃないの?
>>590 みたいなコードは、これだけなら疑問に思うだろうが、こういうコードが有効になる事はあるよ。その一例は
「ここで言うFILE* みたいなモノが複数種類あり」
送信側 - 中継機能 - 受信側
のプログラム構造で送受信のペアは複数あり、中継機能には 実際の中身が何なのかは意識させたくない。
----
ポインタの話から外れて恐縮だが、
例としてタグ・レングス・バリュー形式ってのがあって、「中継者は送受信データがTLV形式の連続であることだけは知っていて」「TとLのサイズは一定」「タグの種類が何種類あるかなんて知らなくていい」
----
これにさらにポインタを含むデータ構造を通信可能にするには?って話で、ポインタ型をバッファ内インデックス値に変換して、ポインタが指す中身も通信データに含める、とか、
サブ構造がポインタ持ってたら再帰的に処理する、とか話は続くが
それはいいとして
>>590 みたいなコードは、現実にはあるよ。という話
597はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 133e-QWOy)
2023/09/02(土) 16:04:16.63ID:Ng1Dtdjk0 >>594
オブジェクトを指すポインタは char* (またはその他の文字型をさすポインタ) へ変換することは許されるし文字配列として読んでもよい。 (読んだ結果としてどういうレイアウトになってるかはわからんけど。)
そしてもとの型に型変換したら変換前と等しいことも保証される。
オブジェクトを指すポインタは char* (またはその他の文字型をさすポインタ) へ変換することは許されるし文字配列として読んでもよい。 (読んだ結果としてどういうレイアウトになってるかはわからんけど。)
そしてもとの型に型変換したら変換前と等しいことも保証される。
598デフォルトの名無しさん (スプープ Sd1f-I+Vk)
2023/09/02(土) 16:06:19.94ID:Yxb8XUhFd599デフォルトの名無しさん (ワッチョイ 7310-/gcr)
2023/09/02(土) 16:12:48.48ID:f6/YEIJg0 うーん
まだまだ添削できる余地があるぞ…
ここはまあ無料掲示板だが、仕事では、自分には誤解をされやすい性質がある、と意識しなされ
まだまだ添削できる余地があるぞ…
ここはまあ無料掲示板だが、仕事では、自分には誤解をされやすい性質がある、と意識しなされ
600デフォルトの名無しさん (スプープ Sd1f-I+Vk)
2023/09/02(土) 16:50:14.84ID:JxIOKPq6d アハハ
なんだこの人w
なんだこの人w
601デフォルトの名無しさん (ワッチョイ cf63-yzHn)
2023/09/02(土) 17:10:38.18ID:R1w1jy3B0 ここでお金稼ぎしている人いたっけなw
602デフォルトの名無しさん (ワンミングク MM9f-hgj0)
2023/09/02(土) 21:43:01.25ID:5XlbVKpsM もりたぼ稼ごうとした人はいた
603デフォルトの名無しさん (ワッチョイ b35f-RK05)
2023/09/02(土) 22:10:43.72ID:9Zs5bzSj0 ポインタの宣言は、ポインタの型じゃなくて、ポインタが指しているアドレスの格納値をどう扱うつもりなのかを明示している。
void型のポインタは、ポインタだから、何型のポインタだから、64ビットだったり、32ビットだったりするものではない。
void型のポインタは、ポインタだから、何型のポインタだから、64ビットだったり、32ビットだったりするものではない。
604はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 133e-A0va)
2023/09/03(日) 13:47:13.05ID:ApaaLf4l0605デフォルトの名無しさん (スププ Sd1f-ETx6)
2023/09/04(月) 07:48:03.87ID:63U36j7Od >>594
void void * 登場前の C は
FILE *fp = fopen(...);
int *hoge = (int *)fp;
FILE *fuga = (FILE *)hoge;
だったんじゃないかな
void void * 登場前の C は
FILE *fp = fopen(...);
int *hoge = (int *)fp;
FILE *fuga = (FILE *)hoge;
だったんじゃないかな
606デフォルトの名無しさん (ワッチョイ 8310-g4sH)
2023/09/04(月) 07:53:14.39ID:YGQMN8Uj0 設計当時はアセンブラの代替言語。
607デフォルトの名無しさん (スッププ Sd1f-I+Vk)
2023/09/04(月) 09:48:09.59ID:R5PUsxPld >>605
基本はcharだからchar *hoge = (char *)fp;じゃない
なんならint hoge = (int )fp;でもよかった
ほとんどの場合intとポインタのサイズが同じだった
基本はcharだからchar *hoge = (char *)fp;じゃない
なんならint hoge = (int )fp;でもよかった
ほとんどの場合intとポインタのサイズが同じだった
608デフォルトの名無しさん (アウアウウー Sae7-fXI3)
2023/09/04(月) 10:04:32.23ID:/ASAZOX6a >>607 みたいなのがいるから void が出来たんだよ
609デフォルトの名無しさん (スプッッ Sd87-IP2U)
2023/09/04(月) 11:07:54.13ID:gab4BDOud 因果逆転だな
610デフォルトの名無しさん (ワッチョイ 7310-/gcr)
2023/09/04(月) 11:19:05.30ID:Ww8QJvvD0611デフォルトの名無しさん (ワッチョイ 7310-/gcr)
2023/09/04(月) 11:24:33.03ID:Ww8QJvvD0 そういえば、むかーしの情報処理試験には言語選択でマシン語ってのがあって、1メモリアドレス値が指すメモリは 8bit 幅ではなく、 16bit だったように記憶してる。
「特殊な環境を想定しやがって…」と思ったナカマいない?
「特殊な環境を想定しやがって…」と思ったナカマいない?
612デフォルトの名無しさん (ワッチョイ 8310-g4sH)
2023/09/04(月) 11:27:19.73ID:YGQMN8Uj0 試験用アセンブラはCASLだったっけ?
仮想環境で実在しない環境用言語だって。
仮想環境で実在しない環境用言語だって。
613はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 133e-A0va)
2023/09/04(月) 12:00:00.02ID:p8KSFCIf0614デフォルトの名無しさん (テテンテンテン MM7f-cJIa)
2023/09/04(月) 12:00:22.47ID:5denWoTkM メモリが8bitって何も出来ないぞw
615デフォルトの名無しさん (ラクッペペ MM7f-ymsf)
2023/09/04(月) 12:05:38.98ID:QM+pFggQM アドレス範囲ではなくてデータ長が16ビットだったと思う
616はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 133e-A0va)
2023/09/04(月) 12:09:35.09ID:p8KSFCIf0 >>611
C の仕様上の用語では「バイト」が 8bit とは限らない定義になっている。
C の仕様で想定する必要がある程度にはそういう環境もあったのだろうし、
主流ではないにしても特殊というほどの感じでもなかったんちゃうか?
まあ「昔」をいつ頃に想定するかにもよるだろうけど。
C の仕様上の用語では「バイト」が 8bit とは限らない定義になっている。
C の仕様で想定する必要がある程度にはそういう環境もあったのだろうし、
主流ではないにしても特殊というほどの感じでもなかったんちゃうか?
まあ「昔」をいつ頃に想定するかにもよるだろうけど。
617はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 133e-A0va)
2023/09/04(月) 12:24:06.96ID:p8KSFCIf0618デフォルトの名無しさん (ワッチョイ 93c9-oCRc)
2023/09/04(月) 14:04:31.55ID:F3cE7vUV0 7bitでアルファベットは表せてたしねぇ
文字集合で完結させてた RFC822
文字集合で完結させてた RFC822
619デフォルトの名無しさん (ワッチョイ 6f5f-ATpV)
2023/09/04(月) 20:56:26.82ID:MxCwE5tq0 実際に1バイトが8ビットじゃないマシンで仕事してた人いる?
経験談を聞いてみたい
つらそう
経験談を聞いてみたい
つらそう
620デフォルトの名無しさん (ワッチョイ b302-jP38)
2023/09/04(月) 21:41:24.34ID:TqSqVDXY0 何がつらいの?
621デフォルトの名無しさん (スッププ Sd1f-I+Vk)
2023/09/04(月) 22:35:30.73ID:yuyUlcPSd UNIXとか基本9ビットが見え隠れしてる気がする
ファイルのパーミッション---rwxrwxとか
C数値のデフォルトが8進数とか(9ビットなら8進数3ケタでまとまりがいい)
ファイルのパーミッション---rwxrwxとか
C数値のデフォルトが8進数とか(9ビットなら8進数3ケタでまとまりがいい)
622デフォルトの名無しさん (ワッチョイ cf63-yzHn)
2023/09/04(月) 22:55:40.14ID:ljnGjc/80 あれは9ビットだったのか
623デフォルトの名無しさん (テテンテンテン MM7f-cJIa)
2023/09/04(月) 23:38:31.34ID:5denWoTkM 1バイト9bitとか完全に都市伝説だろ…
1ワード(レジスタ)が36bitとかはLispマシーンで使われたりしてたけどね
1ワード(レジスタ)が36bitとかはLispマシーンで使われたりしてたけどね
624デフォルトの名無しさん (ワッチョイ 23f0-BDBD)
2023/09/06(水) 06:22:01.74ID:r3vK0XzD0 char が16bitの環境なら使ったことがある
625デフォルトの名無しさん (ワッチョイ 4301-yzHn)
2023/09/06(水) 07:02:16.45ID:Mh27mgbM0 そういうのってどんなCPUなの?
626デフォルトの名無しさん (ワッチョイ cfcf-ATpV)
2023/09/06(水) 09:37:16.14ID:EGh1VJfR0 とりあえずDSPなんかはそうでしょ
ワードマシンって言っちゃっていいか知らんけど、演算の速度をあげるためにワード幅を一番使いそうなビット数にして全部ワード単位でアクセスする設計にしてる
マニュアルにアドレス、char幅、int幅全部同じ何々ビットです注意してねみたいなのがご丁寧に書いてあったりするよ
ワードマシンって言っちゃっていいか知らんけど、演算の速度をあげるためにワード幅を一番使いそうなビット数にして全部ワード単位でアクセスする設計にしてる
マニュアルにアドレス、char幅、int幅全部同じ何々ビットです注意してねみたいなのがご丁寧に書いてあったりするよ
627デフォルトの名無しさん (スフッ Sd1f-ETx6)
2023/09/06(水) 11:10:12.82ID:QkmiSIQgd >>622
12bit以上必要だったはず
12bit以上必要だったはず
628デフォルトの名無しさん (ワッチョイ 7310-/gcr)
2023/09/06(水) 11:35:53.69ID:HQrnJbDO0629デフォルトの名無しさん (ワッチョイ cfab-oCRc)
2023/09/06(水) 12:07:23.88ID:TIQAYIu40630デフォルトの名無しさん (ラクッペペ MM7f-gKm6)
2023/09/06(水) 15:01:09.34ID:7li0jtwXM よく分からんけどDSPの内部レジスタって直接浮動少数点数が扱えるのか
floatは符号1bit + 指数部8bit +仮数部23bitの32bit長だっけ?
ただ浮動少数点数でビットシフトって面倒くさそう
floatは符号1bit + 指数部8bit +仮数部23bitの32bit長だっけ?
ただ浮動少数点数でビットシフトって面倒くさそう
631デフォルトの名無しさん (ワッチョイ 23f0-BDBD)
2023/09/06(水) 19:43:08.02ID:r3vK0XzD0 外部とやり取りが多少面倒
ファイルや通信関連
データ列をcharに8bitずつ入れるか
ケチって8bit x2 入れるか
なんかを考える必要がある
ファイルや通信関連
データ列をcharに8bitずつ入れるか
ケチって8bit x2 入れるか
なんかを考える必要がある
632デフォルトの名無しさん (ワッチョイ 23f0-BDBD)
2023/09/06(水) 19:43:50.40ID:r3vK0XzD0 私が使ったのはDSPでした
633デフォルトの名無しさん (ワッチョイ 23f0-BDBD)
2023/09/06(水) 19:45:03.72ID:r3vK0XzD0 昔の大型計算機でcharが64bitのがあったはず
634デフォルトの名無しさん (ワッチョイ cf63-yzHn)
2023/09/06(水) 20:55:53.98ID:6iN9QRCz0 最初のUNIX開発マシン、DECの PDP-7 は18ビットだった
635はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 133e-QWOy)
2023/09/07(木) 00:34:19.14ID:n7kUX99P0 C の仕様では正数型の表現にパディングビットの存在を許しているんだけど値の表現に関わらない無意味なビット(特殊なフラグとかに使うのか?)が存在するアーキテクチャも、見たことはないけど C の仕様で想定している以上はたぶんあるんだろうな……
636はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 133e-QWOy)
2023/09/07(木) 00:34:47.43ID:n7kUX99P0 誤植
正数→整数
正数→整数
637デフォルトの名無しさん (ワッチョイ 23f0-BDBD)
2023/09/07(木) 08:06:18.17ID:YzioMxaL0 >>635
小数なら身近にあるね
小数なら身近にあるね
638デフォルトの名無しさん (ワッチョイ ff97-EEOY)
2023/09/07(木) 12:49:26.03ID:6eZunc+30 隣で寝ている
639デフォルトの名無しさん (ワッチョイ 0f01-e7Rb)
2023/09/16(土) 10:51:51.48ID:S5cqLcA00640デフォルトの名無しさん (アウアウウー Sa53-HRje)
2023/09/16(土) 12:25:15.03ID:RATZO/gia しね
641デフォルトの名無しさん (ワッチョイ 0f01-R46v)
2023/09/16(土) 12:35:05.81ID:n1ZKqkE80 >>639
PayPayに変換できるって知らなかった
PayPayに変換できるって知らなかった
642デフォルトの名無しさん (ワッチョイ 7f63-VRQG)
2023/09/16(土) 12:38:47.03ID:NMUMDiAt0 あそこはEUから莫大な賠償金請求されたから、必死なんだろう
643デフォルトの名無しさん (ワッチョイ 3fad-xbk3)
2023/09/16(土) 12:48:52.21ID:8u+hT5wA0 >>639
グロ
グロ
644デフォルトの名無しさん (ワッチョイ 4fb0-gBtz)
2023/09/22(金) 10:15:48.77ID:wJrbx3oK0 なあ、いつから子関数内で宣言した自動変数を戻り値に使って親関数で参照してもアクセスエラーにならなくなったんだ?
特に構造体とか
特に構造体とか
645デフォルトの名無しさん (ワッチョイ 7f63-VRQG)
2023/09/22(金) 10:51:22.61ID:tfij4Zir0 自動変数を参照渡ししてるのか?
646デフォルトの名無しさん (ワッチョイ 3f65-V30e)
2023/09/22(金) 11:07:25.29ID:8SLDLfd50 アクセスエラーってのが実行時の話なら動作環境教えてくれないとなんとも
647デフォルトの名無しさん (ワッチョイ 4f93-uKg7)
2023/09/22(金) 11:08:43.04ID:X0VLPMl/0 すんません何を言ってるのか分からん
自動変数のアドレスを返す話?
OSとかコンパイラとか色々わからないと空虚な話になりそう、ってのと(特殊な環境なのでは)
エラーになって欲しいのにならなくて
同僚がアホで困ってて
強制的にエラーにしたいって話?
自動変数のアドレスを返す話?
OSとかコンパイラとか色々わからないと空虚な話になりそう、ってのと(特殊な環境なのでは)
エラーになって欲しいのにならなくて
同僚がアホで困ってて
強制的にエラーにしたいって話?
648デフォルトの名無しさん (ワッチョイ 0f10-NfV8)
2023/09/22(金) 11:13:15.28ID:z1xJQo5k0 数年に1回ほぼVC++でほぼCのコード書いてコンパイルしてるけど、
なんか最新版入れる度にデフォのエラー基準厳しくなっていく・・・。
変数定義をgoto(エラー処理)ですっ飛ばからエラーって・・・昔のCみたいに関数先頭に記述を移動する羽目に・・・
警告でいいやん。
なんか最新版入れる度にデフォのエラー基準厳しくなっていく・・・。
変数定義をgoto(エラー処理)ですっ飛ばからエラーって・・・昔のCみたいに関数先頭に記述を移動する羽目に・・・
警告でいいやん。
649デフォルトの名無しさん (ワッチョイ 7f63-VRQG)
2023/09/22(金) 11:16:56.77ID:tfij4Zir0 構造体で返すにしても、呼出元って用意した変数なり構造体で受け取るんだろう
650デフォルトの名無しさん (ワッチョイ 3fad-d4nU)
2023/09/22(金) 11:27:24.08ID:ZXfr4S/70 >>644
構造体の変数を戻り値に使うことは結構最初の頃から出来たと思うが、昔のマイコンは遅かったのでなるべく使わないで呼ぶ側で変数作ってそのポインタ渡してそこに値入れてもらうみたいな事してたよ。
なんで遅いのかっていうと、参照などという高度なワザは使ってなくて他のintとかの変数と同様に構造体の内容をコピーしているだけだからだ。
構造体の変数を戻り値に使うことは結構最初の頃から出来たと思うが、昔のマイコンは遅かったのでなるべく使わないで呼ぶ側で変数作ってそのポインタ渡してそこに値入れてもらうみたいな事してたよ。
なんで遅いのかっていうと、参照などという高度なワザは使ってなくて他のintとかの変数と同様に構造体の内容をコピーしているだけだからだ。
651デフォルトの名無しさん (ワッチョイ 7f63-VRQG)
2023/09/22(金) 11:28:55.72ID:tfij4Zir0 共用体で渡したときは、どのメンバー使ってコピーするの?
652デフォルトの名無しさん (アウアウウー Sa53-9C00)
2023/09/22(金) 12:01:20.53ID:dkRHHNCea 池沼か
653デフォルトの名無しさん (ワッチョイ 4fb0-gBtz)
2023/09/22(金) 12:15:37.49ID:wJrbx3oK0654デフォルトの名無しさん (ブーイモ MM5f-C+1d)
2023/09/22(金) 12:21:54.90ID:+zFc5v5MM 初期K&Rじゃ構造体returnはなくてポータブルC以降じゃね?
655はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 4f3e-7CbB)
2023/09/22(金) 14:01:49.98ID:jd4xXbI20 構造体を返却値にするときは、
一般的なパソコンでの呼出し規約 (Windows や System V ABI) では
呼出し側で領域を用意してそのアドレスを暗黙の引数として渡す仕組みになってる。
用意された領域の上に最初から値を直接に構築できることもあるので
そういうときはコピーコストは発生しない。
単純な関数、かつモダンなコンパイラを使ってるときは余計な工夫をする必要はないよ。
一般的なパソコンでの呼出し規約 (Windows や System V ABI) では
呼出し側で領域を用意してそのアドレスを暗黙の引数として渡す仕組みになってる。
用意された領域の上に最初から値を直接に構築できることもあるので
そういうときはコピーコストは発生しない。
単純な関数、かつモダンなコンパイラを使ってるときは余計な工夫をする必要はないよ。
656デフォルトの名無しさん (ワッチョイ 4fb0-gBtz)
2023/09/22(金) 14:35:59.04ID:wJrbx3oK0 戻り値に構造体を使いたいんですぅ
657デフォルトの名無しさん (ワッチョイ 7fab-fp56)
2023/09/22(金) 14:53:23.56ID:HzXlnxdE0 参照てか自動変数へのポインタを戻してたってこと?
struct foo * hoge()
{
struct foo body;
retrun &body;
}
これ未定義だからどうとでもなってしまうんじゃなかったかな…
コンパイラが気を利かしてエラーや警告にするのも
そのまま実行コードを生成して想定外の動きをするのも
struct foo * hoge()
{
struct foo body;
retrun &body;
}
これ未定義だからどうとでもなってしまうんじゃなかったかな…
コンパイラが気を利かしてエラーや警告にするのも
そのまま実行コードを生成して想定外の動きをするのも
658デフォルトの名無しさん (アウアウウー Sa53-9C00)
2023/09/22(金) 15:05:47.80ID:dkRHHNCea >>656
これでいいだろ
struct Hoge *fuga(struct Hoge *param0, int param1, char *param2){
何かする
return param0;
}
これでいいだろ
struct Hoge *fuga(struct Hoge *param0, int param1, char *param2){
何かする
return param0;
}
659デフォルトの名無しさん (ワッチョイ 4fb0-gBtz)
2023/09/22(金) 15:07:59.94ID:wJrbx3oK0 受ける側が用意しなあかんかぁ
660デフォルトの名無しさん (ワッチョイ 7fab-fp56)
2023/09/22(金) 15:08:23.02ID:HzXlnxdE0 >>657 のは、OS側のメモリに対する不正アクセスに引っかかって
エラー発報になるのは少ないんじゃないかな?
(戻りの自動変数のポインタが不正アクセスになる可能性は低い)
構造体の中にさらにポインタをつかってて、ゴミなポインタ値で実体見に行ってやっと上記が発動する
struct foo {
struct foo* next;
int body;
};
こんなので ret->next->body; とやったら *ret の内容がゴミ = ret->next も不定な値
ret->next->body でメモリの不正アクセス
エラー発報になるのは少ないんじゃないかな?
(戻りの自動変数のポインタが不正アクセスになる可能性は低い)
構造体の中にさらにポインタをつかってて、ゴミなポインタ値で実体見に行ってやっと上記が発動する
struct foo {
struct foo* next;
int body;
};
こんなので ret->next->body; とやったら *ret の内容がゴミ = ret->next も不定な値
ret->next->body でメモリの不正アクセス
661デフォルトの名無しさん (ワッチョイ 4fb0-gBtz)
2023/09/22(金) 15:09:39.40ID:wJrbx3oK0 割り込み処理があると簡単に死ぬよ
662デフォルトの名無しさん (ワッチョイ 7fab-fp56)
2023/09/22(金) 15:10:08.95ID:HzXlnxdE0 ハイコストなのをわかってて実体をそのまま返すことはあった
複素数を取り扱う Complex 構造体で 式の形式にしたくて ね
複素数を取り扱う Complex 構造体で 式の形式にしたくて ね
663デフォルトの名無しさん (ワッチョイ 7fab-fp56)
2023/09/22(金) 15:11:28.51ID:HzXlnxdE0 >>661
割り込み想定するなら呼び出し元で器渡しとけって話にしかならんじゃろ
割り込み想定するなら呼び出し元で器渡しとけって話にしかならんじゃろ
664デフォルトの名無しさん (スッップ Sd5f-8KNq)
2023/09/22(金) 15:14:27.76ID:wMC0ce2ad665デフォルトの名無しさん (ワッチョイ 7fab-fp56)
2023/09/22(金) 15:27:37.08ID:HzXlnxdE0 ID:wJrbx3oK0 がどういう環境で愚痴ってるのかはわからんけど
「割り込みハンドラ内でいろいろやるのをCで記述してるんだけど…」とかだったら
極力スタックは少なくしたい って話に行き着くけども
それならなおさら器は呼び出し側で用意すべし になるよなぁ
最悪関数呼び出しのオーバーヘッドも嫌って きもいマクロ関数が並ぶことも
「割り込みハンドラ内でいろいろやるのをCで記述してるんだけど…」とかだったら
極力スタックは少なくしたい って話に行き着くけども
それならなおさら器は呼び出し側で用意すべし になるよなぁ
最悪関数呼び出しのオーバーヘッドも嫌って きもいマクロ関数が並ぶことも
666はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 4f3e-7CbB)
2023/09/22(金) 15:30:18.99ID:jd4xXbI20 似たような話題が出たことがあるような気がしたので思い返してみると C++ スレの話だったわ。
コピーの省略 (copy elision) が保証される場合がどう実装されているのかという話題で
オブジェクトを構築すべき場所を呼び出し側が暗黙に渡してるから
最初からそこに構築される (のでコピーする必要がない) というのが一般的な実装で、
たぶん C の構造体受け渡しで実績があったから C++ では言語仕様として取り込めたんだな。
コピーの省略 (copy elision) が保証される場合がどう実装されているのかという話題で
オブジェクトを構築すべき場所を呼び出し側が暗黙に渡してるから
最初からそこに構築される (のでコピーする必要がない) というのが一般的な実装で、
たぶん C の構造体受け渡しで実績があったから C++ では言語仕様として取り込めたんだな。
667デフォルトの名無しさん (アウアウウー Sacf-PB4I)
2023/09/23(土) 10:05:20.89ID:i9fpyxKga thisのことですか
668はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 273e-ClgD)
2023/09/23(土) 10:39:49.55ID:ALqEUzvh0669デフォルトの名無しさん (ワッチョイ 3b93-gtrM)
2023/09/23(土) 18:43:05.31ID:lGebHJu00 c言語にthisは無い
670デフォルトの名無しさん (スッップ Sdaa-cHxT)
2023/09/23(土) 19:21:52.16ID:h4supWEzd thisはポインタなので実体を返すとか言う話とは関係ない
671デフォルトの名無しさん (ワッチョイ 8661-gIzx)
2023/09/23(土) 21:37:44.48ID:wNThSPil0 x86-64のABIでは、16byte未満はレジスタで渡されて、それ以上はメモリコピーが発生する、それだけ
672デフォルトの名無しさん (ワッチョイ bb48-NSUt)
2023/09/24(日) 01:41:30.54ID:XDqOvN5B0 PODっていうんだっけ
構造体が値わたしになるやつ
これはC++だったかな?Cはよくわからん
構造体が値わたしになるやつ
これはC++だったかな?Cはよくわからん
673デフォルトの名無しさん (アウアウウー Sacf-PB4I)
2023/09/24(日) 09:28:36.38ID:2YTVyUlCa レジスタが64bit=8bytes
レジスタが128bit=16bytes
たしかにレジスタで全部返せるな
レジスタが128bit=16bytes
たしかにレジスタで全部返せるな
674デフォルトの名無しさん (ワッチョイ 1e63-CSnM)
2023/09/24(日) 09:55:18.81ID:D6DOZoEp0 そのうち無限長レジスタ出てくるだろ
675デフォルトの名無しさん (ワッチョイ 8a79-aeRl)
2023/09/24(日) 11:19:45.97ID:Cw9+et/n0 映画化決定 鬼滅の刃 - 無限長レジスタ編
676はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 273e-ClgD)
2023/09/24(日) 11:48:58.25ID:wtxuVbIF0 >>672
C++ 的にはクラスが一定の条件を満たすと C の構造体と互換性があるような性質を持つ。
それが POD。
C++ の POD のことも慣例で構造体と呼んでると思うので、
C の構造体 ≒ C++ の POD みたいな感じ。
POD は値渡しがどうこうとは無関係。
C++ 的にはクラスが一定の条件を満たすと C の構造体と互換性があるような性質を持つ。
それが POD。
C++ の POD のことも慣例で構造体と呼んでると思うので、
C の構造体 ≒ C++ の POD みたいな感じ。
POD は値渡しがどうこうとは無関係。
677デフォルトの名無しさん (スッップ Sdaa-cHxT)
2023/09/24(日) 18:47:28.19ID:zJPvjQK3d678デフォルトの名無しさん (ワッチョイ 0761-+HDL)
2023/09/24(日) 19:03:57.96ID:SWucSPIu0 Plain Old Data だね。
ちゃんとした英語だと、dの繰り返しを避けて Plain Ol' Data とするらしい
最新のC++はPODっていう呼び名を廃止したんじゃ無かった?
ちゃんとした英語だと、dの繰り返しを避けて Plain Ol' Data とするらしい
最新のC++はPODっていう呼び名を廃止したんじゃ無かった?
679はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 273e-ClgD)
2023/09/24(日) 19:10:57.73ID:wtxuVbIF0 >>678
概念は廃止した (性質をスタンダードレイアウトとトリビアルに分割して説明している) けど std::is_pod がまだ有るので
「POD がなくなった」と言えるかどうかはちょっと微妙なところ。
概念は廃止した (性質をスタンダードレイアウトとトリビアルに分割して説明している) けど std::is_pod がまだ有るので
「POD がなくなった」と言えるかどうかはちょっと微妙なところ。
680デフォルトの名無しさん (ワッチョイ 3b93-gtrM)
2023/09/24(日) 19:39:45.99ID:iqjAJ+9f0 >>674
無限では無いけど VLIW って聞いた事無いのかw❤
無限では無いけど VLIW って聞いた事無いのかw❤
681デフォルトの名無しさん (ワッチョイ 1ecf-WMZf)
2023/09/24(日) 19:54:27.01ID:9leOLZhk0 >>680
レジスタ長を関係あるか?
レジスタ長を関係あるか?
682デフォルトの名無しさん (ワッチョイ 0a30-gIzx)
2023/09/24(日) 22:05:30.32ID:/fHwRuZw0 >>680
Very Long Instruction Word(超長い命令長)で、レジスタ関係無し
Very Long Instruction Word(超長い命令長)で、レジスタ関係無し
683デフォルトの名無しさん (ワッチョイ 1e63-CSnM)
2023/09/24(日) 22:12:32.99ID:D6DOZoEp0 レジスターを実メモリーサイズに拡張し、実メモリーを廃止
プログラムはレジスターに直接ロード、
データは必要に応じたサイズを割り当てる
一種のチューリングマシン
プログラムはレジスターに直接ロード、
データは必要に応じたサイズを割り当てる
一種のチューリングマシン
684デフォルトの名無しさん (ワッチョイ de6a-6sCR)
2023/09/24(日) 22:31:37.22ID:fu7DWNWn0 昔、ルネサスH8だったと思うが、関数内で大きなconst配列を定義したところ、RAM不足のビルドエラーに。
constならROM領域に割り付けるんじゃないのと思いルネに聞いたところ「言語仕様上static変数はconstの有無によらずRAMに割り付けることになってる…」とかいう回答。
Cの規格では割付領域まで規定してるのですかね。
void func(void){
static const char LARGE_TABLE[1024]={...};
...
}
constならROM領域に割り付けるんじゃないのと思いルネに聞いたところ「言語仕様上static変数はconstの有無によらずRAMに割り付けることになってる…」とかいう回答。
Cの規格では割付領域まで規定してるのですかね。
void func(void){
static const char LARGE_TABLE[1024]={...};
...
}
685デフォルトの名無しさん (ワッチョイ 07db-oBwi)
2023/09/25(月) 00:05:56.55ID:flE1dY0R0 Cコンパイラじゃ無くて、リンカに領域指定するんだけどなぁ
686はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 273e-MH8p)
2023/09/25(月) 00:12:22.79ID:ubRrbZbh0 処理系定義も広義には言語仕様と言えなくもないんじゃね。
まあ普通は言わんが……
まあ普通は言わんが……
687デフォルトの名無しさん (ワッチョイ 07db-oBwi)
2023/09/25(月) 00:13:31.19ID:flE1dY0R0 section切ってアドレス指定だろ?
688デフォルトの名無しさん (ワッチョイ 3b93-gtrM)
2023/09/25(月) 00:23:33.45ID:Sev0Fg0J0689デフォルトの名無しさん (ワッチョイ 3b93-gtrM)
2023/09/25(月) 00:26:21.67ID:Sev0Fg0J0690デフォルトの名無しさん (ワッチョイ 8a79-aeRl)
2023/09/25(月) 00:49:29.60ID:h8TBNStf0 H8のフラッシュは書き込み回数が少ないからじゃないかな
その代わり数MBのDRAMモジュール繋いで実行できたから当時のマイコンにしては組み込みlinuxが乗ったりして富豪プログラミングができた
その代わり数MBのDRAMモジュール繋いで実行できたから当時のマイコンにしては組み込みlinuxが乗ったりして富豪プログラミングができた
691デフォルトの名無しさん (ワッチョイ dee4-+EvS)
2023/09/25(月) 07:20:40.16ID:4OYJzvHn0 >>684
そんな規定は無い。実装の都合としてもわざわざRAMに置いてうれしいこともなさそう。
「言語仕様上自動変数はconstの有無によらずRAMに割り付ける」ならありそうな話なので
あなたの記憶違いの可能性のほうが高そう。
そんな規定は無い。実装の都合としてもわざわざRAMに置いてうれしいこともなさそう。
「言語仕様上自動変数はconstの有無によらずRAMに割り付ける」ならありそうな話なので
あなたの記憶違いの可能性のほうが高そう。
692デフォルトの名無しさん (ラクッペペ MMc6-se1G)
2023/09/25(月) 08:15:02.48ID:bQMRfZQJM 組込みマイコンでconst変数をROMに割り当てるのはスタートアップルーチンの仕事
main関数呼び出し前に実行する処理なので一旦main関数を呼び出してしまった後はROM領域に変数を割り当てる手段はない
main関数呼び出し前に実行する処理なので一旦main関数を呼び出してしまった後はROM領域に変数を割り当てる手段はない
693684 (ワッチョイ 1a91-6sCR)
2023/09/25(月) 09:01:11.94ID:8uqw4GxL0694デフォルトの名無しさん (ワッチョイ 07db-oBwi)
2023/09/25(月) 09:20:03.53ID:flE1dY0R0 なんか、トンチンカンな話ばかりで笑えるなぁ
ROMに割り付けるはRAMに割り付けるかは
リンカーにどう指示するかによるだけだろ
起動後にROMからRAMにコピーするか
そのままROMに置いとくかはデータの属性によって
リンカーがグループ化してくれたものを
起動時にスタートアップルーチンが転送するだけ
ROMに割り付けるはRAMに割り付けるかは
リンカーにどう指示するかによるだけだろ
起動後にROMからRAMにコピーするか
そのままROMに置いとくかはデータの属性によって
リンカーがグループ化してくれたものを
起動時にスタートアップルーチンが転送するだけ
695デフォルトの名無しさん (ワッチョイ 07db-oBwi)
2023/09/25(月) 09:24:07.97ID:flE1dY0R0 基本的に初期値を持つ変数は元の値はROMにあるから
幾らでも呼び出せるが、普通の手段では呼び出せないだけ
強制的にアドレス指定すれば幾らでも呼べる
幾らでも呼び出せるが、普通の手段では呼び出せないだけ
強制的にアドレス指定すれば幾らでも呼べる
696デフォルトの名無しさん (ラクッペペ MMc6-se1G)
2023/09/25(月) 09:25:15.48ID:oaSGqRXsM メモリ空間の変数の割り当てはスタートアップルーチンのコーディングで指定する
当然C言語ではなくマイコンメーカー指定の独自言語
大体はただパラメータを設定していくだけだけど
当然C言語ではなくマイコンメーカー指定の独自言語
大体はただパラメータを設定していくだけだけど
697デフォルトの名無しさん (ワッチョイ 07db-oBwi)
2023/09/25(月) 09:41:12.99ID:flE1dY0R0 つか、ROM上に変数なんか置かないから、置くのは定数
698デフォルトの名無しさん (ワッチョイ 8e86-NsvJ)
2023/09/25(月) 09:58:06.95ID:jZAmQlvo0 >>674
まあ、プログラムの高速化的には2048bitSIMDか4096bitSIMDレジスタがあると高速化の観点ではかなり都合が良い。AVX2は256bitだから単純計算すると性能が8倍とか16倍とかになるからね。
産業用だとarmのCPUに2048bit長のsimdレジスタがあった気がする。
まあ、プログラムの高速化的には2048bitSIMDか4096bitSIMDレジスタがあると高速化の観点ではかなり都合が良い。AVX2は256bitだから単純計算すると性能が8倍とか16倍とかになるからね。
産業用だとarmのCPUに2048bit長のsimdレジスタがあった気がする。
699デフォルトの名無しさん (ワッチョイ 0aa1-oBwi)
2023/09/25(月) 10:11:14.07ID:8PlaAgAt0700デフォルトの名無しさん (ワッチョイ 0aa1-oBwi)
2023/09/25(月) 10:14:30.53ID:8PlaAgAt0 ああ、staticか…なら仕方ない
701デフォルトの名無しさん (アウアウウー Sacf-PB4I)
2023/09/25(月) 12:55:53.24ID:RmxLVxNPa >>693 が描いたシステムは使いたくないな
702デフォルトの名無しさん (ワッチョイ dee4-+EvS)
2023/09/25(月) 18:22:37.93ID:4OYJzvHn0 >>693
自動変数がRAMに割り付けられるのは、再帰のたびに別アドレスとしなければならない規定があるから。
(逆に static なら同一アドレスとしなければならない。)
>692,696 (たぶん同一人物)は ROM/RAM 割り当てがスタートアップルーチンの仕事というが、
仮にそれが正しいとするとスタートアップルーチンはどこからロードするのかという、
おかしな話が出てくるので誤りと考えられる。
実際ルネサスツールでもリンカで指定するものとなっている。
https://www.renesas.com/jp/ja/document/mat/h8s-h8300-series-cc-compiler-package-ver700-users-manual
> 最適化リンケージエディタでは、入力オブジェクトプログラム内の同一セクションを結合し、
> start オプションによって指定されたアドレスに割り付けます。
自動変数がRAMに割り付けられるのは、再帰のたびに別アドレスとしなければならない規定があるから。
(逆に static なら同一アドレスとしなければならない。)
>692,696 (たぶん同一人物)は ROM/RAM 割り当てがスタートアップルーチンの仕事というが、
仮にそれが正しいとするとスタートアップルーチンはどこからロードするのかという、
おかしな話が出てくるので誤りと考えられる。
実際ルネサスツールでもリンカで指定するものとなっている。
https://www.renesas.com/jp/ja/document/mat/h8s-h8300-series-cc-compiler-package-ver700-users-manual
> 最適化リンケージエディタでは、入力オブジェクトプログラム内の同一セクションを結合し、
> start オプションによって指定されたアドレスに割り付けます。
703デフォルトの名無しさん (ラクッペペ MMc6-se1G)
2023/09/25(月) 19:02:56.98ID:ULcnNiWhM スタートアップルーチンは内蔵フラッシュメモリ(かマスクROM)に記録されておりベクターテーブル(スタートアップの一部)にリセット割込みのエントリーアドレスを格納しておく
マイコンの電源ONでリセット割込みが発生するとスタートアップルーチン先頭からプログラムカウンタに沿って実行されメモリ変数やスタック領域、SFRの初期設定を行い最後にCのメイン関数が呼び出される
マイコンの電源ONでリセット割込みが発生するとスタートアップルーチン先頭からプログラムカウンタに沿って実行されメモリ変数やスタック領域、SFRの初期設定を行い最後にCのメイン関数が呼び出される
704デフォルトの名無しさん (スッップ Sdaa-cHxT)
2023/09/25(月) 21:31:01.48ID:SHu1A0tUd >>697
const って何の略でしょう
const って何の略でしょう
705はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 273e-MH8p)
2023/09/25(月) 22:04:58.79ID:ubRrbZbh0 >>704
C の変数は const を付けても (C の用語で言うところの) 定数にはならない。
C++ では異なるし、言語仕様の定義でなく単に事前に与える値くらいのニュアンスで定数という用語を使っている解説とかもあって混乱しやすい用語ではある。
C の変数は const を付けても (C の用語で言うところの) 定数にはならない。
C++ では異なるし、言語仕様の定義でなく単に事前に与える値くらいのニュアンスで定数という用語を使っている解説とかもあって混乱しやすい用語ではある。
706デフォルトの名無しさん (ワッチョイ 8aad-/va4)
2023/09/26(火) 00:22:01.41ID:+uZUPLZA0 const の変数は値の変更が不可能なので、それを利用してコンパイラが最適化することも出来るというだけで、必ず最適化しなければならないとかROMに割り付けなければならないみたいな決まりはない筈。
707デフォルトの名無しさん (ワッチョイ 6b01-PB4I)
2023/09/26(火) 00:49:13.67ID:h6rxe/Hl0 RAM2KBの環境ではROMに割り付けてもらわないと非常に困る
708デフォルトの名無しさん (ワッチョイ 07e5-+HDL)
2023/09/26(火) 01:39:36.71ID:kR568CEo0709デフォルトの名無しさん (ラクッペペ MMc6-se1G)
2023/09/26(火) 06:43:01.34ID:9+lSh1ncM 組込みで定数を扱うならdefine定義でソースに埋め込むのが普通
constはregisterと同じ扱いなので>>706の言うとおり
constはregisterと同じ扱いなので>>706の言うとおり
710デフォルトの名無しさん (ワッチョイ 0703-oBwi)
2023/09/26(火) 09:03:17.82ID:HGB+okJ70 いまどきのROM化環境のC言語にゃsectionで領域グループを指定する命令は無いのけ?
711デフォルトの名無しさん (ラクッペペ MMc6-se1G)
2023/09/26(火) 10:31:51.31ID:HDnmN3YRM >>699のマイコンの場合だと
スタートアップ
https://tool-support.renesas.com/autoupdate/support/onlinehelp/ja-JP/csp/V4.01.00/CS+.chm/Compiler-CCRX.chm/Output/ccrx08c0000y.html
コーディング例
https://tool-support.renesas.com/autoupdate/support/onlinehelp/ja-JP/csp/V4.01.00/CS+.chm/Compiler-CCRX.chm/Output/ccrx08c0400y.html#82903
スタートアップ
https://tool-support.renesas.com/autoupdate/support/onlinehelp/ja-JP/csp/V4.01.00/CS+.chm/Compiler-CCRX.chm/Output/ccrx08c0000y.html
コーディング例
https://tool-support.renesas.com/autoupdate/support/onlinehelp/ja-JP/csp/V4.01.00/CS+.chm/Compiler-CCRX.chm/Output/ccrx08c0400y.html#82903
712デフォルトの名無しさん (ワッチョイ 1ecf-44ew)
2023/09/27(水) 00:11:11.81ID:mIITHIHe0 セクションの初期化を割り当てというから混乱するんだろう
割り当てはリンク時にもう全部終わってる
割り当てはリンク時にもう全部終わってる
713デフォルトの名無しさん (ラクッペペ MMc6-se1G)
2023/09/27(水) 01:37:20.19ID:tguPsVh8M 静的な変数はリンク時はextern宣言で外部定義しておきスタートアップルーチンでセクション割当てすることでメモリ配置を確定させるのが一般的
リンクリストで自動変数以外のすべての使用変数を漏れなく割当てできているか確認する必要がある
リンクリストで自動変数以外のすべての使用変数を漏れなく割当てできているか確認する必要がある
714デフォルトの名無しさん (ワッチョイ 0a1f-oBwi)
2023/09/27(水) 09:48:51.32ID:I/ozjFX50 人間様はリンカーにセクション配置アドレスを教えるのが仕事だった時代もありました
715デフォルトの名無しさん (ワッチョイ 1e63-CSnM)
2023/09/27(水) 10:10:54.01ID:lrg7uRD+0 ハードウェア上のメモリー配置を教えるのは、いまでも人間なんじゃないの?
716デフォルトの名無しさん (ワッチョイ 0a1f-oBwi)
2023/09/27(水) 10:12:59.72ID:I/ozjFX50717デフォルトの名無しさん (ラクッペペ MMc6-se1G)
2023/09/27(水) 11:19:15.53ID:0hujVwVvM 静的変数と自動変数(スタック領域)の容量の割り当ての最終的な決定は人間の仕事
あまり変数に領域を取りすぎるとスタックの分が無くなる
あまり変数に領域を取りすぎるとスタックの分が無くなる
718デフォルトの名無しさん (ワッチョイ 3b15-cHxT)
2023/09/27(水) 11:22:42.10ID:rbbJx+dJ0 >>714
組み込みでそんな優雅なこと言ってたらバグも直せん
組み込みでそんな優雅なこと言ってたらバグも直せん
719デフォルトの名無しさん (ワッチョイ a310-WMZf)
2023/09/27(水) 11:23:26.71ID:Rw0J2Yjq0 昔のトラブルの癖で1Mバイト以上の領域、配列が必要ならmallocで確保するようにしてる・・・。
720デフォルトの名無しさん (ラクッペペ MMc6-7af3)
2023/09/27(水) 11:53:58.81ID:8vHXVA1WM mallocは64KBまでだろ……
721デフォルトの名無しさん (ワッチョイ 6a95-+EvS)
2023/09/27(水) 12:26:49.33ID:9Ywamwi50 ・・・16bit?オフセットアドレス範囲?
722デフォルトの名無しさん (アウアウウー Sacf-PB4I)
2023/09/27(水) 13:10:05.87ID:OOPn+kCla 8086の時代だろ
EMSのページング
EMSのページング
723デフォルトの名無しさん (ワッチョイ 1e63-CSnM)
2023/09/27(水) 15:08:08.13ID:lrg7uRD+0 いやそれ以前のCPUの仕様
724デフォルトの名無しさん (アウアウウー Sacf-j351)
2023/09/27(水) 16:10:06.49ID:OOPn+kCla それ以前だと本体メモリでも64kBフル積んでるの少なくないか
725デフォルトの名無しさん (ワッチョイ 1e63-CSnM)
2023/09/27(水) 16:12:57.75ID:lrg7uRD+0 8086積んでた当時のPCは128程度は積んでたと思うが
64でフルになるのはZ80のような8ビットPCでの話
64でフルになるのはZ80のような8ビットPCでの話
726デフォルトの名無しさん (アウアウウー Sacf-j351)
2023/09/27(水) 16:25:12.39ID:OOPn+kCla それ以前のそれに8086を含んでるなら矛盾はしない
727デフォルトの名無しさん (ワッチョイ 1e63-CSnM)
2023/09/27(水) 16:26:45.84ID:lrg7uRD+0 8086でフルに積むメモリの意味が分からん
728はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 273e-ClgD)
2023/09/27(水) 16:44:44.21ID:Q9yfznPE0 この場合の「フル」はメモリ空間いっぱいのことなんじゃないの。
バンク切り換えまで含めたらいくらでも拡張の余地はあるけど
malloc でバンクを跨ぐわけにはいかんし。
バンク切り換えまで含めたらいくらでも拡張の余地はあるけど
malloc でバンクを跨ぐわけにはいかんし。
729デフォルトの名無しさん (ワッチョイ 1e63-CSnM)
2023/09/27(水) 17:00:48.31ID:lrg7uRD+0 8086のアドレスバスは20ビットだから、1MB実装できる
730デフォルトの名無しさん (ワッチョイ 07e5-+HDL)
2023/09/27(水) 18:45:56.76ID:3YDDpoD+0 勉強になります
731デフォルトの名無しさん (ワッチョイ 1a94-oRtz)
2023/09/27(水) 19:57:19.01ID:3fbQ67ov0 勉強と言ってももう40年近く昔の知識だぞ
今どき役に立つことなんかあるか?
今どき役に立つことなんかあるか?
732デフォルトの名無しさん (ワッチョイ 07e5-+HDL)
2023/09/27(水) 21:07:16.75ID:3YDDpoD+0 >>731
すいません、ないです。ただ知的好奇心が非常に満たされます。
すいません、ないです。ただ知的好奇心が非常に満たされます。
733はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 273e-MH8p)
2023/09/27(水) 22:18:54.45ID:Q9yfznPE0 レトロコンピュータの資料は探せばいくらでもあるが
面白いところだけ選んで読むというわけにはいかんからな。
読む前にどれが面白いのか判断できるわけもないし、
相互に関連があるので一部の資料だけ見ても意味がわからん。
話題に関連する形で昔の話が出てくるのは
それなりに興味深いということもあるんだろう。
面白いところだけ選んで読むというわけにはいかんからな。
読む前にどれが面白いのか判断できるわけもないし、
相互に関連があるので一部の資料だけ見ても意味がわからん。
話題に関連する形で昔の話が出てくるのは
それなりに興味深いということもあるんだろう。
734デフォルトの名無しさん (ワッチョイ 0a64-gIzx)
2023/09/27(水) 23:14:28.73ID:zQBl5fyt0 ITの歴史を知ることは為になる
温故知新
温故知新
735デフォルトの名無しさん (ワッチョイ 6a14-xAvD)
2023/09/28(木) 00:01:49.83ID:bZti02EO0 スレ違いだったら申し訳ない
c言語でコンパイルした実行ファイルってosのAPIを使用してなければ別々のosで動かせますか?
cpuアーキは同じ前提です。
c言語でコンパイルした実行ファイルってosのAPIを使用してなければ別々のosで動かせますか?
cpuアーキは同じ前提です。
736デフォルトの名無しさん (ワッチョイ 0716-oBwi)
2023/09/28(木) 00:29:26.06ID:gnUHVRPF0 >>735
そもそも実行環境自体がos依存だろ
そもそも実行環境自体がos依存だろ
737デフォルトの名無しさん (アウアウウー Sacf-j351)
2023/09/28(木) 00:42:44.54ID:wsjwbbNAa CPU同じならセットアップの問題とIO関係のクリア出来てたらそこそこは動くんじゃないか
738デフォルトの名無しさん (アウアウウー Sacf-j351)
2023/09/28(木) 00:47:13.64ID:wsjwbbNAa 割とマジで試したいなら
Bochs とか QEMU とかで
OS 無しで動かしてみたら良い
Bochs とか QEMU とかで
OS 無しで動かしてみたら良い
739デフォルトの名無しさん (ワッチョイ 1e63-s5vX)
2023/09/28(木) 00:55:43.32ID:9pgsrChg0 スタートアップ辺りにOS依存が有りそう
740はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 273e-MH8p)
2023/09/28(木) 01:27:51.60ID:6irLEr1Q0 >>735
原則としては無理。
実行ファイルをメモリに展開して準備するローダがOSの一部だからOS の上で実行するならOSの機能は呼ばれることになる。
実行ファイルの形式が linuxとかだとelf が標準だけどwindowsではpeで、全く互換性はない。
ただ、複数のOSで動く実行ファイルを作るトリックは存在する。
https://justine.lol/cosmopolitan/index.html
原則としては無理。
実行ファイルをメモリに展開して準備するローダがOSの一部だからOS の上で実行するならOSの機能は呼ばれることになる。
実行ファイルの形式が linuxとかだとelf が標準だけどwindowsではpeで、全く互換性はない。
ただ、複数のOSで動く実行ファイルを作るトリックは存在する。
https://justine.lol/cosmopolitan/index.html
741デフォルトの名無しさん (アウアウウー Sacf-j351)
2023/09/28(木) 06:25:35.94ID:wsjwbbNAa742デフォルトの名無しさん (ワッチョイ 07e5-+HDL)
2023/09/28(木) 07:43:47.93ID:7Zdppbze0 >>735
質問者さんは下記の概要を知ると、参考になるかもです
「組み込み開発でベンダーロックを避けるためにマルチハードにしたい開発チームが、対象ハードごとのgccをビルドして用意する手順」
ややこしいし大変なので、ザッとで十分です
参考までに私が買った本(全部読んだとは言ってない)
「LINUX組み込みシステム」
クレイグ・ホーラボウ
ピアソンエデュケーション
質問者さんは下記の概要を知ると、参考になるかもです
「組み込み開発でベンダーロックを避けるためにマルチハードにしたい開発チームが、対象ハードごとのgccをビルドして用意する手順」
ややこしいし大変なので、ザッとで十分です
参考までに私が買った本(全部読んだとは言ってない)
「LINUX組み込みシステム」
クレイグ・ホーラボウ
ピアソンエデュケーション
743デフォルトの名無しさん (ワッチョイ a310-WMZf)
2023/09/28(木) 08:41:31.76ID:VP1D2tYa0 PC-98用のDOSアプリをTOWNSやAT互換機のDOSで動かしてはいたなぁ。
BIOSコールや各ハード特有機能を使わないアプリに限定されるけど。
BIOSコールや各ハード特有機能を使わないアプリに限定されるけど。
744デフォルトの名無しさん (ワッチョイ 3b15-cHxT)
2023/09/28(木) 09:51:32.79ID:wMng62Lu0745デフォルトの名無しさん (ワッチョイ 1e63-CSnM)
2023/09/28(木) 10:01:07.42ID:9pgsrChg0 MS-DOSのシステムコールって機種によらず共通でしょ
746デフォルトの名無しさん (ワッチョイ 0a1f-oBwi)
2023/09/28(木) 10:02:25.23ID:uRtj8fwF0 TOWNSはTownsOSだろ
747デフォルトの名無しさん (アウアウウー Sacf-j351)
2023/09/28(木) 10:04:03.81ID:7+/lnWbqa NHKでタマにやってる「我が社の黒歴史」で
FM-TOWNSを取り上げて欲しいな
FM-TOWNSを取り上げて欲しいな
748デフォルトの名無しさん (ワッチョイ 0a1f-oBwi)
2023/09/28(木) 10:15:55.20ID:uRtj8fwF0 TownsOSはMacOSみたいなGUIを提供してたんだよな
今やWindows到来って時代にだ
今やWindows到来って時代にだ
749デフォルトの名無しさん (ワッチョイ 1e63-CSnM)
2023/09/28(木) 10:16:51.88ID:9pgsrChg0 TownsOSはMS-DOSを拡張したものだし、
チャレンジ精神を評価する事はあっても
黒歴史とするのはあんまりだ
チャレンジ精神を評価する事はあっても
黒歴史とするのはあんまりだ
750デフォルトの名無しさん (ワッチョイ 0a1f-oBwi)
2023/09/28(木) 10:20:51.20ID:uRtj8fwF0 >>749
番組見たら考え方変わるよw
番組見たら考え方変わるよw
751デフォルトの名無しさん (ワッチョイ 1e63-CSnM)
2023/09/28(木) 10:24:22.26ID:9pgsrChg0 「我が社の黒歴史」ってやるなら、
是非NHK自身をネタにしてください
ライブドア事件の時、
ニュースに飛びついたNHK社員が
一斉にインサイダー取引で株売買してました
家族にも教えてたそうです
弁護士による内部調査を実施しましたが
社員の多くが調査拒否してましたよ
どんだけ暇なんだろうって思いました
是非NHK自身をネタにしてください
ライブドア事件の時、
ニュースに飛びついたNHK社員が
一斉にインサイダー取引で株売買してました
家族にも教えてたそうです
弁護士による内部調査を実施しましたが
社員の多くが調査拒否してましたよ
どんだけ暇なんだろうって思いました
752デフォルトの名無しさん (ワッチョイ 5301-oBwi)
2023/09/28(木) 10:32:23.32ID:Ev8os2Ag0 あの番組は、黒歴史があるから今の発展がある
みたいなノリの番組だから、後がない企業は扱わないよw
みたいなノリの番組だから、後がない企業は扱わないよw
753デフォルトの名無しさん (ワッチョイ 7f8e-se1G)
2023/09/28(木) 10:41:58.54ID:XO3PoFmz0 TownsOSのこと言うならWin3.1も大して変わらないと思う
どちらもMS-DOSの上で動くGUIシェルの中のひとつ
どちらもMS-DOSの上で動くGUIシェルの中のひとつ
754デフォルトの名無しさん (ワッチョイ 1e63-CSnM)
2023/09/28(木) 10:42:15.16ID:9pgsrChg0 当時のTownsは386採用し、MS-DOSを拡張して32ビットアクセスを実装してました
DOSが64Kの壁を越えられない時代にギガ単位のメモリをリニアに使える環境を実現
これを使ったゲームが人気でしたね
今から見れば当たり前のことで、何それって時代になってしまいましたが
DOS上のゲームでもこの方式を独自に採用したのがありました
DESCENTが有名だったかな
https://ja.wikipedia.org/wiki/DOSエクステンダ
DOSが64Kの壁を越えられない時代にギガ単位のメモリをリニアに使える環境を実現
これを使ったゲームが人気でしたね
今から見れば当たり前のことで、何それって時代になってしまいましたが
DOS上のゲームでもこの方式を独自に採用したのがありました
DESCENTが有名だったかな
https://ja.wikipedia.org/wiki/DOSエクステンダ
755はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 273e-ClgD)
2023/09/28(木) 10:51:11.28ID:6irLEr1Q0 富士通の公式サイトに富士通の歴史の一部として Towns の記述はあるよ。
結果的に廃れたけど黒歴史ということはない。 当時はそれなりにユーザもいた。
結果的に廃れたけど黒歴史ということはない。 当時はそれなりにユーザもいた。
756デフォルトの名無しさん (アウアウウー Sacf-j351)
2023/09/28(木) 10:56:41.79ID:7+/lnWbqa >>751
NHKはまだ産まれ変わってないから「わが社の黒歴史」に出る資格が無い
NHKはまだ産まれ変わってないから「わが社の黒歴史」に出る資格が無い
757デフォルトの名無しさん (ワンミングク MMfa-/HEw)
2023/09/28(木) 10:59:08.38ID:A0Yya1hOM スレチですね
758デフォルトの名無しさん (アウアウウー Sacf-j351)
2023/09/28(木) 11:02:35.02ID:7+/lnWbqa >>755
この前はYAMAHAのFM音源が「わが社の黒歴史」に出てたよ
この前はYAMAHAのFM音源が「わが社の黒歴史」に出てたよ
759デフォルトの名無しさん (ワッチョイ 1e63-CSnM)
2023/09/28(木) 11:04:12.36ID:9pgsrChg0 16ビットの制約で64キロバイトメモリしか確保できない時代から
一気に4GBメモリがリニアにアクセスできるようになった時は感動しましたよ
64ビットでは、あんまり感動はなかったな、なんでだろう
一気に4GBメモリがリニアにアクセスできるようになった時は感動しましたよ
64ビットでは、あんまり感動はなかったな、なんでだろう
760はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 273e-ClgD)
2023/09/28(木) 12:06:18.28ID:6irLEr1Q0 勉強してなかったからテストの点数が心配だなー チラッ チラッ
みたいな番組なわけだな。
みたいな番組なわけだな。
761デフォルトの名無しさん (ワッチョイ 0afd-e2p4)
2023/09/28(木) 12:09:23.54ID:MA2VSxCx0 >>759
64KBを超える事より4GBを超えることの方が圧倒的に少ないからだな
64KBを超える事より4GBを超えることの方が圧倒的に少ないからだな
762デフォルトの名無しさん (ワッチョイ 3b15-cHxT)
2023/09/28(木) 12:44:49.42ID:wMng62Lu0 ちょっと本気でプログラム組みだせばコードサイズ64KBなんてすぐ超える
一方1MBなんて集団でごちゃごちゃやってないかぎり超えない
一方1MBなんて集団でごちゃごちゃやってないかぎり超えない
763デフォルトの名無しさん (ワッチョイ 0a1f-oBwi)
2023/09/28(木) 12:53:02.94ID:uRtj8fwF0 アセンブラで組めばそんな大量のデータサイズにならんよ
764デフォルトの名無しさん (ワッチョイ 3b15-cHxT)
2023/09/28(木) 13:56:12.11ID:wMng62Lu0 データじゃなくてコードサイズの話なんだけど
ちょっと凝った仕様を入れようとすると64Kbくらいは簡単に超える
泣く泣く削るか無理して分割ロードにするか
8ビット時代はそんな感じだったな
ちょっと凝った仕様を入れようとすると64Kbくらいは簡単に超える
泣く泣く削るか無理して分割ロードにするか
8ビット時代はそんな感じだったな
765デフォルトの名無しさん (ワッチョイ 1eab-xvpL)
2023/09/28(木) 14:22:46.10ID:+fR7sAVf0 コード領域の自己書き換えでやりくりやりくり
766デフォルトの名無しさん (ワッチョイ a310-WMZf)
2023/09/28(木) 14:40:53.17ID:VP1D2tYa0 昔のPRGとかメニュー開くとCDアクセス始めるゲームとかあったなぁ。
メモリー足りず、フィールド、戦闘、メニュー毎にプログラム読み直してるのかと思った。
メモリー足りず、フィールド、戦闘、メニュー毎にプログラム読み直してるのかと思った。
767はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 273e-ClgD)
2023/09/28(木) 15:31:33.20ID:6irLEr1Q0 Turbo C++ の MS-DOS 版にダイナミックロードを補助するライブラリが付いてなかったっけ?
うろおぼえだけど。
うろおぼえだけど。
768デフォルトの名無しさん (スフッ Sdaa-TrDt)
2023/09/28(木) 18:41:56.40ID:KRBURPw6d あったよ
うろ覚えだけど
うろ覚えだけど
769デフォルトの名無しさん (ワッチョイ 8a79-aeRl)
2023/09/28(木) 19:15:05.82ID:0dpaiugf0 >Turbo C++
TurboがC++だった頃なんてあったかな
TurboがC++だった頃なんてあったかな
770デフォルトの名無しさん (ワッチョイ 1e63-CSnM)
2023/09/28(木) 19:19:34.33ID:9pgsrChg0 あった
>1990年5月、ボーランドは Turbo C から Turbo C++ へと移行し、アマチュア向け・ローエンド製品を
>Turbo C++、プロ向け・ハイエンド製品を Borland C++ として2系統に展開した。
https://ja.wikipedia.org/wiki/Turbo_C
>1990年5月、ボーランドは Turbo C から Turbo C++ へと移行し、アマチュア向け・ローエンド製品を
>Turbo C++、プロ向け・ハイエンド製品を Borland C++ として2系統に展開した。
https://ja.wikipedia.org/wiki/Turbo_C
771デフォルトの名無しさん (ワッチョイ 6a36-WMZf)
2023/09/28(木) 20:46:13.07ID:O4GqiEoW0 DOSでも増設メモリに32bitレジスタでアクセス出来たのなら・・・
772デフォルトの名無しさん (ワッチョイ 0a64-gIzx)
2023/09/28(木) 22:44:00.88ID:qNYo9AZZ0 それがDOSエクステンダだろ
GO32には世話になった
GO32には世話になった
773デフォルトの名無しさん (ワッチョイ 23ad-2pcI)
2023/10/02(月) 02:12:15.10ID:hWT/DRlk0 X68000 もよろしく
774デフォルトの名無しさん (アウアウウー Sa89-5C2y)
2023/10/05(木) 17:17:30.86ID:WXXGTjkDa 黒歴史度はFM-TOWNSとX68000とどっちがどっち?
775デフォルトの名無しさん (ワッチョイ 2379-Fe8P)
2023/10/05(木) 19:38:38.95ID:k4EJU+WL0 何が黒歴史だ
どっちも国産パソコンに革命起こしたんだよ
どっちも国産パソコンに革命起こしたんだよ
776デフォルトの名無しさん (ワッチョイ cb63-tvb5)
2023/10/05(木) 19:43:14.40ID:4Dr5MGJz0 TOWNSやX68000の話というのは、
PCやOSの話題にはなってもC言語の話題ではない
PCやOSの話題にはなってもC言語の話題ではない
777デフォルトの名無しさん (ワッチョイ 2db0-SLAb)
2023/10/06(金) 19:26:21.98ID:0FrwfOPH0 >>775
パソコンでありながらゲームしか宣伝してなくて当時発達著しかったゲーム機に負けただけで革命もクソもねえw
パソコンでありながらゲームしか宣伝してなくて当時発達著しかったゲーム機に負けただけで革命もクソもねえw
778デフォルトの名無しさん (ワッチョイ cb63-tvb5)
2023/10/06(金) 19:35:07.48ID:UFkJ0Gsc0 ゲーム機とPCで切磋琢磨してたんだろ
ゲーム機にだって栄枯盛衰はあぅたよ
そういえばプレステにLinux入れてアプリ作って動かしてた人いたなあ
プレステは高性能すぎて、特定国への輸出が規制を受けてた
ゲーム機にだって栄枯盛衰はあぅたよ
そういえばプレステにLinux入れてアプリ作って動かしてた人いたなあ
プレステは高性能すぎて、特定国への輸出が規制を受けてた
779デフォルトの名無しさん (ワッチョイ cb63-tvb5)
2023/10/06(金) 19:43:43.15ID:UFkJ0Gsc0 PlayStation3に採用されたCPUはCell、ソニーとIBM、東芝の共同開発だった。
この辺もWikiを読むと面白い
この辺もWikiを読むと面白い
780デフォルトの名無しさん (ワッチョイ daad-iLfk)
2023/10/07(土) 05:34:11.31ID:mvcCmF0H0 あー。沢山繋げてスパコンみたいな。知らんけど。
781デフォルトの名無しさん (ワッチョイ 31b0-fCO4)
2023/10/07(土) 12:37:19.06ID:2aizzJpQ0 >>778
PCがグラフィックボードに力を入れだすのはウィンドウズ普及以降になる
ゲーム機にはニンテンドー64のRDRAMとかセガサターンのシンクロナスDRAMとかアーケードやシリコングラフィックCGマシンから取り入れられた新技術が投入されX68000やタウンズのかなう相手ではなかった
PCがグラフィックボードに力を入れだすのはウィンドウズ普及以降になる
ゲーム機にはニンテンドー64のRDRAMとかセガサターンのシンクロナスDRAMとかアーケードやシリコングラフィックCGマシンから取り入れられた新技術が投入されX68000やタウンズのかなう相手ではなかった
782デフォルトの名無しさん (ワッチョイ 7d10-GYY9)
2023/10/07(土) 12:51:58.85ID:TufJ0SRx0 X68やTOWNSはMD/SFCとの争い・・・
・・・PS1 ジャンピングフラッシュの元になったゲームはX68で作られたんだっけ?あとワイヤーフレームのスターウォーズも。
・・・PS1 ジャンピングフラッシュの元になったゲームはX68で作られたんだっけ?あとワイヤーフレームのスターウォーズも。
783デフォルトの名無しさん (ワッチョイ da79-4iaA)
2023/10/07(土) 13:51:13.10ID:c4CFtcBt0 (それって昔のPC板やレトロゲー板の範疇だからそろそろやめてくんないかなここはC言語スレ・・・)
784デフォルトの名無しさん (ワッチョイ 8d14-h3vX)
2023/10/07(土) 14:41:36.91ID:/93XcW4W0 年寄りは人の話を聞かないからな
785デフォルトの名無しさん (ワッチョイ daad-iLfk)
2023/10/07(土) 15:09:15.52ID:mvcCmF0H0 68000は素晴らしい。8086のようなセグメントのあるCPUはクソだ。
と当時は思ったものです。
と当時は思ったものです。
786デフォルトの名無しさん (ワッチョイ 7663-Hwqz)
2023/10/07(土) 15:34:43.34ID:BCZCKqNS0 むしろ、そう言う話に持って行きたかった
787デフォルトの名無しさん (ワッチョイ 3ded-Jvcl)
2023/10/07(土) 15:55:47.74ID:9cx0ijSo0 X68000は素でgccが動いてうらやましかった。
一方86はgo32で無理矢理動かしてた。
Cに戻してみた。
一方86はgo32で無理矢理動かしてた。
Cに戻してみた。
788デフォルトの名無しさん (ワッチョイ 7663-Hwqz)
2023/10/07(土) 15:58:51.83ID:BCZCKqNS0 レジスター数は羨ましかったな
あんだけあればレジスターだけでプログラム動かせそう、とか
あんだけあればレジスターだけでプログラム動かせそう、とか
789デフォルトの名無しさん (ワッチョイ daad-iLfk)
2023/10/07(土) 16:46:51.81ID:mvcCmF0H0 アセンブラやるとね、バイトの並びが上位桁が先に来るので人間に分かり易くて良い、みたいな話もあった。
68000 だけじゃなく 6809 とか 6800 とかの 8 bit CPU の頃からいわゆる68系はそうだったな。
Sun の Sparc もそうか。
68000 だけじゃなく 6809 とか 6800 とかの 8 bit CPU の頃からいわゆる68系はそうだったな。
Sun の Sparc もそうか。
790デフォルトの名無しさん (ワッチョイ ae5f-iLfk)
2023/10/07(土) 16:55:51.01ID:tqmAUUbt0 なんでリトルエンディアンになるの?
791デフォルトの名無しさん (ワッチョイ daad-iLfk)
2023/10/07(土) 17:19:33.66ID:mvcCmF0H0 80系は昔からリトルエンディアンだったな。アドレスの小さい方が桁の小さい方にした方がコンピュータ的には自然だと考えたのかも知れない。
792デフォルトの名無しさん (ワッチョイ 31b0-fCO4)
2023/10/07(土) 17:30:29.12ID:2aizzJpQ0 リトルエンディアンは同じアドレスから読み取ると
16ビットデータを8ビットレジスタで読んでもちゃんと下位8ビットが読める
ビッグエンディアンは上位8ビットが読み込まれてしまう
さらに68000は16ビット以上は奇数アドレスから読み込めないという制限があるのでハマることもある
16ビットデータを8ビットレジスタで読んでもちゃんと下位8ビットが読める
ビッグエンディアンは上位8ビットが読み込まれてしまう
さらに68000は16ビット以上は奇数アドレスから読み込めないという制限があるのでハマることもある
793デフォルトの名無しさん (ワッチョイ 0993-LlOc)
2023/10/07(土) 17:36:03.54ID:qAlp08tM0 リトルエンディアンの場合は、図を描くときに右から左、下から上に番地が増えるようにすると合理的なのよね
ダニーコーエンの、エンディアンの語源になった文書にもそんな図があったと思う。アスキーアートだけど
https://ja.m.wikipedia.org/wiki/ダニー・コーエン_(計算機科学者)
ダニーコーエンの、エンディアンの語源になった文書にもそんな図があったと思う。アスキーアートだけど
https://ja.m.wikipedia.org/wiki/ダニー・コーエン_(計算機科学者)
794デフォルトの名無しさん (ワッチョイ 6e2b-6t2b)
2023/10/07(土) 17:36:48.91ID:OGJgvxVr0 8bitCPUの頃のCPUの加算器は16bit+16bitしかできなかった、32bitの加算は分割してやるしかない
加算を分割してやる時は下の桁からやる
上の桁からやると、下の桁で繰り上がりが発生したら上の桁に戻って繰り上がり処理することになるから
下の桁が前にあるのがリトルエンディアン、こっちの方が自然だと思う
ビッグエンディアンはデータを後ろから前にアクセスしていくことになる、それだけだって言えばそうだけど
加算を分割してやる時は下の桁からやる
上の桁からやると、下の桁で繰り上がりが発生したら上の桁に戻って繰り上がり処理することになるから
下の桁が前にあるのがリトルエンディアン、こっちの方が自然だと思う
ビッグエンディアンはデータを後ろから前にアクセスしていくことになる、それだけだって言えばそうだけど
795はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 693e-B5Nq)
2023/10/07(土) 17:43:26.56ID:pov02R//0 キャストしやすさもあるな。
メモリ上にある int 型のデータを char にキャストするみたいなとき
リトルエンディアンなら単にその場所から 1 バイトを読みだせばいいだけだが、
ビッグエンディアンだとアドレスをずらして読みだすか
読みだしてからマスクするかになる。
まあそのへんは効率的に処理できる命令があったりするんだろうけど
そんなこと最初から考えずに済むならそのほうがいい。
メモリ上にある int 型のデータを char にキャストするみたいなとき
リトルエンディアンなら単にその場所から 1 バイトを読みだせばいいだけだが、
ビッグエンディアンだとアドレスをずらして読みだすか
読みだしてからマスクするかになる。
まあそのへんは効率的に処理できる命令があったりするんだろうけど
そんなこと最初から考えずに済むならそのほうがいい。
796デフォルトの名無しさん (ワッチョイ daad-iLfk)
2023/10/07(土) 18:12:07.87ID:mvcCmF0H0 まあでもネットワークバイトオーダーはビッグエンディアンになっちゃってるんだよね。
これはこれで理由があるのかも知れないが、とにかく80系CPUだとひっくり返さねばならなくなった。
結局C言語だとそういったCPUの違いを吸収するために htonl(), ntohl() のようなマクロまたは関数を使うことになると。
これはこれで理由があるのかも知れないが、とにかく80系CPUだとひっくり返さねばならなくなった。
結局C言語だとそういったCPUの違いを吸収するために htonl(), ntohl() のようなマクロまたは関数を使うことになると。
797デフォルトの名無しさん (ワッチョイ 7663-Hwqz)
2023/10/07(土) 18:15:49.27ID:BCZCKqNS0 それは、そういう風に決めないと、処理出来ないからだろう
798はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 693e-B5Nq)
2023/10/07(土) 18:24:53.16ID:pov02R//0 通信系はなぁ……。 結局は通信相手と同じ規約を使うしか仕方がないから
個々のコンピュータ (アーキテクチャ) にとっては不自然になることもある。
モダンなプロトコルはリトルエンディアンを採用している事例もそれなりにあるよ。
個々のコンピュータ (アーキテクチャ) にとっては不自然になることもある。
モダンなプロトコルはリトルエンディアンを採用している事例もそれなりにあるよ。
799デフォルトの名無しさん (ワッチョイ 31b0-fCO4)
2023/10/07(土) 18:45:29.52ID:2aizzJpQ0 そのエンディアン変換が68000は面倒で
例えばZ80なら16ビットを上位バイト下位バイトレジスタ間で3命令で交換できるのに
68000はメモリに16ビット書き込み、8ビットシフト、メモリから8ビット読み出しという手順をしなければならない(確か)
万能のCPUなんてないものだと思ったよ
例えばZ80なら16ビットを上位バイト下位バイトレジスタ間で3命令で交換できるのに
68000はメモリに16ビット書き込み、8ビットシフト、メモリから8ビット読み出しという手順をしなければならない(確か)
万能のCPUなんてないものだと思ったよ
800デフォルトの名無しさん (スッップ Sdfa-sLGg)
2023/10/07(土) 19:39:28.37ID:TKUMh5Zod 「インディアン」は何かの差別用語に該当しないのな
戦争に負けるとはこういう事だぞお前ら
戦争に負けるとはこういう事だぞお前ら
801デフォルトの名無しさん (ワッチョイ 7663-Hwqz)
2023/10/07(土) 19:41:36.75ID:BCZCKqNS0 由来はガリバー旅行記
802デフォルトの名無しさん (ワッチョイ 7663-Hwqz)
2023/10/07(土) 19:50:37.92ID:BCZCKqNS0 アメリカ発見したとき(これも本当はおかしいことなんですが)、
そこがインドだって思いこんた白人がつけた呼び方だから
本当は間違いなんですけどね
そのインディアンと、エンディアンは別の言葉です
そこがインドだって思いこんた白人がつけた呼び方だから
本当は間違いなんですけどね
そのインディアンと、エンディアンは別の言葉です
803デフォルトの名無しさん (ワッチョイ 76cf-GYY9)
2023/10/07(土) 21:15:26.02ID:dXS7C+xF0 算用数字もリトルエンディアンだとよかったなあ
804デフォルトの名無しさん (ワッチョイ 76cf-GYY9)
2023/10/07(土) 21:15:43.32ID:dXS7C+xF0 算用数字もリトルエンディアンだとよかったなあ
805デフォルトの名無しさん (ワッチョイ 9120-5icV)
2023/10/07(土) 22:44:07.58ID:S3fYgflU0 >>799
68000で16bitのd0.wの値をエンディアン変換
ror.w #8,d0
68000で32bitのd0.lの値をエンディアン変換
ror.w #8,d0
swap d0
ror.w #8,d0
68000で16bitのd0.wの値をエンディアン変換
ror.w #8,d0
68000で32bitのd0.lの値をエンディアン変換
ror.w #8,d0
swap d0
ror.w #8,d0
806デフォルトの名無しさん (ワッチョイ daad-iLfk)
2023/10/08(日) 00:21:50.43ID:GlkvWXsG0 そういや Oh! X が復刊するんだってよ。(単発で1冊出すだけだとは思うが)。
https://kibidango.com/project/2285/action/17185?ui_source=action&ui_campaign=177822&ui_medium=email
X68000Z 用のソフトを付けるそうだが8800円と妙に高い。完全にマニア向け(というか信者向け)の本だな。
https://kibidango.com/project/2285/action/17185?ui_source=action&ui_campaign=177822&ui_medium=email
X68000Z 用のソフトを付けるそうだが8800円と妙に高い。完全にマニア向け(というか信者向け)の本だな。
807デフォルトの名無しさん (アウアウウー Sa39-OOOs)
2023/10/08(日) 10:00:50.20ID:CrdCteTPa SJISがBEじゃないのはなんでだろうね
MSはアホだったのか?
MSはアホだったのか?
808デフォルトの名無しさん (アウアウウー Sa39-OOOs)
2023/10/08(日) 10:01:26.67ID:CrdCteTPa 間違えた
SJISがLEじゃないのはなんでだろうね
漏れがアホだった
SJISがLEじゃないのはなんでだろうね
漏れがアホだった
809デフォルトの名無しさん (ワッチョイ 7663-Hwqz)
2023/10/08(日) 10:27:48.16ID:yFmeE5YY0 質問の意味が分からなかったんだが
2バイト文字の上位、下位の順番のことかな?
2バイト文字の上位、下位の順番のことかな?
810デフォルトの名無しさん (ラクッペペ MM0e-M0PL)
2023/10/08(日) 10:44:57.38ID:Ss9cPRopM もともと日本メーカー(多分NEC)が策定したような気がする
811はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 693e-B5Nq)
2023/10/08(日) 11:24:23.52ID:tCGlxsdd0 JIS コードでの概念としては第一バイトが区、第二バイトが点に対応するようには設計されてる。
2バイト整数の上位と下位ではなく「第1バイト(区)」「第2バイト(点)」の組なんだよ。
Shift_JIS はアスキーコードと共存できるように JIS の配置をずらした。 (だから Shift と名前がついてる。)
2バイト整数の上位と下位ではなく「第1バイト(区)」「第2バイト(点)」の組なんだよ。
Shift_JIS はアスキーコードと共存できるように JIS の配置をずらした。 (だから Shift と名前がついてる。)
812デフォルトの名無しさん (ワンミングク MMea-nQTY)
2023/10/08(日) 12:24:35.99ID:hexAHbw2M 分かったから他のスレ行けよ
813デフォルトの名無しさん (ワッチョイ da79-4iaA)
2023/10/08(日) 13:05:45.22ID:SlOLtELZ0 ここはCを知り尽くした老害の集いとみなせ
常に話題に新鮮さが求められる
流れを変えたくば新鮮なC言語の話を振ればよい
常に話題に新鮮さが求められる
流れを変えたくば新鮮なC言語の話を振ればよい
814デフォルトの名無しさん (アウアウウー Sa39-OOOs)
2023/10/08(日) 13:16:39.02ID:CrdCteTPa wchar_t は何bit?
816デフォルトの名無しさん (ワッチョイ daad-iLfk)
2023/10/08(日) 16:18:18.23ID:c7bH/Jal0 >>813
新鮮なCの話なんて、あるのか?w
新鮮なCの話なんて、あるのか?w
817はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 693e-B5Nq)
2023/10/08(日) 16:26:29.67ID:tCGlxsdd0 C23 の話題なら……。
今回の変更は割とデカいし。
今回の変更は割とデカいし。
818デフォルトの名無しさん (ワッチョイ 9120-5icV)
2023/10/08(日) 18:52:25.18ID:IT1htqzv0 C11も大して使われてる気がしないところでC23なぁ
819デフォルトの名無しさん (ワッチョイ 0993-LlOc)
2023/10/08(日) 19:56:42.76ID:hVEDEpG10 いつだったかコミケの第何回かの略称と紛らわしかった思い出
820デフォルトの名無しさん (ワッチョイ 0aaf-ap/T)
2023/10/08(日) 22:56:49.03ID:bFy9tmBW0 SJISにエンディアンの問題なんかねーしw
821デフォルトの名無しさん (ワッチョイ ae5f-iLfk)
2023/10/09(月) 00:16:32.12ID:v5yIEMGi0 >>820
まあ強いて言うならSJISはビッグエンディアン固定だよね
まあ強いて言うならSJISはビッグエンディアン固定だよね
822デフォルトの名無しさん (ワッチョイ 0aaf-ap/T)
2023/10/09(月) 00:31:56.49ID:J9meIr3U0 >>821
エンディアンというのは数値にしか成り立たない概念でしょ
UTF-16はエンディアンの区別があるけど、これは16bitの数値だからあって当然だけど、SJISは単なるバイトストリームでしょ
なのでエンディアンの区別は無いはずだけどね
SJISが16bitの数値として定義されてんなら、何かソースを教えてくれよ
エンディアンというのは数値にしか成り立たない概念でしょ
UTF-16はエンディアンの区別があるけど、これは16bitの数値だからあって当然だけど、SJISは単なるバイトストリームでしょ
なのでエンディアンの区別は無いはずだけどね
SJISが16bitの数値として定義されてんなら、何かソースを教えてくれよ
823デフォルトの名無しさん (ワッチョイ 7a11-kEni)
2023/10/09(月) 01:36:54.19ID:Epzok5Ad0 C言語はOSの仕様とセットだから、どのOSのC言語か書かないと意味がない。
824デフォルトの名無しさん (ワッチョイ 7d10-GYY9)
2023/10/09(月) 07:56:20.38ID:JBACiIYd0 SJISにしろJISにしろ98/88で使おう(テキストVRAM書き込みや漢字ROMからの読み出し)
とするときはなんかよくわからん変換やらされた思い出・・・。
とするときはなんかよくわからん変換やらされた思い出・・・。
825デフォルトの名無しさん (ワッチョイ d5f3-lQHQ)
2023/10/09(月) 18:41:50.35ID:iynFVAFm0826デフォルトの名無しさん (ワッチョイ d5f3-lQHQ)
2023/10/09(月) 18:42:02.61ID:iynFVAFm0827デフォルトの名無しさん (ワッチョイ ae5f-iLfk)
2023/10/09(月) 19:19:32.46ID:v5yIEMGi0828デフォルトの名無しさん (ワッチョイ ae5f-iLfk)
2023/10/09(月) 19:24:49.57ID:v5yIEMGi0 アナル可変長形式は数値じゃあないのか
勉強になったわセンキュー>>882
勉強になったわセンキュー>>882
829デフォルトの名無しさん (ワッチョイ 7663-Hwqz)
2023/10/09(月) 19:30:25.37ID:Slr0Hoys0 コーヒーふきそうだった
責任取ってよね
責任取ってよね
830デフォルトの名無しさん (ワッチョイ daad-Mhb2)
2023/10/09(月) 19:34:22.38ID:Oqw93GGy0 アナル可変長形式ってどんな形式だべ?
太さによって広がりはするけど長さは……
太さによって広がりはするけど長さは……
831デフォルトの名無しさん (ワッチョイ 6ed5-IgUm)
2023/10/09(月) 19:58:17.35ID:U5VU0viZ0 SJISって1stバイトの最上位ビットが立ってるのをもって
後続バイトがペアになるわけだが
ここからエンディアンへの繋がりを見出だせない
後続バイトがペアになるわけだが
ここからエンディアンへの繋がりを見出だせない
832デフォルトの名無しさん (ワッチョイ 7663-Hwqz)
2023/10/09(月) 20:01:41.10ID:Slr0Hoys0 >最上位ビットが立ってる
もうちょっと複雑だったと思う
UJISとは違う
もうちょっと複雑だったと思う
UJISとは違う
833デフォルトの名無しさん (ワッチョイ 7a36-GYY9)
2023/10/09(月) 23:50:22.00ID:G12VbuWM0 SJISはコード表見てて文字列を1バイトづつ見て行って
0x81~0x98、0xe0~0xeeが出てきたらSJIS文字だと判断するコード書いてた。
0x81~0x98、0xe0~0xeeが出てきたらSJIS文字だと判断するコード書いてた。
834デフォルトの名無しさん (ワッチョイ 7a36-GYY9)
2023/10/09(月) 23:55:28.00ID:G12VbuWM0 あと文字列操作コード書きやすいように1文字2バイトに変換(?)するコードも書いてた。
835デフォルトの名無しさん (ワッチョイ 0aaf-ap/T)
2023/10/10(火) 00:04:28.27ID:vFMCesii0 >>827
> SJISが16bitの数値として定義されてんなら、
と書いてあるだろ
数値だと思ってたけどとか、読解力が無さすぎて泣けてくる…
JISコードは16bitの数値(2byteコード)としても定義されてるけど、SJISはそれを巧妙にエンコードしたものと言えるだろう
なのでやはりバイトストリームだな
> SJISが16bitの数値として定義されてんなら、
と書いてあるだろ
数値だと思ってたけどとか、読解力が無さすぎて泣けてくる…
JISコードは16bitの数値(2byteコード)としても定義されてるけど、SJISはそれを巧妙にエンコードしたものと言えるだろう
なのでやはりバイトストリームだな
836デフォルトの名無しさん (ワッチョイ 7a36-GYY9)
2023/10/10(火) 00:41:46.82ID:WRpVvMtq0 テキストファイルの形式としてSJISはビッグエンディアンでなければならないって程度の認識。
837デフォルトの名無しさん (ワッチョイ 7a36-GYY9)
2023/10/10(火) 00:44:51.87ID:WRpVvMtq0 SJISを文字と数値の相対表と見るか、
テキストのファイル形式を含めた規格とみるか。
テキストのファイル形式を含めた規格とみるか。
838デフォルトの名無しさん (ワッチョイ 5a7f-FHep)
2023/10/10(火) 01:54:11.03ID:hSg/mMq/0 いまどきキャラクタセットの操作を自作してしまうのはヤバいプログラマ
839デフォルトの名無しさん (ワッチョイ 7d10-GYY9)
2023/10/10(火) 09:46:25.05ID:jpaIozT30 昔書いたunicode対応のソースが最新コンパイラでエラー、ワーニングが山程出てきて心折れるんや・・・。
840デフォルトの名無しさん (ワッチョイ ae8f-HisN)
2023/10/10(火) 10:47:51.74ID:0SFeJAzN0 文字列としてリトルエンデアンだと可変長文字コードが面倒な事になるでしょうに
841デフォルトの名無しさん (アウアウウー Sa39-OOOs)
2023/10/10(火) 10:58:37.96ID:vCJOXgr3a842デフォルトの名無しさん (ワッチョイ 76cf-rRiV)
2023/10/10(火) 11:36:08.74ID:k8E2nUhl0 >>840
"Aア"は0x41 0x83 0x41だけどこれがもし0x41 0x41 0x83だったら、0x41 0x41まで読んだところでこれが"AA"なのかどうかを次のバイトまで読まないと確定出来なくなるわけだよね
"Aア"は0x41 0x83 0x41だけどこれがもし0x41 0x41 0x83だったら、0x41 0x41まで読んだところでこれが"AA"なのかどうかを次のバイトまで読まないと確定出来なくなるわけだよね
843デフォルトの名無しさん (ワッチョイ eee7-iLfk)
2023/10/10(火) 14:45:56.30ID:lY2q8v9P0 >>835
どのあたりが巧妙なのか ついでに解説をお願い思案す
どのあたりが巧妙なのか ついでに解説をお願い思案す
844デフォルトの名無しさん (アウアウウー Sa39-OOOs)
2023/10/10(火) 15:06:58.22ID:vCJOXgr3a x 巧妙に
o 泥臭く
EUC-JPで良かったんだよ
o 泥臭く
EUC-JPで良かったんだよ
845デフォルトの名無しさん (ワッチョイ 7663-Hwqz)
2023/10/10(火) 17:44:06.68ID:JaQe+SGi0 EUC-JPにすると半角カナ文字が全滅するんだよな
846デフォルトの名無しさん (ワッチョイ 0d01-byzf)
2023/10/10(火) 20:02:21.46ID:SBkOlj5r0 半角カナは全滅してほしかったし
今すぐにも全滅してほしい
今すぐにも全滅してほしい
847デフォルトの名無しさん (ワッチョイ daad-iLfk)
2023/10/10(火) 22:25:54.11ID:8PzXep7k0 もう面倒だから Unicode を UTF-8 で使え。
848デフォルトの名無しさん (ワッチョイ 0941-LlOc)
2023/10/11(水) 00:45:18.47ID:m71rV3Zb0 euc-jpの半角カナは全滅じゃなくて、バイト数が多くなる、だったような。3バイトとか
849デフォルトの名無しさん (ワッチョイ 85de-ap/T)
2023/10/11(水) 01:29:28.77ID:cflt71CU0 >>843
JIS X 0208はいわゆる半角文字も2byteコードで定義されてるが、それと半角カナをエスケープシーケンス無しで混在させる方法を定義したんだよ!
ほぼWikipediaの受け売りだw
詳しいことはWikipediaを見ろよ
つうかそんなことも分からん若造が増えたんだな…
JIS X 0208はいわゆる半角文字も2byteコードで定義されてるが、それと半角カナをエスケープシーケンス無しで混在させる方法を定義したんだよ!
ほぼWikipediaの受け売りだw
詳しいことはWikipediaを見ろよ
つうかそんなことも分からん若造が増えたんだな…
850デフォルトの名無しさん (ワッチョイ daad-iLfk)
2023/10/11(水) 03:32:09.53ID:RVlIgJ7N0 >>848
2バイト。 0x8e が最初にあって、その次にシフトJISの半角仮名と同じコードが来る。
2バイト。 0x8e が最初にあって、その次にシフトJISの半角仮名と同じコードが来る。
851デフォルトの名無しさん (ワッチョイ 7663-Hwqz)
2023/10/11(水) 09:52:13.46ID:LeQSJgup0 1バイトアルファベットも2バイト化して
852デフォルトの名無しさん (ワッチョイ 0a0d-HisN)
2023/10/11(水) 10:14:54.69ID:NQyPw3h00 文字コードも、32bitとか、64bitとか、メモリーアクセス単位に見合うサイズにしたらいいだけだよなぁ
可変長にする必要が全く無い
可変長にする必要が全く無い
853デフォルトの名無しさん (ワッチョイ 7a36-GYY9)
2023/10/11(水) 10:43:08.13ID:ZfRV8AUK0 80年代プログラマ「1バイト、1ビットでも無駄にするんじゃねぇよ!!」
854デフォルトの名無しさん (ワッチョイ 85de-ap/T)
2023/10/11(水) 11:58:33.24ID:cflt71CU0 1文字に見える絵文字もUTF-8で41byteになったりするんで、1文字64bitにしようが可変長になる
なのでUTF-8かUTF-16にしておくのが無難
UTF-16は主な漢字は2byteで済むんで、何気にバランスが良い文字コードだと思えるようになってきた
なのでUTF-8かUTF-16にしておくのが無難
UTF-16は主な漢字は2byteで済むんで、何気にバランスが良い文字コードだと思えるようになってきた
855デフォルトの名無しさん (ワッチョイ 8d25-fCO4)
2023/10/11(水) 21:17:47.06ID:DBrOrPS60856デフォルトの名無しさん (ワッチョイ 8d25-fCO4)
2023/10/11(水) 21:21:23.81ID:DBrOrPS60857デフォルトの名無しさん (ワッチョイ daad-iLfk)
2023/10/11(水) 22:12:46.43ID:RVlIgJ7N0 >>853
2KBに無理矢理詰め込むみたいなことを昔やったことあるな。ROMの容量に合わせてビット単位で詰め込む。
そういえば Apple ][ のモニタプログラムが2KB丁度で6502のアセンブラのソース見て物凄い詰め込み具合に感動した。
1バイトも無駄がなく2KBピッタリだった。
2KBに無理矢理詰め込むみたいなことを昔やったことあるな。ROMの容量に合わせてビット単位で詰め込む。
そういえば Apple ][ のモニタプログラムが2KB丁度で6502のアセンブラのソース見て物凄い詰め込み具合に感動した。
1バイトも無駄がなく2KBピッタリだった。
858デフォルトの名無しさん (ワッチョイ 9120-5icV)
2023/10/11(水) 23:09:10.07ID:Oo4KNMoV0 > 1バイトも無駄がなく2KBピッタリだった。
そんなことない。まだ詰めれるし空きもあった。
そんなことない。まだ詰めれるし空きもあった。
859デフォルトの名無しさん (ワッチョイ daad-iLfk)
2023/10/11(水) 23:34:38.65ID:RVlIgJ7N0 >>858
えー。なかったと思ったがなあ。それって Apple ][ plus とか、後に出た少し変えたやつでは?
えー。なかったと思ったがなあ。それって Apple ][ plus とか、後に出た少し変えたやつでは?
860デフォルトの名無しさん (ワッチョイ 0941-LlOc)
2023/10/11(水) 23:40:13.44ID:m71rV3Zb0861デフォルトの名無しさん (ワッチョイ 5502-1G1b)
2023/10/11(水) 23:42:44.40ID:UuDrjcXU0 アリスソフトのゲームはひらがながカタカナで入っててうふ~んだったな
862デフォルトの名無しさん (ワッチョイ 9120-5icV)
2023/10/12(木) 02:28:41.65ID:5xqSIwyk0863デフォルトの名無しさん (ワッチョイ 7a26-vQFs)
2023/10/12(木) 06:14:09.61ID:YEvWoXVk0 linuxのファイルディスクリプタの操作に関する質問です。
別デバイスとのシリアル通信制御にselect関数を使用しています。
受信可能かタイムアウトかを判断しているんですが、別デバイスから電文が送られてからselect関数が受信可能を検知するまでに20msほどかかり、その後のreadしたサイズは32ビットほどです。
理想は5ms以内で受信可能を検知してほしいです。
ボーレートは80000bps(カスタム)
システムコールを使っている以上、デバイスドライバ。いじらないと難しいですかね?
別デバイスとのシリアル通信制御にselect関数を使用しています。
受信可能かタイムアウトかを判断しているんですが、別デバイスから電文が送られてからselect関数が受信可能を検知するまでに20msほどかかり、その後のreadしたサイズは32ビットほどです。
理想は5ms以内で受信可能を検知してほしいです。
ボーレートは80000bps(カスタム)
システムコールを使っている以上、デバイスドライバ。いじらないと難しいですかね?
864デフォルトの名無しさん (ワッチョイ 0941-LlOc)
2023/10/12(木) 07:17:12.28ID:oHsanHa80 むむむ
20msは遅いですね 特殊な環境?
20msは遅いですね 特殊な環境?
865デフォルトの名無しさん (ワッチョイ 7a6e-vQFs)
2023/10/12(木) 08:00:06.42ID:YEvWoXVk0866デフォルトの名無しさん (ワッチョイ 7a6e-vQFs)
2023/10/12(木) 08:06:20.25ID:YEvWoXVk0 ちなみにselect置かずに、ノンブロッキングでループでreadした場合も、少しずつreadできるわけではなく、20ms後に送った電文全てがreadで読み取れます
867デフォルトの名無しさん (ワッチョイ 76cf-rRiV)
2023/10/12(木) 08:47:57.58ID:qyteNpVi0 rawモードにしてないとかじゃないの
868デフォルトの名無しさん (ワッチョイ 76cf-rRiV)
2023/10/12(木) 09:10:29.66ID:qyteNpVi0 後は低遅延カーネルが使えるなら使うとか
869デフォルトの名無しさん (ワントンキン MMea-nQTY)
2023/10/12(木) 09:28:19.79ID:aDAtXVNfM そもそもデータは実際どれくらいで到着してんのか確認はしたんだよな?
送信側が20ms毎にしか動いてないかとかその辺も
送信側が20ms毎にしか動いてないかとかその辺も
870デフォルトの名無しさん (アウアウウー Sa39-OOOs)
2023/10/12(木) 10:25:26.89ID:u59ybXeVa871デフォルトの名無しさん (ワッチョイ 7663-Hwqz)
2023/10/12(木) 10:58:22.07ID:ULGeIkC90 どの画面かよく分からなかった
使ってるPCはどうやら9801VMみたいだ
https://twitter.com/16bit_anime/status/1708133347308818759/photo/1
5インチフロッピーなんて、なつかし
https://twitter.com/thejimwatkins
使ってるPCはどうやら9801VMみたいだ
https://twitter.com/16bit_anime/status/1708133347308818759/photo/1
5インチフロッピーなんて、なつかし
https://twitter.com/thejimwatkins
872デフォルトの名無しさん (ワッチョイ b6e6-vQFs)
2023/10/12(木) 11:22:56.30ID:m8bqtWD+0 >>869
それは確認してます。
それは確認してます。
873デフォルトの名無しさん (ワッチョイ b6e6-vQFs)
2023/10/12(木) 11:23:04.80ID:m8bqtWD+0 >>869
それは確認してます。
それは確認してます。
874デフォルトの名無しさん (ワッチョイ 8d25-fCO4)
2023/10/12(木) 12:24:11.74ID:CHwK2zqJ0 >>870
アセンブラスレッドでやれ
アセンブラスレッドでやれ
875デフォルトの名無しさん (ワッチョイ b62e-vQFs)
2023/10/12(木) 17:39:39.42ID:m8bqtWD+0 >>865
200バイト送ってみましたが、検知の時間差はあまりありませんでしたが、read1回で200バイト全部取れました…
200バイト送ってみましたが、検知の時間差はあまりありませんでしたが、read1回で200バイト全部取れました…
876デフォルトの名無しさん (ワッチョイ da79-4iaA)
2023/10/12(木) 21:33:07.79ID:ZXm8+EHB0 ラズパイのスタックがバグってるだけだろ
他の環境でも試したのか?
他の環境でも試したのか?
877デフォルトの名無しさん (ワッチョイ 4677-HisN)
2023/10/13(金) 21:33:40.39ID:9i9XasLe0 パケットサイズ貯まるまで送信しないか
貯まらなくても時間で送信だったかなぁ
貯まらなくても時間で送信だったかなぁ
878デフォルトの名無しさん (ブーイモ MMfa-rRiV)
2023/10/13(金) 21:48:20.10ID:tPyDzWZ1M879デフォルトの名無しさん (ワッチョイ ae5f-iLfk)
2023/10/13(金) 22:00:39.18ID:vGVgbb2n0 1人日5万円くれたら解決してあげるよ
880デフォルトの名無しさん (ワッチョイ c914-cthS)
2023/10/14(土) 01:22:13.59ID:tQyeYAE20 つ5万円
881デフォルトの名無しさん (ワッチョイ 7b5a-VGqS)
2023/10/14(土) 01:23:14.75ID:Z8feDlim0 プロになると、Linux は3回 shutdown しろと言う香具師がいるw
Windows に至っては、
shutdown はダメ、再起動しろってさw
どういうシステムやねんw
Windows に至っては、
shutdown はダメ、再起動しろってさw
どういうシステムやねんw
882デフォルトの名無しさん (ワッチョイ 13ad-Fhx2)
2023/10/14(土) 02:10:30.63ID:BgrcFKKf0 >>862
それ何かの都合でどうしても必要だから NOP にしてあるのでは? まあでも開いてると言えば開いてるな。
とすると2KB未満であの機能が詰め込まれていることになって、余計に凄い感じするわけだが。
まあでも逆アセンブルが出来るのにその文字がソースに入ってなくて、一体どうやっているのかと延々と
プログラムを読んで、確か2バイトに3文字詰め込んでて(f9c0, fa00 の辺り)、当時それを見つけて驚いたな。
初心者だったからね。
それ何かの都合でどうしても必要だから NOP にしてあるのでは? まあでも開いてると言えば開いてるな。
とすると2KB未満であの機能が詰め込まれていることになって、余計に凄い感じするわけだが。
まあでも逆アセンブルが出来るのにその文字がソースに入ってなくて、一体どうやっているのかと延々と
プログラムを読んで、確か2バイトに3文字詰め込んでて(f9c0, fa00 の辺り)、当時それを見つけて驚いたな。
初心者だったからね。
883デフォルトの名無しさん (ワッチョイ 7b27-S8Dy)
2023/10/14(土) 12:58:59.76ID:FvSW4+JI0 3回shutdownは初めて聞いた
3回syncのことかな?
1回目が依頼、2回目が実行、3回目は祈り・・・
3回syncのことかな?
1回目が依頼、2回目が実行、3回目は祈り・・・
884デフォルトの名無しさん (ワッチョイ 13ad-62ca)
2023/10/14(土) 23:20:34.47ID:BgrcFKKf0 2回以上連続syncはやったことないなあ
885881 (ワッチョイ d1e0-VGqS)
2023/10/15(日) 00:37:55.29ID:1GgH9uvV0 スマン。3回shutdown じゃないわ。
3回sync だった
Windows は高速スタートアップがあるから、
shutdownはメモリの内容をSSD に保持するから、復元されてしまうので、
再起動するのが正解らしい
3回sync だった
Windows は高速スタートアップがあるから、
shutdownはメモリの内容をSSD に保持するから、復元されてしまうので、
再起動するのが正解らしい
886デフォルトの名無しさん (ワッチョイ c925-+xaX)
2023/10/15(日) 06:23:13.62ID:RYkKDVjT0 説明がヘタで何言ってるのかわからんが
このスレッドのテーマと関係ないだろ他でやれ
このスレッドのテーマと関係ないだろ他でやれ
887デフォルトの名無しさん (ワッチョイ 1336-8seT)
2023/10/15(日) 21:52:14.34ID:nkdZTM470 一回目の sync に時間がかかるとその間にメモリの書き換えが起きてしまう可能性があるから、二度目の sync をする。ふつうはそこで満足する。どうしても心配ならもう一度 sync するわけだけど、そこまで心配なら別の方法を考えた方がいい。
888デフォルトの名無しさん (ワッチョイ 1379-3b5p)
2023/10/15(日) 21:54:23.57ID:WV6g/2dS0 888888888888888888888888888888888888888
888888う8888888888ん88888888888888888こ88
888888888888888888888888888888888888888
888888う8888888888ん88888888888888888こ88
888888888888888888888888888888888888888
889デフォルトの名無しさん (アウアウウー Sadd-f0fU)
2023/10/16(月) 10:05:31.11ID:kgcCjrnKa CでWindowsのデバドラ描くなら
shutdownが高速スタートアップかそうじゃないかは重要じゃないか
cmd 起動して shutdown -s -t 0 をよくやる
これだけじゃなくて hybernate をあらかじめ off にしておく必要もある
powercfg.exe /hibernate
shutdownが高速スタートアップかそうじゃないかは重要じゃないか
cmd 起動して shutdown -s -t 0 をよくやる
これだけじゃなくて hybernate をあらかじめ off にしておく必要もある
powercfg.exe /hibernate
890デフォルトの名無しさん (ワッチョイ 29b7-S8Dy)
2023/10/17(火) 10:35:23.04ID:QQA0GvA50891デフォルトの名無しさん (ワッチョイ 8b63-iZeJ)
2023/10/17(火) 10:47:53.72ID:+MFXb2Fe0 祈りは聞き届けられました!
892デフォルトの名無しさん (ワッチョイ 9397-Rw6a)
2023/10/17(火) 12:31:38.91ID:y7v373yJ0 三菱UFJ銀行など10金融機関で約250万件の送金が滞った全国銀行データ通信システム(全銀システム)の障害は、各金融機関と同システムをつなぐ機器の容量(メモリー)不足が要因だったことがわかった。機器の更新で処理量が増え、想定の容量を超えてパンクした。事前のテストが不十分だった可能性もあり、検証が求められる。
893デフォルトの名無しさん (ワッチョイ 9397-Rw6a)
2023/10/17(火) 12:35:48.82ID:y7v373yJ0 記事読んでると、素人が作ったのかと思うほど粗雑に感じるが、
単に記事を書いた記者が素人だからかもしれない。
単に記事を書いた記者が素人だからかもしれない。
894デフォルトの名無しさん (ワントンキン MM4b-ELGK)
2023/10/17(火) 13:14:23.15ID:XZGXsIC3M またスレチかよわざとやってんのか?w
895デフォルトの名無しさん (アウアウウー Sadd-f0fU)
2023/10/17(火) 14:30:57.88ID:vCPpyEw2a ルーターのNATテーブルが貧弱で
定期的に再起動しないといけないルーターがあったのを思い出した
定期的に再起動しないといけないルーターがあったのを思い出した
896デフォルトの名無しさん (ワッチョイ 0bc2-T9H3)
2023/10/20(金) 15:45:46.46ID:Ipe4ElpV0 それなんてcorega?
ってフレーズも懐かしい・・・。
ってフレーズも懐かしい・・・。
897デフォルトの名無しさん (ワッチョイ e95f-pCU2)
2023/10/20(金) 15:48:07.37ID:v1uIJG0f0 最近じゃ組み込み系もPythonになってるらしいな
898デフォルトの名無しさん (ワッチョイ 13ad-62ca)
2023/10/20(金) 18:19:30.36ID:Zfs7dH680 初耳だ
899デフォルトの名無しさん (ワッチョイ 13ad-62ca)
2023/10/20(金) 18:19:46.73ID:Zfs7dH680 初耳だ
900デフォルトの名無しさん (ラクッペペ MMeb-BOBA)
2023/10/20(金) 19:00:07.60ID:OBgHVD6WM ArduinoとかはまだC/C++が使われているけどRaspberryPiあたりではPythonが使われている
901デフォルトの名無しさん (ワッチョイ c134-eijK)
2023/10/20(金) 20:37:45.65ID:iiycX8pJ0 ラズパイが組み込みって言われてもなぁ
902デフォルトの名無しさん (ワッチョイ 8b63-iZeJ)
2023/10/20(金) 20:52:13.36ID:WNS0tsmN0 コンパクトなバイナリーが作れるんだろうか
それともライブラリーが別途必要?
それともライブラリーが別途必要?
903デフォルトの名無しさん (ワッチョイ 2bb6-AzOG)
2023/10/20(金) 22:48:36.74ID:gDJgEYng0 Cでつくったもので自慢のものある?
904デフォルトの名無しさん (ワッチョイ ddf0-5RLD)
2023/10/21(土) 12:56:21.39ID:Auba50wB0 ラズパイの話するならPicoか否か書けよ
905デフォルトの名無しさん (ワッチョイ 7a79-Idv/)
2023/10/21(土) 13:34:03.99ID:ifbOBJO10 ラズパイの話するな
906デフォルトの名無しさん (ワッチョイ 1934-egvn)
2023/10/21(土) 13:40:58.48ID:m23W7dra0907デフォルトの名無しさん (ワントンキン MM8a-xqvO)
2023/10/21(土) 21:29:19.14ID:t2gg/cweM 作ったものは数々あるが、
自慢できるものはない
自慢できるものはない
908デフォルトの名無しさん (ワッチョイ 9946-5z4m)
2023/10/21(土) 22:19:05.57ID:9n8k9yEZ0 恥の多いプログラムを作って来ました。
909デフォルトの名無しさん (アウアウウー Sa09-6i8i)
2023/10/22(日) 11:30:49.85ID:GXjFDCr1a そもそも業務で造ったものは守秘義務あるからな
910デフォルトの名無しさん (ワッチョイ 7a79-Idv/)
2023/10/22(日) 12:04:50.59ID:7Lbl94Rb0 >>908
プログラマー失格やな!
プログラマー失格やな!
911デフォルトの名無しさん (ワッチョイ d663-iKuA)
2023/10/22(日) 12:08:40.64ID:+M4dXZ790 作っていて、恥ずかしさを感じないとすれば、それこそ失格だ
人は失敗の中から多くを学ぶ
人は失敗の中から多くを学ぶ
912デフォルトの名無しさん (スッップ Sd9a-ilqh)
2023/10/22(日) 12:41:16.58ID:WtUZjflvd 恥とかそんなのとは違う
ビジネスとはスピードと品質のトレードオフ
そのバランスを考えられないのがプロとして恥
ビジネスとはスピードと品質のトレードオフ
そのバランスを考えられないのがプロとして恥
913デフォルトの名無しさん (ワッチョイ dd14-PKJr)
2023/10/22(日) 12:41:36.43ID:DsuvifSY0914デフォルトの名無しさん (ワッチョイ 7aad-CfcT)
2023/10/22(日) 13:27:44.71ID:lT9uYjte0915デフォルトの名無しさん (ワッチョイ 7a79-Idv/)
2023/10/22(日) 13:30:41.44ID:7Lbl94Rb0 自分で調べろよそれぐらい…お前もプログラマー失格やな!
916デフォルトの名無しさん (ワッチョイ 5d01-iKuA)
2023/10/22(日) 19:09:03.13ID:1z8BeiKk0 生まれてすみません
917デフォルトの名無しさん (ワッチョイ d663-iKuA)
2023/10/22(日) 19:19:12.31ID:+M4dXZ790 いいってことよ
918デフォルトの名無しさん (ワイーワ2 FF62-6i8i)
2023/10/24(火) 16:01:52.72ID:ju9L4gE1F おかえり
919デフォルトの名無しさん (ワッチョイ ba7c-Habm)
2023/10/26(木) 00:49:54.03ID:89nTklyv0 C23でC11ぶりに更新ってC標準化委員会(?)だかはサボり過ぎじゃねーか。
C++なみとは言わんが5年ぐらいごとに見直せや。
nullptrとか入るの遅過ぎる。
deferも無いとかアホすぎる。
C++なみとは言わんが5年ぐらいごとに見直せや。
nullptrとか入るの遅過ぎる。
deferも無いとかアホすぎる。
920デフォルトの名無しさん (ワッチョイ 7a79-Idv/)
2023/10/26(木) 02:57:54.97ID:q3UKhsX80 いつまでも未完成のサグラダファミリアみたいなC++とは違ってCは生まれた時から完成してるから
後々機能追加したところでそいつの自己満でしかない
未完成のC++から逆輸入されて良かったことなんて行コメント程度しかない
後々機能追加したところでそいつの自己満でしかない
未完成のC++から逆輸入されて良かったことなんて行コメント程度しかない
921デフォルトの名無しさん (スフッ Sd9a-dytz)
2023/10/26(木) 08:37:00.27ID:FkoAeS+Vd コンパイラがC11のgets_s()関数に対応してないんですが、どうすればいいですか?
922デフォルトの名無しさん (スフッ Sd9a-dytz)
2023/10/26(木) 08:37:12.14ID:FkoAeS+Vd コンパイラがC11のgets_s()関数に対応してないんですが、どうすればいいですか?
923デフォルトの名無しさん (ワッチョイ dd14-PKJr)
2023/10/26(木) 09:02:33.67ID:nJ6kaeWr0 あきら🍈
924デフォルトの名無しさん (スフッ Sd9a-9f78)
2023/10/26(木) 09:08:02.65ID:FkoAeS+Vd >>923 あきらめてvisual studioでgets_s()関数を使えていますが、vscodeの普段使っているコンパイラでは
使えません
使えません
925デフォルトの名無しさん (スフッ Sd9a-9f78)
2023/10/26(木) 09:08:14.78ID:FkoAeS+Vd >>923 あきらめてvisual studioでgets_s()関数を使えていますが、vscodeの普段使っているコンパイラでは
使えません
使えません
926はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 8e3e-exru)
2023/10/26(木) 09:11:27.20ID:oN20rU1J0 自分で書いたってそんなに時間はかからんだろう。
行がバッファより長いときや引数が条件を満たさないときに
制約ハンドラを呼ぶってだけだぞ。
行がバッファより長いときや引数が条件を満たさないときに
制約ハンドラを呼ぶってだけだぞ。
927デフォルトの名無しさん (スフッ Sd9a-9f78)
2023/10/26(木) 09:13:48.45ID:FkoAeS+Vd >>926 結局gets()関数の代用はfgets()しかないというこですね
928デフォルトの名無しさん (ワッチョイ d663-iKuA)
2023/10/26(木) 09:38:07.39ID:G4ruVh0t0 自分で作れよ
Cってそういうもんだ
Cってそういうもんだ
929デフォルトの名無しさん (スフッ Sd9a-9f78)
2023/10/26(木) 10:11:10.35ID:FkoAeS+Vd >>928 自分で書きました
930デフォルトの名無しさん (スッップ Sd9a-Habm)
2023/10/26(木) 11:50:48.14ID:ZES507rzd >>920
そんなんだからリーナスだってぶち切れるんだぞ。
そんなんだからリーナスだってぶち切れるんだぞ。
931デフォルトの名無しさん (スッップ Sd9a-SL8W)
2023/10/26(木) 13:16:49.71ID:62xlwgird winでguiアプリ作る時とかCランタイムなんて全く使わないでしよ
今更Cで作るかは置いといて
今更Cで作るかは置いといて
932デフォルトの名無しさん (ワッチョイ f969-Dq0e)
2023/10/26(木) 13:20:48.32ID:S8nCpIo20 (σ・∀・)σゲッツ!!
933デフォルトの名無しさん (ワッチョイ d6ab-OCAv)
2023/10/26(木) 14:24:42.99ID:Qn92XRBA0 文字列周りのあれこれは Cランタイムのお世話も併用することが
934デフォルトの名無しさん (スフッ Sd9a-Cy5w)
2023/10/26(木) 15:12:00.43ID:ES29OdTad TCHAR無視でASCIIzしか使わないならいけるかな
memcpyとかmallicとかも普通に使えるしな
TCHARのUNICODE版の文字列処理ってもうCランタイムと言うのは無理ありそう
末尾にに_s付いたのとか先頭にl付いたのとか
もう亜種増え過ぎで覚えられんくなった
あれはCランタイムじゃなくてwin32apiだわ
memcpyとかmallicとかも普通に使えるしな
TCHARのUNICODE版の文字列処理ってもうCランタイムと言うのは無理ありそう
末尾にに_s付いたのとか先頭にl付いたのとか
もう亜種増え過ぎで覚えられんくなった
あれはCランタイムじゃなくてwin32apiだわ
935デフォルトの名無しさん (ワッチョイ 8e5f-ANn9)
2023/10/26(木) 17:56:31.84ID:SEjxiCyL0 C言語でGC実装したライブラリあったよね
あれって今でも使われてんの?
あれって今でも使われてんの?
937デフォルトの名無しさん (ワッチョイ 8e5f-ANn9)
2023/10/26(木) 21:04:51.64ID:SEjxiCyL0938デフォルトの名無しさん (ワッチョイ f969-Dq0e)
2023/10/26(木) 23:37:41.65ID:S8nCpIo20 Boehm GC使ってるぞ
つうかUnityのランタイムはBoehm GCが使われてる
つうかUnityのランタイムはBoehm GCが使われてる
939デフォルトの名無しさん (ワッチョイ f969-Dq0e)
2023/10/26(木) 23:41:25.14ID:S8nCpIo20 Unity使ってるゲームはごまんとあるけど、敢えてGCを切ってるゲームも中には有るかも知れんが、ほとんどのゲームは裏でBoehm GCが動いている
要するに知らないだけで、Boehm GCはメチャクチャ使われてる
無知は罪だなw
要するに知らないだけで、Boehm GCはメチャクチャ使われてる
無知は罪だなw
940デフォルトの名無しさん (ワッチョイ f969-Dq0e)
2023/10/26(木) 23:50:27.25ID:S8nCpIo20 > ほとんどのゲーム
ほとんどのUnity使ったゲームでだな
それと最近UnityのBoehm GCにインクリメンタルGCが追加された
それまではStop The World(STW)のインパクトが凄くて、みんな最後にはなるべくGCが発生しないようにするチューニングが待っていたw
ほとんどのUnity使ったゲームでだな
それと最近UnityのBoehm GCにインクリメンタルGCが追加された
それまではStop The World(STW)のインパクトが凄くて、みんな最後にはなるべくGCが発生しないようにするチューニングが待っていたw
941はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 8e3e-+JM7)
2023/10/27(金) 00:08:08.21ID:heVGcbpM0 Boehm GC はマシンスタックも走査するようなデザインだからアーキテクチャに依存する部分がいっぱいあるし、メンテナンスもし続けないとすぐ実情にあわなくなって破綻すると思う。
逆に言えば採用されてちゃんと動いているのはちゃんとメンテナンスされてるからだろう。
それなりに活発に利用も開発もされてると言えるんじゃないか。
プログラミング言語処理系のいくつかで採用事例を見たことはある。
逆に言えば採用されてちゃんと動いているのはちゃんとメンテナンスされてるからだろう。
それなりに活発に利用も開発もされてると言えるんじゃないか。
プログラミング言語処理系のいくつかで採用事例を見たことはある。
942デフォルトの名無しさん (ワッチョイ f969-Dq0e)
2023/10/27(金) 00:26:28.28ID:u2CdPYGW0 今も活発に開発されてるよ
まぁリリースは半年とか年一ぐらいだけどね
まぁリリースは半年とか年一ぐらいだけどね
943デフォルトの名無しさん (ワッチョイ cee7-ANn9)
2023/10/27(金) 11:18:26.71ID:dEbuX89/0 そうなのかUnityすげーな
そもそもUnityがC言語だったのも知らんかったわ
C言語でGUIなゲーム作れるならやってみるわ
ありがとう
そもそもUnityがC言語だったのも知らんかったわ
C言語でGUIなゲーム作れるならやってみるわ
ありがとう
944デフォルトの名無しさん (ワッチョイ cd10-JD/u)
2023/10/27(金) 11:33:41.42ID:9P66tx0i0 ゲームのMOD管理や改造ツール探してると結構間違ってソース配布ページへ飛ばされる。
ファイル拡張子が*.cなトコは無いにしても、*.cppなとこは多いね。
ファイル拡張子が*.cなトコは無いにしても、*.cppなとこは多いね。
945はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 8e3e-exru)
2023/10/27(金) 12:18:24.77ID:heVGcbpM0 >>943
dotNET が Unity の基礎にあるからユーザが使うレイヤでは C# が前提だよ。
ただ、それを実行するランタイムサポートの中には低レイヤ寄りの部分も当然あるし、
そこで Boehm GC が使われているって話。
C で書いたモジュールを呼び出すことは出来るんだけど…。
「C でゲームを作る」のがやりたいなら Unity は全然向いてない。
dotNET が Unity の基礎にあるからユーザが使うレイヤでは C# が前提だよ。
ただ、それを実行するランタイムサポートの中には低レイヤ寄りの部分も当然あるし、
そこで Boehm GC が使われているって話。
C で書いたモジュールを呼び出すことは出来るんだけど…。
「C でゲームを作る」のがやりたいなら Unity は全然向いてない。
946デフォルトの名無しさん (ワッチョイ ddf4-U54k)
2023/10/27(金) 12:22:07.63ID:gE38RsN70 そもそもC言語でGUIゲーム作れるじゃんUnityじゃなくても
947デフォルトの名無しさん (ワッチョイ fade-UUkb)
2023/10/27(金) 13:36:32.37ID:DWeOppJn0 公開して
948デフォルトの名無しさん (ワッチョイ 999f-dytz)
2023/10/27(金) 13:59:41.03ID:CZ4Htjtu0 後悔しました
949デフォルトの名無しさん (ワッチョイ 7aad-iKuA)
2023/10/27(金) 15:35:27.52ID:sXR1+sXw0 航海します
950デフォルトの名無しさん (ワッチョイ c18f-BTDU)
2023/10/27(金) 21:03:53.47ID:nBxrDXuS0 Cでゲームかぁ
面倒くさそう
面倒くさそう
951デフォルトの名無しさん (ワッチョイ d663-iKuA)
2023/10/27(金) 21:16:42.74ID:qIG6QpEs0 Cじゃなくてもめんどくさそうって言い出しそう
952デフォルトの名無しさん (ワッチョイ dd14-PKJr)
2023/10/27(金) 21:30:02.47ID:t+LCPq2M0 Windowsのクロンダイク作ろうぜ
あれならもともとCのはず
あれならもともとCのはず
953デフォルトの名無しさん (ワッチョイ d663-iKuA)
2023/10/27(金) 21:37:13.50ID:qIG6QpEs0 MS-DOSの頃はアマチュアの作ったゲームがたくさんあったな
ゲームメーカーの商品より優秀なのもあったし、
メーカーから訴えられた個人もいたな。
メーカー側が取り下げた様だが、
もしかしたら訴えた事実がなかったかも知れない
その後倒産したという噂を聞いた
Windowsになってからは、VBで作る人が多かった
ゲームメーカーの商品より優秀なのもあったし、
メーカーから訴えられた個人もいたな。
メーカー側が取り下げた様だが、
もしかしたら訴えた事実がなかったかも知れない
その後倒産したという噂を聞いた
Windowsになってからは、VBで作る人が多かった
954はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 8e3e-exru)
2023/10/27(金) 21:44:44.21ID:heVGcbpM0 アマチュアが作っているゲーム作品の数で言えば今のほうがずっと多いと思うが。
955デフォルトの名無しさん (ワッチョイ d663-iKuA)
2023/10/27(金) 22:25:12.50ID:qIG6QpEs0 そうなのか・・・
最近はゲームしてないので知らないんだw
最近はゲームしてないので知らないんだw
956デフォルトの名無しさん (ワッチョイ 7a79-Idv/)
2023/10/27(金) 22:28:08.93ID:M9GgCmOO0 今はvやutuberに媚びたゲーム作れば配信で遊んでくれるから一気にプレイヤー数も増えるよ
957デフォルトの名無しさん (ワッチョイ 81f4-WJPr)
2023/10/28(土) 11:42:50.19ID:vcHM6tqr0 >>953
すっごい適当なことばっかり言うねw
すっごい適当なことばっかり言うねw
958デフォルトの名無しさん (ワッチョイ 5359-g3nS)
2023/10/28(土) 12:43:38.00ID:p7wdBTPe0 >>957
Bio_100%とかタカリスなんて知らないせだいなんだろうな
Bio_100%とかタカリスなんて知らないせだいなんだろうな
959デフォルトの名無しさん (ワッチョイ 199f-CP9B)
2023/10/28(土) 13:20:46.38ID:CS7+IID10 ゲームエンジンもライブラリもろくになかった時代にC言語とアセンブラを駆使して
高レベルなゲームを作れるアマチュアプログラマがたくさんいた
(Unityで作るより高スキルが求められる)という話であって、
アマチュア/インディーズゲームのリリース数が論点というわけじゃないんじゃね?w
高レベルなゲームを作れるアマチュアプログラマがたくさんいた
(Unityで作るより高スキルが求められる)という話であって、
アマチュア/インディーズゲームのリリース数が論点というわけじゃないんじゃね?w
960デフォルトの名無しさん (ワッチョイ 215f-H9h+)
2023/10/28(土) 13:35:13.59ID:t5G+utQT0 1997年あたりにワイヤフレームだけどゴリゴリの3Dで8台で競艇するゲームは当時かなりオーパーツ感あった
波でグラグラゆれたり、あの当時でステージメイキングも確か出来たし、誰か知ってる人おらんじゃろうか
波でグラグラゆれたり、あの当時でステージメイキングも確か出来たし、誰か知ってる人おらんじゃろうか
961デフォルトの名無しさん (ワッチョイ 5351-zW/F)
2023/10/28(土) 14:14:38.32ID:wcF/YB9E0 よそできけよ
962デフォルトの名無しさん (ワッチョイ 937c-cQ99)
2023/10/29(日) 00:56:56.68ID:GrwAVmld0 C言語標準規格、せめて5年毎ぐらいに見直してくれればなぁ。
そしたらとっくにnullptrは入ってただそうし。もしかしたら deferや lambdaも入ってたかもしれん。
そしたらとっくにnullptrは入ってただそうし。もしかしたら deferや lambdaも入ってたかもしれん。
963デフォルトの名無しさん (ワッチョイ 5351-zW/F)
2023/10/29(日) 08:16:14.69ID:d4XtWcMl0 規格に対してまあそういう考えの人がいるのも分かるが、全体としては改定に対しての需要というか声は小さかったってことでしょ
964デフォルトの名無しさん (ワッチョイ 1379-JwVi)
2023/10/29(日) 08:37:00.25ID:x+5RB5aB0 どれも今更すぎていらんわ
そういうの絶対必要って奴はとっくにC言語ではない何かを使ってるでしょ
そういうの絶対必要って奴はとっくにC言語ではない何かを使ってるでしょ
965はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9b3e-g5YV)
2023/10/29(日) 09:22:00.09ID:C0ma4yse0 >>962
C17 がわずかな保守で終わってることから察しなよ。
見直した結果として変更が要らんという判断をしたんだ。
C に defer を入れる意味はない。
提案として出ている以上は欲しいと思う人もいるんだろうけど。
あれは panic とかがあっても後始末するというところが価値なので
そういうのがない C で関数の終わりに後始末したけりゃ関数の終わりに書けばいい。
例外処理も含めて入れるってのだとなおさら無理だと思うし。
いまさらランタイムを分厚くする方向の機能を言語コアに入れるのは賛成を得られるはずがなさそう。
ラムダ式はまだ可能性がなくもなさそうに思うが……
C++ のラムダ式は暗黙のクラス定義の構文糖として定義することで詳細な規定を
大幅に別項目に丸投げ出来ている。
C で理屈をきちんと整理するのはちょっと難しくない?
キャプチャを全く諦めるならあり得そう。
C17 がわずかな保守で終わってることから察しなよ。
見直した結果として変更が要らんという判断をしたんだ。
C に defer を入れる意味はない。
提案として出ている以上は欲しいと思う人もいるんだろうけど。
あれは panic とかがあっても後始末するというところが価値なので
そういうのがない C で関数の終わりに後始末したけりゃ関数の終わりに書けばいい。
例外処理も含めて入れるってのだとなおさら無理だと思うし。
いまさらランタイムを分厚くする方向の機能を言語コアに入れるのは賛成を得られるはずがなさそう。
ラムダ式はまだ可能性がなくもなさそうに思うが……
C++ のラムダ式は暗黙のクラス定義の構文糖として定義することで詳細な規定を
大幅に別項目に丸投げ出来ている。
C で理屈をきちんと整理するのはちょっと難しくない?
キャプチャを全く諦めるならあり得そう。
966デフォルトの名無しさん (ワッチョイ 9b5f-zW/F)
2023/10/29(日) 09:22:16.65ID:+KTUg2vO0 継続メンテナンスが必要なのはだいたいC89の頃のプロダクトだったりするので
C言語自体の規格アップデートはさほど必要とされていないのね
C言語自体の規格アップデートはさほど必要とされていないのね
967はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9b3e-g5YV)
2023/10/29(日) 10:51:27.53ID:C0ma4yse0 モダンな機能が必要なら C++ を使えばいいって言えてしまうってのもあるしな。
C23 は刷新が大きいけど、新しい機能を入れるというよりは
あまりにも駄目すぎるところを (C++ の後追いをする形で) 改良するって感じだし。
C23 は刷新が大きいけど、新しい機能を入れるというよりは
あまりにも駄目すぎるところを (C++ の後追いをする形で) 改良するって感じだし。
C99 からの無名構造体は廃止してほしいねえ、あれでC++との互換が失われた。
構造体にコンストラクタを記述できるようにした方がマシだったと思う…
構造体にコンストラクタを記述できるようにした方がマシだったと思う…
C99 からの無名構造体は廃止してほしいねえ、あれでC++との互換が失われた。
構造体にコンストラクタを記述できるようにした方がマシだったと思う…
構造体にコンストラクタを記述できるようにした方がマシだったと思う…
970デフォルトの名無しさん (ワッチョイ eb63-c8RC)
2023/10/29(日) 15:24:11.31ID:V/yNBYFm0 コンストラクタ用意したら、それはもはやCではない
971はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9b3e-g5YV)
2023/10/29(日) 16:10:21.42ID:C0ma4yse0972デフォルトの名無しさん (ワッチョイ 1379-JwVi)
2023/10/29(日) 17:23:22.94ID:x+5RB5aB0 >>968
Cでtypedef+無名構造体/共用体のペアはstruct tag書式より使われてると思うが
これはstructをいちいち書かされるC固有の仕様の問題であって、C++では最初から型宣言自体のやり方が違う
つまりCの仕様をC++に合わせる意味は無く、C++との互換性はどうでもいい
Cでtypedef+無名構造体/共用体のペアはstruct tag書式より使われてると思うが
これはstructをいちいち書かされるC固有の仕様の問題であって、C++では最初から型宣言自体のやり方が違う
つまりCの仕様をC++に合わせる意味は無く、C++との互換性はどうでもいい
973デフォルトの名無しさん (ワッチョイ d95d-kYJB)
2023/10/29(日) 22:25:46.25ID:ce2BuRgD0 >>965
例外の無いCでのdeferの意味は、単に後処理(デストラクタ)をコンストラクタ(Cではmallocや初期化関数)の直下に書けるという意味がある
関数の下に書けばいいといっても、gotoで飛ばしてんじゃ、プログラミング言語として欠陥が有ると思うよ
goto使うな→エラー処理で使えば綺麗に書けるよ!って、やっぱおかしいだろw
例外の無いCでのdeferの意味は、単に後処理(デストラクタ)をコンストラクタ(Cではmallocや初期化関数)の直下に書けるという意味がある
関数の下に書けばいいといっても、gotoで飛ばしてんじゃ、プログラミング言語として欠陥が有ると思うよ
goto使うな→エラー処理で使えば綺麗に書けるよ!って、やっぱおかしいだろw
974デフォルトの名無しさん (ワッチョイ 1989-FUJr)
2023/10/29(日) 23:50:43.25ID:eMkvRHiW0 defer って分からんのですが、関数単位での atexit() みたいなもの?
975デフォルトの名無しさん (ワッチョイ d95d-kYJB)
2023/10/30(月) 00:11:39.03ID:2SouKz/I0 double* q = malloc(something);
defer { free(q); }
↑これ見れば一目瞭然だな
exitと関数やブロックを抜ける時に発動する
けど、Cは書かれた通りに動くという前提を少し逸脱してんだよね
それでも絶対便利ではある
難しい問題だな
defer { free(q); }
↑これ見れば一目瞭然だな
exitと関数やブロックを抜ける時に発動する
けど、Cは書かれた通りに動くという前提を少し逸脱してんだよね
それでも絶対便利ではある
難しい問題だな
976デフォルトの名無しさん (ワッチョイ 1989-FUJr)
2023/10/30(月) 00:12:01.02ID:hHEGE8Ol0 合ってるよね、うん
それ(他言語の defer 相当機能)って、問題解決にC言語を採用する環境では、OS上のプロセスの切り出し単位の設計、にマッピングすれば済む事ではないのかな?
建設的な議論の参考ネタとして:
perl言語が嫌われた理由の一つに「同じ事をいろんな書き方で書ける」言語設計ポリシーがあって、それは他人が書いたコードをメンテする立場だと「あらゆる書き方に精通してないとメンテできない」デメリットになり
pythonはそれを反面教師として「同じ事はだいたいみんな同じ書き方になるような言語設計を目指す」ポリシーにした、と認識してます
それ(他言語の defer 相当機能)って、問題解決にC言語を採用する環境では、OS上のプロセスの切り出し単位の設計、にマッピングすれば済む事ではないのかな?
建設的な議論の参考ネタとして:
perl言語が嫌われた理由の一つに「同じ事をいろんな書き方で書ける」言語設計ポリシーがあって、それは他人が書いたコードをメンテする立場だと「あらゆる書き方に精通してないとメンテできない」デメリットになり
pythonはそれを反面教師として「同じ事はだいたいみんな同じ書き方になるような言語設計を目指す」ポリシーにした、と認識してます
977デフォルトの名無しさん (ワッチョイ 1989-FUJr)
2023/10/30(月) 00:33:24.74ID:hHEGE8Ol0 ああ、ブロック単位なのね…
とすると、上手なC言語のプログラマー達が習慣的にやってきた方法は以下ですよね:
■実装すべき処理を関数にマッピングするとき(主処理、失敗時処理を)細かく分ける
■関数をイベントハンドラとして「登録する」流儀の ミドルレイヤを書いて、そのミドルシステム上で 実装対象の「意味のある処理単位」を書くよう、プロジェクト単位でコーディングルールを定め、守り&守らせ
■◯◯失敗時には△△を行う、を明確に設計し実装して、それが分かりやすい納入プログラムとする
で解決してきた、と思います。
つまり defer 機能がなくても同じ事をやる手法は既に確立している。
前のレスでの主張と合わせ、defer 機能を追加しないのが正解、と言いたいです
とすると、上手なC言語のプログラマー達が習慣的にやってきた方法は以下ですよね:
■実装すべき処理を関数にマッピングするとき(主処理、失敗時処理を)細かく分ける
■関数をイベントハンドラとして「登録する」流儀の ミドルレイヤを書いて、そのミドルシステム上で 実装対象の「意味のある処理単位」を書くよう、プロジェクト単位でコーディングルールを定め、守り&守らせ
■◯◯失敗時には△△を行う、を明確に設計し実装して、それが分かりやすい納入プログラムとする
で解決してきた、と思います。
つまり defer 機能がなくても同じ事をやる手法は既に確立している。
前のレスでの主張と合わせ、defer 機能を追加しないのが正解、と言いたいです
978デフォルトの名無しさん (ワッチョイ 9b5f-zW/F)
2023/10/30(月) 01:02:35.88ID:tKZ3J0Lw0 breakでいつでもブロックを離脱できればgotoより明確でスムーズでかっこよくdeferっぽいことできるよな
979デフォルトの名無しさん (ワッチョイ 937c-cQ99)
2023/10/30(月) 01:09:19.67ID:SHIqNVOV0 かっこいいかなぁ、、、
980デフォルトの名無しさん (ワッチョイ 1989-FUJr)
2023/10/30(月) 01:25:52.81ID:hHEGE8Ol0 >>978
{int rc=0; do{ ★始め
処理
rc=1; break; ★失敗した
処理
break; ★成功した
} while(0); if(rc) { ★
異常時処理
}} ★終り
とかそういう話?
こういうのを #define で「エセ構文糖」みたいに定義する人もいますよね。(自分はあまり好きじゃない。格好悪いと思う)
C言語用の単体テストフレームワークで unity ってのがあります。unity ではテストコード内で 独自の try ~ catch 風文法を書けるのですが、それがまさに (setjmp longjmp も使って) #define でエセ構文糖風に実装してました。需要があれば再度調べてここで概要報告しますw
{int rc=0; do{ ★始め
処理
rc=1; break; ★失敗した
処理
break; ★成功した
} while(0); if(rc) { ★
異常時処理
}} ★終り
とかそういう話?
こういうのを #define で「エセ構文糖」みたいに定義する人もいますよね。(自分はあまり好きじゃない。格好悪いと思う)
C言語用の単体テストフレームワークで unity ってのがあります。unity ではテストコード内で 独自の try ~ catch 風文法を書けるのですが、それがまさに (setjmp longjmp も使って) #define でエセ構文糖風に実装してました。需要があれば再度調べてここで概要報告しますw
981はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9b3e-g5YV)
2023/10/30(月) 09:24:19.57ID:I7fISnX+0 >>975
Go の defer に倣うなら defer 文に書けるのは関数かメソッドの呼出し。
(式一般、文一般を書けるわけではない。)
呼出しは関数の末尾だが引数は書いてある場所で評価されるというルール。
C 風の文法で書くなら
double* q = malloc(something);
defer free(q);
q=NULL;
return;
というように書いても malloc した場所はちゃんと free されることになる。
このルールのおかげで前準備と後始末を近い場所に書けて「対応関係は」一目瞭然と言えるが、
そのために変則的な評価規則が入ってるわけ。
式単位での順序が入れ替わるってだけじゃなくて引数の評価と関数の呼び出しが
分離されるってだいぶん変な仕組みだよな。
Go の defer に倣うなら defer 文に書けるのは関数かメソッドの呼出し。
(式一般、文一般を書けるわけではない。)
呼出しは関数の末尾だが引数は書いてある場所で評価されるというルール。
C 風の文法で書くなら
double* q = malloc(something);
defer free(q);
q=NULL;
return;
というように書いても malloc した場所はちゃんと free されることになる。
このルールのおかげで前準備と後始末を近い場所に書けて「対応関係は」一目瞭然と言えるが、
そのために変則的な評価規則が入ってるわけ。
式単位での順序が入れ替わるってだけじゃなくて引数の評価と関数の呼び出しが
分離されるってだいぶん変な仕組みだよな。
982デフォルトの名無しさん (アウアウウー Sad5-g+2W)
2023/10/30(月) 10:15:21.12ID:xnp7PI6ya >>973-974
Nim の defer 良いよね
Nim の defer 良いよね
983デフォルトの名無しさん (アウアウウー Sad5-g+2W)
2023/10/30(月) 10:15:44.95ID:xnp7PI6ya >>973-974
Nim の defer 良いよね
Nim の defer 良いよね
984デフォルトの名無しさん (ワッチョイ 1989-FUJr)
2023/10/30(月) 10:17:23.47ID:hHEGE8Ol0 正常ルートは終わる時 q==NULL なのに、その前の
defer free(q) したときのqの値でfree() するんですね
うへぇ…
誤解釈してバグ出しそう
てかこれは、ひねり出された意地悪サンプルで…実際のプログラミングでdefer式が効果的となる使用例ではない、ですよね?
defer free(q) したときのqの値でfree() するんですね
うへぇ…
誤解釈してバグ出しそう
てかこれは、ひねり出された意地悪サンプルで…実際のプログラミングでdefer式が効果的となる使用例ではない、ですよね?
985デフォルトの名無しさん (ワッチョイ 1989-FUJr)
2023/10/30(月) 10:34:41.68ID:hHEGE8Ol0 この話で改めてあぶり出されるのは、
あるプログラミング言語を深く理解して「書ける」「読める」ようになることには「自分なりの 上手なエラー処理の書き方 を探して身に付ける」事が含まれる、って事ですよね。
それは人類の資産なんだけど、実際の存在場所は あまたのプログラマー達の脳内 であって、一朝一夕に書き換えられる物じゃない。
だから言語仕様を改定して新機能を足すのは、新言語を作る時よりは慎重になる必要がある、と解釈しました
あるプログラミング言語を深く理解して「書ける」「読める」ようになることには「自分なりの 上手なエラー処理の書き方 を探して身に付ける」事が含まれる、って事ですよね。
それは人類の資産なんだけど、実際の存在場所は あまたのプログラマー達の脳内 であって、一朝一夕に書き換えられる物じゃない。
だから言語仕様を改定して新機能を足すのは、新言語を作る時よりは慎重になる必要がある、と解釈しました
986デフォルトの名無しさん (スプッッ Sd73-cQ99)
2023/10/30(月) 11:45:07.40ID:Ccd5zWuDd nullptrはもっと早く入れるべきだった。
987はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9b3e-g5YV)
2023/10/30(月) 11:57:46.53ID:I7fISnX+0 >>984
Go でどうだか知らんけど C に defer を入れたとしたらというテーマでの話なら
malloc と free を対応づけるのは考えられる用途の筆頭でしょ。
逆にこういう変則的な評価規則を持ち込まないとしたら、
つまり defer 文に書いたものが単に return の直前に評価されるだけということにしたら
途中で書き換えられる可能性が出てきて
前準備と後始末が対応づいているかどうか一目瞭然とはいかなくなる。
どこかしらでなんか汚い感じにはなるよ。
そういう汚さを受け入れてもなお欲しいほどの利便性かというとやっぱり疑問は残る。
汚さを受け入れていいなら goto の汚さを受け入れるのとそんなに差があるとも思えないし。
Go でどうだか知らんけど C に defer を入れたとしたらというテーマでの話なら
malloc と free を対応づけるのは考えられる用途の筆頭でしょ。
逆にこういう変則的な評価規則を持ち込まないとしたら、
つまり defer 文に書いたものが単に return の直前に評価されるだけということにしたら
途中で書き換えられる可能性が出てきて
前準備と後始末が対応づいているかどうか一目瞭然とはいかなくなる。
どこかしらでなんか汚い感じにはなるよ。
そういう汚さを受け入れてもなお欲しいほどの利便性かというとやっぱり疑問は残る。
汚さを受け入れていいなら goto の汚さを受け入れるのとそんなに差があるとも思えないし。
988デフォルトの名無しさん (ワッチョイ d95d-kYJB)
2023/10/30(月) 12:40:32.59ID:2SouKz/I0 >>980
意地でもgoto使いたくない時にはそれでもいいけど、それの欠点は中にswitch文を書くと、breakで抜けれるのはswitch文からだけになる事だな
自分ではwhileを抜けた気になって実は抜けてないという、微妙なバグを生み出す可能性があるなw
意地でもgoto使いたくない時にはそれでもいいけど、それの欠点は中にswitch文を書くと、breakで抜けれるのはswitch文からだけになる事だな
自分ではwhileを抜けた気になって実は抜けてないという、微妙なバグを生み出す可能性があるなw
989デフォルトの名無しさん (ワッチョイ 1989-FUJr)
2023/10/30(月) 16:19:29.96ID:hHEGE8Ol0990デフォルトの名無しさん (ワッチョイ 13ad-c8RC)
2023/10/30(月) 16:52:46.78ID:bW5EQkS/0 >>989
適当だけどこういうことでは?
{int rc=0; do{ ★始め
処理1
siwtch(x){
case 0: rc=1; break; ★失敗した ※siwtchから抜けるだけでwhileからは抜け出せていない
case 1: break; ★成功だけど処理2は実行しない ※siwtchから抜けるだけでwhileからは抜け出せていない
case 2: break; ★成功で処理2も行う
}
処理2
break; ★成功した
} while(0); if(rc) { ★
異常時処理
}} ★終り
適当だけどこういうことでは?
{int rc=0; do{ ★始め
処理1
siwtch(x){
case 0: rc=1; break; ★失敗した ※siwtchから抜けるだけでwhileからは抜け出せていない
case 1: break; ★成功だけど処理2は実行しない ※siwtchから抜けるだけでwhileからは抜け出せていない
case 2: break; ★成功で処理2も行う
}
処理2
break; ★成功した
} while(0); if(rc) { ★
異常時処理
}} ★終り
991デフォルトの名無しさん (ワッチョイ 1989-FUJr)
2023/10/30(月) 16:58:35.91ID:hHEGE8Ol0 >>990
おっしゃる事、分かります。具体的に書いてくれてありがとうm(_ _)m
おっしゃる事、分かります。具体的に書いてくれてありがとうm(_ _)m
992デフォルトの名無しさん (ワッチョイ 1989-FUJr)
2023/10/30(月) 17:01:08.71ID:hHEGE8Ol0 >>987
はい…
mallocとfreeを確保と解放の例とするのは異論ないです
deferより一つ上位の話は、エラー処理をバグなく、分かりやすく書こうというテーマだ、で合ってますよね。
その上で、deferがないとこんな面倒なのが、deferがあるとこんなに分かりやすい 例がよいのです
確保と解放の書き方検討で、私が検討するのは例えばこんな感じです:
■(1)ある意味のある処理単位が、リソースを 2個以上使う 場合を考えると、1個の場合より検討がよく進む。特に、
■■(1a)初期化が途中で失敗した場合、すでに確保が成功してしまった資源をどう解放するか
■■(1b)資源の変数は最初に、確保処理のエラー戻り値と同じ値で初期化をすると、スッキリする事が多い
■(2)正常ルートでの解放と、エラールートでの解放で、コードを共通とするか、別とするか。
■■(2a)確保、主、開放 の処理を、同じ「関数」で書くのと、別の「関数」に分けるのはどちらが良いか
■■(2b)「goto エラーラベル;」を好きか嫌いか
■(3)プログラマーによる解放処理の前の 「if(確保済みなら)」のガードが、必要なもの(fcloseなど)と、不要なもの(free)があるので、マニュアル確認は要る
もっと語りたいけど、レス分けます、というか時間を置きます。あまり一人が語りすぎると、嫌がる人もいますよね
はい…
mallocとfreeを確保と解放の例とするのは異論ないです
deferより一つ上位の話は、エラー処理をバグなく、分かりやすく書こうというテーマだ、で合ってますよね。
その上で、deferがないとこんな面倒なのが、deferがあるとこんなに分かりやすい 例がよいのです
確保と解放の書き方検討で、私が検討するのは例えばこんな感じです:
■(1)ある意味のある処理単位が、リソースを 2個以上使う 場合を考えると、1個の場合より検討がよく進む。特に、
■■(1a)初期化が途中で失敗した場合、すでに確保が成功してしまった資源をどう解放するか
■■(1b)資源の変数は最初に、確保処理のエラー戻り値と同じ値で初期化をすると、スッキリする事が多い
■(2)正常ルートでの解放と、エラールートでの解放で、コードを共通とするか、別とするか。
■■(2a)確保、主、開放 の処理を、同じ「関数」で書くのと、別の「関数」に分けるのはどちらが良いか
■■(2b)「goto エラーラベル;」を好きか嫌いか
■(3)プログラマーによる解放処理の前の 「if(確保済みなら)」のガードが、必要なもの(fcloseなど)と、不要なもの(free)があるので、マニュアル確認は要る
もっと語りたいけど、レス分けます、というか時間を置きます。あまり一人が語りすぎると、嫌がる人もいますよね
993デフォルトの名無しさん (ワッチョイ 1989-FUJr)
2023/10/30(月) 17:09:39.89ID:hHEGE8Ol0 てかキータで書いて、皆さんの意見を聞いて修正していったり、してみようかな…
994デフォルトの名無しさん (ワッチョイ 1989-FUJr)
2023/10/30(月) 17:17:16.34ID:hHEGE8Ol0 とりあえず次スレ立てました。即死防止の保守書き込みは要らない、で良いのかな?
C言語なら俺に聞け 162
https://mevius.5ch.net/test/read.cgi/tech/1698653580/
C言語なら俺に聞け 162
https://mevius.5ch.net/test/read.cgi/tech/1698653580/
995デフォルトの名無しさん (スプッッ Sd73-cQ99)
2023/10/30(月) 18:42:32.58ID:Ccd5zWuDd996はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9b3e-g5YV)
2023/10/30(月) 22:27:42.13ID:I7fISnX+0 Golang の defer はあくまで関数の終わりまで遅延させる (ブロックの終わりではない) ので
呼び出される defer の個数が動的になりうるんだな。
https://go.dev/tour/flowcontrol/13
この挙動も C には馴染まなさそうだな。
呼び出される defer の個数が動的になりうるんだな。
https://go.dev/tour/flowcontrol/13
この挙動も C には馴染まなさそうだな。
997デフォルトの名無しさん (ワッチョイ 1379-JwVi)
2023/10/30(月) 22:37:34.66ID:n3VNJX5I0 俺は某画像ライブラリのリソーストラッカーみたいに開放が必要な物を全部紐付けて後で開放する仕掛けを使ってる
まあCには何にも縛られないのが良いんだし好きにしたらいいよ
まあCには何にも縛られないのが良いんだし好きにしたらいいよ
998デフォルトの名無しさん (ワッチョイ d95d-kYJB)
2023/10/30(月) 23:34:44.67ID:2SouKz/I0 構文的にはC#っぽく
using (double* p = malloc(...); free(p)) {
p を使う
}
でも良いかも知れない
これだと1ループのforに似ててCに良く馴染むな
もちろんreturnとかexitで脱出してもfreeは呼ばれる
using (double* p = malloc(...); free(p)) {
p を使う
}
でも良いかも知れない
これだと1ループのforに似ててCに良く馴染むな
もちろんreturnとかexitで脱出してもfreeは呼ばれる
999デフォルトの名無しさん (ワントンキン MM53-wL8D)
2023/10/31(火) 10:19:02.32ID:i2gAy2CGM そんなもんが規格に入るわけないんだから無駄話だろ
1000デフォルトの名無しさん (ワントンキン MM53-wL8D)
2023/10/31(火) 10:19:24.66ID:i2gAy2CGM うめ
10011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 192日 20時間 14分 5秒
新しいスレッドを立ててください。
life time: 192日 20時間 14分 5秒
10021002
Over 1000Thread 5ちゃんねるの運営はUPLIFT会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《UPLIFT会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
4 USD/mon. から匿名でご購入いただけます。
▼ UPLIFT会員登録はこちら ▼
https://uplift.5ch.net/
▼ UPLIFTログインはこちら ▼
https://uplift.5ch.net/login
運営にご協力お願いいたします。
───────────────────
《UPLIFT会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
4 USD/mon. から匿名でご購入いただけます。
▼ UPLIFT会員登録はこちら ▼
https://uplift.5ch.net/
▼ UPLIFTログインはこちら ▼
https://uplift.5ch.net/login
レス数が1000を超えています。これ以上書き込みはできません。
ニュース
- 習政権、高市首相への態度硬化 台湾有事発言で連日非難 中国 ★11 [ぐれ★]
- 日本損失1.7兆円に修正 中国渡航自粛の影響試算 [蚤の市★]
- NY円、一時1ユーロ=180円台まで下落…1999年のユーロ導入以来初 [蚤の市★]
- 国内ホテル、既にキャンセルも 訪日客関連業界、事態見守る ★3 [蚤の市★]
- 「どうしようもない」 ため息つくアジアの玄関口 中国の訪日自粛で−福岡市 [蚤の市★]
- 橋下徹氏 外務省幹部の訪中受け「口だけ番長」へ痛烈指摘 「喧嘩は日本の完敗…なんとかっこ悪い日本か」 [冬月記者★]
- 【実況】博衣こよりのえちえち朝こよ🧪 ★2
- 【実況】博衣こよりのえちえち朝こよ🧪
- カカロット、腰痛い
- 結局松本人志ノーダメージじゃん
- 【!?】高市早苗「靖国神社電撃参拝プラン」浮上!これもう戦争だろ… [481941988]
- 今朝も阿佐ヶ谷に住みたくて咽び泣いてる😭
