[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 10/29 23:41 / Filesize : 272 KB / Number-of Response : 1007
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C言語なら俺に聞け 161



1 名前:デフォルトの名無しさん (ワッチョイ 0f63-sFbk) mailto:sage [2023/04/21(金) 14:05:20.18 ID:rqj2HSDF0.net]
!extend:checked:vvvvv:1000:512
(新スレ立ての際上記コマンドを2行書き込んでください)
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
codepad.org/

C17
www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4713.pdf

C11
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
www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
kikakurui.com/x3/X3010-2003-01.html

C FAQ 日本語訳
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

132 名前:デフォルトの名無しさん mailto:sage [2023/05/14(日) 07:12:36.39 ID:YUNKAbGY0.net]
変数のswapって、マシン語に限らずどこででも高い頻度で使うぞ

133 名前:デフォルトの名無しさん mailto:sage [2023/05/14(日) 11:51:05.47 ID:eMKrHX/5d.net]
>>129
つまり
有用な場面を知らないわけだ
レジスタを節約するためでも微妙な高速化のためでもないから

134 名前:デフォルトの名無しさん mailto:sage [2023/05/14(日) 19:49:42.92 ID:9VZQjQ6WM.net]
アトミックのことかな
はちみつ氏のレスは慎重で丁寧だし、噛みつく必要はないだろう

135 名前:デフォルトの名無しさん mailto:sage [2023/05/14(日) 19:54:24.09 ID:B0168DkC0.net]
そもそもアセンブラででも書かない限りある値がレジスタに維持される期間は人間の考えとは異なるんだよなぁ

136 名前:デフォルトの名無しさん (ワッチョイ cf34-TSnC) mailto:sage [2023/05/14(日) 22:22:28.93 ID:YUNKAbGY0.net]
人間の考えw
人情っすか?

137 名前:デフォルトの名無しさん (ワッチョイ cf63-ZkZz) mailto:sage [2023/05/14(日) 23:14:42.36 ID:fNcGY7kH0.net]
レジスター猫

138 名前:デフォルトの名無しさん (ワッチョイ 0310-ZkZz) mailto:sage [2023/05/15(月) 07:45:53.34 ID:wYJ4tfRu0.net]
シュレーディンガーのレジスター猫猫

139 名前:デフォルトの名無しさん (ワッチョイ cf46-1d5q) [2023/05/15(月) 10:53:41.51 ID:Ro1LlfRG0.net]
レンジ猫?

140 名前:デフォルトの名無しさん (ワッチョイ 3302-Cej3) mailto:sage [2023/05/15(月) 11:26:46.74 ID:qSKQiR6e0.net]
猫は電子レンジで乾かせません



141 名前:デフォルトの名無しさん (ワッチョイ ffad-ZkZz) [2023/05/15(月) 11:51:40.11 ID:Bppn4Lb30.net]
じゃあ何なら乾かせるんですか?

142 名前:デフォルトの名無しさん (ラクッペペ MM7f-fulC) mailto:sage [2023/05/15(月) 12:00:56.43 ID:Uo8X26KHM.net]
タオルとドライヤー

143 名前:デフォルトの名無しさん (ワッチョイ ff97-7xmi) mailto:sage [2023/05/15(月) 12:22:52.88 ID:L2eqquJo0.net]
愛情を込めて暖める

144 名前:デフォルトの名無しさん (スプープ Sd1f-Ynfg) mailto:sage [2023/05/15(月) 20:16:31.37 ID:8Cq/OAued.net]
つまんないボケはどうつっこんでもつまんない

145 名前:デフォルトの名無しさん (スプッッ Sd07-zj+H) mailto:sage [2023/05/16(火) 08:51:47.45 ID:gG4dlKgfd.net]
技術ないやつが妬みで荒らしてるだけだからな

146 名前:デフォルトの名無しさん mailto:sage [2023/05/16(火) 15:56:44.97 ID:mGp2Y9l5a.net]
DJNZがatomicだと思っていた時期が私にもありました

147 名前:デフォルトの名無しさん (ワッチョイ c301-Np+b) mailto:sage [2023/05/16(火) 20:31:19.40 ID:afLAkRaY0.net]
日本はC言語さえ難しいエンジニアもいるんだよな

148 名前:デフォルトの名無しさん mailto:sage [2023/05/16(火) 20:55:13.02 ID:bTPsQg7Pd.net]
>>137
おお、読み出すまで値が確定しないレジスタ
乱数発生専用レジスタですね
わかります

149 名前:デフォルトの名無しさん (スプッッ Sd1f-zj+H) mailto:sage [2023/05/17(水) 07:09:46.32 ID:s9zxu+xkd.net]
異分野からきた地頭のいい人がCも使えるようになると
おまえら仕事取られるぞ

150 名前:デフォルトの名無しさん (ワッチョイ 0310-ZkZz) mailto:sage [2023/05/17(水) 07:46:38.82 ID:BUhbFeo00.net]
外国人労働者が来たら、AI化されたら、昔から色んな業種で何度も言われてるわな。



151 名前:デフォルトの名無しさん mailto:sage [2023/05/17(水) 13:27:27.48 ID:hbqXME+r0.net]
いろんな分野で確かに仕事を奪われている

152 名前:デフォルトの名無しさん mailto:sage [2023/05/17(水) 16:15:47.93 ID:ZA2j/mjnd.net]
> AI化されたら

ここム板だよな

153 名前:デフォルトの名無しさん mailto:sage [2023/05/17(水) 19:23:47.84 ID:HVYpBx2Dd.net]
>>148
恐れるに足らん
こっちは守護だぞ幕府が後ろ盾だぞ

154 名前:デフォルトの名無しさん (スププ Sdea-i/qU) [2023/05/24(水) 06:34:08.09 ID:TwXy7dIZd.net]
前回のこのスレの投稿で関数名に()をつける場合があるという意味がわかった。#undefを使わなく
てもいいように関数に()をつける場合がある。

ans = (sqr)(n);
という具合に。

155 名前:デフォルトの名無しさん (ワッチョイ 6746-3pER) [2023/05/24(水) 07:05:53.93 ID:ea8bFP4r0.net]
void laugh(笑);

156 名前:デフォルトの名無しさん (ワンミングク MMbf-4z7j) mailto:sage [2023/05/31(水) 15:57:04.61 ID:fnFbD7jZM.net]
誰か笑いをとめてやってくれ

157 名前:デフォルトの名無しさん mailto:sage [2023/05/31(水) 16:11:38.59 ID:ck+UIxN/0.net]
abort();

158 名前:デフォルトの名無しさん mailto:sage [2023/05/31(水) 18:02:31.09 ID:vB7s5b6d0.net]
GotoBlueScreen();

159 名前:デフォルトの名無しさん mailto:sage [2023/05/31(水) 18:16:26.97 ID:i7J0Z4vH0.net]
__halt();

160 名前:デフォルトの名無しさん mailto:sage [2023/05/31(水) 21:00:07.40 ID:ck+UIxN/0.net]
void a() __attribute__((naked));
void a()
{
asm(" halt");
}
int main(void)
{
a();
}



161 名前:デフォルトの名無しさん mailto:sage [2023/05/31(水) 21:19:20.18 ID:soKXUOD/0.net]
[STOP]+[A]

162 名前:デフォルトの名無しさん [2023/06/03(土) 19:40:08.42 ID:hD2oGIQP0.net]
文字列処理用のリングバッファ作ったんですが、同じ処理をint型でも行いたいです。
当たり前ですが、同じプログラムをint型に変えればできると思います。
ですが、処理自体は同じなので、共通化できないものでしょうか?

C++ではテンプレート関数を使えばできるようですが、純粋なC言語では難しいですか?

163 名前:蟻人間 mailto:sage [2023/06/03(土) 19:48:40.44 ID:Pce1Bw+fd.net]
>>161
#defineと#includeを使えばできるよ。

164 名前:デフォルトの名無しさん (ワッチョイ 916e-aXLw) mailto:sage [2023/06/03(土) 20:14:57.23 ID:SlTHxzvh0.net]
俺的には#includeよりtypedefかな

165 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ c23e-N/Lw) mailto:sage [2023/06/03(土) 20:15:08.00 ID:uQ0tYGRP0.net]
もしくは void* と型の大きさにする形で型を消去してしまう (たとえば qsort のように) という選択肢もある。
間違った使い方をしても (型が消えているので) コンパイル時にエラーとして検出しづらくなる可能性があるけど。

まあどちらにしても C でやるのは煩雑。
使う型が二種類だけであることがわかっている状況だと仮定してよいなら
共通化しようとするよりもコピペしたほうがかえって楽というのもよくあること。

166 名前:>>161 mailto:sage [2023/06/03(土) 20:37:32.54 ID:hD2oGIQP0.net]
勉強目的なので、試してみます。

#defineでやるやり方は何となくわかるのですが、#includeよりtypedefとはどういうことですか?
void*もよくわからないので、こっちはまだ早そうです。

167 名前:デフォルトの名無しさん mailto:sage [2023/06/03(土) 20:59:14.37 ID:SlTHxzvh0.net]
>>165

//fig1
#define ITERATOR int*
ITERATOR enq, deq;

//fig2
typedef int* ITERATOR;
ITERATOR enq, deq;

fig1ではdeqがポインタではなくなってしまうが
fig2ならこうした問題が起こらない

168 名前:163 mailto:sage [2023/06/04(日) 12:47:37.50 ID:u2u7Kc0T0.net]
あ、言い間違えてんの今気がついたw
- #include
+ #define

すまんこ

169 名前:デフォルトの名無しさん mailto:sage [2023/06/04(日) 21:00:21.62 ID:/SPLhkOjM.net]
リストなどのコンテナ実装でデータの実態へはvoid*でポインタ指定すれば何でも格納できる
基本的にこれで汎用化できる

170 名前:デフォルトの名無しさん mailto:sage [2023/06/04(日) 21:37:23.80 ID:wPljDWped.net]
リングバッファくらい簡単なのはその都度作ればいいんじゃないと思う
細かく改良していけばスキルアップになるぞ



171 名前:デフォルトの名無しさん mailto:sage [2023/06/04(日) 22:10:36.35 ID:AabPy4gc0.net]
初心者質問失礼します

scanf_sやfopen_sなどの関数が含まれたソースをgcc 9.4.0でコンパイルすると失敗するのですがこれは仕様でしょうか?
これらの関数はC11で定義されていますが基本的にMSVCでしか使えないという感じでしょうか?

172 名前:デフォルトの名無しさん mailto:sage [2023/06/04(日) 22:33:01.16 ID:ktuQYTFv0.net]
やれやれ…初心者質問あるあるだけ回答しておこうか
「失敗する」とは一体をもって判断したのか。そもそも処理系から何かメッセージは出ていなかったのか。初心者と自覚するなら質問に主観は一切不要だからそれを書きなよ

173 名前:蟻人間 mailto:sage [2023/06/04(日) 22:34:54.92 ID:iTf1qDcyd.net]
-std=c11

174 名前:はちみつ餃子 mailto:sage [2023/06/04(日) 23:06:52.44 ID:MHoxWKtY0.net]
>>170
C11 で規定されているけれど仕様としてはオプショナルなもの。
つまり処理系はそれを提供しなくても仕様準拠を名乗れる。

ただし、提供するならばマクロ __STDC_LIB_EXT1__ も定義しておくことになってる。
そんで使うときにはヘッダのインクルード前に __STDC_WANT_LIB_EXT1__ を define しておく必要がある。

MSVC は C11 が発行される前から scanf_s などを提供していた
(というかマイクロソフトがこれらを標準に入れるように働きかけていた)
のでバージョンによっては __STDC_WANT_LIB_EXT1__ を定義するという手順を介さなくても使えるのかもしれない。
私は MSVC を使ってないのでよう知らん。

175 名前:デフォルトの名無しさん mailto:sage [2023/06/04(日) 23:52:26.98 ID:AabPy4gc0.net]
>>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

176 名前:デフォルトの名無しさん mailto:sage [2023/06/04(日) 23:59:42.49 ID:AabPy4gc0.net]
>>172
>>173

ありがとうございます!
アドバイスを参考に以下のように変更しましたが174と同様のエラーが出ます(T_T)

コマンドを以下のように変更
gcc -std=c11 sample.c -o sample.out

ソースファイルの先頭に以下を記述
#define __STDC_WANT_LIB_EXT1__ 1

177 名前:デフォルトの名無しさん [2023/06/05(月) 00:18:53.38 ID:6AEqxzj80.net]
なんか人気のfopen_s関数について
https://blog.ef67daisuki.club/2017/04/%E3%81%AA%E3%82%93%E3%81%8B%E4%BA%BA%E6%B0%97%E3%81%AEfopen_s%E9%96%A2%E6%95%B0%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/

178 名前:デフォルトの名無しさん mailto:sage [2023/06/05(月) 10:37:04.03 ID:ejs/048Ga.net]
legacy_stdio_definitions.lib

179 名前:デフォルトの名無しさん mailto:sage [2023/06/05(月) 18:03:48.62 ID:7VR84C5ud.net]
fopen_sって初めて知った
MS社内だけで通じる方言って感じでイヤな感じだな
fopenで書くようにしたほうがいい

180 名前:デフォルトの名無しさん mailto:sage [2023/06/05(月) 18:11:20.30 ID:7VR84C5ud.net]
だいたいwinAPIはファイルを開く時はCreateFile()系を標準にする方針だと思ってたんだが
なんでfopenのパチモノを作るのか理解に苦しむ



181 名前:デフォルトの名無しさん mailto:sage [2023/06/05(月) 18:32:16.74 ID:OwVyUwPA0.net]
世界征服に決まってるだろ

182 名前:蟻人間 mailto:sage [2023/06/05(月) 18:47:37.75 ID:Fd2GxywXd.net]
CreateFile はファイルロックの制御が細かくできたり、ファイルがすでに存在する場合の
処理や、セキュリティなどを考慮した処理など細かい設定ができる。
WindowsではfopenはCreateFileで実装されてるようだ。

183 名前:デフォルトの名無しさん (ワッチョイ 82ad-rilk) mailto:sage [2023/06/05(月) 19:09:52.27 ID:SzwJbur+0.net]
>>179
CreateFileなんかで書いたら移植のとき困るだろ
そもそもプラットフォーム気にせず書けるようにCライブラリとして標準化させようとしているんだし
Windowsは移植性を考慮しないならCreateFile系のほうが柔軟に高度なプログラミングが出来るからCreateFile系使えと言っているだけ

184 名前:デフォルトの名無しさん mailto:sage [2023/06/05(月) 20:35:19.71 ID:ZwQJL2Eg0.net]
APIを使うと毎回特権リングを呼び出すから、
小さい読み書きが多いとオーバーヘッドになる
Cランタイムはバッファを使って特権リングの
呼び出しを減らしている

185 名前:デフォルトの名無しさん mailto:sage [2023/06/05(月) 20:40:56.74 ID:LsGdvfPCd.net]
>>182
標準化しようとするなら引数や戻り値をfopenに似せるべきだ
これじゃ初心者はわざわざerrnoを受け取る変数を作らなければならないんだなと勘違いするだろ

186 名前:デフォルトの名無しさん mailto:sage [2023/06/05(月) 20:52:58.24 ID:SzwJbur+0.net]
>>184
あくまでCライブラリとして標準化
古い関数に仕様を合わせる必要はないべ

>これじゃ初心者はわざわざerrnoを受け取る変数を作らなければならないんだなと勘違いするだろ
仕様を読まない初心者が悪いと思うんだが

187 名前:デフォルトの名無しさん mailto:sage [2023/06/05(月) 20:54:52.49 ID:OwVyUwPA0.net]
委員長、読まなきゃ使えない関数は捨てられてしまうと思います!

188 名前:デフォルトの名無しさん mailto:sage [2023/06/05(月) 20:58:18.67 ID:SzwJbur+0.net]
初めて使う関数なら一度は仕様見ろよ

189 名前:デフォルトの名無しさん mailto:sage [2023/06/05(月) 21:10:47.13 ID:OwVyUwPA0.net]
じゃあ、使う必要が出てきたら読むことにします
当分、読むことなさそう

190 名前:デフォルトの名無しさん (スッププ Sda2-KKRM) mailto:sage [2023/06/05(月) 21:43:17.97 ID:EJphWr1dd.net]
>>185
必要はある
今回のようにfopen_sをfopenに書き換えようとする(または逆)場合に変なミスを誘発する
大した理由もなく戻り値を変更すべきじゃない(またはfopenの名前を使うべきじゃない)



191 名前:デフォルトの名無しさん [2023/06/05(月) 23:26:16.43 ID:wc9Gft1n0.net]
>>168
void*について学習してきました。
キャストしないと使えないようですが、キャストする型の指定はswitch-caseや#ifなどで分岐する感じでしょうか?
それとももっと賢いやり方がありますか?

192 名前:蟻人間 mailto:sage [2023/06/05(月) 23:46:37.21 ID:pW8wFDDTd.net]
>>190
memcpyなら型が分からなくとも無理やりコピーできる。

193 名前:デフォルトの名無しさん [2023/06/06(火) 00:27:27.18 ID:WKo3IR4c0.net]
void*は元の形がint*でもchar*でもとりあえず何でもありで受け付けるやつ

元の型が何だったかは結局はプログラマ側が保証しとかないといけないので取り扱いは結構危険

194 名前:デフォルトの名無しさん (ワッチョイ 82ad-rilk) mailto:sage [2023/06/06(火) 03:21:52.62 ID:JM/jMtmO0.net]
>>189
>大した理由もなく戻り値を変更すべきじゃない
関数の戻り値でエラーを返すことでグローバル変数のerrno読み出しタイミングの問題(マルチスレッド対策)に対応したいところって意図だと思うけど違うんかね?
まあ戻り値ではハンドル返してアドレス渡しでエラーを受け取るという方法もあるとは思うけど

>またはfopenの名前を使うべきじゃない
機能としては同じだし俺は別にfopen系の名前のほうが分かりやすくて良いと思う
言いたいことは分かるけどさ、初心者やベテランに関わらずちゃんと仕様を確認するってだけのことじゃね?

195 名前:デフォルトの名無しさん [2023/06/06(火) 08:23:57.44 ID:Wehdob+6d.net]
fprintf_sとかの他の関数がerrnoを返さない以上、
fopen_sでだけerrnoを返しても一貫性がなくて無意味に感じられるんだよな。

結局のところerrno自体をスレッドセーフになるように作るしかなくて、
それで解消したんじゃなかったっけ?

196 名前:デフォルトの名無しさん mailto:sage [2023/06/06(火) 08:40:25.14 ID:SiwHVjTU0.net]
>>161 を見てると
コンテナに入れたいのは int な整数なんよな
リングバッファだから 積む側と引っ張り出す側のそれぞれのインターフェースが必要になるけど
 void push(int); 実体を受けて内部で malloc してそっちに格納
 void pop(int*); malloc された内容を 引数に渡して mallocしたポインタは free しとく

この int の部分が任意の型でよしなにしようとすると
 void push(void* , size_t size);

197 名前:デフォルトの名無しさん mailto:sage [2023/06/06(火) 08:42:43.61 ID:SiwHVjTU0.net]
途中送信してもた
void push(const void* , size_t); 実体はポインタで渡す
void pop(void* , size_t);
のように size_t で実体のサイズもらうしかないよね

198 名前:はちみつ餃子 mailto:sage [2023/06/06(火) 08:43:39.37 ID:TmtPJsyo0.net]
>>193
errno は C11 以降は thread local storage ということになってる。
errno をセットした後に別のスレッドによって内容が書き換えられるということはない。
(やろうとすれば出来なくはないが……。 普通に使ってて間違ってやってしまうということはないだろう。)

C99 でも errno は変更可能な左辺値 (に展開されるマクロ) であることは要求されているが
それが関数呼出しによって得られるものであってもかまわないという記述もあり、
スレッドまわりで問題を起こさないようにする処理はその関数に入れることが出来る。
C99 ではスレッドローカルの概念は提供していないが事実上はスレッドローカル的な
実装に出来るように配慮されてる。

errno が不格好な設計であるのは確かだが、マルチスレッドでは問題にはならない。

199 名前:デフォルトの名無しさん [2023/06/06(火) 13:00:47.04 ID:h4TMdgn6a.net]
>>182
そんなのは fork を先にさっさと実装してから家

200 名前:デフォルトの名無しさん mailto:sage [2023/06/06(火) 13:06:36.37 ID:h4TMdgn6a.net]
>>190
void *hoge は hoge++ 出来ないけど
int *i は i++ 出来るし
double *d も d++ 出来るし
i++ と d++ で足される数も違う
switch case で対応するのはおすすめしない



201 名前:デフォルトの名無しさん mailto:sage [2023/06/06(火) 13:23:11.34 ID:Ydo+/HsJM.net]
>>198
forkは効率が悪いから必要ない
プロセスは_spawnを使ってスポーンっと産み出すもんだw

202 名前:デフォルトの名無しさん mailto:sage [2023/06/06(火) 15:35:36.55 ID:DWV+4S+md.net]
GetLastErrorみたいにスレッドローカルにすればいいんだよ

203 名前:デフォルトの名無しさん mailto:sage [2023/06/06(火) 21:21:59.69 ID:XFiIFtrgd.net]
>>190
そろそろそのやり方自体が賢くないって気づかないかな

204 名前:デフォルトの名無しさん mailto:sage [2023/06/06(火) 21:26:13.17 ID:9F60+Uyo0.net]
是非賢いお手本をお願い

205 名前:デフォルトの名無しさん mailto:sage [2023/06/06(火) 21:43:27.13 ID:t5k+pzJSM.net]
switchは良くないと思うよ

利用側でそれぞれの型用に別々の関数を書いて使う人が使い分ける感じじゃないかな
それこそ知らんけどレベルで申し訳ないが

206 名前:デフォルトの名無しさん mailto:sage [2023/06/06(火) 22:36:35.79 ID:QLr+SdPOd.net]
>>203
毎回関数を作る
だってリングバッファだぞ
目をつぶっていても作れるぞw

207 名前:デフォルトの名無しさん mailto:sate [2023/06/07(水) 07:49:00.73 ID:uhVmgr37a.net]
>>203
お手本の定番は qsort() だろ

208 名前:デフォルトの名無しさん mailto:sage [2023/06/07(水) 08:29:44.13 ID:MtVH7DHg0.net]
>>205
そういうのはライブラリ化しておくべき

209 名前:デフォルトの名無しさん mailto:sage [2023/06/07(水) 09:26:39.45 ID:PykR7vOnd.net]
fread(void *buf, size_t size, size_t n, …
の順もあれば
qsort(void *base, size_t num, size_t size, …
の順もあって
行き当たりばったり感

210 名前:デフォルトの名無しさん mailto:sage [2023/06/07(水) 12:34:45.81 ID:hQs7a5Jyd.net]
>>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;
}

目をつぶって作ったのでバグがあっても知らない
要するにこういうことでしょ
他の人が言ってるように型チェックがまったく働かないので俺は使いたくない



211 名前:デフォルトの名無しさん (スッップ Sda2-NC7J) mailto:sage [2023/06/07(水) 13:05:36.32 ID:xTW5tL3jd.net]
memcpyは余計だな。ポインタを返して後は使用者(自分)に委ねるね俺は

212 名前:デフォルトの名無しさん mailto:sage [2023/06/07(水) 14:05:23.13 ID:lsOQP3og0.net]
見てないけどCUEって時点でもう程度が知れる

213 名前:デフォルトの名無しさん [2023/06/07(水) 15:08:50.29 ID:hYVl7Kw10.net]
重箱の鬼の首をとる応用例

・(Perlを)Pearl って時点でもう程度が知れる
・(Daemon を)Demon って時点でもう程度が知れる

214 名前:デフォルトの名無しさん mailto:sage [2023/06/07(水) 16:05:48.27 ID:e1NBMLRC0.net]
Luciferの事もたまには思い出してあげて

215 名前:デフォルトの名無しさん mailto:sage [2023/06/07(水) 21:46:42.98 ID:xi4mV2dDp.net]
ダブルスラッシュがコメントに採用されたのどの版から?

216 名前:デフォルトの名無しさん mailto:sage [2023/06/07(水) 22:41:36.55 ID:JgjHIelbd.net]
>>210
概念的にはgetした瞬間にリングバッファから取り除かれてるはずなので
実際にはバッファが一回りするまで残っているが
消えてるかどうか曖昧で気持ち悪いのでコピーで返したほうが望ましい
まあ好みかもしれんが

217 名前:デフォルトの名無しさん mailto:sage [2023/06/08(木) 11:06:02.87 ID:rxjbLVG0a.net]
>>214
MSVC じゃなくて MS-C の 3 くらいからあったかも

218 名前:デフォルトの名無しさん (スプッッ Sd02-w9Bk) [2023/06/08(木) 12:46:07.00 ID:m0+KFU8md.net]
C99から
それ以前でもコンパイラ拡張で//コメントをサポートしてるのはあるらしいけど
以下のようなエッジケースで解釈が変わる

b=a//**/ 2
;

//コメントを認めないならb=a/2;
//コメントを認めるならb=a;

219 名前:デフォルトの名無しさん (ワッチョイ 916e-aXLw) mailto:sage [2023/06/08(木) 12:55:42.05 ID:ldHYl5bi0.net]
> 目をつぶって作ったのでバグがあっても知らない

そういうのは「作った」とは言わない

220 名前:デフォルトの名無しさん (ワッチョイ 5146-rNJ6) [2023/06/08(木) 13:01:02.12 ID:5qYvg3Wg0.net]
盲者のモノ作りなど認めない。



221 名前:デフォルトの名無しさん (ワッチョイ 4297-UW6r) mailto:sage [2023/06/08(木) 13:06:43.94 ID:2i+h5Gbt0.net]
目開けても何も見てない奴いるからな

222 名前:デフォルトの名無しさん mailto:sage [2023/06/08(木) 13:39:09.53 ID:JhrUsqpHd.net]
野良審査員には餌をやらん主義

223 名前:はちみつ餃子 mailto:sage [2023/06/08(木) 14:35:42.49 ID:Iro3x2NJ0.net]
>>214
C99 からだが経緯としては先に C++ で採用されていたという事情がある。
C with Classes から C++ になる 1984 年頃に BCPL 風を参考にして
スラッシュふたつで始めるコメント記法が導入され、
更に 1998 年にそのコメント記法も含めて ISO の規格として確立した。

C と C++ でプリプロセッサは共用することも多いだろうし
コメントはプリプロセッサで除去するだろうから
C++ で採用された段階で実際には C でもスラッシュふたつのコメント記法を
使えていた環境は割と有ったのだと思う。

224 名前:デフォルトの名無しさん mailto:sage [2023/06/08(木) 14:52:55.41 ID:ldHYl5bi0.net]
マイクロソフトが独自拡張で当時C++のみのはずの//をCでも許していた
言わずと知れた屈指の大手がやっているので規格が追認することとなった

225 名前:デフォルトの名無しさん mailto:sage [2023/06/08(木) 16:45:48.60 ID:JA9B62300.net]
gccも使えてた気がする

226 名前:デフォルトの名無しさん mailto:sage [2023/06/10(土) 18:04:06.65 ID:Yvl44ooC0.net]
90年後半からしか実務で使ってないけどVCでは普通に書けてたな
UNIX系はベンダー製のCの制限が酷かった思い出

227 名前:デフォルトの名無しさん mailto:sage [2023/06/10(土) 18:47:34.87 ID:Yrme8ZC10.net]
borlandやwatcomでも使えなかったっけか?

228 名前:デフォルトの名無しさん mailto:sage [2023/06/10(土) 20:49:31.43 ID:6EfmWVuRd.net]
便利だからね
オプションで使えなくすることもできたはず

229 名前:デフォルトの名無しさん (ワッチョイ c1bb-s+nx) mailto:sage [2023/06/16(金) 01:45:49.62 ID:q8ApsJJ90.net]
int a[3] = {};
int b[3] = {0};

aの初期化はgcc拡張で規格に沿っているのはbの初期化だと記憶していたんだけど、
規格の6.7.8を見るとメンバの個数より波カッコで囲まれた初期化子が少ない場合は暗黙的に静的に初期化するとあった。
この規格の文章を見る限りはaも規格に合致していると思えるんだけど、aがgcc拡張っていうのは本当ですか?

230 名前:228 (ワッチョイ c1bb-s+nx) mailto:sage [2023/06/16(金) 02:08:30.52 ID:q8ApsJJ90.net]
参照した規格はX 3010:2003 (ISO/IEC 9899:1999) です



231 名前:デフォルトの名無しさん (ワッチョイ e95f-2rqm) mailto:sage [2023/06/16(金) 08:46:04.94 ID:qgM8i0iT0.net]
>>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

232 名前:デフォルトの名無しさん (アウアウウー Sadd-g1CP) mailto:sage [2023/06/16(金) 16:12:05.48 ID:ly+Q1cW8a.net]
struct hoge {
char a[];
};
struct fuga {
char a[0];
};






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<272KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef