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
262 名前:デフォルトの名無しさん mailto:sage [2018/03/05(月) 09:53:37.62 ID:9If1UATd0.net] 行数で評価とかいまだにあるのかcobolの習慣持ち込むな
263 名前:デフォルトの名無しさん mailto:sage [2018/03/05(月) 10:35:59.73 ID:6dt0Sqct0.net] 生涯ではたぶん 書いた行数より消した行数の方が多い
264 名前:デフォルトの名無しさん [2018/03/05(月) 10:56:09.00 ID:vC0ni0wma.net] >>249 一万行の上級者様は上級者様専用スレに行ったみたいだから、実演はしてくれないだろう
265 名前:デフォルトの名無しさん mailto:sage [2018/03/05(月) 16:04:50.85 ID:/FWFrph00.net] voidポインターの足し算は未定義なんだってね。 charのポインターみたいに1バイトずつ増えるからつかえると思ってた。
266 名前:デフォルトの名無しさん [2018/03/05(月) 16:10:41.91 ID:QTTd7ohZF.net] どうせキャストして使うんだし
267 名前:デフォルトの名無しさん mailto:sage [2018/03/05(月) 17:54:44.07 ID:V+sS+FxI0.net] C言語初心者向けのスレって結局ここでいいんだろうか?
268 名前:デフォルトの名無しさん mailto:sage [2018/03/05(月) 17:59:13.03 ID:udBqLrh50.net] いいとも
269 名前:デフォルトの名無しさん mailto:sage [2018/03/05(月) 18:07:26.38 ID:VG/uZnqZd.net] フォルダ内の複数のエクセルシートの決まったシートをtext形式1つにまとめるのって出来ます?
270 名前:デフォルトの名無しさん [2018/03/05(月) 18:10:45.91 ID:qBuz+lExa.net] >>255 gccもそうなってて以前それ前提に書いてあるソースを見てビックリしたことがある。 特別扱いしているらしい。
271 名前:デフォルトの名無しさん mailto:sage [2018/03/05(月) 19:32:31.91 ID:cQ8T6f3ad.net] プリプロセッサで #define foo(n) foo_##__typeof__(n)(n) double a; foo(a); って展開したら foo_double(a) になって欲しかったのに foo___typeof__(n)(n) になりました 良い方法はないでしょうか?
272 名前:片山博文MZ mailto:sage [2018/03/05(月) 20:05:03.11 ID:N7KbDTrZd.net] >>261 型名の解釈は、プリプロセッサのレイヤーでは無理です。
273 名前:デフォルトの名無しさん mailto:sage [2018/03/05(月) 20:09:24.78 ID:SJt3Y40r0.net] __typeof__ って 演算子っぽいけど (プリプロセッサ処理の段階では解釈されない:sizeof と同じで リテラルの整数に展開されているわけではない)
274 名前:デフォルトの名無しさん mailto:sage [2018/03/05(月) 20:10:41.84 ID:cQ8T6f3ad.net] がーん _Genericも二箇所に分けて書こうとするとredefineって言われて先に定義したほうが消えるし、ジェネリックは結構厳しいんですね…… ありがとうございます
275 名前:デフォルトの名無しさん mailto:sage [2018/03/05(月) 22:18:31.83 ID:gAM47Ihup.net] 1万行なんて、きちんと設計してないんじゃね?
276 名前:デフォルトの名無しさん mailto:sage [2018/03/05(月) 22:28:13.08 ID:FpxBMBRn0.net] sizeof(void)って未定義? 未定義ならそのポインタの加算幅も未定義だな。 void* p = (((void*)(&i))++);
277 名前:デフォルトの名無しさん mailto:sage [2018/03/05(月) 23:16:20.23 ID:THwFwnSk0.net] キミは正しい
278 名前:デフォルトの名無しさん [2018/03/06(火) 03:28:05.03 ID:ln7SJGum0.net] 本当は void * に対しては足すことも引くこともできない。
279 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 06:45:37.01 ID:r6wtBatS0.net] 今ならuintptr_tにキャストして足し算引き算した後でvoid*に戻すのかな。 uintptr_t以前はchar*へのキャストだったかも知れんけど。 しかし実際のところvoid*に対してポインタを進めたり戻したりしたいって、 どういう場面で必要になるんじゃろうか?
280 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 09:29:43.76 ID:vOSWGXrq0.net] char *でいいじゃん 構造がわからないものはバイト列って認識でしょ?
281 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 10:18:02.26 ID:5/zKekdl0.net] 分からない物を適当に扱うって、すごいな
282 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 12:31:29.65 ID:aP2GFEvqa.net] しかも符号まであると決めつけてるな
283 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 12:40:00.86 ID:KV/wZ8PJ6.net] GCCとかchar*と同じ挙動じゃなかったっけ?
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やのう