C言語なら俺に聞け 145

■ このスレッドは過去ログ倉庫に格納されています
2018/02/19(月) 22:13:58.98ID:9/te2eSJ0
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.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言語なら俺に聞け 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
2018/03/01(木) 21:28:15.90ID:pSYCUqTH0
マスターマインドのAIはダサいのは作ったことある。
正解にはたどりつけるけど、パーミテーションでグルグル回す奴だから回答がキモイ。
そして遅い・・・。
232デフォルトの名無しさん (ワッチョイ df5d-W8CT)
垢版 |
2018/03/02(金) 05:26:58.29ID:btKfsNEv0
>>230
まあ、非標準だから仕方ない。そういうのは条件コンパイルとか、たくさんあるなら環境ごとに別のソースファイルにしてビルド時に選択とか。
そういうことをちゃんとやってるオープンソースソフトウェアが参考になるかも。
2018/03/02(金) 06:44:50.16ID:bNTu0vGw0
待機なしの1キャラ入力は標準に欲しいね
2018/03/02(金) 07:35:26.90ID:Ht5IxdGD0
日本語どうやって入力するんだ?
2018/03/02(金) 09:02:00.75ID:7oxMlhUX0
>>225
にいさんむむむ でキーリピート解除
2018/03/02(金) 22:53:07.31ID:PBdn8yjo0
>>192
立てた。

C言語相談室(上級者専用)
https://mevius.5ch.net/test/read.cgi/tech/1519998483

老害が来てもウザイので「10,000行程度のソースを扱えない人は」と現在状態に変更した。
上級者には一朝一夕では成れない。
初心者は文法事項にばかりに目が行きがちだが、
今日覚えれば明日から使える文法事項で練度を測るのはナンセンスだ。
これを含めて、意見については新スレで受け付ける。

>>195
削除よろ
2018/03/02(金) 23:05:02.75ID:Wy5zsGfp0
>>234
UTF-8型というものはない。
wchar_tにウニコードかOSの文字コードが入ってることを期待しよう。
まぁ、stdinをgetchで読んで解析とかかな。またはfgetsで全部読むとか。
世知辛いのじゃー。
238デフォルトの名無しさん
垢版 |
2018/03/03(土) 19:55:40.33
>>237
一定のchunk sizeでreadして1byteずつ解析やな
2018/03/03(土) 20:06:25.92ID:B47zIri70
あ、そうか。
UTF-8って生バイトfreadしないといけないのか。
失念してた。
240デフォルトの名無しさん (ワッチョイ e79f-m1UI)
垢版 |
2018/03/03(土) 20:54:25.83ID:usZqppoC0
>>236
削除依頼出して誘導の書き込みしておいた。
2018/03/04(日) 09:51:40.56ID:/AI+3Uf1a
おまいらってすごいね
C検定の1級とか余裕なんだろね
2018/03/04(日) 17:53:13.34ID:9DD6RFWE0
いやいや、これでもISO/IEC 9899:2011のつまみ食いをしてるだけですよ
昔のCと違い、今のCは付き合ってらんないところが結構あるんで
243デフォルトの名無しさん (アークセー Sxdb-TGtH)
垢版 |
2018/03/04(日) 23:51:40.13ID:8NE8Y0sUx
10,000行程度のプログラムで何ができるのか想像が出来ん。
244デフォルトの名無しさん
垢版 |
2018/03/05(月) 00:51:13.54
10000行程度を書いた経験だろ

全体だと30万行とかだろ
2018/03/05(月) 01:04:58.69ID:FpxBMBRn0
一プロジェクトで1万行はないな。趣味だから。
トータルならそれ以上書いてるけど。
246デフォルトの名無しさん (ワッチョイ e79f-m1UI)
垢版 |
2018/03/05(月) 01:26:13.77ID:LCMEVuoA0
>>241
それってここに書いてある一級?
https://ja.wikipedia.org/wiki/C%E8%A8%80%E8%AA%9E%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%83%BD%E5%8A%9B%E8%AA%8D%E5%AE%9A%E8%A9%A6%E9%A8%93
だったら特に検定受かってなくてもそういう人だらけじゃないかな。
247デフォルトの名無しさん (ワッチョイ e79f-m1UI)
垢版 |
2018/03/05(月) 01:35:06.01ID:LCMEVuoA0
一万行ねえ。しかしあまりに行数が多くなるとするとC言語を使うこと自体が適切ではなかった可能性も出てくるよな。
あるいは何か設計がまずいか、書き方がまずいか。

何れにしてもプログラムが多くなればなるほど人間がバグを作り込んでしまう率が高くなり更に全体の把握が困難になってくる。
2018/03/05(月) 02:35:53.76ID:FpxBMBRn0
最高効率で1万行ってやりたくないなぁ。
ぜったゲシュタルト崩壊起こす。
2018/03/05(月) 02:49:21.31ID:udBqLrh50
普段から1万行程度書いてる上級プログラマが
今から模範演技を見せてくれそうな予感
2018/03/05(月) 06:35:47.20ID:wW3xLIx70
int
MyFunc
(
int param
)
{
return param * param;
}
2018/03/05(月) 07:59:23.92ID:DUciPmz40
一万行パクった事がある。
2018/03/05(月) 09:53:37.62ID:9If1UATd0
行数で評価とかいまだにあるのかcobolの習慣持ち込むな
2018/03/05(月) 10:35:59.73ID:6dt0Sqct0
生涯ではたぶん 書いた行数より消した行数の方が多い
254デフォルトの名無しさん (アウアウカー Sabb-pjv1)
垢版 |
2018/03/05(月) 10:56:09.00ID:vC0ni0wma
>>249
一万行の上級者様は上級者様専用スレに行ったみたいだから、実演はしてくれないだろう
2018/03/05(月) 16:04:50.85ID:/FWFrph00
voidポインターの足し算は未定義なんだってね。
charのポインターみたいに1バイトずつ増えるからつかえると思ってた。
256デフォルトの名無しさん (アウウィフ FF2b-wl/W)
垢版 |
2018/03/05(月) 16:10:41.91ID:QTTd7ohZF
どうせキャストして使うんだし
2018/03/05(月) 17:54:44.07ID:V+sS+FxI0
C言語初心者向けのスレって結局ここでいいんだろうか?
2018/03/05(月) 17:59:13.03ID:udBqLrh50
いいとも
2018/03/05(月) 18:07:26.38ID:VG/uZnqZd
フォルダ内の複数のエクセルシートの決まったシートをtext形式1つにまとめるのって出来ます?
260デフォルトの名無しさん (アウアウカー Sabb-g3Yl)
垢版 |
2018/03/05(月) 18:10:45.91ID:qBuz+lExa
>>255
gccもそうなってて以前それ前提に書いてあるソースを見てビックリしたことがある。
特別扱いしているらしい。
2018/03/05(月) 19:32:31.91ID:cQ8T6f3ad
プリプロセッサで
#define foo(n) foo_##__typeof__(n)(n)

double a;
foo(a);

って展開したら
foo_double(a)
になって欲しかったのに
foo___typeof__(n)(n)

になりました
良い方法はないでしょうか?
2018/03/05(月) 20:05:03.11ID:N7KbDTrZd
>>261
型名の解釈は、プリプロセッサのレイヤーでは無理です。
2018/03/05(月) 20:09:24.78ID:SJt3Y40r0
__typeof__ って 演算子っぽいけど
(プリプロセッサ処理の段階では解釈されない:sizeof と同じで
 リテラルの整数に展開されているわけではない)
2018/03/05(月) 20:10:41.84ID:cQ8T6f3ad
がーん

_Genericも二箇所に分けて書こうとするとredefineって言われて先に定義したほうが消えるし、ジェネリックは結構厳しいんですね……
ありがとうございます
2018/03/05(月) 22:18:31.83ID:gAM47Ihup
1万行なんて、きちんと設計してないんじゃね?
2018/03/05(月) 22:28:13.08ID:FpxBMBRn0
sizeof(void)って未定義?
未定義ならそのポインタの加算幅も未定義だな。
void* p = (((void*)(&i))++);
2018/03/05(月) 23:16:20.23ID:THwFwnSk0
キミは正しい
268デフォルトの名無しさん (ワッチョイ e79f-8pbW)
垢版 |
2018/03/06(火) 03:28:05.03ID:ln7SJGum0
本当は void * に対しては足すことも引くこともできない。
2018/03/06(火) 06:45:37.01ID:r6wtBatS0
今ならuintptr_tにキャストして足し算引き算した後でvoid*に戻すのかな。
uintptr_t以前はchar*へのキャストだったかも知れんけど。

しかし実際のところvoid*に対してポインタを進めたり戻したりしたいって、
どういう場面で必要になるんじゃろうか?
2018/03/06(火) 09:29:43.76ID:vOSWGXrq0
char *でいいじゃん
構造がわからないものはバイト列って認識でしょ?
2018/03/06(火) 10:18:02.26ID:5/zKekdl0
分からない物を適当に扱うって、すごいな
2018/03/06(火) 12:31:29.65ID:aP2GFEvqa
しかも符号まであると決めつけてるな
2018/03/06(火) 12:40:00.86ID:KV/wZ8PJ6
GCCとかchar*と同じ挙動じゃなかったっけ?
274デフォルトの名無しさん (アウアウカー Sabb-g3Yl)
垢版 |
2018/03/06(火) 12:50:23.18ID:Hdg+O/12a
gccはね。
275デフォルトの名無しさん (アウアウカー Sabb-g3Yl)
垢版 |
2018/03/06(火) 12:54:06.75ID:Hdg+O/12a
そういやポインタ演算と言うと8086用のCコンパイラはfarとか拡張キーワード作ったりして面倒だったな。TurboCだったか。
ああいうなんとも言えないCPUコンパイラだと特殊な決まりがあったりするから要注意だ。

まあ、二度とあんなの市場に出ないような気はするけどな。
276デフォルトの名無しさん (アウアウカー Sabb-g3Yl)
垢版 |
2018/03/06(火) 12:54:48.33ID:Hdg+O/12a
用のが抜けた。CPU用の、な。
2018/03/06(火) 12:56:39.10ID:3EYe6qQ70
ハーバードアーキテクチャだとdmとかpm修飾なんてのも
2018/03/06(火) 13:31:13.79ID:PuW1uuBL0
farはTurbo Cに限ったことじゃない
8086用である限り必要になる
279デフォルトの名無しさん (アウウィフ FF2b-wl/W)
垢版 |
2018/03/06(火) 14:52:33.73ID:03FKlPoEF
tinyモデルでも使えるfar最強
2018/03/06(火) 15:01:22.33ID:xvhpcg6j0
>>279
でもコード64KBの制限はどうしようもない
2018/03/06(火) 16:57:53.89ID:PuW1uuBL0
64KBしかいらないときに使うのがtiny
tiny使いながら64KBじゃきついとか発想が逆
だったら端っからlarge使えつーの
282デフォルトの名無しさん (アウウィフ FF2b-wl/W)
垢版 |
2018/03/06(火) 17:18:40.34ID:03FKlPoEF
>>281
それは根本的な間違い
誤解産むからやめれ
2018/03/06(火) 21:11:42.80ID:0OC43do0M
>>272
charか符号付きかどうかは処理系とかによる
なので決めつけてるのはお前ってオチ
2018/03/06(火) 21:46:56.01ID:7Z5LV7MX0
整数の差分じゃなくてポインタの差分じゃろ?
2018/03/06(火) 21:52:27.71ID:GCrMS1Np0
char は、符号付き・符号なしの、どちらか分からないから使うな!

エラーに、-1 を使っていたら、0〜255 しか表現できない事もある
2018/03/06(火) 21:58:50.50ID:3EYe6qQ70
>>285
9bitなの?(T_T)
2018/03/06(火) 22:17:46.38ID:3SdWrwMmp
例外を範囲外の値で判定する様なインターフェースが悪い。
はっきり戻り値は動作結果、値は出力用の引数に入れる。
みたいな設計にすべき。
ちな、C#みたいに戻り値を構造体にするって手もあるぞ。
2018/03/06(火) 23:01:01.51ID:GCrMS1Np0
素人が、char型の-1 を、エラー値に使っていると、
OS・コンパイラが変わって、その環境では、char型が0〜255 になってる

char型は、符号付き・符号なしの、どちらか分からない
2018/03/06(火) 23:07:35.07ID:xvhpcg6j0
>>288
言語内の話と環境(シェルやOS)の話を混同してはならない
2018/03/06(火) 23:46:04.03ID:5/zKekdl0
signed char って書けば?
2018/03/07(水) 02:24:03.38ID:Tq6bvCAq0
>>288
charの使い方が間違っていることが問題なのであって、charを使うこと自体が悪いのではない。
2018/03/07(水) 02:45:29.86ID:kGjiUMXW0
はいー。
1バイト整数を使いたかったら、stdintを使いましょう。
int8_tは内部がcharかもしれないけど便宜上charではありません。
ハイ、復唱。int8_tはcharではありません。
ちなみにC++でバイト表現専用のstd::byteが入りました。すごく使いにくいけど。
2018/03/07(水) 10:31:28.26ID:ylRgY7un0
>>282
どこか間違っているか?
2018/03/07(水) 12:28:33.48ID:maM/8pnG0
gets_sのsは何の略か教えてください。
2018/03/07(水) 12:31:25.66ID:/Jrz1mw60
secure
296デフォルトの名無しさん (アウアウカー Sabb-g3Yl)
垢版 |
2018/03/07(水) 12:53:17.89ID:vftXHA5La
>>294
Windows用のコンパイラの話?
知らないけど、多分 size の s じゃない?
297デフォルトの名無しさん (アウアウカー Sabb-g3Yl)
垢版 |
2018/03/07(水) 12:53:35.53ID:vftXHA5La
>>295
あ、それか。
298デフォルトの名無しさん (アウアウエー Sa9f-wl/W)
垢版 |
2018/03/07(水) 12:59:49.73ID:L+d1J7Rsa
stopper
2018/03/07(水) 13:42:40.79ID:r9zWShH00
昔はpc-98DOS用に作ったソフトがハード依存コードが無ければ
DOS/V機やTOWNSでも動くって聞いて驚いた。
2018/03/07(水) 13:49:17.29ID:9HCtzU4sd
safe
301デフォルトの名無しさん (ワッチョイ df5d-W8CT)
垢版 |
2018/03/07(水) 16:58:54.65ID:+xlstTJJ0
N5200 で LSI C-86 試食版を使ってた……ような気がする。昔のことだから記憶が曖昧だ。
2018/03/07(水) 17:13:49.35ID:ylRgY7un0
vz?
2018/03/07(水) 17:14:24.12ID:GwlIl+h20
MS-DOSが動作していれば使えるはず
2018/03/07(水) 17:17:05.15ID:ylRgY7un0
dispelしなきゃ無理じゃね?w
2018/03/07(水) 17:21:00.28ID:XsGIcGwmp
secureじゃねーだろ。
暗号化だってされてねーんだからw
safetyくらいな感じじゃね?
306デフォルトの名無しさん (アウアウカー Sabb-g3Yl)
垢版 |
2018/03/07(水) 17:25:48.32ID:Rf3JBuAda
DOSのシステムコール(なんて言うんだっけ?DOSコール?忘れた)だけを呼び出しているプログラムならハードウェアが違っても動く。

しかしMS-DOSはCUIしかサボートしてないのでグラフィックスは使えない。

当時のプログラムはみんな勝手にOS無視してグラフィックスのVRAMに直接アクセスして絵を出していた。
すると当然他の機種に持っていくと意図した通りに動かない。
307デフォルトの名無しさん (アウアウエー Sa9f-wl/W)
垢版 |
2018/03/07(水) 17:26:24.22ID:L+d1J7Rsa
int21
2018/03/07(水) 17:27:45.62ID:rG21M89G0
INT 21H なら ファンクションコールだったかの
2018/03/07(水) 17:28:50.29ID:GwlIl+h20
伝統のCALL 5
2018/03/07(水) 17:29:37.78ID:ylRgY7un0
DOSCALLS.DLLてのもあったなあw
311デフォルトの名無しさん (アウアウエー Sa9f-wl/W)
垢版 |
2018/03/07(水) 17:55:21.18ID:L+d1J7Rsa
CP/M か
0066 とかもあったっけ
2018/03/07(水) 19:19:15.79ID:Zw7oeE4wM
>>296-298, >>300, >>305
お前らがどう思おうとマイクロソフトはセキュリティ強化版って言ってるから
2018/03/07(水) 21:48:34.17ID:mAtFjoDLa
super man
2018/03/08(木) 05:46:05.86ID:Eav/q7cG0
#define a(b) c##b##d
というマクロでcdを出力したいのですが
a()を呼び出すとエラーになります
解決策ありますでしょうか?
2018/03/08(木) 07:45:03.75ID:/HWAGXcB0
>>314 俺のところはエラー出ないみたい。環境によるのかな。
コンパイラのバージョンを示せば詳しい人が現れるかも。
2018/03/08(木) 07:52:57.57ID:Eav/q7cG0
ありがとうございます。
解決しました。
2018/03/08(木) 08:09:34.78ID:Ed7uI0ohM
どう解決したか書くのが礼儀ってもんだ。
2018/03/08(木) 08:29:41.94ID:Eav/q7cG0
コンパイラーのエラーが出ないという意見をきいて
試してみたら別のところ―がエラーになっていたということでした。
そして自分が悪質なコンパイラーに騙されていたことに気づきました。
2018/03/08(木) 09:10:26.22ID:lHBKoGy1p
エラーの文章くらい読めよ。
320デフォルトの名無しさん (アウウィフ FF1f-0aB1)
垢版 |
2018/03/08(木) 10:10:36.36ID:ue18PqKiF
Cのエラーはエラーの発生個所を教えてくれるけど原因個所は教えてくれない
2018/03/08(木) 10:25:51.65ID:0lNTHbnP0
おそらく警告とエラーを混同していると思われ

> warning C4003: マクロ 'a' に指定された実引数の数が少なすぎます。
2018/03/08(木) 17:10:32.81ID:/HWAGXcB0
関数型マクロの使用時、カッコの内側が空の場合に、
「引数が指定されていない」と解釈して警告を出すか、
「1個の引数(内容はヌルストリング)が指定されている」と解釈するか、
そういう問題みたいね。
2018/03/08(木) 23:40:10.76ID:nwTnwFPU0
>>292
>int8_tは内部がcharかもしれないけど便宜上charではありません。

普通はsigned charだな。当たり前。「charかもしれない」なんてこともありえない。
2018/03/09(金) 00:58:31.73ID:U4YZHGfl0
そういう一般仕様から外れるコンパイラの使用を強制させられたことあるの?
2018/03/09(金) 06:39:09.84ID:K2/JY7Cc0
cout << typeid(__int8).name(); //char
2018/03/09(金) 10:59:36.49ID:rlkWp7/Ip
誰だよCの話題に別言語持ち出してんの。
2018/03/09(金) 12:10:45.59ID:WqdE+VIZM
いやらCね
328デフォルトの名無しさん (アウアウカー Sa7b-vvOV)
垢版 |
2018/03/09(金) 12:13:57.64ID:LlK9d7kba
頭おかC
2018/03/09(金) 16:36:39.04ID:AbBnYUJz0
符号なし64ビット整数を64ビット右シフトすると
0にならないでそのままの時や変な別の値になるときがあるんですけど
コンパイラーのバグですか?
2018/03/09(金) 17:10:28.27ID:aCtfd81Na
>>329
もしかしてですが、
悪質なコンパイラに騙されているのでは?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況