!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
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 0f63-sFbk)
2023/04/21(金) 14:05:20.18ID:rqj2HSDF0127デフォルトの名無しさん (ワッチョイ 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 便利だからね
オプションで使えなくすることもできたはず
オプションで使えなくすることもできたはず
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【中国外務省】日中関係悪化は高市氏に責任と名指しで非難… [BFU★]
- 外務省局長は無言で厳しい表情…日中の高官協議終了か 高市首相“台湾”発言で中国が強硬対応 発言撤回求めたか…★2 [BFU★]
- 政府、株式の配当など金融所得を高齢者の医療保険料や窓口負担に反映する方針を固めた [バイト歴50年★]
- 小野田紀美・経済安保担当相「何か気に入らないことがあればすぐに経済的威圧をする国への依存はリスク」 [Hitzeschleier★]
- 【維新】吉村知事「中国人観光客だけに頼るビジネスモデル変えていかないといけない」「高市総理の発言は撤回する必要はない」 [Hitzeschleier★]
- 「すごいアイドル出てきた」「かわいすぎる」ラヴィット初登場の美女に視聴者驚き ≠ME櫻井もも [ヴァイヴァー★]
- 中国高官と話す外務省局長の表情、やばい [175344491]
- 中国外務省「日中関係の悪化は高市早苗首相が原因」と名指しで強く非難。キタ━(゚∀゚)━! [153490809]
- 【速報】中国が日中関係悪化は高市氏に責任と名指しで非難 [931948549]
- 日本政府「高市総理の発言は問題ないと伝え、中国総領事のSNS投稿は問題があると中国に伝えました😊」 [931948549]
- ネトウヨ論調決まる「寧ろ迷惑中国人観光客が減ることで日本人の旅行が活性化され経済的には影響ない」 <mark>[ひまわり学級]</mark> [511393199]
- 【んな専🏡】なんG 姫森ルーナ(・o・🍬)総合スレ🏰【ホロライブ▶】
