1 名前:デフォルトの名無しさん mailto:sage [2018/02/19(月) 22:13:58.98 ID:9/te2eSJ0.net] C言語の話題のみ取り扱います C++の話題はC++スレへ 質問には最低限の情報(ソース/コンパイラ/OS)を付ける 数行で収まらないソースは以下を適当に使ってURLを晒す https://paiza.io/ https://ideone.com/ codepad.org/ C11 www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.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言語なら俺に聞け 144 https://mevius.5ch.net/test/read.cgi/tech/1514025223/ 次スレを立てる時は本文の1行目に以下を追加して下さい !extend:on:vvvvv:1000:512 VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
284 名前:デフォルトの名無しさん [2018/03/06(火) 12:50:23.18 ID:Hdg+O/12a.net] gccはね。
285 名前:デフォルトの名無しさん [2018/03/06(火) 12:54:06.75 ID:Hdg+O/12a.net] そういやポインタ演算と言うと8086用のCコンパイラはfarとか拡張キーワード作ったりして面倒だったな。TurboCだったか。 ああいうなんとも言えないCPUコンパイラだと特殊な決まりがあったりするから要注意だ。 まあ、二度とあんなの市場に出ないような気はするけどな。
286 名前:デフォルトの名無しさん [2018/03/06(火) 12:54:48.33 ID:Hdg+O/12a.net] 用のが抜けた。CPU用の、な。
287 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 12:56:39.10 ID:3EYe6qQ70.net] ハーバードアーキテクチャだとdmとかpm修飾なんてのも
288 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 13:31:13.79 ID:PuW1uuBL0.net] farはTurbo Cに限ったことじゃない 8086用である限り必要になる
289 名前:デフォルトの名無しさん [2018/03/06(火) 14:52:33.73 ID:03FKlPoEF.net] tinyモデルでも使えるfar最強
290 名前: mailto:sage [2018/03/06(火) 15:01:22.33 ID:xvhpcg6j0.net] >>279 でもコード64KBの制限はどうしようもない
291 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 16:57:53.89 ID:PuW1uuBL0.net] 64KBしかいらないときに使うのがtiny tiny使いながら64KBじゃきついとか発想が逆 だったら端っからlarge使えつーの
292 名前:デフォルトの名無しさん [2018/03/06(火) 17:18:40.34 ID:03FKlPoEF.net] >>281 それは根本的な間違い 誤解産むからやめれ
293 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 21:11:42.80 ID:0OC43do0M.net] >>272 charか符号付きかどうかは処理系とかによる なので決めつけてるのはお前ってオチ
294 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 21:46:56.01 ID:7Z5LV7MX0.net] 整数の差分じゃなくてポインタの差分じゃろ?
295 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 21:52:27.71 ID:GCrMS1Np0.net] char は、符号付き・符号なしの、どちらか分からないから使うな! エラーに、-1 を使っていたら、0〜255 しか表現できない事もある
296 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 21:58:50.50 ID:3EYe6qQ70.net] >>285 9bitなの?(T_T)
297 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 22:17:46.38 ID:3SdWrwMmp.net] 例外を範囲外の値で判定する様なインターフェースが悪い。 はっきり戻り値は動作結果、値は出力用の引数に入れる。 みたいな設計にすべき。 ちな、C#みたいに戻り値を構造体にするって手もあるぞ。
298 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 23:01:01.51 ID:GCrMS1Np0.net] 素人が、char型の-1 を、エラー値に使っていると、 OS・コンパイラが変わって、その環境では、char型が0〜255 になってる char型は、符号付き・符号なしの、どちらか分からない
299 名前: mailto:sage [2018/03/06(火) 23:07:35.07 ID:xvhpcg6j0.net] >>288 言語内の話と環境(シェルやOS)の話を混同してはならない
300 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 23:46:04.03 ID:5/zKekdl0.net] signed char って書けば?
301 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 02:24:03.38 ID:Tq6bvCAq0.net] >>288 charの使い方が間違っていることが問題なのであって、charを使うこと自体が悪いのではない。
302 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 02:45:29.86 ID:kGjiUMXW0.net] はいー。 1バイト整数を使いたかったら、stdintを使いましょう。 int8_tは内部がcharかもしれないけど便宜上charではありません。 ハイ、復唱。int8_tはcharではありません。 ちなみにC++でバイト表現専用のstd::byteが入りました。すごく使いにくいけど。
303 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 10:31:28.26 ID:ylRgY7un0.net] >>282 どこか間違っているか?
304 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 12:28:33.48 ID:maM/8pnG0.net] gets_sのsは何の略か教えて
305 名前:ュださい。 [] [ここ壊れてます]
306 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 12:31:25.66 ID:/Jrz1mw60.net] secure
307 名前:デフォルトの名無しさん [2018/03/07(水) 12:53:17.89 ID:vftXHA5La.net] >>294 Windows用のコンパイラの話? 知らないけど、多分 size の s じゃない?
308 名前:デフォルトの名無しさん [2018/03/07(水) 12:53:35.53 ID:vftXHA5La.net] >>295 あ、それか。
309 名前:デフォルトの名無しさん [2018/03/07(水) 12:59:49.73 ID:L+d1J7Rsa.net] stopper
310 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 13:42:40.79 ID:r9zWShH00.net] 昔はpc-98DOS用に作ったソフトがハード依存コードが無ければ DOS/V機やTOWNSでも動くって聞いて驚いた。
311 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 13:49:17.29 ID:9HCtzU4sd.net] safe
312 名前:デフォルトの名無しさん [2018/03/07(水) 16:58:54.65 ID:+xlstTJJ0.net] N5200 で LSI C-86 試食版を使ってた……ような気がする。昔のことだから記憶が曖昧だ。
313 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 17:13:49.35 ID:ylRgY7un0.net] vz?
314 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 17:14:24.12 ID:GwlIl+h20.net] MS-DOSが動作していれば使えるはず
315 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 17:17:05.15 ID:ylRgY7un0.net] dispelしなきゃ無理じゃね?w
316 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 17:21:00.28 ID:XsGIcGwmp.net] secureじゃねーだろ。 暗号化だってされてねーんだからw safetyくらいな感じじゃね?
317 名前:デフォルトの名無しさん [2018/03/07(水) 17:25:48.32 ID:Rf3JBuAda.net] DOSのシステムコール(なんて言うんだっけ?DOSコール?忘れた)だけを呼び出しているプログラムならハードウェアが違っても動く。 しかしMS-DOSはCUIしかサボートしてないのでグラフィックスは使えない。 当時のプログラムはみんな勝手にOS無視してグラフィックスのVRAMに直接アクセスして絵を出していた。 すると当然他の機種に持っていくと意図した通りに動かない。
318 名前:デフォルトの名無しさん [2018/03/07(水) 17:26:24.22 ID:L+d1J7Rsa.net] int21
319 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 17:27:45.62 ID:rG21M89G0.net] INT 21H なら ファンクションコールだったかの
320 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 17:28:50.29 ID:GwlIl+h20.net] 伝統のCALL 5
321 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 17:29:37.78 ID:ylRgY7un0.net] DOSCALLS.DLLてのもあったなあw
322 名前:デフォルトの名無しさん [2018/03/07(水) 17:55:21.18 ID:L+d1J7Rsa.net] CP/M か 0066 とかもあったっけ
323 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 19:19:15.79 ID:Zw7oeE4wM.net] >>296-298 , >>300 , >>305 お前らがどう思おうとマイクロソフトはセキュリティ強化版って言ってるから
324 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 21:48:34.17 ID:mAtFjoDLa.net] super man
325 名前:デフォルトの名無しさん mailto:sage [2018/03/08(木) 05:46:05.86 ID:Eav/q7cG0.net] #define a(b) c##b##d というマクロでcdを出力したいのですが a()を呼び出すとエラーになります 解決策ありますでしょうか?
326 名前:デフォルトの名無しさん mailto:sage [2018/03/08(木) 07:45:03.75 ID:/HWAGXcB0.net] >>314 俺のところはエラー出ないみたい。環境によるのかな。 コンパイラのバージョンを示せば詳しい人が現れるかも。
327 名前:デフォルトの名無しさん mailto:sage [2018/03/08(木) 07:52:57.57 ID:Eav/q7cG0.net] ありがとうございます。 解決しました。
328 名前:デフォルトの名無しさん mailto:sage [2018/03/08(木) 08:09:34.78 ID:Ed7uI0ohM.net] どう解決したか書くのが礼儀ってもんだ。
329 名前:デフォルトの名無しさん mailto:sage [2018/03/08(木) 08:29:41.94 ID:Eav/q7cG0.net] コンパイラーのエラーが出ないという意見をきいて 試してみたら別のところ―がエラーになっていたということでした。 そして自分が悪質なコンパイラーに騙されていたことに気づきました。
330 名前:デフォルトの名無しさん mailto:sage [2018/03/08(木) 09:10:26.22 ID:lHBKoGy1p.net] エラーの文章くらい読めよ。
331 名前:デフォルトの名無しさん [2018/03/08(木) 10:10:36.36 ID:ue18PqKiF.net] Cのエラーはエラーの発生個所を教えてくれるけど原因個所は教えてくれない
332 名前:デフォルトの名無しさん mailto:sage [2018/03/08(木) 10:25:51.65 ID:0lNTHbnP0.net] おそらく警告とエラーを混同していると思われ > warning C4003: マクロ 'a' に指定された実引数の数が少なすぎます。
333 名前:デフォルトの名無しさん mailto:sage [2018/03/08(木) 17:10:32.81 ID:/HWAGXcB0.net] 関数型マクロの使用時、カッコの内側が空の場合に
334 名前:、 「引数が指定されていない」と解釈して警告を出すか、 「1個の引数(内容はヌルストリング)が指定されている」と解釈するか、 そういう問題みたいね。 [] [ここ壊れてます]
335 名前:デフォルトの名無しさん mailto:sage [2018/03/08(木) 23:40:10.76 ID:nwTnwFPU0.net] >>292 >int8_tは内部がcharかもしれないけど便宜上charではありません。 普通はsigned charだな。当たり前。「charかもしれない」なんてこともありえない。
336 名前:デフォルトの名無しさん mailto:sage [2018/03/09(金) 00:58:31.73 ID:U4YZHGfl0.net] そういう一般仕様から外れるコンパイラの使用を強制させられたことあるの?
337 名前:デフォルトの名無しさん mailto:sage [2018/03/09(金) 06:39:09.84 ID:K2/JY7Cc0.net] cout << typeid(__int8).name(); //char
338 名前:デフォルトの名無しさん mailto:sage [2018/03/09(金) 10:59:36.49 ID:rlkWp7/Ip.net] 誰だよCの話題に別言語持ち出してんの。
339 名前:デフォルトの名無しさん mailto:sage [2018/03/09(金) 12:10:45.59 ID:WqdE+VIZM.net] いやらCね
340 名前:デフォルトの名無しさん [2018/03/09(金) 12:13:57.64 ID:LlK9d7kba.net] 頭おかC
341 名前:デフォルトの名無しさん mailto:sage [2018/03/09(金) 16:36:39.04 ID:AbBnYUJz0.net] 符号なし64ビット整数を64ビット右シフトすると 0にならないでそのままの時や変な別の値になるときがあるんですけど コンパイラーのバグですか?
342 名前:デフォルトの名無しさん mailto:sage [2018/03/09(金) 17:10:28.27 ID:aCtfd81Na.net] >>329 もしかしてですが、 悪質なコンパイラに騙されているのでは?
343 名前:デフォルトの名無しさん mailto:sage [2018/03/09(金) 17:10:41.68 ID:AbBnYUJz0.net] fast-uploader.com/file/7076138459666/ 2つのファイルが無いと再現できなかったのでソースファイルを アップロードしました コンパイルしてなぜ0にならないのか教えてください。
344 名前:デフォルトの名無しさん mailto:sage [2018/03/09(金) 17:11:34.80 ID:er4JdT2d0.net] >>329 a >> b で、bの値がaの型のビット数「以上」のときは未定義動作、 に該当するから、コンパイラのバグではない。…と思う。 本当は規格の引用をすべきなんだが、どなたか頼む。
345 名前:デフォルトの名無しさん [2018/03/09(金) 17:12:19.58 ID:AbBnYUJz0.net] コンパイラーは gcc version 7.3.0 (Rev1, Built by MSYS2 project) で試しました。 悪質なコンパイラーに騙されているのかもしれませんね。
346 名前:デフォルトの名無しさん mailto:sage [2018/03/09(金) 17:25:01.13 ID:AbBnYUJz0.net] ファイル1 #include<stdio.h> #include<stdint.h> uint64_t f(uint8_t a,uint64_t b){ printf("%llx\n", b>>(64-a)); return b>>64 -a;} void e(uint8_t a){ f(0,0x8318318318318318);} void g(uint8_t a){ f(a,0x8318318318318318);} ファイル2 #include<stdint.h> uint64_t f(uint8_t a,uint64_t b); void g(uint8_t a); void e(uint8_t a); int main(void) { g(0); e(0); return 0; } この二つのファイルをコンパイルして実行してみてください。 よろしくお願いします。
347 名前:デフォルトの名無しさん mailto:sage [2018/03/09(金) 17:27:15.48 ID:K2/JY7Cc0.net] その昔、CPUのバグで16bitレジスタを32bitシフトすると0にならないとかいうのなかったっけ
348 名前:デフォルトの名無しさん mailto:sage [2018/03/09(金) 17:45:47.23 ID:AbBnYUJz0.net] これからは64ビットのシフト使ってるコードは全てバグの温床になるな。
349 名前:デフォルトの名無しさん mailto:sage [2018/03/09(金) 18:10:27.57 ID:Z9n7UPH0M.net] C11の6.5.7の3より。 If the value of the right operand is negative or is greater than or equal to the width of the promoted left operand, the behavior is undefined.
350 名前:332 mailto:sage [2018/03/09(金) 20:12:23.00 ID:er4JdT2d0.net] >>337 フォローありがとう。この部分ですわ。 6.5.7 Bitwise shift operators ビットシフト演算子 の項。 もしも右オペランドの値が負、または汎整数拡張後の左オペランドの(ビット)幅より 大きいか等しい場合、振る舞いは未定義である。 と言った感じかな。 promoted left operand の部分が「汎整数拡張後の左オペランド」で 合ってるのか自信ないけど。
351 名前:デフォルトの名無しさん mailto:sage [2018/03/09(金) 21:17:55.13 ID:ysNVe5/v0.net] 64bit 符号なしを、64bit シフトするって、そもそも無意味だろ 元のビットが残っていない。 全部のビットが変わっている! 意味があるのは、6
352 名前:3bit まで [] [ここ壊れてます]
353 名前:デフォルトの名無しさん [2018/03/09(金) 22:22:53.87 .net] >>339 0になってくれれば余計な分岐やら演算やらを省けるかもしれないだろ
354 名前:デフォルトの名無しさん mailto:sage [2018/03/09(金) 22:57:22.97 ID:dpc+cSNT0.net] 0クリアする最適な方法なの?
355 名前:デフォルトの名無しさん mailto:sage [2018/03/09(金) 23:23:40.83 ID:ysNVe5/v0.net] 1010 XOR 1010 ---- 0000 n は任意のビットで、n XOR n で、全ビット0にできる
356 名前:デフォルトの名無しさん [2018/03/09(金) 23:25:22.45 .net] >>342 そんなん全ビット読まなきゃいけないじゃん
357 名前:デフォルトの名無しさん mailto:sage [2018/03/09(金) 23:29:26.36 ID:9IZd/e860.net] n and 030 とかで任意ビットのonはわからないか?
358 名前:デフォルトの名無しさん mailto:sage [2018/03/09(金) 23:47:39.35 ID:U4YZHGfl0.net] >0クリア つ ゼロレジスタ
359 名前:デフォルトの名無しさん mailto:sage [2018/03/10(土) 00:03:47.54 ID:a2p+alti0.net] 1 bit づつじわじわシフトするなら何とかなるんだけどな。 https://paiza.io/projects/D9KFwMa77ifp6AOgAaO2PQ
360 名前:デフォルトの名無しさん mailto:sage [2018/03/10(土) 05:55:47.17 ID:jel/5KgH0.net] 定数リテラルにullって使ってなくてもだいじょうぶなんだっけ?
361 名前:デフォルトの名無しさん mailto:sage [2018/03/10(土) 12:12:18.84 ID:Z1L9sOVC0.net] >>343 xor は少サイクルなのが利点ですね。
362 名前:デフォルトの名無しさん mailto:sage [2018/03/10(土) 13:08:59.94 ID:qojMr6PP0.net] アセンブリコードの0にする方法はxorやのう
363 名前:デフォルトの名無しさん mailto:sage [2018/03/10(土) 13:24:16.81 ID:+HpaswK40.net] CPU依存すぎる
364 名前:デフォルトの名無しさん mailto:sage [2018/03/10(土) 13:47:45.54 ID:f+B2oLbA0.net] Z80時代の爺だろ、放置してやれ
365 名前:デフォルトの名無しさん mailto:sage [2018/03/10(土) 14:18:47.85 ID:J/EnQN8G0.net] パチンコ屋さん
366 名前:デフォルトの名無しさん mailto:sage [2018/03/10(土) 15:25:43.76 ID:ps/htySn0.net] 今じゃ乗除演算さえワンサイクルの時代に何アホな話してんだ?
367 名前:デフォルトの名無しさん [2018/03/10(土) 16:20:41.72 ID:HvD6qwC3a.net] アセンブラについてはどうしても自分でアセンブリ言語で書かねばならない事態に陥らない限り書くことはないだろうなあ。
368 名前: mailto:sage [2018/03/10(土) 16:50:09.76 ID:+Ww908Qw0.net] >>354 そうそう、printf デバッグでは力不足でもう否が応でも gdb に行くのを逃げ回っているのと同じです
369 名前:デフォルトの名無しさん [2018/03/10(土) 17:18:49.50 ID:a2p+alti0.net] gdb は普通に使うなあ。
370 名前:デフォルトの名無しさん [2018/03/10(土) 17:35:13.89 ID:5pXC+BOTF.net] printfなめたらいかん
371 名前:デフォルトの名無しさん mailto:sage [2018/03/10(土) 17:41:43.93 ID:ps/htySn0.net] 割り込みん中でprintf使って暴走してデバッグが出来なかった思い出。
372 名前:デフォルトの名無しさん mailto:sage [2018/03/10(土) 18:10:52.64 ID:a2p+alti0.net] 俺はシグナルハンドラの中でログ出力しようとして FILE * 経由で fprintf() 等で出力したら そのライブラリの中でデッドロックしてハマった。 kill -ABRT で core dump させて gdb で core ファイルと共に読ませてようやっと停止箇所がわかった。
373 名前:デフォルトの名無しさん mailto:sage [2018/03/10(土) 20:11:43.97 ID:fNi+2/6HM.net] gdbマスターしてからprintデバッグバカにしてたけど printデバッグ自動化してからprintデバッグ信者になった 無論レアケースデバッグはgdb使うけどね
374 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 01:20:23.17 ID:ry5KQfC80.net] printf() をデバッグで使う時はバッファリングを考慮していないとハマる事がある。 それと stdout と stderr と両方に出る可能性がある場合にその順序が食い違う可能性もある。 シグナルハンドラ内やマルチスレッドプログラムで使ってうまく行かない事もある。 その辺を全て考慮するならいいだろうが、しかし、それなら初めからログファイルに出力される ように作った方が良いような気もする。
375 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 02:00:44.19 ID:22CnVBlaM.net] printデバッグなら専用モジュール作るべきだな 俺は時刻、関数名、コンテキストIDを付けて 標準出力かファイルにはかせてる
376 名前:デフォルトの名無しさん [2018/03/11(日) 09:19:44.59 ID:zWe+i43K0.net] そこまでするならsyslog
377 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 10:20:33.73 ID:szqHStkk0.net] >>361 setvbuf忘れなければ済む話だよパパ
378 名前:デフォルトの名無しさん [2018/03/11(日) 14:10:54.85 ID:ry5KQfC80.net] >>363 そだねー >>364 本当にそれだけで大丈夫かね? この頃のライブラリは多分マルチスレッドでもちゃんと動くように内部でロック掛けている部分があると 思うんだけどね、例えばシグナルハンドラの中でそのロックを掛けている最中にまたシグナルが来て 同じシグナルハンドラに入ると同じロックを掛けようとしてデッドロックするなんてことが起こり得ると 思うんだが。(まあその程度のことでデッドロックしてしまうこと自体がバグかも知れんが。それ以前に シグナルハンドラの中でprintf()は使うなって話でもあるか…)。
379 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 15:06:05.16 ID:szqHStkk0.net] >>365 ロケールがCならprintfだってスレッドセーフだしぎりぎりシグナルセーフだよパパ
380 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 15:33:10.91 ID:UYIqocxw0.net] 世の中には完全なCライブラリを実装していないタイニーなマシン用のサブセットだってあるんだよ坊や。
381 名前:デフォルトの名無しさん [2018/03/11(日) 16:08:45.67 ID:sEfAJdP70.net] それはCじゃないから、このスレで話し合っても無駄では。
382 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 16:12:01.01 ID:UYIqocxw0.net] Cは言語仕様であって、ライブラリ仕様は別枠だろ?
383 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 16:46:35.93 ID:iUqzSqql0.net] 30年以上前だったかな、あるメーカーのプリンタファーム開発用Cコンパイラが配列要素上限が255だった 当時アスキーネットでこれを聞いたvoid氏が呆れていたようだ。
384 名前:デフォルトの名無しさん [2018/03/11(日) 17:10:10.38 ID:sEfAJdP70.net] インストラクションに8ビットまでの即値を組み込めるなら、その制限によって(そのような最適化が必要なプロセッサにとって)強烈な最適化をかけられるから、アリやナシやと問われればアリのような感がある。