C言語なら俺に聞け 161

■ このスレッドは過去ログ倉庫に格納されています
2023/04/21(金) 14:05:20.18ID:rqj2HSDF0
!extend:checked:vvvvv:1000:512
(新スレ立ての際上記コマンドを2行書き込んでください)
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

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

C11
http://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
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言語なら俺に聞け 160
https://mevius.5ch.net/test/read.cgi/tech/1672191630/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2023/08/11(金) 17:26:57.28ID:v1edpQDwa
>>407
使えるものは使えば良い
昔の方がシンプル

>>410
MFCやATL/WTLやCOMやQtやwxWidgets使いたいならC++だが
生WindowsAPIとSDKやCOMやOpenGLやtcl/tkとか使うならCで充分
むしろCが標準と言っても良いので勉強用ならC
412デフォルトの名無しさん (ワッチョイ e3ad-c/5M)
垢版 |
2023/08/11(金) 17:52:29.73ID:j3k4ZyED0
なるほど。
2023/08/11(金) 17:54:37.84ID:Ib19PZqn0
最初残ろは16ビットアプリだったから、
メモリーモデルやアプリが使用可能なリソースサイズなど
結構管理が大変だった記憶がある
2023/08/11(金) 17:55:37.06ID:Ib19PZqn0
最初のころは

なんて変換するんだよ・・・
2023/08/11(金) 18:22:42.78ID:WGGkjKOg0
勉強目的の縛りプレイじゃなければ最初からCじゃなくC++使う方が良いと思うが。
2023/08/11(金) 18:30:11.06ID:I7dwFhkG0
いまだにCOM ATL DirectX IDL辺りの定義見るとC知識では手に負えないイメージ
C++MFC全盛の時代は本当に嫌いだった
C#でそれらに一切関わる必要がなくなってほんと良かったわ
2023/08/11(金) 18:52:16.19ID:DMm7pQwE0
古いAPIの設計思想が時代に合わないのも多いし、フレッシュな知識を蓄積したほうがいいという意味ではWinRTかな
2023/08/11(金) 19:09:53.39ID:I7dwFhkG0
>WinRTかな
名前が終わってる
419デフォルトの名無しさん (アウアウウー Sa9d-mBaV)
垢版 |
2023/08/11(金) 19:10:12.84ID:v1edpQDwa
DirectXはCでも使える
420デフォルトの名無しさん (アウアウウー Sa9d-mBaV)
垢版 |
2023/08/11(金) 19:11:09.76ID:v1edpQDwa
MFCは糞だから触るな危険
421デフォルトの名無しさん (アウアウウー Sa9d-mBaV)
垢版 |
2023/08/11(金) 19:12:06.88ID:v1edpQDwa
WinRTはないな
2023/08/11(金) 19:17:33.71ID:yxSWeMo+0
とりあえず現在でWindowsアプリのプログラミングを始めるにあたり、C言語というのはやめるべき
悪いこと言わないからせめてC++にしておけ
そして楽に作りたいならC#にしておけ
2023/08/11(金) 19:26:30.18ID:EnF/lRSf0
C でやってみれば (やれるだけの知識を身に付ければ) 低レイヤで何が起こっているのかという具体的なメカニズムを理解できるという意味で悪くはないと思う。
ただ、今となっては日常的にやるもんではない。
2023/08/11(金) 19:26:45.26ID:I7dwFhkG0
C#で.NETにない事をやろうとするとpnvoke知識が必須だから
Cを適当に摘みつつC#でいいんじゃなかろうか
C++はもう時間の無駄
時間が無限にあるならどうぞ
2023/08/11(金) 19:35:56.75ID:Ib19PZqn0
Windowsの動作原理を学びたいなら、SDKやMFCは良いと思うよ
2023/08/11(金) 19:53:56.21ID:eb/xI15cM
今のWindowsの最新のUIは全てWinRTの上に構築されている
Githubでソース見れば一目瞭然
完全に今のWindowsの基礎となるAPI
無知というのは罪だな
2023/08/11(金) 19:58:54.93ID:I7dwFhkG0
まさかWinRTでマウント取ろうとする馬鹿が居ると思わないわ
2023/08/11(金) 20:00:58.18ID:xXGnDnZp0
黙NG
2023/08/11(金) 20:32:13.88ID:iNvWur52M
>>427
無知乙w
正論にキレるの図w
反応しなきゃいいのにw
2023/08/11(金) 20:35:15.14ID:iNvWur52M
>>427
WinRT終わってるとか無いわーw
2023/08/11(金) 21:00:42.88ID:Ib19PZqn0
変なのが湧いてきたね
2023/08/11(金) 23:10:37.93ID:je510yk+0
mallocの戻り値は代入先のポインタ型にキャストして使おうと言ってる入門サイトがほとんどです。
これは正しくなくて、キャスト不要が正しいと思いますが達人の皆さんの意見はどうですか。
2023/08/11(金) 23:16:31.85ID:WGGkjKOg0
void*はキャストしなきゃ使いようがないだろ
2023/08/11(金) 23:37:09.78ID:903ETN7Yd
C++ならvoid*からのキャスト必須。C言語ならキャスト不要。
2023/08/11(金) 23:43:24.35ID:ayxoKHEe0
現場猫案件。
2023/08/12(土) 00:37:36.88ID:dWTISXa3M
>>431
害悪はオマエだろ!
WinRTが終わったAPIみたいなフェイクを正したんだよ!
WinUIとかGithubでソース公開されてんだから、ソース見れば一目瞭然だろ!
2度とフェイクを書き込むなよ!
2023/08/12(土) 01:20:09.40ID:PG846lpi0
もしかしてWindowsRT(ARM版Windows8)と勘違いしてたりして
2023/08/12(土) 02:14:36.52ID:dWTISXa3M
WindowsRTは失敗したプロダクトだけど、WinRTは完全にWin32を置き換える為のモダンな基盤APIになった
ちなみにWinRTに関する情報は全然出回ってないな(少なくとも日本では)
MSも直接使うAPIじゃないと考えてるのかもしれない
実際、WinUI3とかを通して使うことになるのだろう
2023/08/12(土) 02:21:43.01ID:dWTISXa3M
MSは一時的に、DirectXやActiveXみたいにRTを流行らそうと考えてたふしがある
でも、まったく浸透せずにRTに悪いイメージだけが残ったw
440デフォルトの名無しさん (アウアウウー Sac7-DXLR)
垢版 |
2023/08/12(土) 04:30:30.39ID:XzrhAFZoa
ないわ
2023/08/12(土) 11:53:24.11ID:BlsfQ4Nv0
>>432
型変換とキャストを混同して説明していることがそれなりにある。
それとは別に不要でもキャストすべきかどうかというのは習慣の問題。 人にとっての読みやすさは仕様上の要・不用とは別の話なので明瞭な答えはない。
2023/08/12(土) 12:15:02.77ID:ufIhf+igM
UWPのWinRTでファイルアクセスなどに制約がある場合があって
APIレベルでセキュリティ上の制限があるのかと思ってたが間違いで
他のプラットフォームで呼ぶと普通に色々アクセス出来てしまう
2023/08/12(土) 14:04:01.34ID:DbL0Mu2X0
そろそろ他所でやってくれんか
普段Windowsには世話になってるけどUWPの存在には憎しみさえ感じる
444デフォルトの名無しさん (ワッチョイ 9aad-eQmn)
垢版 |
2023/08/12(土) 14:18:40.69ID:2oorck2f0
>>441
cast という単語には型変換の意味があると思うが?
で、実際にプログラミング言語では型が変換されるから、型変換で良いんじゃないの?
2023/08/12(土) 14:53:08.69ID:BlsfQ4Nv0
>>444
Cの仕様上の意味合いとしてはキャストという用語は構文 (記法) を指している。
括弧の中に型を書いたやつを式の前に置く、あの構文のことね。

キャストを使わない形でも (暗黙の) 型変換が起こることはあるし、
型を変えないキャストも出来る。 型変換とキャストは同一ではないよ。

カジュアルな場合では文脈でわかるし、ときには同一視してもいいこともあるけど >>442 の文脈では
構文のことを言っているのか型変換のことを言っているのかで事情が変わってくるので
厳密でなくても良いとは言えない。
2023/08/12(土) 14:54:12.64ID:BlsfQ4Nv0
>>445
アンカーを間違えた。 >>442 じゃなくて >>432 ね。
447デフォルトの名無しさん (ワッチョイ 9701-DXLR)
垢版 |
2023/08/12(土) 20:19:50.46ID:eS+ePZlf0
「毎日出社したい」わずか3.8% リモートワーク経験者に聞いた

学研ホールディングスのグループ会社であるベンド(東京都千代田区)は、リモートワーク
経験者を対象に「リモートワークに関するアンケート」を実施した。その結果、半数近くの
人が「週5(フルリモート)」(44.4%)をリモートワークの理想の頻度だと考えていること
が分かった。
次いで「週3〜4」(30.7%)、「週1〜2」(20.1%)と続き、96.2%の人がリモートワークの
継続を希望していることが分かった。毎日出社を希望する人は、わずか3.8%だった。
出社を希望しない理由は「通勤にかかる時間や体力がもったいない」「子どもの都合で、
リモートワークのほうが仕事と家庭のバランスが取りやすい」「職場の人と毎日顔を合わせる
のはさすがにつらい」といった意見が寄せられた。
 一方、「コミュニケーションが取りにくくなる」「出社しないとできない業務がある」
「たまには出社もいい気分転換になる」など、完全リモートだと不都合だという声もあった。
2023/08/12(土) 22:15:14.90ID:jlvbpae70
>>445
冗長 int *p = (int *)malloc(400);
簡潔 int *p = malloc(400);

ということを言うつもりで書きました。
2023/08/12(土) 22:54:57.04ID:BlsfQ4Nv0
>>448
仕様上は暗黙の型変換が適用される場面。
キャストを書かなくても型変換はされることが保証される。

ただ、 >>434 で言及されているように C++ ではキャスト必須なのでそれに合わせる (ことで C++ としてもコンパイルできるようにする) ほうが好ましいという考え方もある。 これが暗黙に変換できてしまうのは良い仕様とは言えないのは確かだからより厳しいルールの C++ に合わせるのも一応の合理性はある。

誤解の余地もない (と思う) ので私はキャストを書かない派なのだけど、以前にツイッターかどこかのアンケートで見た感じでは拮抗してて、どちらが優勢というわけでもなかった。
450デフォルトの名無しさん (アウアウウー Sac7-DXLR)
垢版 |
2023/08/13(日) 11:59:59.00ID:mxfdwtiAa
int *p = (int *)malloc(400);
冗長ではないよ
2023/08/13(日) 22:00:40.70ID:37XsjItY0
C++でnewではなくmallocをあえて使う理由って何かあるのかな?
2023/08/13(日) 23:29:06.42ID:oUeYwTCa0
>>449
くわしくありがとう。そういう見方もあるのですね。
アンケートで拮抗というのはわかる気がしていて、その理由が入門書やサイトにあるのではと思うのです。

>>450はなぜそう思いますか。
2023/08/14(月) 00:14:53.81ID:VnUPK1/b0
void *が無かった頃はmallocもintやchar *を返していた時代がある
処理系渡り歩いてきた老害ほどmallocでキャストしたがるだけだろ
大した話でも何でもない
454デフォルトの名無しさん (ワッチョイ 9aad-eQmn)
垢版 |
2023/08/14(月) 00:21:55.24ID:B5PklEie0
可読性を上げるためでもあるのでは?
2023/08/14(月) 00:30:57.60ID:sy90BXR10
>>454
可読性が上がるだろうか? 少なくとも >>448 のように変数の型がその行に書いてあるようなケースでは
誤読の余地は全然ないように見えるので同じ情報を重複して書く意味が感じられない。
456デフォルトの名無しさん (ワッチョイ 9aad-eQmn)
垢版 |
2023/08/14(月) 00:38:36.06ID:B5PklEie0
まあ確かに型がすぐ分かる場合は意味ないな。
457デフォルトの名無しさん (ワッチョイ 4e46-8Neb)
垢版 |
2023/08/14(月) 09:03:40.40ID:6kZXa4aF0
>>448
組織(会社とか)のコードだと、どんな水準の人がメンテするか分からないので、冗長を採るかな。

> 冗長 int *p = (int *)malloc(400);
2023/08/14(月) 09:28:55.46ID:4XD1xMqSM
この話が一番冗長だtoomou

kanjidenakunatta
2023/08/14(月) 10:36:19.28ID:sy90BXR10
>>452
K&R の第二版 (日本語版) でもキャストは必要だと書かれているんだよなあ……。
本の最後に仕様をまとめているところでは暗黙に変換されることも言及されているのでおそらく改定漏れなだけなんだろうけど。
かなり長く定番の入門書だったのでこの本の影響も大きいと思う。
2023/08/14(月) 11:55:47.09ID:s6PscRDz0
暗黙に変換って、プログラム書いてる本人の意図通りなら良いんだけど
意図と違った変換するとやっかいだな
2023/08/14(月) 13:20:28.84ID:JlnnwsPwM
ここがC言語スレだと思い出して欲しい
2023/08/14(月) 13:23:53.19ID:4NX3l0Vmd
Cの暗黙の型変換なんて高が知れてるだろ
2023/08/14(月) 14:02:18.88ID:XhXbjspZM
昔のmalloc()ってchar*とか返してた気がするな
最初っからvoid*って有ったのだろうか?
2023/08/14(月) 14:16:28.68ID:JlnnwsPwM
すべての戻り値はintである
ポインタかどうかは書いた人間がが判断する
2023/08/14(月) 15:03:08.99ID:s6PscRDz0
(void)main(void)
2023/08/14(月) 15:17:16.05ID:MULxLxBHd
>>464
AIが混乱するようなことを言わないでほしいも
2023/08/14(月) 16:43:05.60ID:sy90BXR10
>>464
それ LLP64 でも同じこと言えるの?
2023/08/14(月) 17:46:44.25ID:3TQy/ZGT0
>>464
それはB言語のようなミニ言語やBLISSやアセンブラのようなシステム記述言語でよくあるやつだな。
そういう血塗られたルーツを持つCが普及してしまったのがこの大災害の原因ではあるが。
2023/08/14(月) 18:03:50.08ID:s6PscRDz0
今は血を流さずに戦争ができます
2023/08/14(月) 18:07:41.52ID:WVbdJjmk0
ポインタじゃない構造体の代入はメモリコピーで、intじゃないよね
2023/08/14(月) 18:22:17.15ID:WVbdJjmk0
>>467
それですよ。

あと、実際の案件で
メモリバスが32より大きい環境でも、64ビット全部が使われてるとは限らないです。
あるビットにこう入ってたら40ビットのxxメモリ空間を指し、あるビットにこう入ってたら48ビットのyy空間を指す、とか
ポインタ値にも複数の種類がある(ように設計する事がある)

何が言いたいかというと全部intだなんてのは、分かってない証拠
2023/08/14(月) 18:39:04.59ID:s6PscRDz0
可変長のポインタって、すごいな
2023/08/14(月) 18:42:29.14ID:JlnnwsPwM
昔は関数から戻り値として構造体が返せなかった
MSか勝手に実装した
2023/08/14(月) 18:47:31.20ID:s6PscRDz0
返せなくても困らなかったけど
例えばポインタで返しているAPIはいくつかあるだろうし
呼出時に渡す構造体で返すやり方も普通にある(こちらの方が多いかも)
2023/08/14(月) 21:33:10.14ID:VCWTWKLb0
8051風のMCUにはメモリ空間が複数種類あるものがあって、どのメモリ空間をポイントするかによってポインタのサイズが1byteか2byteかに分かれるというのがありました。
2023/08/14(月) 22:08:33.35ID:sy90BXR10
>>473
K&R の初版 (1978 年) の段階では
構造体を関数の返却値に出来る仕様ではなかったのは確かだが
その制限は将来的に削除されるとも書いてある。
構造体を返せるようにするのは設計者の計画の内だ。

最初に実装したのが誰なのかは知らんが「勝手に」とは言えないだろう。
2023/08/14(月) 22:12:43.60ID:s6PscRDz0
えてして実装が先で、規格になるのは後
というのはよくある話
2023/08/15(火) 18:53:02.89ID:hBALyWzq0
規格が先行することなんて無いでしょ
出来レースみたいな例外を除けば
479デフォルトの名無しさん (ワッチョイ 4ecf-eQmn)
垢版 |
2023/08/15(火) 19:27:12.11ID:RzZaP1Xc0
仕様もクソもANSI Cが出来るまでCに仕様だの規格だの自体がなかったよ
K&Rにしても当時はあくまで標準って位置づけだったし、各処理系で互換性のない部分が結構ある時代だった
そもそもK&Rって本自体Cの言語としての仕様を示すための本じゃなくて、Cの使い方を説明するユーザーガイド的な書籍だしな
大体、当のデニスリッチーからしてK&R初版の時点で自分のコンパイラではすでに構造体のやりとりを実装させてたんだから
480デフォルトの名無しさん (ワッチョイ f358-yhDR)
垢版 |
2023/08/17(木) 17:55:25.45ID:3zgw8j7r0
K&Rはバイブルってだけ
宗教に喩えて開祖だか教祖だかが著したもの
2023/08/17(木) 17:57:11.47ID:PGwDphC60
バイブルに従え
482デフォルトの名無しさん (ワッチョイ 4e46-8Neb)
垢版 |
2023/08/17(木) 18:38:44.78ID:ZHeAFIgr0
C言語ルター派
2023/08/17(木) 19:50:44.50ID:J3LrsntM0
般若心経
2023/08/17(木) 20:29:24.71ID:o4Mq35bqd
>>481
天国が来るだろう(構造体の戻り値)って書いてあるんだから天国の到来を疑ってはいかんだろw
2023/08/19(土) 16:55:05.41ID:YiVhsdBOa
剣かK&Rか貢納か
2023/08/19(土) 21:36:28.88ID:cGpjgVdNM
天国から帰ってくるのはヨッパライくらい
2023/08/19(土) 22:45:11.13ID:/061VjvDr
なーおまえ、c言語ちゅーもんはそんなに甘いもんやおまへんのや。もっと真面目にやれー
488デフォルトの名無しさん (ワッチョイ 93ad-qLW0)
垢版 |
2023/08/20(日) 15:24:28.02ID:pbHEs6OP0
>>480
そういう感じでバイブルと呼ばれる本がいくつかあって、暫くしたら本のタイトルにバイブルって入ってるやつが出てきてアホかと思った事がある。
まあ、本のタイトルは出版社側がなんとなく売れそうな感じのものを考えて付ける事が多いらしいので仕方がない事なのかも知れないが。
489デフォルトの名無しさん (ワッチョイ 93ad-qLW0)
垢版 |
2023/08/20(日) 15:26:20.60ID:pbHEs6OP0
>>487
レコードの回転数変えるように。

などと書いて話が通じる人は年寄り。
2023/08/20(日) 16:08:23.89ID:CcD0k09aM
33回転、45回転、78回転
2023/08/20(日) 16:45:30.39ID:bQFpfsbr0
LP 33+1/3 回転を更に Long Play 化したのが LLP64 なの?
2023/08/20(日) 20:08:06.72ID:GxzweHHZ0
針ってまだ売ってるんだな、知らなかったw
2023/08/20(日) 20:37:34.57ID:qQCDJN6bM
逆に今はレコードブームだし
2023/08/20(日) 20:38:55.31ID:WX+gcEAed
>>491
なんで回転数早くなってるねんw
2023/08/20(日) 20:40:51.45ID:qQCDJN6bM
回転数が速いと情報量が増える
要するに音質が良くなるんだろ
2023/08/20(日) 21:28:54.03ID:CVtYBdI90
>>492
いまどきのレコードプレイヤーはレーザーで読み取るタイプのもあるんやが
音質や使い勝手よりも針を落とす感覚が好きな懐古趣味の人も
少なからずいそうやなと思う。
2023/08/20(日) 21:44:18.30ID:GxzweHHZ0
そのうち量子センサーなんてでてきて、
盤面を一瞬で読み取って再生する何て出てくるかもね
知らんけど
498デフォルトの名無しさん (ワッチョイ 93ad-hPrW)
垢版 |
2023/08/20(日) 22:47:50.93ID:pbHEs6OP0
盤面を写真撮影して凹凸を一度に全部読み、後は再生するだけ。なんてのはできそうだな。
2023/08/20(日) 22:56:04.52ID:pKCQsYPtM
>>498
盤面をスマホで読み取らせて、それを再生してると思わせといて、実はラベルを解析して事前に録音済みのデータを再生するという、イカサマサービスを思い付いたw
2023/08/20(日) 23:03:56.28ID:P3ytobrG0
こまわりくんはレコードの溝読めたな。
501デフォルトの名無しさん (ワッチョイ 93ad-hPrW)
垢版 |
2023/08/20(日) 23:13:57.98ID:pbHEs6OP0
>>499
OCRプログラムでラベルの写真のタイトル部分の文字列読ませれば可能だが、問題は、ラベルに似せたものの上に書いた文字でも同じように読んで成功してしまうことだ。つまりレコード不要。
2023/08/20(日) 23:16:52.12ID:GxzweHHZ0
そういえばオープンリールも速度とトラック数にこだわりがあったな
2023/08/20(日) 23:22:22.29ID:pKCQsYPtM
>>501
さすがにレコードか位は判別可能なんで、そういう誤魔化しは除外できるでしょ
つうか、インチキなんだからどうでもいいんだけどねw
2023/08/20(日) 23:46:32.25ID:WX+gcEAed
人間「このレコードかけて」
AIスピーカー「かしこまりました…あーあーはってしーないー」
人間「お前が歌うんかい!」
2023/08/21(月) 00:56:03.52ID:h/vumT/U0
>>499
ワロタ

…でも「顧客が本当に必要なもの」はそれかもしれない
2023/08/21(月) 00:58:44.27ID:EVtKvg8p0
曲を再生して、それをスマホに聴かせ、曲名やアルバム名を調べる

というのは割と使ってる
507デフォルトの名無しさん (ワッチョイ 7101-vfxM)
垢版 |
2023/08/23(水) 12:33:50.88ID:WRsTeN290
localtimeでtm型のポインタが返ってきますが
これはfreeのような後始末はしなくても良かったんでしたっけ?
以下のt1の後始末です

#include <time.h>
#include <stdio.h>
int main () {
time_t t0 = time (NULL);
struct tm *t1 = localtime (&t0);
return 0;
}
2023/08/23(水) 12:46:33.56ID:RWX4pd1L0
不要
静的な領域なんで
その代わりスレッドセーフじゃないし
次に呼び出したら値が変わっちゃうのでそのまま使うならコピー必須
2023/08/23(水) 13:08:22.64ID:d+s8esX90
時間系関数の一部では同じ型のポインタを返す他の関数が
内容を書き換えることもあるということにも気を付ける必要がある。

つまり localtime が返したポインタが指す先は
gmtime の呼び出しで内容が変わるかもしれないし変わらないかもしれない。
2023/08/23(水) 13:18:07.19ID:WRsTeN290
>>508,509
あざーす!
思い出しました! そうでした
2023/08/23(水) 13:23:04.60ID:Tm9lJ2oNd
Cの標準ライブラリはメモリ操作関係やsprintfみたいな書式出力系以外は古臭くてほぼ使い物にならないから
システムのAPIを直接呼んだ方がいいよ
ガハハ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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