C言語なら俺に聞け 154

■ このスレッドは過去ログ倉庫に格納されています
2020/01/14(火) 19:32:30.16ID:SgRnb4BR0
!extend:checked:vvvvv:1000:512
(新スレ立ての際上記コマンドを2行書き込んでください)
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言語なら俺に聞け 153
https://mevius.5ch.net/test/read.cgi/tech/1566050562/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2020/04/10(金) 21:38:00.03ID:bV/hR7tO0
>>561
setjmp と同じかより深いスコープまたはスタックフレームから戻ってくるだけだから、
setjmp の呼び出し時点で存在しているスコープであればローカルだろうとグローバルだろうと構わないよ。
2020/04/10(金) 21:49:38.93ID:bV/hR7tO0
補足すると、ローカル変数に置いた jmp_buf を呼び出し先の関数から直接参照することはできないから、引数かなにかでポインタを引き回さないといけない。
これ嫌ならグローバル使う感じじゃね。
2020/04/10(金) 22:06:15.16ID:upEOHZmS0
>>560
かっこ悪いぞ。ちゃんと作れ
2020/04/10(金) 22:06:35.43ID:upEOHZmS0
>>560
かっこ悪いぞ。ちゃんと作れ
2020/04/10(金) 22:24:00.75ID:aXPLRrP9M
>>560
プログラムカウンターも1bitじゃないからダメとか言いそうw
2020/04/10(金) 22:26:36.48ID:jlvstp5nM
>>562
> ああ、ちゃんとやってるよ
そりゃすげーな

> おまえやってないんだろ?
うん、性能も悪いしバカみたいだもんw

> C++の動きもわかってねえな
具体的に指摘しなよ
まあ出来ないから悪態しかつけないんだろうけど
2020/04/10(金) 22:34:25.59ID:gFmjwv7d0
>>563
それやるのにlongjmpなんぞ使わないだろって
普通にif (err) return;で戻ってくりゃいいだけじゃん
2020/04/10(金) 22:52:34.09ID:bV/hR7tO0
>>569
それで済むならそうすりゃいいじゃん。
2020/04/10(金) 22:56:16.19ID:bV/hR7tO0
>>569
いや、盛大な理解不足をしてそうだな。
そもそもとして setjmp をしたスコープから上位に出てしまったら longjmp はできないぞ?
setjmp をした時点のスタックが壊れていないことが条件だから。
572デフォルトの名無しさん (ワッチョイ 7b19-/9S9)
垢版 |
2020/04/11(土) 08:18:46.47ID:ESZwWJDK0
時間をトリガーとした実装について質問したいです。2つあります。

1
何時何分という絶対値をトリガーとしてスレッドを起動orコールバック関数の実行をしたいです。
どのような実装したらよいでしょうか。。

2
相対値、例えば何秒後というトリガーで1と同じ制限の処理をしたいときにはどうしたらよいでしょうか。

いずれも、任意個の処理とトリガーをつくりたいです。
POSIXの範囲でできるのが好ましいですが、不可能であればLinuxに依存してもOKです。

よろしくおねげーします。
2020/04/11(土) 09:19:58.59ID:mccf80iK0
つat & crontab
posix準拠
574デフォルトの名無しさん (ワッチョイ 7b19-/9S9)
垢版 |
2020/04/11(土) 09:27:13.95ID:ESZwWJDK0
>>573
一つのプロセスの中でやりたいんですよ。決してシステム管理の一貫ではないです。
2020/04/11(土) 10:02:10.80ID:1yaHqyx7M
>>572
2はsleepしてスレッド起動するだけだろ
1は 目的日時 - 現在時間 を計算して相対値にしてから2と同じ処理をすればいい
2020/04/11(土) 10:30:52.73ID:BTIsFQoK0
>>572
sleepしながら時刻を確認するタイマースレッドでも作れば?
直近の時刻まで時間があるなら大まかにループして、イベント時刻に近づいたら細かくループすればそこそこの分解能と低CPU時間を両立できるんじゃね。
新しいタイマーをリストに加えたらタイマースレッドに signal 投げれば sleep からすぐ戻るから再計算もできるでしょ。
2020/04/11(土) 10:47:05.13ID:qsSqqeEW0
pthread_cond_timedwait
じゃダメなん?
2020/04/11(土) 11:11:32.64ID:BTIsFQoK0
>>577
それでもいいんだろうけど、sleep に比べてこれといったメリットあるかな?
いや、ケチを付ける意図も無けりゃ sleep を推したいわけでもないんだけど、この場合の pthread_cond_timedwait は時間待ちをするだけの目的で使うんだよね?
2020/04/11(土) 11:20:14.71ID:vFamPbGj0
プロセスを都度起動でなく、常駐させる理由を書けば良いと思う
2020/04/11(土) 11:56:15.95ID:qsSqqeEW0
>>578
時間指定じゃなくて時刻指定だから
用途に合ってると思ったわけだが
2020/04/11(土) 12:13:08.97ID:BTIsFQoK0
>>580
なるほど確かに。
2020/04/11(土) 12:31:33.82ID:qsSqqeEW0
時刻にしたのは設計ミスだと思うけど
2020/04/11(土) 20:31:02.14ID:ESZwWJDK0
皆さんありがとうございます
>>576 案は実装ムズそう(KONAMI)
>>577 案をまず試してたい、と思っています
2020/04/11(土) 21:07:01.99ID:U1tTiVMl0
>>568
え、すげーの?????
2020/04/11(土) 21:18:35.44ID:AxqfFildM
>>584
うん、すごい
性能も悪いしバカみたいなことを得意げに語るところがw
2020/04/11(土) 21:29:37.03ID:BTIsFQoK0
例外処理っぽいことをやること自体が目的になってる感はあるな。
ある程度のところへ longjmp したら後は return でいいんじゃねーの?みたいな。
goto 使ってもいいしな。
2020/04/12(日) 06:36:15.91ID:GRbObigC0
>>585
longjmpが性能悪いわけねえだろ
悪いのはおまえの頭だ
2020/04/12(日) 07:04:02.05ID:CkeJkK0DM
>>587
うんlongjmpの性能はたいして悪くないよ
多少悪くてもガンガン呼び出すわけじゃないだろうしね
悪いのはsetjmpとlongjmpの区別もついてない君の頭だと思うw
2020/04/12(日) 07:49:02.13ID:GRbObigC0
なんでsetjmpとlongjmpの区別って話になるの? おまえ精神分裂病なのか?
2020/04/12(日) 08:09:51.13ID:onC+zfyaM
>>589
longjmpの性能とか言ってるのはお前だけ
妄想性障害かよw
2020/04/12(日) 08:27:20.43ID:GRbObigC0
>>590
ああ、性能悪いってのはおまえが書くコードのことか
なるほど551でヘボぶりを露呈したやつだからな
2020/04/12(日) 08:34:51.02ID:3HJi1EoTM
>>591
これまた意味不明なことを言い出したな

> longjmpが性能悪いわけねえだろ
はどうしたんだよw

あと前の話に噛み付くなら
>> C++の動きもわかってねえな
> 具体的に指摘しなよ
にもちゃんとレスしろよな
2020/04/12(日) 08:38:27.27ID:GRbObigC0
>>592
人に教えを請う態度ではないな
乞食野郎
2020/04/12(日) 08:43:03.32ID:GRbObigC0
煽れば情報が出てくると思ってやがる
2020/04/12(日) 08:50:35.16ID:3HJi1EoTM
お前に教えを請う?w

> まあ出来ないから悪態しかつけないんだろうけど
って書いてあることも理解してないのかよ
2020/04/12(日) 08:52:25.41ID:GRbObigC0
かすりもしない想像を開陳されても痛くも痒くもねえぜ
2020/04/12(日) 08:53:25.62ID:GRbObigC0
プログラミングだけでなくプロファイリングもど下手くそだな
頭悪いやつは何やっても同じってことだな
2020/04/12(日) 09:15:25.45ID:y4wlbrQWM
> longjmpが性能悪いわけねえだろ
って書いちゃって顔真っ赤になってはぐらかしに必死w
2020/04/12(日) 09:34:53.23ID:GRbObigC0
正しいことを言ったのに真っ赤になるわけねえだろアホ
もうテキトーこくしかなくなってやんのw
2020/04/12(日) 12:25:24.41ID:NktHaBkmM
longjmpが性能悪い?
どう悪いのか説明してみ
まあどうせまともな説明できないからまたごまかすんだろうけどw
2020/04/12(日) 12:46:20.80ID:XnFqx3xm0
longjumpを使ってループとかしちゃうんじゃないの?
2020/04/12(日) 13:28:21.70ID:/Fi25RTn0
何このスレ
C界隈って民度低いんだね
2020/04/12(日) 13:41:06.57ID:JUoERGEp0
レンジャー部隊のスレです
2020/04/12(日) 16:38:59.01ID:X+MKnNFs0
低きに流れて共に暴れる程度の度量もないのか。ケツの穴のセグメントの小さい奴らめ。
2020/04/12(日) 16:58:27.71ID:YHx2xXt40
GNUのlsのソースで状態遷移を使ったパーサーがあった
なんか自分の知ってる技術が使われてると嬉しくなるな
2020/04/13(月) 14:39:05.17ID:vztTI3R90
longjumpではなくlongjmpな

gccとclで結構違う
http://codepad.org/cm3uAblb
2020/04/16(木) 09:06:42.33ID:kHN+0sn+0
インラインアセンブラで1バイト相対ジャンプ命令使ったとき、
128バイト以上離れても警告されなくて何度もバグったわ。
当時はデバッガー使ってなかったし。
2020/04/16(木) 12:23:43.25ID:dbvXh7HJ0
インラインアセンブラでジャンプとか
2020/04/16(木) 12:30:43.74ID:Vn4RPyR40
流石にアセンブラソース部分のチェックはしてないと思うが
2020/04/16(木) 12:43:36.87ID:rwMm4haa0
アセンブラで条件分岐するにはジャンプは必ず使う
大抵の条件ジャンプ命令は相対ジャンプ
2020/04/16(木) 12:44:21.19ID:zHaHU1HF0
ショートブランチの射程距離ぎりぎりを使うときはうっかりミスなどあり得ない
通常はそんなことになるまでにロングブランチに切り替えるが
それをあえてショートで責める理由があるときは細心の注意を払う
2020/04/16(木) 12:52:02.41ID:dbvXh7HJ0
インラインアセンブラを使うのはせいぜい数行
それより多かったり分岐を含むのは
インラインじゃない普通のアセンブラ
intrinsicで済むのはintrinsicで

ていう考え
2020/04/16(木) 12:55:39.14ID:zHaHU1HF0
だよな
2020/04/16(木) 13:02:03.37ID:t+z6tGpZ0
インラインアセンブラって何のために使うの?
パフォーマンス的にはコンパイラの最適化に任せておいた方がマシな場合が多そうだけど
2020/04/16(木) 13:04:17.71ID:kHN+0sn+0
16bit時代で最適化なんて信用できんかった。
2020/04/16(木) 13:12:21.85ID:dbvXh7HJ0
ならなおさら
インラインじゃない方が良い
2020/04/16(木) 13:34:12.50ID:sXqqJ3Mr0
どうしても SIMD でその部分だけ実装したかった
あとから別のしくみがあることを知った
2020/04/16(木) 13:44:01.42ID:EClU3YdgM
>>614
コンパイラが吐かない命令使いたい時とかデータの特性がわかっててその特性に合わせた最適化したい時とか
2020/04/16(木) 13:51:33.32ID:zHaHU1HF0
rdrand命令とかね
2020/04/16(木) 14:19:30.03ID:CVnBB3Bm0
>>614
今時のCPUは最適化のためのルールが複雑で人の手に負えないからコンパイラ任せの方が大抵いいけど、昔はそうでもなかった。
まあそこまでキリキリにチューニングしたいならインラインアセンブラなんかじゃなくアセンブラで書く方がいいと思うけどね。

最適化以外だと、地味にローテートを多用するアルゴリズムだとアセンブラでやりたくなるよね。
他には、alloca とか longjmp とか効率のいい排他処理みたいな類いのアセンブラじゃないと書けない処理もあるし。
2020/04/16(木) 14:38:12.69ID:ZOahMNv90
ウイルス作るのに必要
データを実行したり、投機実行を狙って特権の必要な命令を配置したり
622デフォルトの名無しさん (ワイーワ2 FFdf-TqHL)
垢版 |
2020/04/16(木) 14:41:22.11ID:rX5xM8bmF
このスレのみなさんは逆汗したら判るんですか
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
2020/04/16(木) 15:26:37.26ID:zHaHU1HF0
EICAR知らないやついるの?
2020/04/16(木) 15:48:33.99ID:SI5o5TtZ0
ローテート命令を出力するcコードって書けるの?
2020/04/16(木) 15:49:08.18ID:SI5o5TtZ0
あとビットカウント
626デフォルトの名無しさん (ワッチョイ b732-xa8R)
垢版 |
2020/04/16(木) 15:51:36.77ID:gk/+OIqE0
cの関数の場合関数内でintを生成してそれに数値を代入してreturnして
戻った先で戻り値を使うことができる。そのままでdeleteする必要はない。
同じようにストラクチャでもできるの?
typedef strudt{ char x,y;] XY;
XY func(){
XY a;
a.x =1; a.y = 2;
return a;
}
void main(){
XY xy = func();
}
627デフォルトの名無しさん (ワッチョイ b732-xa8R)
垢版 |
2020/04/16(木) 15:57:13.19ID:gk/+OIqE0
int bitcount(int32 val){
 ct = 0;
 for(int i = 0; i < 32; ++ i){
   if( val>>1)++ct;
 }
 return ct;
}
628デフォルトの名無しさん (ワッチョイ b732-xa8R)
垢版 |
2020/04/16(木) 15:59:17.39ID:gk/+OIqE0
(val>>=1) & 1 の間違い
629デフォルトの名無しさん (ワッチョイ b732-xa8R)
垢版 |
2020/04/16(木) 16:03:06.35ID:gk/+OIqE0
int bitcount(int32 val){
 ct = 0;
 for(int i = 0; i < 32; ++ i){
   if( val & 1) ++ct;
   val >>=1;
 }
 return ct;
}
2020/04/16(木) 16:12:48.22ID:CVnBB3Bm0
>>622
先頭の pop ax で何が入ってくるのか分からなくて挫折したw

でもテキストな実行ファイルなら前にこんなの作ったよ。
https://dotup.org/uploda/dotup.org2114206.zip パスワード C
MSDOS用で 64bit windows上じゃ動かせないけど、DOSBOX とかで試せる。
C と関係無いしダウンロードしてまで見るのは面倒だと思うけど、見てもらえればちょっとは面白いかも。
2020/04/16(木) 17:40:43.86ID:Gd2rQJ6V0
>>624
a[i] = ( a[i] << 1) | ( a[i] >> 31);
って書いて普通にコンパイルしてみたが…
roll というのはローテート命令かい?
gcc で特に最適化は指定しなかったが。
632デフォルトの名無しさん (ワッチョイ 9fb6-xa8R)
垢版 |
2020/04/16(木) 17:44:50.58ID:ZrTWKD3l0
>>626
できるよ。
正確には関数が持ってた構造体(funcのa)を戻り先の構造体(mainのxy)へ代入している感じ。
構造体はコンパイル時にサイズが決まるのでintとかの値と同じようにコピーができる。

https://wandbox.org/permlink/AIZ0DCmCSZJpFhE1
2020/04/16(木) 18:14:58.35ID:JVCyOwUU0
>>626
ポインタで返しちゃイカンぞ
2020/04/16(木) 18:45:02.86ID:SI5o5TtZ0
>>631
おお、ちゃんと出力されるんだねthx
2020/04/16(木) 21:43:50.28ID:CVnBB3Bm0
>>631
ほんとだ、シフト数を変数にしてもちゃんとローテートになるね。
すごいね。
636デフォルトの名無しさん (ワッチョイ b732-xa8R)
垢版 |
2020/04/16(木) 21:47:10.87ID:gk/+OIqE0
>>633
ポインタで返さないなら、つまり関数内でメモリ確保したストラクチャでも値そのものを返すのであれば、受け取った側でdeleteしなくてもいいの?
typedef strudt{ char x[10000], y[10000];] XY;
XY func(){
XY a;
a.x =1; a.y = 2;
return a;
}
void main(){
XY xy = func();
}
2020/04/16(木) 22:09:56.27ID:B9NPrh+z0
おかしくね?
2020/04/16(木) 22:21:38.07ID:CVnBB3Bm0
>>636
その a のためのメモリはスタックフレーム上に確保されてて、関数から return すると黙ってても消えて無くなる領域だから、
new とか malloc なんかでヒープ上に確保するメモリと違って delete とか free とかはいらない。
関数 func を呼び出してる間、xy の領域と a の領域は同時に存在し、return するときに a の内容を xy にコピーして、a は func のスタックフレームと共に消滅する。
2020/04/16(木) 22:25:10.82ID:dbvXh7HJ0
int main(){
int a = 1;
return a;
}

これと一緒
2020/04/16(木) 22:53:15.47ID:Vn4RPyR40
うつりにけりなわが値
やがてすべてが過ぎ去るあとも
あなただけを想う
2020/04/16(木) 23:41:19.91ID:GrYlaJ670
詩的!
抱いて!
642デフォルトの名無しさん (ワッチョイ b732-xa8R)
垢版 |
2020/04/17(金) 07:11:17.78ID:AqgoekXO0
>>638
なるほど!!よくわかりました。
関数はreturn値を呼び出し側にコピーして実行完了となりstackを開放する。
local 変数はstack上に作るので実行完了まではlocal変数の内容は保持される
が実行完了で自動的に消滅する。
ということですね。
2020/04/17(金) 11:34:39.45ID:0SFvwi0RM
常識過ぎてデフォルトコピーコンストラクタみたいな盲腸がC++に埋め込まれてしまったんだよ
あくまでC言語の中でコーダーが工夫し不便を乗り越えてた常識なのにね
2020/04/17(金) 12:08:02.28ID:uZ4GpX9X0
>人間の虫垂は、親知らずや体毛と同じように、かつては必要とされていたが今は
>なくても問題なくやっていける器官と考えられいた。

>しかし、虫垂がかつて何をしていたのか、また実際にいま用無しなのかについては、
>これまで明確になっていなかった。そんななか、米ミッドウェスタン大学の研究者が
>主体となった研究が発表され、この問題にひとつの答えが提示された。虫垂は、
>免疫細胞の反応を促し、有益な腸内細菌(善玉菌)が減少するとこれを増やすという
>二次的な免疫機能を担っているという。この役割は限定的な形ながら、いまも人間
>の体内で継続して機能している。

https://www.kagaku-kentei.jp/news_detail/data/355

むだなものなんて一つもない
2020/04/17(金) 12:30:59.31ID:AkLTGvvI0
>>644
進化退化の結果、無駄になっちゃったものなら結構あるよね
ケツ毛とか、人差し指から小指までの腱間結合とか
2020/04/17(金) 12:32:10.12ID:uUpf2Y3l0
人間自体無駄
647デフォルトの名無しさん (ワイーワ2 FFdf-xa8R)
垢版 |
2020/04/17(金) 14:09:42.57ID:3B9MCfUYF
虫垂炎で虫垂取っちゃった人はコロチャンに弱いってことかな
2020/04/17(金) 14:35:48.83ID:uUpf2Y3l0
いらないと思って取っちゃったよ
649デフォルトの名無しさん (ワイーワ2 FFdf-xa8R)
垢版 |
2020/04/17(金) 15:10:48.97ID:3B9MCfUYF
2020/04/17(金) 16:18:03.57ID:xoWFQBId0
パイエル板みたいなもんか
651デフォルトの名無しさん (ワッチョイ 9fad-Ho7r)
垢版 |
2020/04/18(土) 13:49:13.30ID:VYQrLT4k0
>>645
環境が変化した場合に再度必要になるかも知れないのでなんとも言えない。
地球の自然環境は変化し続けるしね。
652デフォルトの名無しさん (ワッチョイ 9fad-Ho7r)
垢版 |
2020/04/18(土) 14:51:32.00ID:VYQrLT4k0
>>646
この世界全体が無駄と言えば無駄だな。

まあしかし人間は自分の欲望を満たすものに対して無駄がないと感じるだけのことなので、
欲望がなくなればそれもなり全てはあってもなくても良いどうでも良いものになる。
2020/04/20(月) 16:26:18.96ID:LGT//Bm+0
>>644
扁桃腺切除、アデノイド切除もだな
https://indeep.jp/dont-remove-tonsils-of-kids/
654デフォルトの名無しさん (アウアウエー Sadf-xa8R)
垢版 |
2020/04/21(火) 11:05:50.29ID:dT9nwdnwa
石田晴久ってまだ生きてんの?
2020/04/21(火) 12:05:14.25ID:asepdmU3M
鬼籍の人
2020/04/21(火) 12:19:27.00ID:kyWq+dbI0
https://de.wikipedia.org/wiki/Haruhisa_Ishida
2020/04/22(水) 04:04:56.61ID:P99VZQTl0
c言語用のおすすめwebフレームワークplz
2020/04/22(水) 08:56:18.23ID:tIkd0GYk0
go言語ならたくさんあるんじゃね
2020/04/22(水) 09:31:17.33ID:94fF+/tAM
4(C)言語、5(GO)言語とおすすめwebフレームワークが増えるの?
6言語は何?
660デフォルトの名無しさん (アウアウエー Sa6a-0GGu)
垢版 |
2020/04/22(水) 10:11:23.93ID:O/jaLKmba
サイボウズのCGIってCで描かれてるんだっけ
2020/04/22(水) 10:20:50.37ID:obS+r2in0
>>646
こういう悟り厨ほど自分が死ぬときにはめちゃくちゃ言い訳しまくるもんよ。
2020/04/23(木) 23:53:15.47ID:wF6p0RUq0
英小文字の出現回数を出現した文字だけ数えたいのですがうまくいきません
ご指導お願いします


#include <stdio.h>

int main(void) {
char ch;
int cc[26] = {0};
int i;

for(;(ch=getchar())!=EOF;){
if((ch>='a')&&(ch<='z')){
cc[ch-'a']++;
}
}




for (i='a'; i<'z'; i++) printf("%c:%d\n", i, cc[i+'a']);

return 0;
}
2020/04/24(金) 00:19:05.81ID:dt1qmdTj0
これはC言語なのか?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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