!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言語なら俺に聞け 162
https://mevius.5ch.net/test/read.cgi/tech/1698653580/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
探検
C言語なら俺に聞け 163
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 7bba-Lem2)
2024/07/16(火) 22:43:54.18ID:ZrsCjURC02デフォルトの名無しさん (アウアウエー Sa02-hIhh)
2024/07/16(火) 23:09:40.55ID:zAWhziLLa O2
4デフォルトの名無しさん (ワッチョイ b132-HYxY)
2024/07/17(水) 02:16:43.37ID:rcKIBlXh05デフォルトの名無しさん (スプッッ Sda5-cSaw)
2024/07/19(金) 12:09:58.52ID:7xb1gIFBd6デフォルトの名無しさん (ワッチョイ be2d-Xdjv)
2024/08/13(火) 10:33:10.70ID:0tpsfiHy0 C99以降のC言語では、main関数が正常に終了した場合、
明示的にreturn 0;を記述しなくても、コンパイラが自動的にreturn 0;を
挿入することが規定されています。
これにより、main関数の最後にreturn文を省略することが可能になりました。
これまじ?
いや省略できるのは知ってたけど
書かなくても言語仕様的に正しいってことなのでは
明示的にreturn 0;を記述しなくても、コンパイラが自動的にreturn 0;を
挿入することが規定されています。
これにより、main関数の最後にreturn文を省略することが可能になりました。
これまじ?
いや省略できるのは知ってたけど
書かなくても言語仕様的に正しいってことなのでは
7デフォルトの名無しさん (ワッチョイ 2e2a-Fna2)
2024/08/13(火) 10:54:13.55ID:rWI8dcbL08デフォルトの名無しさん (ワッチョイ c25c-PXPr)
2024/08/13(火) 11:02:03.46ID:zgXpATPx0 C++の方は最初からそうじゃなかったっけ?
9デフォルトの名無しさん (ワッチョイ 2e63-mJNK)
2024/08/13(火) 11:04:04.36ID:iZOfVN0Y0 ところで、main以外はどうなんだろう
mainだけ特別って事なのかな?OSとも絡むし
mainだけ特別って事なのかな?OSとも絡むし
10はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ed32-6HV9)
2024/08/13(火) 11:58:17.89ID:ZDyvNux60 >>9
retunr 0; が補われるルールは main だけの特別扱いだけど……。
関連する変な規則として C では関数の返却値の型が void ではないときに return せずに } に到達、かつ、関数の呼び出し元が値を使おうとするのは未定義ということになってる。
逆に言えば } に到達するだけなら OK ってことね。
C++ だと関数の返却値の型が void でないときに return せずに } に到達するだけで駄目という違いがある。
retunr 0; が補われるルールは main だけの特別扱いだけど……。
関連する変な規則として C では関数の返却値の型が void ではないときに return せずに } に到達、かつ、関数の呼び出し元が値を使おうとするのは未定義ということになってる。
逆に言えば } に到達するだけなら OK ってことね。
C++ だと関数の返却値の型が void でないときに return せずに } に到達するだけで駄目という違いがある。
11デフォルトの名無しさん (ワッチョイ 6e83-2R4J)
2024/08/13(火) 20:38:38.66ID:Yor/eSuX0 >>9
値を返さない関数ならreturnは省略できる
値を返す関数だと戻り値が不定になる
(多分コンパイルでwarningが出るか最近のではerrorになるだろうな)
そのくらい一度も試したことないのか?
値を返さない関数ならreturnは省略できる
値を返す関数だと戻り値が不定になる
(多分コンパイルでwarningが出るか最近のではerrorになるだろうな)
そのくらい一度も試したことないのか?
12デフォルトの名無しさん (アウアウエー Sa4a-ZlnX)
2024/08/14(水) 08:45:20.95ID:92pG5tQ9a CPUが最後に処理したアキュムレータの内容が
戻り値として有効になってるケースが多い
違う実装があったら教えてくれ
戻り値として有効になってるケースが多い
違う実装があったら教えてくれ
13デフォルトの名無しさん (ワッチョイ 65c8-tndV)
2024/08/14(水) 09:29:38.29ID:o5Tm+MCf0 戻さないで自動的に挿入されるのならvoidでいいやん
14デフォルトの名無しさん (ワッチョイ 6e83-2R4J)
2024/08/14(水) 16:14:28.35ID:91FNum+4015デフォルトの名無しさん (ワッチョイ 42ad-ZlnX)
2024/08/17(土) 12:40:14.00ID:P2kCpMMm016はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ed32-6HV9)
2024/08/17(土) 17:19:02.88ID:w43wc/GB0 >>12
最適化が絡むとなんでも起こる。
GCC でやってみた。
https://godbolt.org/z/rzoEqdYWz
インライン化と合わさったときはおそらく
「なんでもいいなら事前に適当な定数 (この場合はゼロ) に置き換えてええやろ」ということが起こってる。
インライン化を抑止したらそのときに入ってたでたらめな値になる。
最適化が絡むとなんでも起こる。
GCC でやってみた。
https://godbolt.org/z/rzoEqdYWz
インライン化と合わさったときはおそらく
「なんでもいいなら事前に適当な定数 (この場合はゼロ) に置き換えてええやろ」ということが起こってる。
インライン化を抑止したらそのときに入ってたでたらめな値になる。
17デフォルトの名無しさん (ワッチョイ 9f2a-0AGY)
2024/08/18(日) 12:47:05.86ID:z2E2wJpW018デフォルトの名無しさん (ワッチョイ 7fad-9uNt)
2024/08/19(月) 14:50:35.14ID:2a6IfSVu019デフォルトの名無しさん (ワッチョイ ff63-bHMQ)
2024/08/19(月) 15:05:46.71ID:V1kjWLO50 アキュムレータって呼び名、いかにも電卓っぽい
20デフォルトの名無しさん (スプッッ Sdc1-qo4T)
2024/08/26(月) 18:48:30.29ID:cPELMU3ld ヘッダファイルちゃんとincludeしようよ。
21デフォルトの名無しさん (ワッチョイ 6e63-wgTk)
2024/08/26(月) 19:32:21.98ID:0fQF2fer0 ヘッダーファイルインクルードする1行だけのプログラム見たことがある
#include /dev/tty
#include /dev/tty
22デフォルトの名無しさん (ワッチョイ 72d5-KJKb)
2024/08/27(火) 00:49:35.29ID:9npsKRkS0 それヘッダファイルじゃないです
23デフォルトの名無しさん (ワッチョイ 6e2a-EI2W)
2024/08/27(火) 08:24:35.00ID:apM/pcD70 エラー: #include は "FILENAME" または <FILENAME> が必要です
24デフォルトの名無しさん (アウアウエー Sa0a-PBPb)
2024/08/27(火) 14:09:22.45ID:oHcafaf7a <>を入力すると消えるブラウザというか掲示板も流行ったなHTMLは糞だわ
25デフォルトの名無しさん (ワッチョイ 2910-Xwm8)
2024/08/27(火) 17:58:59.59ID:K+iNaUMP0 大抵最初の開発者は誰かが修正してくれるだろうと適当な仕様で設計して、
その後引き継いだ開発者はなにか意図があるのだろうと思ってそのまま維持していくという悪循環・・・。
その後引き継いだ開発者はなにか意図があるのだろうと思ってそのまま維持していくという悪循環・・・。
26デフォルトの名無しさん (ワッチョイ 427c-qo4T)
2024/08/28(水) 01:09:19.85ID:E82+IHOF0 >>25
あるある過ぎる
あるある過ぎる
27デフォルトの名無しさん (ワッチョイ f9d1-j0Zy)
2024/08/28(水) 01:32:44.54ID:ZIniGH7S0 ちち、どっかいけ
28デフォルトの名無しさん (ワッチョイ f9d1-j0Zy)
2024/08/28(水) 01:35:08.84ID:ZIniGH7S0 ごばくした、ごめん
29デフォルトの名無しさん (ワッチョイ 6e63-wgTk)
2024/08/28(水) 09:35:19.18ID:22YTSKRT0 アーニャにはここはまだ早い
30デフォルトの名無しさん (オイコラミネオ MM1b-qpqo)
2024/09/02(月) 15:52:36.13ID:VEiLzJptM RustがCより速くなるベンチマークは見たことがない
Nim2.0のORCは明示的にオブジェクトプールを使ったプログラミングが必要ですが
ベンチマークがCより2倍以上速くなって、特にハードなリアルタイムシステム向け
のチューニングもできるようになってるみたい
https://zenn.dev/dum...icles/af2b2b9f8fd890
Nim2.0がCより2倍以上速くなって、しかもORCでメモリ安全も担保されているなら
Rustを使う意味がなくなると思うのですが、このベンチマークは本当なのでしょうか?
NimはCのソースコード吐けるからから、Nimの手動メモリ管理はCの手動メモリ管理と
同じとして、Nim2.0のORCで明示的にオブジェクトプールを使ったプログラミングと
比較した場合のベンチマークが2倍以上速くなってるからCより速いと言ってる
https://github.com/Araq/fosdem2020
人間がCの手動メモリ管理したプログラムだと限界があるNimのムーブセマンティクスの
アルゴリズムでメモリの最適化をしてるから、人間では到底太刀打ちできない事を証明
した論文があるオブジェクトプール版のNimから生成したCのコードは人間には書けない
Nim2.0のムーブセマンティクスの本当に優れた最適化とORCで明示的にオブジェクトプールでプログラミングすることによって、人間がCの手動メモリ管理したベンチマークより2倍以上速くできる
https://zenn.dev/dumblepy/articles/af2b2b9f8fd890
Nim2.0のORCは明示的にオブジェクトプールを使ったプログラミングが必要ですが
ベンチマークがCより2倍以上速くなって、特にハードなリアルタイムシステム向け
のチューニングもできるようになってるみたい
https://zenn.dev/dum...icles/af2b2b9f8fd890
Nim2.0がCより2倍以上速くなって、しかもORCでメモリ安全も担保されているなら
Rustを使う意味がなくなると思うのですが、このベンチマークは本当なのでしょうか?
NimはCのソースコード吐けるからから、Nimの手動メモリ管理はCの手動メモリ管理と
同じとして、Nim2.0のORCで明示的にオブジェクトプールを使ったプログラミングと
比較した場合のベンチマークが2倍以上速くなってるからCより速いと言ってる
https://github.com/Araq/fosdem2020
人間がCの手動メモリ管理したプログラムだと限界があるNimのムーブセマンティクスの
アルゴリズムでメモリの最適化をしてるから、人間では到底太刀打ちできない事を証明
した論文があるオブジェクトプール版のNimから生成したCのコードは人間には書けない
Nim2.0のムーブセマンティクスの本当に優れた最適化とORCで明示的にオブジェクトプールでプログラミングすることによって、人間がCの手動メモリ管理したベンチマークより2倍以上速くできる
https://zenn.dev/dumblepy/articles/af2b2b9f8fd890
31デフォルトの名無しさん (ワッチョイ 0701-gNE8)
2024/09/02(月) 22:08:58.52ID:DccWFR9v0 Rustを褒めて自尊心保つやつの次はNim版が出てきたのか
32デフォルトの名無しさん (ワッチョイ 5f5a-HmUJ)
2024/09/02(月) 23:12:40.71ID:3HuFqT9S0 Nim推しは以前から変なやつ多かったから
33デフォルトの名無しさん (ワッチョイ 27eb-mtNr)
2024/09/02(月) 23:28:27.10ID:09ZYUS090 Nim言語の良し悪しは分からんが、メモリ管理に関しては理想的だわ
ムーブ後のオブジェクトにアクセスするとRustだとコンパイルエラーで面倒な事になるけど、Nimは参照カウントを使って解決するので少し遅くなるだけだ
そっちの方が絶対良い
気になる場合は後で直せる
ムーブ後のオブジェクトにアクセスするとRustだとコンパイルエラーで面倒な事になるけど、Nimは参照カウントを使って解決するので少し遅くなるだけだ
そっちの方が絶対良い
気になる場合は後で直せる
34デフォルトの名無しさん (ワッチョイ c770-bfwh)
2024/09/03(火) 18:51:27.81ID:xAVNzrUq0 >>33
コンパイルエラー?
コンパイルエラー?
35デフォルトの名無しさん (ワッチョイ 27eb-mtNr)
2024/09/04(水) 01:03:52.03ID:c5l8yfTZ036デフォルトの名無しさん (ワッチョイ 6780-e6xt)
2024/09/04(水) 09:34:28.92ID:eBGcFHFx037デフォルトの名無しさん (ワッチョイ 5fc1-mtNr)
2024/09/04(水) 09:42:59.71ID:uvDwCGK/0 >>36
ムーブ(所有権の移動)の概念知らない奴かよw
ムーブ(所有権の移動)の概念知らない奴かよw
38デフォルトの名無しさん (ワッチョイ bfe0-5+wm)
2024/09/04(水) 11:20:54.96ID:yycwJMQK0 時代に取り残されたじじい
39デフォルトの名無しさん (ワッチョイ 7f63-hbJw)
2024/09/04(水) 11:26:12.60ID:6FkHz3Id0 今どきのヤングはどの辺を走っているのかな?
40デフォルトの名無しさん (アウアウエー Sa1f-XN8b)
2024/09/05(木) 00:07:48.49ID:/oUqYYg3a RefCellのborrowとかborrow_mutがCより速い訳がないだろ
41デフォルトの名無しさん (ワッチョイ c770-bfwh)
2024/09/05(木) 06:20:13.32ID:IMzSmyWL0 アセンブラ使ったことない子供たちにはわからんのだろ
42デフォルトの名無しさん (ワッチョイ 7f0e-D/hx)
2024/09/05(木) 08:53:17.49ID:oYH6V42M0 Aiの時代にこんなレトロ言語に夢中になってる場合でもないだろ
43デフォルトの名無しさん (ワッチョイ 8710-D/hx)
2024/09/05(木) 09:42:51.26ID:00qJ+IF20 ペイントソフト溢れた時代にエクセルで描いて絶賛される時代。
44デフォルトの名無しさん (ワッチョイ c770-bfwh)
2024/09/05(木) 13:27:55.60ID:IMzSmyWL0 AIなんて究極的には予備知識なしで使えるようになるもんだろ
いま必死で呪文を覚えてる奴らには気の毒だがw
プログラムの学習はそれとは逆だぞ
いま必死で呪文を覚えてる奴らには気の毒だがw
プログラムの学習はそれとは逆だぞ
45デフォルトの名無しさん (ワッチョイ 0701-CMA8)
2024/09/05(木) 13:41:12.34ID:YoL+MCk60 AIにはアセンブラかCで書かせた方が効率がいいじゃん
46デフォルトの名無しさん (ワッチョイ 5fc1-mtNr)
2024/09/05(木) 20:45:06.75ID:mduO1G690 今はアニメもCGで作る時代だけど、だからデッサン力なんて不要と言ってるのに近いなw
47デフォルトの名無しさん (ワッチョイ 27d1-XcdZ)
2024/09/06(金) 02:12:25.16ID:ObPC8Kit0 AIなら直接機械語書けそうだけど最低限人間がコードを読めるようにするためにCで出力するのが流行りそう
48デフォルトの名無しさん (ワッチョイ 7f0e-D/hx)
2024/09/06(金) 17:06:00.74ID:3sxDLHxZ0 もはやプログラマはAIにどう質問するかだけが求められてる時代
ビックデータが前提なのはわかってるけどchatAIと画像AIはマジでオーパーツだわとても0と1だけで実現されてる技術と思えん・・・
ビックデータが前提なのはわかってるけどchatAIと画像AIはマジでオーパーツだわとても0と1だけで実現されてる技術と思えん・・・
49デフォルトの名無しさん (ワントンキン MM3f-cmcv)
2024/09/06(金) 17:30:18.67ID:bUa4C6AFM ここはAIの質問スレになる予定です
50デフォルトの名無しさん (ワッチョイ 7fe0-bfwh)
2024/09/06(金) 17:59:38.15ID:wWap9ofG0 >>48
Cやアセンブラを知らなかったらコンピューター自体が魔法に思えるんだろうなw
Cやアセンブラを知らなかったらコンピューター自体が魔法に思えるんだろうなw
51デフォルトの名無しさん (ワッチョイ 8710-D/hx)
2024/09/06(金) 18:14:44.45ID:fzo/g0jk0 プログラム上での比較が、未だに変数2つの比較(if(A=B)とか )しかイメージ出来ないので
AIのアルゴリズムどころか、2つのサイズの違う画像比較ってのさえどうやるのか検討もつかん・・・。
AIのアルゴリズムどころか、2つのサイズの違う画像比較ってのさえどうやるのか検討もつかん・・・。
52デフォルトの名無しさん (ワッチョイ bf9c-H9U1)
2024/09/06(金) 18:37:17.18ID:4wqfzUPa0 3Blue1BrownJapanのディープラーニング解説動画
https://www.youtube.com/watch?v=tc8RTtwvd5U
現在chapter6まで和訳されてる(本家英語版は7が出た)
https://www.youtube.com/watch?v=tc8RTtwvd5U
現在chapter6まで和訳されてる(本家英語版は7が出た)
53デフォルトの名無しさん (ワッチョイ 7fe0-bfwh)
2024/09/06(金) 21:13:32.20ID:wWap9ofG054デフォルトの名無しさん (ワッチョイ 47b1-D/hx)
2024/09/06(金) 21:19:53.07ID:eMGejp5m0 点でしか見れない人に面を理解させる手法・・・
55デフォルトの名無しさん (ワッチョイ 274e-XcdZ)
2024/09/06(金) 21:46:42.59ID:ObPC8Kit0 この世界もほぼ陽子と中性子と電子だけで出来てるのにこれだけ複雑なんだから0と1だけで複雑な演算出来ても不思議ではない
56デフォルトの名無しさん (ワッチョイ 5fad-WCFq)
2024/09/06(金) 21:53:29.16ID:H8MSdYGz0 ようこちゃんとでんこちゃんは知っているけど
中性子って子は知らない
中性子って子は知らない
57デフォルトの名無しさん (ワンミングク MM3f-cmcv)
2024/09/06(金) 22:09:25.96ID:aKdHJjI6M 光子ちゃんも忘れないであげて
58デフォルトの名無しさん (ワッチョイ 5fc1-mtNr)
2024/09/07(土) 00:47:09.38ID:mFTEs+Pq0 0と1だけじゃないけどな
その他に位(くらい)という概念がある
これによって無限の数を表現できる
むしろ位の概念によって数が表現されている
それさえ有れば記号なんて何でもいい
その他に位(くらい)という概念がある
これによって無限の数を表現できる
むしろ位の概念によって数が表現されている
それさえ有れば記号なんて何でもいい
59デフォルトの名無しさん (ワッチョイ 47b1-D/hx)
2024/09/07(土) 20:51:59.47ID:XGt+Z3l/0 どこかの国だか村では両手の指の数以上を表現する言葉がないって話をどこかで・・・。
60デフォルトの名無しさん (ワンミングク MM3f-cmcv)
2024/09/07(土) 22:06:43.98ID:GNvzZpYIM ムカデは100進数で数えている
61デフォルトの名無しさん (ワッチョイ f94a-865n)
2024/09/08(日) 00:25:53.15ID:zd6RlSMM062デフォルトの名無しさん (ワッチョイ f94a-865n)
2024/09/08(日) 00:30:46.43ID:zd6RlSMM0 指を曲げる伸ばすの2通りとすると1023だが、指を完全に曲げる、伸ばす、半分まで伸ばす(曲げる)の3通りとすると3^10-1=59,048まで表現できるなw
63デフォルトの名無しさん (ワッチョイ 662a-Vk/b)
2024/09/08(日) 07:38:58.99ID:LXYiwE7e0 >>60
ヒトを含めた四肢類は4進法なの?
ヒトを含めた四肢類は4進法なの?
64デフォルトの名無しさん (ワッチョイ bd5f-FAeb)
2024/09/08(日) 10:08:59.05ID:mVbg4wOX065デフォルトの名無しさん (ワッチョイ 6663-QZ+t)
2024/09/08(日) 10:25:56.18ID:IhFVsGpe0 グワシは古語
66デフォルトの名無しさん (ワッチョイ a510-IFMZ)
2024/09/08(日) 15:41:04.82ID:aTNFTtUw0 とりあえず、他人の投稿で言ってもいない単語や解釈を勝手に加えてマウント取ろうとするのはどうかと思うぞ。
67デフォルトの名無しさん (ワッチョイ a6e0-RtM0)
2024/09/08(日) 23:23:27.00ID:6gnZvy5A0 問題はギャグとしてつまらないという点だ
68デフォルトの名無しさん (ワッチョイ fa2d-2PHd)
2024/09/09(月) 17:06:32.51ID:ft14UVke0 lvalueに関してエラーが出るんだけど、どうしてこれがだめなのかわからないです
#include <stdio.h>
int main()
{
char s[] = "hoge";
char t[100];
while (*t++ = *s++)
;
printf("%s", t);
}
#include <stdio.h>
int main()
{
char s[] = "hoge";
char t[100];
while (*t++ = *s++)
;
printf("%s", t);
}
69デフォルトの名無しさん (ワッチョイ 6663-QZ+t)
2024/09/09(月) 17:17:50.19ID:JnQxQHVK070はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7932-IU9Y)
2024/09/09(月) 17:19:13.64ID:XH4OT6yj0 >>68
s の型は char[5] 、 t の型は char[100] だというのはわかる?
だけど式に出てくる配列は原則として配列の先頭要素を指すポインタ (この場合に型でいえば char*) に型変換される。
変換後に出てくるポインタは rvalue なのでインクリメントの対象に出来ない。
rvalue ってのは式の評価をする間に一時的に生まれて評価が終わったら消えるものなので
仮にインクリメント出来たとしても何にも使えない。
配列が勝手にポインタに変換されるっていうのが変則的で分かり難いポイントだけど
これは C を使ってたら避けようがない。
s の型は char[5] 、 t の型は char[100] だというのはわかる?
だけど式に出てくる配列は原則として配列の先頭要素を指すポインタ (この場合に型でいえば char*) に型変換される。
変換後に出てくるポインタは rvalue なのでインクリメントの対象に出来ない。
rvalue ってのは式の評価をする間に一時的に生まれて評価が終わったら消えるものなので
仮にインクリメント出来たとしても何にも使えない。
配列が勝手にポインタに変換されるっていうのが変則的で分かり難いポイントだけど
これは C を使ってたら避けようがない。
71デフォルトの名無しさん (ワッチョイ 9e79-auhz)
2024/09/09(月) 18:22:38.82ID:zvC05GrM0 ポインタと同じ表記が使えるだけでポインタに変換されるわけではないぞ老害
72デフォルトの名無しさん (ワッチョイ 6663-QZ+t)
2024/09/09(月) 18:25:50.23ID:JnQxQHVK0 char *s = "hoge";
char t[100];
int i = 0;
while (*(t+i) = *s++)
i++;
sを配列ではなく、ポインタに変える、
tもポインタにしたいところだが、格納先確保が目的なら
先頭アドレスからのオフセット指定で格納する様に変更
char t[100];
int i = 0;
while (*(t+i) = *s++)
i++;
sを配列ではなく、ポインタに変える、
tもポインタにしたいところだが、格納先確保が目的なら
先頭アドレスからのオフセット指定で格納する様に変更
73デフォルトの名無しさん (ワッチョイ eaad-Pebh)
2024/09/09(月) 18:30:55.08ID:D7I9z5W00 それなら while (*(t+i) = *(s+i)) って書くかな
74デフォルトの名無しさん (ワッチョイ 6663-QZ+t)
2024/09/09(月) 18:36:50.90ID:JnQxQHVK0 s[]、t[100]と書いたとき、sやtはメモリー上の特定の位置を指す
ラベルのようなものなので書き換える事は出来ない。ポインタ定数とも言う。
一方ポインタ変数は、任意のアドレスを指す変数、変更も操作できる
constとか、突っ込まんでください
ラベルのようなものなので書き換える事は出来ない。ポインタ定数とも言う。
一方ポインタ変数は、任意のアドレスを指す変数、変更も操作できる
constとか、突っ込まんでください
75はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7932-IU9Y)
2024/09/09(月) 18:57:03.60ID:XH4OT6yj0 >>71
規格には「型変換する」と明瞭に書いてあって変換しないと解釈できる余地はない。
規格には「型変換する」と明瞭に書いてあって変換しないと解釈できる余地はない。
7668 (ワッチョイ fa2d-2PHd)
2024/09/10(火) 07:06:02.36ID:fwzKZR690 色々教えてくれてありがとう
s[]の先頭を指すポインタ*sを++で進めることができちゃったら
s[0]もズレちゃうのでだめだってことだよね
そりゃだめだわ
s[]の先頭を指すポインタ*sを++で進めることができちゃったら
s[0]もズレちゃうのでだめだってことだよね
そりゃだめだわ
77デフォルトの名無しさん (ワッチョイ 1e6e-Qzc4)
2024/09/10(火) 07:45:50.17ID:ZXVJVLjy0 s[], t[100]; って宣言したなら、s[idx], t[idx] って使おうよ
78デフォルトの名無しさん (ワッチョイ a6b5-RtM0)
2024/09/10(火) 08:09:53.27ID:oAzej4EH0 そこはこだわらんでもいいだろ
80デフォルトの名無しさん (ワッチョイ 6663-QZ+t)
2024/09/10(火) 10:14:17.88ID:WwqiNfks0 立て札は移動禁止です
81デフォルトの名無しさん (アウアウエー Sa52-t/33)
2024/09/10(火) 13:19:09.36ID:KGjTz1X0a >sやtは const
constっていつからあったか知らんけど
constない頃からsもtも*pや*qとは扱いが違ったんじゃね
constっていつからあったか知らんけど
constない頃からsもtも*pや*qとは扱いが違ったんじゃね
82はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7932-IU9Y)
2024/09/10(火) 14:04:37.40ID:rqI1GpSt0 lvalue の概念は K&R 1st の頃からあったよ。
lvalue という用語はちょっとどうなの……と思うけど。
Rust だと place と呼んでるみたいだね。
lvalue という用語はちょっとどうなの……と思うけど。
Rust だと place と呼んでるみたいだね。
83デフォルトの名無しさん (ワッチョイ eafd-BHET)
2024/09/10(火) 21:10:52.20ID:UL+jlunn0 お前は変な事ばかり言ってるからもう引っ込んどけよ
84デフォルトの名無しさん (ワッチョイ adba-mB8c)
2024/09/10(火) 21:22:40.00ID:OwUxLa4s0 ポインタそのものを変えないやつと
指す先を変えないやつの書き方で
未だに迷うっていう
指す先を変えないやつの書き方で
未だに迷うっていう
85はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7932-IU9Y)
2024/09/10(火) 21:35:00.77ID:rqI1GpSt0 キーワードを並べる順序で意味が変わるのは迷うけど
順序をどうならべても良い場合もそれはそれでびっくりする。
int const long foo;
みたいに変数を宣言して良い。
まあそんなことをするやつはいないと思うけど。
順序をどうならべても良い場合もそれはそれでびっくりする。
int const long foo;
みたいに変数を宣言して良い。
まあそんなことをするやつはいないと思うけど。
86デフォルトの名無しさん (ワッチョイ a6ee-865n)
2024/09/10(火) 22:53:26.23ID:BKdRZcpD0 consr char*は本当はchar const*と書くべきなんだよね
これでもコンパイルは通って同じ結果になる
読む時は右から読めばいい
pointer to const char
これだと指す先がconstなのが分かりやすい
ポインター自体をconstにするには
char* constとして、同じく右からconst pointer to charと読む
両方constは
char const* const
となるけど、最初のconstは左に書けるので
const char* const
とも書ける
これが分かれば迷う事は無くなる
これでもコンパイルは通って同じ結果になる
読む時は右から読めばいい
pointer to const char
これだと指す先がconstなのが分かりやすい
ポインター自体をconstにするには
char* constとして、同じく右からconst pointer to charと読む
両方constは
char const* const
となるけど、最初のconstは左に書けるので
const char* const
とも書ける
これが分かれば迷う事は無くなる
87デフォルトの名無しさん (ワッチョイ a6b2-Z1Qu)
2024/09/11(水) 01:20:44.10ID:ZbZmMQbl0 それ前橋氏のポインタ完全制覇で知った
88デフォルトの名無しさん (ワッチョイ a6b5-RtM0)
2024/09/11(水) 08:00:07.84ID:eq6A6T9x0 >>81
アセンブラにして考えるとわかりやすい
char s[] = "hoge";
アセンブラの表現↓
s:
.db "hoge¥0"
char *s = "hoge";
アセンブラの表現↓
s_org:
.db "hoge¥0"
s:
.dw s_org
上の場合書き換えようにもsには実体がない
アドレス定義ラベルでしかない
*ただし完全に最適化されると下も上と同じになる
アセンブラにして考えるとわかりやすい
char s[] = "hoge";
アセンブラの表現↓
s:
.db "hoge¥0"
char *s = "hoge";
アセンブラの表現↓
s_org:
.db "hoge¥0"
s:
.dw s_org
上の場合書き換えようにもsには実体がない
アドレス定義ラベルでしかない
*ただし完全に最適化されると下も上と同じになる
90はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7932-IU9Y)
2024/09/11(水) 09:19:23.27ID:Zm39E+090 大元の質問が >>68 なので低レイヤからの説明はあまり筋が良くないと思う。
エラーメッセージの意味を読み取れるようにならないから。
エラーメッセージの意味を読み取れるようにならないから。
91デフォルトの名無しさん (ワッチョイ 6663-QZ+t)
2024/09/11(水) 09:30:46.32ID:dQ20XCdF0 8ビットCPUのメモリ保護されてない頃だと
配列どころか、プログラムコードも書換できました笑
配列どころか、プログラムコードも書換できました笑
92デフォルトの名無しさん (ワッチョイ a510-IFMZ)
2024/09/11(水) 09:49:35.14ID:h52e7Ahm0 > sには実体がない、とはどういうことですか?
変数エリアに書き込まれていない数値、データ。
プログラム上で要求された時にコンパイル時や関数によってその都度作られる仕様・・・かな?しらんけど。
>91
>プログラムコードも書換できました
それはむしろ”技術”扱いだったな。
サブルーチンでジャンプ先やIOポートを書き換えて・・・て。
昔はCPU等のバグ利用がテクニックだったけど、今じゃバグの温床、セキュリティホール扱いだね。
変数エリアに書き込まれていない数値、データ。
プログラム上で要求された時にコンパイル時や関数によってその都度作られる仕様・・・かな?しらんけど。
>91
>プログラムコードも書換できました
それはむしろ”技術”扱いだったな。
サブルーチンでジャンプ先やIOポートを書き換えて・・・て。
昔はCPU等のバグ利用がテクニックだったけど、今じゃバグの温床、セキュリティホール扱いだね。
93デフォルトの名無しさん (ワッチョイ 1e3e-42jK)
2024/09/11(水) 15:02:12.18ID:DEx1pDDa0 こんだけいて>>77くらいしかまともな回答者がいないとかひどいなあ
94デフォルトの名無しさん (ブーイモ MM45-bJfQ)
2024/09/11(水) 15:25:16.11ID:1n/VD1trM そんなのこだわっても結局関数の引数で配列型では渡せないんだからその程度は受け入れて慣れたほうがいい
95デフォルトの名無しさん (ワッチョイ 6663-QZ+t)
2024/09/11(水) 15:58:54.52ID:dQ20XCdF0 ここは、「聞け」とはあるが、「回答する」とは書いていない
96デフォルトの名無しさん (ワッチョイ 1e45-Qzc4)
2024/09/11(水) 16:44:23.62ID:+qxKgs2P0 こっちが自然だろ
t[100]を*(t+idx)なんてやる方が何の拘りだよ
t[100]を*(t+idx)なんてやる方が何の拘りだよ
97デフォルトの名無しさん (ワッチョイ 5ec2-bJfQ)
2024/09/11(水) 16:55:25.58ID:tx1pt4w10 その程度どっちでもいい
配列は外部リンケージのときも注意が必要なんだよね
あまりそういう使い方しないから、すぐにはピンとこないや
あまりそういう使い方しないから、すぐにはピンとこないや
99デフォルトの名無しさん (ワッチョイ 65cd-RtM0)
2024/09/11(水) 22:04:51.93ID:+V4MmH6p0100デフォルトの名無しさん (ワッチョイ 6663-QZ+t)
2024/09/11(水) 23:11:00.81ID:dQ20XCdF0 > while (*(t+i) = *s++)
これは、
> while (*t++ = *s++)
;これがエラーになるのは何故かと言う質問から始まったからです
t++がエラーで、t+iなら大丈夫が理解できれば解決だと思う
ポインタの理解というのは壁にはなりますが、
乗り越えれば意外と簡単です、がんばれ!
これは、
> while (*t++ = *s++)
;これがエラーになるのは何故かと言う質問から始まったからです
t++がエラーで、t+iなら大丈夫が理解できれば解決だと思う
ポインタの理解というのは壁にはなりますが、
乗り越えれば意外と簡単です、がんばれ!
>>92 ありがとうございました(sには実態がない)
gcc -S test.c
で .s を出力して眺めてみると、そのような感じになっていました
最適化と、AT&Tのオペランドが逆なのに慣れず読みにくかったですが
"hoge" は「実体」が .data に置かれ、実行時にスタックにコピーされるのかと想像してましたが、実装がどうあれ、スタッフ上に "hoge" を置くための元を実体というのは違うと思いました
実際、"hoge" は .db でアロケートされず、4字は 32ビットの数値定数とされ、スタックに即値で転記されていました(実行時に生成されていました)
# とても伝わりにくいと思いますが…
gcc -S test.c
で .s を出力して眺めてみると、そのような感じになっていました
最適化と、AT&Tのオペランドが逆なのに慣れず読みにくかったですが
"hoge" は「実体」が .data に置かれ、実行時にスタックにコピーされるのかと想像してましたが、実装がどうあれ、スタッフ上に "hoge" を置くための元を実体というのは違うと思いました
実際、"hoge" は .db でアロケートされず、4字は 32ビットの数値定数とされ、スタックに即値で転記されていました(実行時に生成されていました)
# とても伝わりにくいと思いますが…
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 日本の立場説明へ…外務省局長が北京到着 “台湾有事”首相答弁に中国反発 ★3 [煮卵★]
- 国内ホテル、既にキャンセルも 訪日客関連業界、事態見守る ★2 [蚤の市★]
- NHK、受信料の未払い世帯に督促強化へ 民事手続きの新組織を設置 差し押さえなどの強制執行も [1ゲットロボ★]
- 【日本大使館】中国在留邦人は安全確保を [ぐれ★]
- 橋下徹氏「この喧嘩は日本の完敗」 台湾有事答弁めぐる外務省局長訪中で指摘「中国に怒られてご説明に伺った日本と見られる」 [muffin★]
- 【外交】日中関係悪化、長期化の様相 2012年には自動車輸出80%減も ロイター★2 [1ゲットロボ★]
- 「稼ぐのよ!」高市が電話でガチャ切り😱鈴木農水大臣に伝えたこと… [993451824]
- 【悲報】女性初の総理大臣 高市早苗氏、安倍晋三さんが積み上げてきたものを一瞬でぶっ壊してしまう😱wwwwwwwwwwwwwwwwwwwwww [871926377]
- 愛国者ナザレンコ「左翼は自己中な差別主義者で偽善者。日本人ファーストを叩いておいて台湾人が死んでも知らな〜いでしょ。中露の犬」 [856698234]
- 今から鮭のんでいい?明日5時起きなんだけど
- 【悲報】有名ウヨ論客、「現実的に考えて中国と仲直りするしかなくね?」と言ったら野良ウヨから総叩きにあう [856698234]
- トランプ聖帝「中国を倒すのではなく協力することでアメリカは強くなる!MAGA!」 高市どうすんのこれ… [878970802]
