C言語なら俺に聞け 162

レス数が1000を超えています。これ以上書き込みはできません。
2023/10/30(月) 17:13:00.82ID:hHEGE8Ol0
!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言語なら俺に聞け 161
https://mevius.5ch.net/test/read.cgi/tech/1682053520/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2023/10/30(月) 17:30:23.87ID:I7fISnX+0
2get
2023/10/30(月) 17:31:34.22ID:I7fISnX+0
C23 の最新ドラフトは N3096 に更新されてるでよ
https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3096.pdf
2023/10/30(月) 19:05:35.74ID:i+814vap0
>>1

乙です
2023/10/30(月) 19:40:56.11ID:PfgrnUqg0
いまどきPlain Cが使われる状況なんて限定的なんだから
高級アセンブラとして堂々としてればいいんですよ
2023/10/30(月) 20:35:57.87ID:YnJZjusKM
トッピングは何になさいますか?
7デフォルトの名無しさん (ワッチョイ 2901-CP9B)
垢版 |
2023/10/30(月) 21:04:03.03ID:re6vYA8I0
リモートワーク制度が削減・廃止されたら「転職や別案件を探す」が4割--
「Offers」登録者調査

ITエンジニア/デザイナーの副業・転職サービス「Offers」を提供するoverflowは、
同社が運営する「Offersデジタル人材総研」にて「リモートワーク実態調査2023」
を公表した。
これによると、リモートワークになり、5人に1人が引っ越したと回答した。そのうち、
現職でリモートワーク制度が削減・廃止された場合、「転職や別案件を探す」という
回答が44.0%にものぼった。一方「会社と交渉する」という回答は40.0%、
「引っ越さず受け入れる」が12.0%となった。
さらにリモートワークを希望している理由として「通勤時間が無駄だと感じている」が
87.7%でトップとなった。このほか「個人の時間ができる」(62.3%)、「副業を続け
やすいから」(39.6%)、「子育てができる」(35.8%)と続いた。
2023/10/31(火) 09:59:32.82ID:DBRUqQAF0
前スレではちみつさんが書いてくれたリンク見ました。thx
https://go.dev/tour/flowcontrol/13

曰くGOの defer は
deferred function calls 遅延関数呼び出し で、関数脱出時にlast-in-fast 順で呼ぶもの

とすると、C言語でdeferの仕様追加要求は却下すべきです。リンクリスト1個作れば済む話で、実際そうしてる人も多数いるだろうに、既存プログラムでdeferというシンボルを使ってるのをコンパイル通らなくしてまで仕様追加するのは利益が小さすぎる。

エラー処理で使うかは、直接関係ないですね。そうしたきゃすればいいけど、私は読みやすいコードとは思わない、です
9デフォルトの名無しさん (ワッチョイ 937c-cQ99)
垢版 |
2023/10/31(火) 12:23:13.16ID:9gnUDJNP0
>>8
>関数脱出時にlast-in-fast 順で呼ぶもの

>とすると、C言語でdeferの仕様追加要求は却下すべきです。

この「とすると」からの繋がりが意味不明。

>リンクリスト1個作れば済む話で、

だから何?
「却下 *すべき*」の理由になってない。
採用するほどでない、なら理解できる。


> 既存プログラムでdeferというシンボルを使ってるのをコンパイル通らなくしてまで仕様追加するのは利益が小さすぎる。

ここでのdeferは機能についての名称として使ってるだけで、そのままの文言じゃないことを理解できてないみたいだ。
2023/10/31(火) 15:34:02.36ID:DBRUqQAF0
>>9
話が通じてないと思います
C言語の建設的な議論なら応じたいけど
2023/10/31(火) 15:38:26.62ID:/TBQ8etM0
ブログ立てて、そこでやれ
2023/10/31(火) 15:39:17.26ID:803Tgyvr0
>>8
どうせコンパイルオプションで無効にすれば使えるだろ
13デフォルトの名無しさん (ワッチョイ 937c-cQ99)
垢版 |
2023/10/31(火) 16:18:39.83ID:9gnUDJNP0
>>10
おまえの感想 >>8 のどこが建設的な議論よ?
2023/10/31(火) 16:24:39.17ID:1/1CCAX60
ボクの考えた最強のC言語を語るスレはこちら
【超高速】C/C++に代わる低級言語を開発したい 8
http://mevius.5ch.net/test/read.cgi/tech/1345730580/
2023/10/31(火) 16:36:27.63ID:RXeEqnvz0
deferは(素のものをじゃなくてもう少し高機能な)プリプロセッサで対応出来る
breakやreturnの直前にdeferの内容を全部コピーしとけばいいだけ
まぁそれ言い出すと、C++をCに変換するプリプロセッサが有れば全て解決だがなw
2023/10/31(火) 16:37:42.80ID:DBRUqQAF0
ただのどこかのオッサンの意見が気に食わんなら別にそれでもいいよ…

各自自分の考えを語ればいいじゃん、そんな食いつくくらいならなんか一つくらいは「自分のアイデア」あるんでしょ?何もないの?
2023/10/31(火) 16:39:39.94ID:DBRUqQAF0
>>13
既存の「正しいプログラム」が「正しいプログラムであり続ける」

そんなにおかしいことかね
2023/10/31(火) 16:43:21.14ID:5ddE/sJo0
既に進行中の「建設的な議論」をご用意しました
以降の議論はこれを前提として積み重ねていただくようお願い申し上げます
https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2895.htm
2023/10/31(火) 16:43:26.09ID:5ddE/sJo0
既に進行中の「建設的な議論」をご用意しました
以降の議論はこれを前提として積み重ねていただくようお願い申し上げます
https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2895.htm
2023/10/31(火) 16:57:17.68ID:C1aTagsw0
>>19
なんか、機能はともかく見た目はだいぶ汚いコードになるね
21デフォルトの名無しさん (ワッチョイ 937c-cQ99)
垢版 |
2023/10/31(火) 17:12:55.99ID:9gnUDJNP0
>>17
全然おかしく無いよ。
互換性は非常に重要。

でもおまえは新しい機能は追加するなって言ってるだけだよね。
おまえの言い分だとプロトタイプ宣言必須になるのは、過去の「正しいプログラム」が正しくあり続けることできないから「却下すべき」案なんだよな。
22デフォルトの名無しさん (ワッチョイ 937c-cQ99)
垢版 |
2023/10/31(火) 17:17:03.54ID:9gnUDJNP0
>>21
プロトタイプ宣言とK&Rスタイルの関数定義がごっちゃになってるわ。
>>21 は回線切って首吊れば。
2023/10/31(火) 17:41:26.94ID:1/1CCAX60
>>19
俺はGOで組んだことないからそこに書かれてる処理系依存のtry/finallyのが馴染みがあるしスマートに見えるわ
キモい輩って世界中に居るんだな
2023/10/31(火) 17:59:35.29ID:iHc07kUm0
>>23
君は中傷せずに会話できないのかね?
2023/10/31(火) 21:23:39.92ID:DBRUqQAF0
21 と 22 のワッチョイとIDが同じで表現が口汚いのはどう解釈したらいいの?私には難しくて分かりませぬ
26デフォルトの名無しさん (スププ Sd33-wFsA)
垢版 |
2023/11/01(水) 03:27:47.22ID:3HySGS93d
いつもの復オジωωω
スルー決定ωωωωωωωωω
2023/11/01(水) 07:56:22.02ID:9FKdtRs60
容認→警告→禁止推奨
となった仕様が幾つあったか・・・。
28デフォルトの名無しさん (ワントンキン MM53-wL8D)
垢版 |
2023/11/01(水) 09:43:55.98ID:g4eyJzirM
言語の設計思想と立ち位置考えれば手を入れる必要ないでしょ
細かいのはあるにしても関数プロトタイプの導入、データ型の追加、stdioのセキュリティ強化くらいでCとしては充分
構文追加とかバカすぎてANSI Cもまず取り込まんよw
29デフォルトの名無しさん (スプッッ Sd73-cQ99)
垢版 |
2023/11/01(水) 12:36:29.63ID:YeBzjhT2d
>>28
>細かいのはあるにしても関数プロトタイプの導入、データ型の追加、stdioのセキュリティ強化くらいでCとしては充分

その挙げ句MISRA-Cみたいなのがでてくる。

>構文追加とかバカすぎてANSI Cもまず取り込まんよw

C23の属性とか知らんの?
2023/11/01(水) 13:21:32.97ID:DFYs67SD0
c23だと属性以外にも
enum Colour : char {
Red,
Green,
Blue
};
とか
auto i = 123L;
とかも構文変更になる
constexprもコンパイラにとってはかなり大きい
文字列のハッシュ値の計算とか、コンパイル時にCのコードを実行できる
2023/11/01(水) 13:30:10.50ID:DFYs67SD0
clangとかはconstexprを使わなくても、最適化で勝手に整数に置き換わってるとか普通に有るけどねw
constexprはそれを確実に保証出来るので、精神衛生上良い
2023/11/01(水) 15:17:19.83ID:m2/+vlXa0
>>30
C23 の constexpr は関数には付けられない。
高度なコンパイル時計算をするものではない。
2023/11/01(水) 17:07:45.92ID:DFYs67SD0
>>32
なるほど!ちょっと中途半端な状態なんだな…
2023/11/01(水) 17:37:30.95ID:m2/+vlXa0
C++ の const 指定は初期化子が定数 (定数式) なら指定が付けられた変数も定数になるという規則なんだが
C の const は単に書き換えが禁止されるだけで定数になることはない。
(処理系の拡張によって一部の状況で定数扱いされることはある。)

C で定数を作ろうとすると #define を使うか enum を使うかしかなかったので
定数を定義するための直接的な方法として constexpr を導入しようという判断は納得できる。

定数を定義するまともな方法がないってのは C の明らかな欠陥なので
それを改善するという話でしかなくて、
コンパイル時計算を推進する野心の始まりってわけではないと思う。
なので constexpr については (遠い将来はともかく現時点では) これで完了。
中途半端ってこたぁないというのが私の感覚だな。
2023/11/01(水) 21:28:22.72ID:3Yx3b9sx0
気に入らないって理由なの?
2023/11/01(水) 23:56:27.24ID:DFYs67SD0
書き換えが禁止されても定数ではないとはこれいかに…
ここでいう定数はコードに直接埋め込まれる値ということだろう
ただ、C++もstatic constにしないと定数にならないと思ったけど、 constだけだとちゃんとメモリが確保されてると認識してたな
2023/11/02(木) 01:38:41.62ID:9IBKBW6G0
言語仕様上の用語としては定数は定数が要求される箇所に書くことが出来るもののことだよ。
単純な例で言えば、↓これは C++ ではアリだが C ではダメ。 (clang のデフォルトだと通してしまったりもするようだが……。)

const int foo = 1;

enum bar {baz = foo};

int main(void){}


もちろん最適化によって効率的な扱いがされやすくなることも多いにせよ、直接には求められてない。
定数であってもアドレス演算子は適用が可能だし、あくまでも変数なので見かけ上はメモリ上にある。

C++ で static const にしないと定数にならないというのはデータメンバのとき。
普通のデータメンバはオブジェクトを生成するときまで初期化されていないことになっているので
コンパイル時には確定できない。
2023/11/02(木) 09:19:48.35ID:kxWwWLf8a
const int foo = 1;

char hoge[foo];

int main(void){}
2023/11/02(木) 10:39:43.14ID:9MQ+Mdatd
2-pass コンパイルを実装してほしい

struct Fuga;
struct Hoge {
 struct Fuga *fuga;
};
struct Fuga {
 ...

こんなのとはおさらばしたい
2023/11/02(木) 10:41:08.08ID:VWEHs6hL0
そういう配列宣言でdefine使わないとどういうメリットがあるの?
41デフォルトの名無しさん (スプッッ Sd73-cQ99)
垢版 |
2023/11/02(木) 12:23:28.61ID:R1/lC5p9d
>>40
デバッグ時にシンボル表示できる。
2023/11/02(木) 15:51:31.06ID:7f41Qrwa0
もしかしてそれって、C言語の仕様じゃなくてデバッガとかビルドシステム側の機能改善でできそうって気がしませんか?


デバッガが読んで参考にできるかもしれない情報の豊富さの、なんとなくの並び

■実行形式にシンボル情報がない
■実行形式にシンボル情報がある
■ソースコードがあるけどデバッガはビルド情報知らない
■ソースコードがありデバッガがビルドの情報も知ってる

clang とかLLVM界隈ってそういう情報(どういう?ビルド時しか分からん情報というか?)をうまく使おうぜ方向を目指してる気がします、知らんけど
2023/11/03(金) 00:15:50.32ID:M0kCm9U+0
その例だとデバッグ時に数字で表示されたほうが安全じゃないか
44デフォルトの名無しさん (アウアウウー Sad5-g+2W)
垢版 |
2023/11/03(金) 08:01:57.68ID:rVBPlXQLa
>ソースコードがありデバッガがビルドの情報も知ってる

両方持ってるのは本物のプロと練習集の初心者素人と両極端に分かれそう
2023/11/03(金) 09:53:21.84ID:M0kCm9U+0
何言いたいんだか全くわからんが
2023/11/03(金) 10:12:48.61ID:R1GL3fqM0
生涯修行僧
47デフォルトの名無しさん (ワッチョイ 5324-zW/F)
垢版 |
2023/11/03(金) 11:32:32.93ID:8bACdtpR0
>>42
当然だけど規格の話じゃないよ
気がしませんかっていうかコンパイラとデバッガは何十年も前からそうやって連携してる
48デフォルトの名無しさん (ワッチョイ 5324-zW/F)
垢版 |
2023/11/03(金) 11:34:06.16ID:8bACdtpR0
>>43
数字で表示されないと具体的に何が非安全だと心配してるの?
2023/11/03(金) 21:59:08.35ID:M0kCm9U+0
次に実行するコード
>hoge[2] = 0;
となった時に
char hoge[foo];
と表示されてると次にfooの値を探すので二度手間
char hoge[1];
と表示されてれば一度ですむ
50デフォルトの名無しさん (ワッチョイ 827c-RmzB)
垢版 |
2023/11/04(土) 00:06:31.86ID:nDDUhOSB0
>>49
何のためにシンボル使うのかわかってないな。
実際の値と値の持つ意味について考えたほうがいいぞ。
2023/11/04(土) 00:27:05.12ID:uAZ656n/0
哲学には興味ない
なんのためにデバッガ使うかわかっているので充分だ
52デフォルトの名無しさん (ワッチョイ 827c-RmzB)
垢版 |
2023/11/04(土) 02:19:34.08ID:nDDUhOSB0
>>51
なんだ実際のデバッガ使ったことないのか。
普通はシンボルだけじゃなくて値も表示するんだが。
2023/11/04(土) 09:05:55.97ID:uAZ656n/0
ずいぶん安い煽りに転じたな
表示される情報は最小限のほうがいいんだよ
仕事で使っていればそうなる
2023/11/04(土) 10:09:07.16ID:lvandghk0
自分はデバッガ使う段階なら定数は具体値が出てくれた方がいいです

クロスコンパイル環境の構築からとか、Cならではの現場を辿って来た人と、今どきのGUIのデバッガが前提の人では話は合わなそう

マウスかざせば済むじゃんと思ってるのでは
55デフォルトの名無しさん (ワッチョイ 624f-ZTan)
垢版 |
2023/11/04(土) 11:08:29.93ID:dBvv25rw0
>>43にアンカうったら>>49で手間がどうこうって返ってきたんだがそういうのを安全って言うのか??
個人的には>>52と同感でマクロにしてもenumにしてもシンボル・値両方確認出来るもんだと思ってたから
どんな環境を想定して言ってるのかちょっとよく話が掴めないな
2023/11/04(土) 11:41:50.34ID:A3cqUl0FH
gdbなどのデバッガー使っていれば変数名と型と値は全て表示される
必要であれば配列は全ての要素を展開して表示も出来るけどな
2023/11/04(土) 11:48:12.60ID:4yCaeT2N0
printfでOK
58デフォルトの名無しさん (アウアウウー Saa5-CWlg)
垢版 |
2023/11/04(土) 12:21:19.50ID:KPpuxUoxa
シンボルの方が意味が判って良いけどな
「マウスかざせば良い」はその通り
場合によっては watch 式
2023/11/04(土) 13:42:18.42ID:p2sqqR+o0
デバッグ段階で意味がいるのか?
2023/11/04(土) 13:50:23.07ID:ocaBqo/v0
デバッガもその設計思想によるだろう。
ソースレベルデバッグなら言語の評価モデルに一致するのが自然だと思う。
そうなるとシンボルのほうが主役で、評価されれば値になるし一部は事前にわかる場合もある。

バイナリ寄りのデバッガなら
シンボル情報 (デバッグ情報) を扱えるものであってもまずそこにあるのは具体的な値であって、
値のほうをメインに見せる (シンボルは補助的な情報) のが筋に思える。
61デフォルトの名無しさん (ワッチョイ 827c-RmzB)
垢版 |
2023/11/04(土) 14:07:46.76ID:nDDUhOSB0
>>53
お前はアドレスさえわかれば関数名も変数名も不要なんだろうな。
俺はソースレベルデバッグを想定してたけどお前は違うの?
62デフォルトの名無しさん (ワッチョイ 827c-RmzB)
垢版 |
2023/11/04(土) 14:20:50.41ID:nDDUhOSB0
>>54
Cのソースレベルデバッガはgdbとそのラッパー(dddとかKDEのkdebug)しか使ったこと無いな。
お前は何使うの?gdb以外のデバッガにはちょっと興味あるかも。

あと、いつのまにかデバッグの話にすり変わってるけど、元は >>40 で *コード書くとき* の話だからな。
>>41 のせいだな。
2023/11/04(土) 15:58:28.43ID:lvandghk0
例の人ですか?
2023/11/04(土) 19:42:10.24ID:Q+jfxr6/0
>>62
スレを私物化してないか?
2023/11/04(土) 21:41:26.73ID:W1fOq5zR0
Cは単純だからぽいんた辺りで躓かない限り特に疑問は生まれずスーっと大脳皮質に浸透していく
それに比べて自称モダン言語の気持ち悪さよ
Cが無かったらプログラミングなんてやってなかったろうな
2023/11/04(土) 21:47:47.71ID:vTgEadDD0
Cも関数ポインタとかたいがいきしょいぞ
2023/11/04(土) 21:53:04.57ID:W1fOq5zR0
Cの関数ポインタはそれ以上でもそれ以下でもない
セキュリティが緩い頃は関数ポインタを駆使すれば関数型言語で言う所の関数のファーストクラスも実現できた
この時やはりコードとデータは分かれているべきと判りみ
と同時にオブジェクト指向は間違った思想と気付く
2023/11/04(土) 21:57:40.47ID:ocaBqo/v0
少なくとも宣言については無茶苦茶な文法だけどな。
2023/11/04(土) 22:08:52.30ID:vTgEadDD0
C++になると更にきしょいメンバ関数ポインタがあるが
2023/11/04(土) 22:36:43.09ID:vTgEadDD0
#include <iostream>
using namespace std;
struct Hoge {
int hage_;
int mage () const {return hage_;}
};
void func (const Hoge &obj, int (Hoge::*func) () const) {
cout << (obj.*func) () << '\n';
}
int main () {
void (*f) (const Hoge &, int (Hoge::*) () const) {&func};
Hoge hoge {10};
(*f) (hoge, &Hoge::mage);
return 0;
}
きめぇ
2023/11/05(日) 00:14:17.78ID:u007GASC0
次の仕様拡張で関数配列が導入されます(嘘)
72デフォルトの名無しさん (アウアウウー Saa5-CWlg)
垢版 |
2023/11/05(日) 10:34:57.51ID:ol9bMVcca
>>59 とか
>>60 の後者の人とかは
ゲーマーか逆アセか改造チートでもしてんのかなと思う
2023/11/05(日) 10:45:42.91ID:u007GASC0
定数はともかく変数の値の変化を監視するとなれば話は変わりますよ
2023/11/05(日) 10:52:46.61ID:dHgdjFj00
>>66
単に機種依存なくしてユニバーサル化したアセンブラだからキモいも何もない
感覚的に受け付けないという方はもうすぐAIで自然言語でプログラムできるようになるからそれまで待てばいいじゃん
2023/11/05(日) 11:02:20.21ID:ol9bMVcca
>>70
こう描けばそこまでキモくない
#include <iostream>
using namespace std;
struct Hoge {
int hage_;
int mage () const {return hage_;}
};
void func (const Hoge &obj, int (Hoge::*p) () const) {
cout << (obj.*p)() << '\n';
}
int main () {
void (*f) (const Hoge &obj, int (Hoge::*p) () const) = func;
Hoge hoge {10};
f(hoge, &Hoge::mage);
return 0;
}
2023/11/06(月) 13:51:35.97ID:4BOQTpQoa
>>75
using使えよ
77デフォルトの名無しさん (ワッチョイ 42ad-dLR+)
垢版 |
2023/11/08(水) 13:50:08.70ID:ySVrNoqw0
C++の話はスレチ
2023/11/08(水) 19:54:11.21ID:5o5qiXKK0
その言葉が聞きたかった
NGNG
あぼーん
2023/11/12(日) 08:32:02.96ID:d94Xl3Lo0
>>79
おー、これはワクワクするな
2023/11/12(日) 08:34:12.27ID:GHx2Prj80
>>80
アホ!
1レスくらい間にはさまないとリアリティが出ないだろw
2023/11/12(日) 08:51:33.78ID:It/c5vypM
ここまで自演
83デフォルトの名無しさん (ワッチョイ 7f7c-aEnJ)
垢版 |
2023/11/13(月) 22:12:34.37ID:6eyhepdG0
はじめてのCってタイトル狙ってるよね?
2023/11/14(火) 12:53:07.86ID:W6BGRK+OM
なんかドキドキする💗
2023/11/14(火) 15:40:13.41ID:Pq1b8U9m0
>はじめてのC
数十年前からの定番ネタだよね・・・今の中年向けの・・・。
2023/11/14(火) 15:56:04.92ID:B1tltd4R0
お前らはAの経験もないだろ
2023/11/14(火) 17:17:03.46ID:Qm0S65Zf0
小さく投げAするときも左利き。
2023/11/14(火) 17:23:51.01ID:0+a8UjLX0
消えたD言語もw
2023/11/14(火) 17:24:41.49ID:ehFVRHwha
APLは経験ないな
2023/11/14(火) 17:26:26.82ID:juKbspbB0
魔球は魔球はハリケーン♪
91デフォルトの名無しさん (ワッチョイ 7fad-beIL)
垢版 |
2023/11/15(水) 02:42:58.51ID:FfQCTRFi0
>>90
あなたの年齢は50歳以上ですね。
2023/11/16(木) 19:17:29.74ID:j+PNeGK90
Cタ「バルス!」
93デフォルトの名無しさん (ワッチョイ ff46-uMtu)
垢版 |
2023/11/16(木) 20:52:49.80ID:oCahIYzp0
C名「歌舞伎町の女王」
2023/11/18(土) 16:08:05.16ID:rSBossZH0
今はABCって言っても通用しないよ
95デフォルトの名無しさん (ワッチョイ 6e46-4xZ8)
垢版 |
2023/11/18(土) 17:12:35.80ID:gr23gvrO0
>>94
音階に倣って「イロハ」だったりするのかな。
プログラミング言語ハとか、ハ++とか、ハ長調とか。
96デフォルトの名無しさん (スップ Sd82-K/BJ)
垢版 |
2023/11/24(金) 17:31:57.03ID:yKOVmI8Pd
三等車か
2023/11/25(土) 04:21:32.09ID:qagB2RQA0
Cの関数ポインタに慣れてしまってたんなに奇天烈に見えてたのに今じゃ可愛く見える
98デフォルトの名無しさん (ワッチョイ 5fad-1+JT)
垢版 |
2023/11/25(土) 04:36:14.81ID:D3zQdbUT0
  ∧__∧
 (´∀`)
  (⊃⌒*⌒⊂)
  /_ノωヽ_)
2023/11/25(土) 10:00:22.54ID:NdoBt+NA0
目標をせんたーに入れてスイッチ
100デフォルトの名無しさん (スププ Sd7f-RFe5)
垢版 |
2023/11/27(月) 08:24:12.52ID:554QjvZVd
左辺値と右辺値のことがよくわからない
char *cp = "abcdefgの"abcdefg"は値を変更できないのに、
char cp[] = "abcdefg"の"abcdefg"は値を変更できる
2023/11/27(月) 09:01:26.52ID:HtoHgn5y0
>>100
それは左辺値/右辺値とは関係ない。
「リテラルを書き換えようとしたら未定義」というルールが関与してる。

前者の場合は文字列の場所を示すアドレスが cp に格納されているので
cp が指す先というのは文字列リテラルだが
後者の場合は確保された配列を初期化子の文字列で初期化するという理屈なので
配列と文字列リテラルとは別の実体を持ち、リテラルではない配列を書き換えることは問題にならない。

初期化子として文字列が出てくるときは初期化の文法としてちょっと特例があるのと
(文字列を含む) 配列は暗黙の型変換で勝手にポインタに変換される特例があって
そういう変則的なルールの積み重ねが分かり難い要因だと思う。

リテラルは書き換えたら駄目なのに型の上では文字列リテラルに const はつかない (C++ では const が付く) ので
ごく単純な場合を除くと書き換えをコンパイラがコンパイル時にエラーとして検出できないこともある。
なるべく (前後の事情によっては出来ないこともあるけど) 変数には const を付けておくのが良い作法だと思う。
const char *cp = "abcdefg";
102デフォルトの名無しさん (アウアウウー Sa0b-6V65)
垢版 |
2023/11/27(月) 09:03:50.85ID:7/k6/GSga
char *cpa = "abcdefg;
char cpb[] = cpa; // 出来ない

char cpc[] = "abcdefg";
char *cpd = cpc; // 出来る & abcdefgの中身も描き替え出来る
2023/11/27(月) 11:14:55.99ID:zMN468VW0
「大前提で文字列リテラルは書き換えたらダメ」があって

初期化と代入が同じ記号の = で行われてる
配列での代入操作は暗黙で先頭のポインタを渡す一方で
配列の初期化はあたかも複製をとったような形になる

ここらへんにややこしさがあってめぐりめぐって1行目にヒットする
104デフォルトの名無しさん (スププ Sd7f-RFe5)
垢版 |
2023/11/27(月) 11:25:24.57ID:554QjvZVd
>>101 ご親切にありがとうございます。標準的な本にもかいてあることを聞いてしまいました。
2023/11/27(月) 12:06:42.49ID:65C4jQRRF
ポインタと配列(の先頭番地)は同じように使えるがまったく別のもの

>>102の例だとsizeof(cpc)は8で
sizeof(cpa)はポインターサイズ
2023/11/27(月) 12:39:47.73ID:zMN468VW0
"abcdefg"[2] = 'C'; これがNG
2023/11/27(月) 19:49:45.68ID:/cbu4sL+0
>ポインタと配列(の先頭番地)は同じように使えるがまったく別のもの
まったく別と言い切ってしまうのはちょっと語弊があるように思う
言い換えれば配列はアドレスが変更できないポインタとみなせる
後は参照先のメモリ領域が書き換え可能かそうでないかの違いでしかない
2023/11/27(月) 19:53:12.61ID:iryvQ0lx0
配列名は単に文字列が格納されている場所に付けられたラベル
2023/11/27(月) 22:43:46.81ID:LIfK37a60
>>108
上で触れられているようにサイズ情報も持ってる
110デフォルトの名無しさん (スプッッ Sdff-z/Dz)
垢版 |
2023/11/28(火) 08:18:33.76ID:0HFLSmnDd
>>109
それは別に配列だからってわけじゃない。
2023/11/28(火) 09:29:06.38ID:mRTkdYl90
配列の型は配列型だ。

char cpc[] = "abcdefg";

とあればこのときの cpc の型は char[8] をもつ。
式中に配列型の式が現れた場合には sizeof か & のオペランドであった場合を除いてその配列の先頭要素を指すポインタ (この場合は char*) に暗黙に型変換される。
変換が適用されればポインタだし、適用されない場面では配列。

配列自体は左辺値だが変更できる左辺値 (modifiable lvalue) ではないので代入演算子の左辺に現れることはできない。
配列を型変換を適用して出来るポインタは左辺値ではないのでやっぱり代入することは出来ない。
112デフォルトの名無しさん (ワッチョイ dfc6-AnfR)
垢版 |
2023/11/28(火) 10:56:51.80ID:vcMwjchf0
え?左辺値に出来るやん
2023/11/28(火) 15:19:32.77ID:87HNLOa+0
型の話って、実は結構難しいというか深いよね…

型を認識するプログラム作ってみるとわかるんだけど
「~のポインタである」と
「~の配列である」を同じ情報量では扱えなくて
「~の配列(要素数n)である」としないとだめなの

ポインタである ことは1ビットで保持できるのに、配列である は要素数があるから必要なビット数がやたら多いのよ
2023/11/28(火) 18:36:50.58ID:0ouam6Fz0
((char*)cpc)++ で cpc[0] が 'b' を指すように移動できるの?
これがポインタが左辺値になってるって意味の理解でOK?
2023/11/28(火) 19:17:29.83ID:7gZuadd+0
++は無理
2023/11/28(火) 19:34:06.06ID:7TmihfNz0
アセンブラで考えるとよくわかる
cpa:
.dw cpa_static
cpa_static:
.db 'abcdef',0

cpc:
db 'abcdef',0

こんな感じになるだろう
cpaをインクリメントするのが可能だがcpcをインクリメントするのは無理なのがわかるだろう
cpcはアセンブル後には値がなくなる固定値でcpaは領域が確保されてる変数だから
2023/11/28(火) 19:42:59.12ID:7gZuadd+0
>((char*)cpc)++

こんな風な事をしたいなら、

*(char*)cpc+i

これでどうだろうか
cpcは固定値で、加算も減算も出来ないが、その位置からのオフセットならとれる

でも、ふつうの人は cpc[i] こうするだろう
2023/11/28(火) 20:11:54.43ID:mRTkdYl90
>>114
代入可能であるためには左辺値であることは必要条件なのだけれど十分条件ではない。
配列が代入の対象になりえないにも関わらず
(modifiable という概念を導入してまで) 左辺値という扱いにしていることからもわかるように、
代入できるかどうかで左辺値かどうかは語れない。
左辺値でも代入できないことはある。

右辺値はどこかに代入しない限り捨てられる (その式を超える寿命を持つことはない) という性質があるので
逆にそうでないものは左辺値という扱いにしないと辻褄が合わないからこうなってるんだと思う。
119デフォルトの名無しさん (ワッチョイ 5fdf-2qxF)
垢版 |
2023/11/28(火) 20:38:05.06ID:h0hB0aZz0
>>112
>>118で「配列が代入の対象になりえないにも関わらず」なんて言い方してるくらいだから
多分左辺値とか右辺値がなんなのかよく分かってないんだろう
まあいつも規約をだらだら載せてるだけだけのコテだしね
2023/11/29(水) 06:07:26.12ID:n75oaT1ga
なんでcpcを++したいと思うんだろ
2023/11/29(水) 07:30:00.42ID:Dj4oipus0
左辺値かどうかの簡単な切り分けだと思っただけで
そういう欲求はない
122デフォルトの名無しさん (スフッ Sd7f-1fOb)
垢版 |
2023/11/29(水) 11:41:18.63ID:5J3ZheQvd
>>111 正確には、配列名のことをいっているんでしょ?
123デフォルトの名無しさん (スフッ Sd7f-1fOb)
垢版 |
2023/11/29(水) 11:43:26.36ID:5J3ZheQvd
でないと文章的につじつまが合わない
2023/11/29(水) 12:08:25.16ID:sncgHuaJ0
何を言ってるのだかわからん。
代入演算子の左辺に配列が現れることは出来ないという説明
に納得いかない (できる状況があると思っている) ということ?
125デフォルトの名無しさん (スフッ Sd7f-1fOb)
垢版 |
2023/11/29(水) 12:16:49.24ID:5J3ZheQvd
>>124 そういうことです
2023/11/29(水) 12:18:51.59ID:UMPQWy8o0
代入可能な左辺値一覧

○…代入可能な左辺値
×…代入可能な左辺値ではない

1 変数に代入 v=x ○
2 変数のアドレスに代入 &v=x ×
3 配列に代入 a[i]=x ○
4 配列の名前に代入(2に相当) a=x ×
5 ポインタ変数に代入 p=x ○
5 ポインタ変数のアドレスに代入 &p=x ×
7 ポインタ変数の参照先に代入 *p=x ○ ただし参照先が書き込み可能でなければランタイムエラー

理解できたかね?
127デフォルトの名無しさん (スフッ Sd7f-1fOb)
垢版 |
2023/11/29(水) 12:25:45.50ID:5J3ZheQvd
>>126 まだまだ浅学な者で、3と4の違いが分かれば十分です
128デフォルトの名無しさん (スフッ Sd7f-1fOb)
垢版 |
2023/11/29(水) 12:26:51.70ID:5J3ZheQvd
右辺値と左辺値に関しては
129デフォルトの名無しさん (スフッ Sd7f-1fOb)
垢版 |
2023/11/29(水) 12:34:21.47ID:5J3ZheQvd
char ss[5];
char *p;
p = ss; 〇
p = &ss[0]; 〇
ss = p; ×
p = ss + 2; 〇
p = &ss[2]; 〇
2023/11/29(水) 12:41:04.72ID:sncgHuaJ0
配列 a があるとき
a[i]=x
という式の左辺は配列に添字演算子を適用したもの (配列の要素) であって
これのことを「配列に代入」と呼ぶと語弊がある。
131デフォルトの名無しさん (スフッ Sd7f-1fOb)
垢版 |
2023/11/29(水) 12:54:49.45ID:5J3ZheQvd
しかし、食べたらまずそうなコテハンですね('_')
2023/11/29(水) 13:01:54.89ID:sncgHuaJ0
最初はSCHEME餃子と名乗ってたけどSCHEMEスレが過疎ってて暇だから
CスレC++スレにも書く機会が多くて途中で変えた。
私としてはあり得なさそうな組み合わせの語を選んだつもりだったのだけど
はちみつを使った餃子のレシピはあるみたいだよ。
133デフォルトの名無しさん (スフッ Sd7f-RFe5)
垢版 |
2023/11/29(水) 13:56:20.69ID:5J3ZheQvd
配列には確かに構造体のようにごっそり代入できませんね
2023/11/29(水) 14:07:08.49ID:5SldHabaM
構造体に入れてしまえば解決
2023/11/29(水) 15:10:46.39ID:K/pKiYoT0
126 の表現を借りるなら

 3 は配列の要素に代入
 4 が配列に代入

こういう意識だわ
2023/11/29(水) 15:15:32.07ID:UMPQWy8o0
結局てめーの日本語が気に食わないって話かよ
長文は読む気が失せるわー
2023/11/29(水) 16:16:32.90ID:sncgHuaJ0
「配列は」という話をしているときに配列でなくする操作 (要素に対するアクセス) をすれば出来るみたいな話と混同されると困る。
2023/11/29(水) 20:22:44.16ID:odjcqh9C0
初心者のころ
char text[] = "Answer is _";
text[10] = 'A' + ans;

とか書こうとしてうろおぼえで

char *text = "Answer is _";
text[10] = 'A' + ans;

としたらエラーかワーニングになって
なんでできないんだよ!とずっと悩んでいたことがあるが
そういう話じゃないの?
139デフォルトの名無しさん (アウアウウー Sa0b-6V65)
垢版 |
2023/11/30(木) 06:41:39.94ID:yOmuxKyka
char a[] = "A";
char *p = a;
は別物(同じだと説明している入門書があるならクソ本)
&a[0] を a と省略出来るだけ
もちろん sizeof p と sizeof a[0] と sizeof a は違う
2023/11/30(木) 13:09:50.69ID:EuLMofdV0
>>139
もう少しで完全に理解できそうなので
ガンダムで例えてくれ
2023/11/30(木) 14:54:30.13ID:3QI4e6Tt0
> &a[0] を a と省略出来るだけ

意味が同じなわけなので記法の上では省略と言えるんだけど
a が &a[0] のことを意味しているというわけではなく、
言語仕様上の理屈としては a のほうにプリミティブな定義があって &a[0] のほうが構文糖という扱い。

@ E1[E2] は (*((E1)+(E2))) と等価である
A & のオペランドが単項*演算子の結果の場合,*演算子も&演算子も評価せずに両演算子とも取り除いた場合と同じ
  (添字演算子の適用結果をオペランドとする場合も同様)
B 配列 (結果が配列型となるような式) は sizeof か & のオペランドであるときを除いて先頭要素を指すポインタに変換される

つまり &a[0] の場合を順番に当てはめるとまず &*(a+0) と同等と見做され、
&* は無かったことにされるので a+0 となり、 0 を足しても内容は変化しないから無視できて a と同じ。
そして a は配列の先頭要素を指すポインタに変換される。
2023/11/30(木) 14:59:53.10ID:3QI4e6Tt0
(順序から言うと配列がポインタに変換されるほうが先だな……。 すまぬ)
2023/11/30(木) 15:08:15.57ID:3QI4e6Tt0
配列 a は a と書くだけで先頭要素を指すポインタなので
&a[0] と書くってのは 0 を足すという要らんことをしているという扱いってこと。
2023/11/30(木) 20:20:41.06ID:4nwqW1NG0
>>140
pがザビ家でaがジオン公国そのものと言ったら判りやすいだろうか
ジオンはザビ家にNTRれたけど元のジオン・ダイクンが掲げた思想(長さとか)はNTRが完了した時点で失われた
その後出てきたアクシズ(ネオ・ジオン)はもっと酷くてジオンと言える部分はNTRしたザビ家の跡取りとその傀儡だけでジオンとは一体何だったのか語れる人物は一人もいない
2023/11/30(木) 20:26:04.69ID:SvZ2/mZg0
>>143
そっちのほうが余計なギミックじゃない?
a[]のアドレスが欲しければ&aと書くだけでいいのに
aが自動的にa[]の先頭番地になってしまうからややこしい
ちなみにBASICだと配列と同名の単純変数が作れてしまいこれも今思うと無茶苦茶だった
2023/11/30(木) 20:46:09.47ID:h/B+JtY5a
>>117
意味無いわ
147デフォルトの名無しさん (アウアウウー Sa0b-6V65)
垢版 |
2023/11/30(木) 20:47:46.07ID:h/B+JtY5a
完全に理解した!!!

https://ideone.com/g2912A

#include <stdio.h>

#define N 3

int main(int argc, char **argv)
{
char *hoge[] = {"abcd", "efg"};
char **hige = hoge;
char hage[][N] = {"ab", "cd", "ef", "gh"};
char (*fuga)[N] = hage;
char (*moga)[N] = {"ab", "cd", "ef", "gh"};
printf("%zd %s %s\n", sizeof(hoge), hoge[0], hoge[1]);
printf("%zd %s %s\n", sizeof(hige), hige[0], hige[1]);
printf("%zd %s %s %s %s\n", sizeof(hage), hage[0], hage[1], hage[2], hage[3]);
printf("%zd %s %s %s %s\n", sizeof(fuga), fuga[0], fuga[1], fuga[2], fuga[3]);
printf("%zd %s %s %s %s\n", sizeof(moga), moga[0], moga[1], moga[2], moga[3]);
return 0;
}

説明してみ
148デフォルトの名無しさん (アウアウウー Sa0b-6V65)
垢版 |
2023/11/30(木) 20:51:51.20ID:h/B+JtY5a
アンカ忘れた
>>140
2023/11/30(木) 21:26:27.48ID:3QI4e6Tt0
>>145
あくまでも言語仕様の理屈で言えばこうだという説明なのでその言語仕様が良いかどうかの意見は含んでないよ。
色々とアレな部分も多いってのは文句つけても仕方がないいまさらな話だし。
150デフォルトの名無しさん (ワントンキン MM3f-XlNP)
垢版 |
2023/11/30(木) 22:06:24.41ID:wy49Mw9yM
いやいや何を言っとんの?
利便性のためにそういう仕様にしてるんだよ
C書いてりゃさすがに分かんだろうよw
2023/11/30(木) 22:36:56.23ID:3QI4e6Tt0
感覚的にはそんなに不自然には感じないんだけど
仕様の規則が変則的なのも確かなので
つまりは人間の感覚は不合理なものってことだ。
2023/11/30(木) 22:41:39.63ID:0Cr+jEwb0
>>147
%zd は知らなかったわ。 勉強になった
2023/12/01(金) 00:42:09.23ID:U5xjJXbM0
sizeof の結果の型は size_t で、
size_t は符号なし整数というだけしか規定されていない処理系定義なんだけど
unsigned int や unsigned long int の別名として定義されていることが多いせいで
それをあてにした形で説明している資料は割とある。
2023/12/01(金) 02:30:56.67ID:oKQshtme0
>>145
> a[]のアドレスが欲しければ&aと書くだけでいいのに
俺はそっちのほうがややこしいと思うけどな

むしろ*(a+10) を [] で表現するなら *a[10] みたいな書き方になるほうが、理解する上ではややこしくなかったかなとは思うけど(使う上では不便)

[] って箱(マス)に見えるし、まあ直接箱の中身を示すものなのだなって覚えたけど
2023/12/01(金) 05:52:03.14ID:sCbOzpGc0
誰が誰なのかよく分からんけど、キッズが来て荒れた、という話ですか

インデックスアドレッシングを [ ] 記号に当てただけと思うけど、そんなに難しいかね
2023/12/01(金) 05:55:20.08ID:sCbOzpGc0
型の話かと思ってたら、いつの間にか 入門者がポインタを理解できない話 になった印象
2023/12/01(金) 14:51:35.53ID:U5xjJXbM0
>>145
配列 a に &a としたときに得られるのは配列を指すポインタであって配列の先頭要素を指すポインタではない。
(型が違う。 アドレスを数値として見たら同じはずだけど。)

多次元配列にアクセスするとき (添字演算子を重ねて適用するとき) に仕様の通りに解釈していくと配列と先頭要素が都合よく切り替わって最終的にポインタ演算になるのが実に上手いこと出来てる。
配列の要素にアクセスするときの記法を現状のような形にするという前提でならなんだかんだでよく出来ている。

配列に & を付けたら配列を指すポインタになるというのは例外的ではない普通の挙動だからそこに別の意味を割り当てるならそれもやっぱり変則的なややこしい挙動ってことになってしまうよ。
2023/12/01(金) 19:03:26.87ID:Ga+233FE0
>>157
ポインタ完全制覇でよーく理解できました。
20年以上やってきて配列へのポインタは一度だけ出番がありました。
2023/12/01(金) 19:23:36.92ID:U5xjJXbM0
>>158
プログラマが直接的に書く機会はあんまりないだろうけど、
暗黙には頻繁に表れていてこのルールがないと上手いこと機能しないって話。

#include <stdio.h>

int main(void) {
int foo[2][3] = {
{1, 2, 3},
{4, 5, 6}};
printf("%d\n", foo[1][2]); // ふたつの座標みたいに見えるけど
// 式を各段階に分解すると……
int(*bar)[3] = foo; // 配列を指すポインタは出てきてる!
int *baz = bar[1];
int qux = baz[2];
printf("%d\n", qux);
}
160デフォルトの名無しさん (ワッチョイ 65d3-WD8q)
垢版 |
2023/12/05(火) 07:30:58.43ID:72+QzLj/0
c言語初心者です
質問させてください

FILE *fpという宣言の「FILE」にどういった役割があるのでしょうか
*fpは関数によってどこを読み書きするかを指定するためにアドレスを格納することは分かるのですが
それならばint型のポインタで良いような気もします
プログラムを書く上でどうでもいい内容なのですが教えていただければ今日の寝付きが良くなる気がします
2023/12/05(火) 07:53:15.80ID:kkEdYaZP0
>>160
stdio.h の中身を見れば FILE がどう宣言されているか分かるのでは?
162デフォルトの名無しさん (スフッ Sd0a-Oc+E)
垢版 |
2023/12/05(火) 08:16:33.53ID:64vzQPx0d
>>160 FILE構造体っていうことだけは、どの本にも書いてある。
2023/12/05(火) 08:26:33.63ID:Sjl8/rh40
実際UNIXのfile descriptorはintでWindowsのファイルハンドルHANDLEはvoid*だ。
こいつらはシステムコールによってカーネルモードで操作されるから中身が完全に見えないようになってる
それとは違って標準Cライブラリはユーザモードで動作するから
処理系依存で中身を操作してもいいように作ったのかもしれない
2023/12/05(火) 08:33:57.88ID:GHHZLCc/d
>>160
確かに構造体の中身を使わないかぎり何のポインタでもいいんだけど
間違えて他のタイプへのポインタと混同した時にエラーが出るから気づきやすい
それはけっこう重要だよ
165デフォルトの名無しさん (ワッチョイ 65d3-WD8q)
垢版 |
2023/12/05(火) 09:00:17.71ID:72+QzLj/0
>>160です
普通の構造体の宣言とは異なり要素の記述はありませんが
「FILE」とは「ファイル構造体を使うよ」と宣言しているという意味で
そうしてstdio.h上のFILE構造体の要素に開いたファイルの情報が代入されていくということでしょうか?
「FILE」を記述せずにfopenで開こうとした場合構造体メンバのptrに代入されている数値が使えないのでfopenから戻り値が受け取れず正しく*fpに座標が代入されない
みたいな
そして開くだけならfopenでも開けてしまうとか
2023/12/05(火) 10:08:56.47ID:z5PiblaY0
言語仕様的に見れば FILE はストリームを制御するのに十分な情報が入ったオブジェクト型であることと、
アドレス (FILE 型のオブジェクトがある場所) に意味がある場合もあるから
オブジェクトをコピーして機能するとは限らないという程度のことしか書いてない。

FILE にどのような情報が格納されているのかといったことや
詳細な仕組みはホスト環境の事情に合わせて処理系の裁量で決めてよい部分なので、
具体的にどうなっているのかは各実行環境・開発環境ごとに違う。

特に環境依存の細かい部分に立ち入って制御をしたい事情があるのでない限りは
fopen が「なんらかの方法」で FILE 構造体を構築してそのアドレスを返すものであるということだけ知っていれば
普通のプログラマにとって十分なように出来ている。
167デフォルトの名無しさん (ワッチョイ 8ac1-Vvnv)
垢版 |
2023/12/05(火) 10:36:22.34ID:NYBtRI3Y0
>>165
3行目から4行目の理解で大体あってるよ
それ以降は何言ってんのか分かんねーから全部アタマの中から破棄していいよ

正確にはFILEってのは抽象データ型であんたは構造体って言ってるけど構造体かどうかは分からんし使う側は知る必要もない
提供者がわざわざ抽象型にして使い手側の負荷を下げてくれるとこを中身がどうとか役割がどうとかさぐんのは筋が悪いんだよ
使えって言われてんだから何も考えずにだまって使えばいいよ
2023/12/05(火) 11:08:08.12ID:h96fo3nj0
FILE構造体ってOS毎に変わるし、コンパイラ実装でも又変わってた様な気がする
2023/12/05(火) 12:35:58.10ID:4VzMioa/0
FILE*経由だとバッファリングされるから、バッファーのポインタとそこに含まれてるデータサイズも含んでいるだろう
そもそもファイルのシーク位置も含まれてる
まとめると
・ファイルディスクリプターやファイルハンドル
・シーク位置
・バッファー(ポインタ、サイズ、含まれてるデータサイズ)
となるかね
2023/12/05(火) 15:39:55.92ID:QJai9ytva
>>160
void *hoge = (void *)fopen("hoge", "wb");
fprintf((FILE *)hoge, "hoge\n");
fclose((FILE *)hoge);
2023/12/05(火) 17:31:14.53ID:4VzMioa/0
FILE*互換の自前のストリームを実装できれば便利なんだがなぁ
継承が無いから、構造体に自前の関数をセットして、何らかの登録関数に渡す感じになるだろう
2023/12/05(火) 17:40:17.96ID:oSX0a7FoH
fopencookieとかfunopen
2023/12/05(火) 17:48:30.74ID:z5PiblaY0
パイプのインターフェイスをストリームとして開くことが出来るから
適当なスレッドを開いてパイプの受け取り口で受け取った情報を好きなように加工するようにすれば、
パイプに書込む側ではストリームに書き込んだらいい感じに処理してくれるように見える。

というのを Windows でやっているのをどっかで見た。
2023/12/05(火) 18:11:37.45ID:GHHZLCc/d
>>165
開くだけで何が楽しいんだ?
読み取りも書き込みもクローズもできない
exitで自動的にクローズはされるけど…

>>163
HANDLEはポインタではなくただの整理券番号で実体は整数値だ
しかしWindows SDKでは「架空の構造体へのポインタ」として定義されているので例えばウィンドウハンドルをファイルハンドルと混同するとType mismatchエラーになる
これはかなり有用な仕組みでC言語が仕様に組み込んでほしいくらい
2023/12/05(火) 23:44:52.07ID:9c748LJ40
ソケットディスクリプタってファイルポインタに転生できる?
2023/12/05(火) 23:48:43.88ID:4UYj/sQ80
>>175
fdopen
177デフォルトの名無しさん (ワッチョイ 65a4-WD8q)
垢版 |
2023/12/06(水) 08:34:18.09ID:hjosWl9s0
>>160です
皆さん大変参考になりました
今日はよく眠れそうです
178デフォルトの名無しさん (スフッ Sd0a-nvfk)
垢版 |
2023/12/06(水) 12:07:25.67ID:dR0trs3yd
対策このままなら再発しそうね
https://japan.zdnet.com/article/35212258/4/
2023/12/06(水) 16:09:22.53ID:JLoh059d0
仕事なくなったら困る人が大勢いるし
2023/12/06(水) 20:24:47.29ID:tBrgYtLt0
free(NULL) は許されるのに
fclose(NULL) は許されないんよな
2023/12/06(水) 21:05:20.14ID:gHtrZlY5a
>>180
さらにfflush(NULL)は許されるという一貫性の無さ
2023/12/06(水) 21:19:13.20ID:+44Bjs460
fflush の場合は全てのストリームを対象とするという特別なフラグとして NULL を活用しているので無効なポインタとしての NULL とは事情が違う気がするね。
それにしたってNULL を多義的に使っているという意味では一貫性はないけど。
183デフォルトの名無しさん (ワッチョイ 9140-JrwL)
垢版 |
2023/12/06(水) 21:23:39.94ID:bAVe0RWP0
free(NULL)は、おバカなマの為に特別に許容したんだろ
184デフォルトの名無しさん (ワッチョイ 65a4-WD8q)
垢版 |
2023/12/07(木) 02:17:45.58ID:NYiehhGh0
以前ネットでおすすめされていた「苦しんで学ぶc言語」の内容をしっかり理解する段階まできたのですが、次は何をすれば良いのでしょう。
猫でも分かるプログラミングも読んでみたのですが仕様が古すぎてトレースできないのと、私には作者さんの文章の作りが合わず困っています。

まずは簡単なソフトを作りながら学べればと思います。
入門書の次に読めるような本と、そこからアプリケーション開発のイロハが分かる本やサイトを教えていただけないでしょうか。
2023/12/07(木) 07:17:00.47ID:Y9iRVwaI0
↑みたいなのって目的ないのかね
今後C言語で特に何かやりたい事がないなら別に何もする必要ないよ
2023/12/07(木) 08:27:05.09ID:wi0prF2i0
Cで現実的なアプリケーションを作るならホスト環境 (OS など) の事情は無視できないし、具体的な目標なく道筋は決まらないと私も思う。
何の情報もない他人に何かを勧めるというのはしづらい。
目標があるならその分野の既存のコードを「読む」という体験はためになるかもしれない。
実際のコードを見て意味がわからない部分があれば学習が必要な部分だというとっかかりになる。
187デフォルトの名無しさん (ワッチョイ 6646-wNAC)
垢版 |
2023/12/07(木) 09:28:19.84ID:++8K4NmJ0
>>184
> 「苦しんで学ぶc言語」

というのは、これ↓ ?

https://9cguide.appspot.com/index.html
> 苦しんで覚えるC言語

であれば文法解説のようなので、ファイル操作をしてはどう?
cat コマンドを作るとか。
188デフォルトの名無しさん (ワッチョイ 65ff-WD8q)
垢版 |
2023/12/07(木) 10:04:58.60ID:NYiehhGh0
>>186
Windowsソフトを制作して当方の業務を効率化できればと考えています。
「既存コード」を読むですか、なんだか英語学酒のようで気が滅入りますね>
>>187
失礼しました。「覚える」でしたか。
ファイル操作がどこまでを指すのかわかりませんが高低水準入出力はすでに可能です。
2023/12/07(木) 10:23:42.82ID:aHfAXzyRM
業務効率の向上が目的ならC言語は回り道すぎる
他の言語選んだ方がいい気がする
2023/12/07(木) 10:31:24.83ID:HPax2zCP0
ファイル操作の課題出してあげようか
指定した二つのDirにあるファイルを同期させる
単にコピーするのではなく、タイムスタンプの新しいものだけをコピーする
新しいSubdirできていたら、中味があればDirごとコピーする
とりあえずは、新しく作られてファイルの同期まで、
削除については考慮しなくて良い
2023/12/07(木) 10:39:50.34ID:3PWWuEZS0
>>188
>Windowsソフトを制作して当方の業務を効率化できればと考えています。
早速これに取り組んだ方が良い
実用するものを作る方がモチベになる
2023/12/07(木) 11:21:46.78ID:6u4iKMo7d
C言語のスレッドで言う事じゃないがC言語以外の生産性の高い言語を学んだほうがよさそう
2023/12/07(木) 11:56:53.00ID:QzDrEJVi0
>>184
CはOSのAPIを直接叩けることがメリットでもあるので、Linuxのプログラミング本を読んでコード書いてみるのが一番良いだろう
マルチプロセス、マルチスレッド、ソケットとか覚えるべき事は沢山ある
Cでやれば根本から理解出来る
2023/12/07(木) 12:04:11.70ID:FWY3NSUg0
(事務作業などの?) 業務効率化が目的なら Power Automate Desktop の活用を考えた方がいいと思う。
効率化の最初の段階は解決すべき問題を見つけることで、これをきちんと一度で洗い出すのは大抵の場合に出来ない。
雑に作って運用しながら改善するという手順をとるのがのぞましいが、 C で書くとそういう柔軟な体制がとりづらい。
2023/12/07(木) 13:30:05.55ID:zYUoekf60
「なにを作りたいのかが大事」ってのは良く分かるんだけど、普通の人が作りたいものって大抵Cじゃない方が…ってなっちゃうんだよな
196デフォルトの名無しさん (ワッチョイ 65ff-WD8q)
垢版 |
2023/12/07(木) 13:42:19.21ID:NYiehhGh0
>>90
そういった事もできるんですねー
>>191
取り組みたいのは山々なのですがuiの作り方からわからないので入手できるバーションで解説されている書籍が欲しいところです。
>>192
基礎を大切にしたいのでcをはじめのうちは使っていきたいと考えています。
>>193
仰る通り根本を理解できればと思います。Linux本ですね。可能であれば簡単なものでおすすめを添えていただけないでしょうか。
>>194
グラフィック系のソフトを使う上で不便なところを楽したい、と言いますか
とにかく画像表示や文字列表示から進めていきたいと考えています。
前述の通り基礎を理解したいので可能であればcで作成したいのです。
2023/12/07(木) 13:42:44.77ID:P4JhXVL60
WindowsアプリならCじゃくて、せめてC++にしておけ
2023/12/07(木) 13:43:24.10ID:n9+uyfFo0
楽したい奴にはCは向かない
199デフォルトの名無しさん (アウアウウー Sa21-wVFe)
垢版 |
2023/12/07(木) 14:18:01.05ID:wNl2TimYa
C++は変な癖がつく
Cの方が絶対良い
2023/12/07(木) 15:23:59.73ID:3PWWuEZS0
Cで全部書いてると大変だと思うよ
機能全部使わんでも良いからC++の方が現実的だよ
2023/12/07(木) 15:31:37.34ID:HPax2zCP0
大変かどうかは、何を作るかによる
2023/12/07(木) 15:35:13.86ID:3PWWuEZS0
>>201
>>196を踏まえて大変だと思うよ
2023/12/07(木) 16:19:14.82ID:QzDrEJVi0
>>196
自分はUNIX Cプログラミング(いわゆるライオン本)で勉強して、めちゃくちゃ為になったけど、さすがにこれは古すぎる
詳解UNIXプログラミング 第3版は間違いのない名著
ふつうのLinuxプログラミング 第2版はLinux向けだし初心者向け
Cで仕事をするようにはならないかもだけど、「ふつうの~」を理解出来て自分のものにすることがCを学ぶ意義だな
2023/12/07(木) 16:23:44.20ID:5AmCTrxW0
>グラフィック系のソフトを使う上で不便なところを楽したい
ソフト側でスクリプト等がサポートされてなければ
できることは連続するショートカットを 1プッシュでまとめて出す
キーロガー&再生系とか Joy2Key みたいなキーコード送出系ぐらいしか思い浮かばん
2023/12/07(木) 17:03:32.49ID:FWY3NSUg0
>>196
具体的に対象になってるソフトの名前は言える?

モダンな設計の Windows 用ソフトが外部から制御するために公開するインターフェイスは
Component Object Model の技術をベースにしていることが多くて、
高度な開発環境の補助を得ながら使う分には便利なんだが
C から使おうとするとすごく面倒くさい。 (出来なくはないけど。)

ソフトが外部に対してインターフェイスを公開するのではなく
制御用のスクリプト言語を内蔵している場合もあるので
C でのプログラミングに詳しくなってもあまり役に立たないこともある。

もしも外部に対してインターフェイスを用意していないなら
ボタン操作のイベントを発生させるとかして制御する (つまりまさに人がする操作を代行させる) ということも可能だが、
それを可能にするような基礎技術というか Windows の動作モデルを理解したいのなら
「猫でもわかるWindowsプログラミング」はそれなりに有用だと思うよ。
私は書籍を読んだことは無いけどウェブ版は Windows がイベントを伝播させて操作させる構造を理解するのに十分な記述はある。

だけど、人が操作するときに Windows の中で何が起こっているのかを
初心者が根本から理解してきちんと使いこなせるまでになるハードルは割と高めなんだよ……。
Power Automate Desktop なら技術の根本を理解せずともそれが出来るようになってるし、
マイクロソフトが直接に提供していてしかも無料という神ソフトなのでオススメした次第。
UWSC とか AutoIt なんかも人気があるね。
2023/12/07(木) 17:15:58.47ID:ggcXWkJv0
関数のサイズというのは、関数の引数のサイズと同じと考えて良いのでしょうか?
中身に1万行使ってる関数があるとして、その1万行は関数のサイズとは全然関係ないんでしょうか?

構造体はなんとなく変数のバイト数の足し算なんだなってわかるけど、関数がピンとこないです・・・
2023/12/07(木) 17:18:59.29ID:Dmh4B19g0
プリプロセッサメタプログラミングを覚えてからc言語の開発は楽になったわ
前は同じようなデータ構造でたくさんモジュール作ってたからな
2023/12/07(木) 17:34:07.95ID:FWY3NSUg0
>>206
関数をデータとして扱うことはないので「大きさ」は定義されない。
C の言語仕様的には「関数はオブジェクトではない」という扱い。

関数に対して呼び出し以外の操作をする方法はない。
関数ポインタで関数の場所を指すということは出来るが、
型システム的にちょっと特殊な扱いになっていて関数ポインタ経由で値を取り出したりも出来ない。

もちろん実際にはなんらかの形でメモリ上には存在するし、
長いプログラムは大きい可能性が高いけど。
実際にどうなってるのかは生成された機械語を見ればいいんでね。
2023/12/07(木) 17:41:37.50ID:VEE9aIzl0
>>206
質問文が謎すぎて、何を聞きたいのか解釈できない

関数のサイズって言ってるのがビルドしてできた実行ファイルのファイルサイズの事なら、コードの量が多ければ当然サイズは大きくなる
2023/12/07(木) 17:41:59.31ID:ggcXWkJv0
>>208
ポインタのアクセス条件でメモリのサイズ・型が明確になっていること
とあったので、関数ポインタもサイズや型が明確でないといけないなら
ちゃんとわかっとかないといけないと思ったのですが、関数の扱いはわかってる人から見ても特殊なんですね
ありがとうございます
2023/12/07(木) 18:04:20.91ID:Kvlx+aNw0
>>206
あなたはどういう文脈で「関数のサイズ」が気になった・話題になったの?プアな組み込みとか?
俺は「関数のサイズ」が気になった・話題になった覚えがない
まぁコンパイル後のコード量かなぁ、関数の行数は大きく関係する
引数はスタックに積むけど「関数のサイズ」とは言わない気がする
2023/12/07(木) 18:19:55.87ID:5AmCTrxW0
サイズ云々は
インクリメントしたときにどんだけ(何バイト)進むのかが確定してる型でないとポインタにならない
→ じゃ関数ポインタって 関数のサイズ(≒ コンパイル後の機械語化されたバイナリのサイズ) を知ってるのか?

こういう思考の流れかな?
2023/12/07(木) 19:14:37.61ID:ggcXWkJv0
>>212
まさにそれです!
関数ポインタを配列に格納した時インクリメントしたら何バイト進むのか分かってないといけないのではと
2023/12/07(木) 19:46:05.37ID:Avn/NPEq0
>>213
その状況で必要になるのは関数のサイズじゃなくて関数ポインタのサイズや
それは他のポインタと同じ、64bitPCなら8バイト

仮定の話として、もし「関数ポインタの配列」ではなく「関数の配列」が作成できるような言語仕様にするなら、関数のサイズも決めないといけなかっただろうね
2023/12/07(木) 19:58:53.01ID:ggcXWkJv0
>>214
言われてみたらたしかにそうですねなんでポインタなのに普通の変数のように考えてしまってたんだろう・・・
216デフォルトの名無しさん (ワッチョイ 9140-JrwL)
垢版 |
2023/12/07(木) 21:12:50.21ID:fQltjmnX0
void*使えるやん
217デフォルトの名無しさん (ワッチョイ 65ff-WD8q)
垢版 |
2023/12/07(木) 21:34:16.53ID:NYiehhGh0
>>203
ありがとうございます。
>>204
メインのソフト除いて二窓三窓しているので欲しい機能だけ載せたソフトを自作したいなと。
>>205
204へのレスと同じです。
猫でも分かるは説明していない単語が出てきたり、UI作成の手順をトレースできなかったり
わからない人向けではなく分かる人向けの解説のようで個人的には合いませんでした。
2023/12/08(金) 03:48:38.29ID:tzfGEsy80
>>216
関数ポインタは void* に格納可能であると保証してないし、関数ポインタがオブジェクトを指すポインタより大きかったり表現が異なっていたりする環境はある。
出来る環境でなら使うのが悪いわけではないけど移植性は犠牲になる。
2023/12/08(金) 06:53:57.90ID:Mdse7dEX0
>>218
>関数ポインタは void* に格納可能であると保証してないし
そんなことありえるの?
2023/12/08(金) 07:01:37.37ID:g0YSKcXt0
near ポインタモデル?だったかの
変数のアドレッシングサイズと
プログラムカウンタのアドレッシングサイズが違うやつ
2023/12/08(金) 07:38:56.35ID:qsjd2ZYcM
ミディアムモデルとかコンパクトモデルとか
まぁ過去の話だわな
2023/12/08(金) 07:57:53.16ID:m+qJyEe4d
関数のサイズは関数のポインタをアドレス順にソートすれば求められる
そのサイズ分を実行可能領域にコピーすれば当然実行もできるよ
dllインジェクションとかでたまに使われる
2023/12/08(金) 08:01:58.55ID:ClTGg8d6d
>>217
業務で使ってるような信頼性のソフトを自作するつもりなのか
一人で?予算は?期間は?
まあ無理だろ
単純にメモリの大きなPCに買い替えればいいんじゃない
2023/12/08(金) 09:53:49.26ID:B2zBKDAb0
>>217
マイクロソフトが出している公式のチュートリアルは C++ が基礎だけど
考え方としては C でも同じなのでそのへんは適当に読み替えながら……
https://learn.microsoft.com/ja-jp/windows/win32/
Win32 API は C で使ってもそんなに不便ではないように出来てる。

特に最も基礎のこのへんの例示のコードは (C++ とは書いてあるが) たぶん C としてコンパイルさせても通る。
https://learn.microsoft.com/ja-jp/windows/win32/learnwin32/your-first-windows-program

必要な知識の分量は初心者が想像するよりずっと多いと思う。
分かりやすいドキュメントがあったとしても (そして無いこともしばしばある!) 分量は減らないので
分量というハードルをクリアするのは単純に学習量しかないし、
学習量をこなすには時間をかけるしかしょうがない。

やりたいことを自由に出来るようになるまで何も生産しない時間 (業務なら人件費に換算されるだろう) をかける余裕があるの?
というところを不安に思っちゃうわけだよ。
ここは C スレだから C プログラミングを支援したい気持ちはあるがそれがしんどい場合も多いってことも知ってる。
個人事業なら趣味と兼ねるのもアリかもしんないけど。
225デフォルトの名無しさん (ワッチョイ 6646-wNAC)
垢版 |
2023/12/08(金) 10:13:43.24ID:20YRNN5F0
>>224
Cコンパイラに、C++ -> C トランスレート機能あるの?
2023/12/08(金) 10:26:10.76ID:vLixVDpZ0
API はほとんど C インターフェースで
C++をベターCとして利用してて C++のクラスの機構はほぼ使ってない

(GDI+ とかAPIがはなっから C++ インターフェースの奴は別)
227デフォルトの名無しさん (ワッチョイ 9140-JrwL)
垢版 |
2023/12/08(金) 10:34:54.49ID:faKtyhh20
>>218
ねえよ
2023/12/08(金) 10:50:23.47ID:k3Bpg+TDa
ぶっちゃけGDI+もCから使えるけどね
2023/12/08(金) 10:53:01.67ID:vLixVDpZ0
>>228
あれ Cインターフェース居るのか 最終的にはCOMになってるんやっけ?
2023/12/08(金) 11:03:20.25ID:Mdse7dEX0
>>220-221
なんかそういうのあったかも
2023/12/08(金) 11:04:41.36ID:VEgZ7oNC0
あれはPascalの呼出ではなかったかな
2023/12/08(金) 11:27:29.89ID:B2zBKDAb0
>>229
gdiplus.dll 自体は関数群を置いてあるだけっぽい。
それをラッパークラスで覆って C++ から使いやすくしているだけ。
233デフォルトの名無しさん (ワッチョイ 6548-WD8q)
垢版 |
2023/12/08(金) 12:03:08.97ID:7hcazM9a0
>>224
兼任ですが個人事業主でお金と時間はそれなりに自由に使えます。
3〜5ヶ月くらいはまとまった時間を取ることも可能です。
公式チュートリアルは参考にはなりますが読みやすいかと言われると微妙ですね。

知識はもちろん身につけたいのですが、そこまでの道筋は他人のコードを読む方がやはり良いのでしょうか?
書籍やサイトなどでアプリの形になるまでのチュートリアルなどは無いのでしょうか。
2023/12/08(金) 12:17:34.25ID:k3Bpg+TDa
Win32APIというよりそれ以前の
C言語の知識が足りてないんじゃないのかな
2023/12/08(金) 13:05:38.60ID:B2zBKDAb0
>>233
何を学べば良いかすらわからないときのとっかかりとして
他人のコードを読む (何がわかってないかはわかる) ことを勧めたまでで、
良い資料があるならそれを読むにこしたことはないよ。
良い資料がないことも多いという現実はあるけど。

私は公式チュートリアルは良いほうだと思う。
知らないことを書いてあるんだからある程度は読みづらいこともあるのは当たり前のことで、
どれを読んだって似たようなもんじゃないかな。
専門的な内容をスラスラ読めるほうがおかしいでしょ。
2023/12/08(金) 13:11:55.82ID:0BufPgxy0
さてはオメー
ふらっとC#スレで他人のコードの読み方とか延々聞いてたヤツだな?
2023/12/08(金) 13:15:41.58ID:o54AonyOa
>>206
関数もメモリにロードされるのわからず?
関数はただのマシンコードなんだからここから始まりますよ、というラベルがついてるだけだぞ
そして呼ばれた時はそこへジャンプするだけ
関数ポインタはそのマシンコードのラベルのアドレスを保持しているだけ
ポインタ以前にコンピュータの仕組みからやった方が良さそう
プログラム格納方式とか聞いたことない?
2023/12/08(金) 13:31:18.44ID:k3Bpg+TDa
>>236
なんちゃらGPTがここでこっそり質問してたら笑う
2023/12/08(金) 13:36:30.72ID:SLmq2FCH0
>>219>>227
ググってみたらどうも>>218が正しいらしい
240デフォルトの名無しさん (ワッチョイ 9140-JrwL)
垢版 |
2023/12/08(金) 15:42:45.24ID:faKtyhh20
だからねえよ
そいつが勘違いしてるか、使い方が悪いかだろ
2023/12/08(金) 16:03:05.13ID:abnVL6FT0
>>206
構造体もプログラムからしたらただのメモリ領域の塊だぞ
そこに変数とかいう概念はない
構造体のメンバのオフセットでその位置を指定して書き込んだり読み込んだりするだけ
その時のオフセットの計算に利用されるのが型
変数宣言すると構造体全体サイズのメモリ領域がスタックに確保される
mallocで確保されるとヒープに確保されてそのアドレスが返る
ただそれだけ
242デフォルトの名無しさん (アウアウウー Sa21-wVFe)
垢版 |
2023/12/08(金) 16:08:12.70ID:k3Bpg+TDa
関数を malloc で確保するにはどうすれば良いですか?って言いそう
2023/12/08(金) 16:21:49.56ID:abnVL6FT0
ちなみにメモリにロードされた関数の領域は現代のOSならば当然ながらアクセス不可能
昔はプログラム領域にアクセスできてその中のコードを動的に書き換えるという荒技をやってた人もいるらしいが
2023/12/08(金) 16:24:27.68ID:abnVL6FT0
ちなみにメモリ領域にマシンコードを生成してそのメモリ領域のマシンコードを即時実行するということはできる
これをJITという
最近のスクリプト言語ではこの手法がかなり用いられている
やり方は普通にメモリにマシンコードを生成して実行可能属性を付加、各種CPUキャッシュをクリアしてから
関数ポインタにキャストして実行するだけ
2023/12/08(金) 16:31:30.89ID:VEgZ7oNC0
メモリ保護機構が動いて実行できないと思う
16ビットリアルモードOSだったらできたと思うが
2023/12/08(金) 16:51:01.76ID:9cA1ls6dd
mprotectとかVirtualProtectで実行可能にすればできる
2023/12/08(金) 17:06:26.65ID:VEgZ7oNC0
しかし、それだと任意のコード実行が自由自在ってことになって・・・
まずくない?
2023/12/08(金) 17:24:04.59ID:B2zBKDAb0
>>247
許可を与えないと実行できないから問題にならないよ。
許可を与えられる前には実行できないんだから
外から注入されたものが自分で許可を出すということは出来ない。
2023/12/08(金) 17:24:33.32ID:B2zBKDAb0
>>247
許可を与えないと実行できないから問題にならないよ。
許可を与えられる前には実行できないんだから
外から注入されたものが自分で許可を出すということは出来ない。
2023/12/08(金) 17:35:36.56ID:VEgZ7oNC0
セキュリティって、身内も信じちゃまずいと思うよ
2023/12/08(金) 20:25:30.65ID:Bb4hYLfH0
>>250
その理屈はOSすら信じられずPC使うなって発想にしかならん
信じた者が信じる者は正しい、セキュリティの基本やろ
2023/12/08(金) 20:31:27.89ID:VEgZ7oNC0
企業でもそうなんですか?
管理者が望んでいないプログラムが動かせたら困るでしょう

管理者自身がやるってならちょっと違いますが
2023/12/08(金) 20:41:26.51ID:Bb4hYLfH0
>>252
それはつまり「身内じゃないから動かない」なわけで身内も信じちゃまずいにはならんわけよ
>>249ではちみつ先輩が言っているのは「許可されたものは動く」なわけで
管理者が許可したものは動くし許可しなければ動かない

たぶん「許可したプログラムが許可してないコードを実行したらどうすんの?」ってことだと思うけど
そんなプログラムを許可した時点で間違ってる
2023/12/08(金) 20:48:50.56ID:B2zBKDAb0
???
私の理解だと >>247 は「機械語をその場で生成して即時実行するのって危なくないの?」という話だと思ってたんだけど違うの?
そういう理解だったから実行の許可を出す (メモリの実行可能属性を ON にする API を呼び出す) ことなく実行できない、
プログラマの意図しない実行は防がれるということを応えたつもりだったんだけど、運用の話なの???

「身内」ってのは「プログラムの中での機械語生成にミスったらめっちゃ暴走するやん?」という意味かと思ったけど
運用にかかわる人物という意味?
2023/12/08(金) 21:24:15.38ID:8rS6bPls0
>>225
C++黎明期はC++トランスレーター付きのCを普通に使わされたもんだよ
2023/12/09(土) 07:42:54.58ID:Z2D8kHNzd
>>250
それなら自作のプログラムをコンパイルして実行できる環境がすでにまずいだろw
パソコンをゲーム機みたいにしたいのかい

読み書きできるメモリを実行可能属性にできるというだけで
書き込み不可能なシステムメモリに書き込めるようにできるわけではない
257デフォルトの名無しさん (ワッチョイ ff46-vhj2)
垢版 |
2023/12/09(土) 08:06:29.62ID:NnZXyC0n0
本日のWebは、
・帝乃三姉妹は案外、チョロい。 → 本誌で既読
・レッドブルー → 本誌で既読
・からかい上手の高木さん → ゲッサンで既読

どうにかしてよ、A立。たとえば響5巻無料Webでもとか。

そういえば、高木さんの人の将棋のやつ、マガポケでも終わったね。
2023/12/09(土) 08:12:11.03ID:zYR2UmFI0
いわゆるroot権限が必要な行為は実行出来ないね
でも、mprotectの説明によると
> 注意
Linux では、(カーネル vsyscall 領域以外の) 任意のプロセスアドレス空間において mprotect ()を呼び出すことが、常に許されている。
となってるから、Node.js(node)とかJITを行うプログラムがユーザー権限で動くのだろう
単に利便性の為だろう
259デフォルトの名無しさん (ワッチョイ 9f07-h0RM)
垢版 |
2023/12/12(火) 20:44:31.35ID:3wiw5swR0
staticグローバル変数を含んだ動的ライブラリーを動的リンクをする場合はグローバル変数が初期化されるのはmain実行前の認識です。
同じプロセス内で再度初期化したい場合は別途初期化の関数を用意してないと不可能でしょうか?
動的ロード(dlopen)を使用した場合はdlcloseして再度dlopenした場合は初期化されますか?
2023/12/12(火) 21:01:30.67ID:bMo3JLCK0
>>259
やってみれば?
261デフォルトの名無しさん (ワッチョイ 17f1-tASO)
垢版 |
2023/12/12(火) 21:15:07.81ID:6C/zc+S/0
明示的に初期化処理を書くのが吉
2023/12/12(火) 21:58:30.38ID:bMo3JLCK0
>>259
>動的ロード(dlopen)を使用した場合はdlcloseして再度dlopenした場合は初期化されますか?
Linuxの場合には初期化されたけど環境依存かも?
$ cat hoge.c hage.c
#include <stdio.h>
static int a = 100;
void increament_a () {++ a;}
void print_a () {printf ("%d\n", a);}
#include <dlfcn.h>
typedef void (*Func) ();
int main () {
void *handle;
Func func;
handle = dlopen ("libhoge.so", RTLD_LAZY);
func = (Func)dlsym (handle, "print_a");
(*func) ();
func = (Func)dlsym (handle, "increament_a");
(*func) ();
func = (Func)dlsym (handle, "print_a");
(*func) ();
dlclose (handle);
handle = dlopen ("libhoge.so", RTLD_LAZY);
func = (Func)dlsym (handle, "print_a");
(*func) ();
return 0;
}
$ gcc -shared -fPIC -o libhoge.so hoge.c
$ gcc -o hage hage.c
$ LD_LIBRARY_PATH=.; ./hage
100
101
100
263デフォルトの名無しさん (ワッチョイ 9f07-h0RM)
垢版 |
2023/12/12(火) 22:04:40.47ID:3wiw5swR0
>>261
ですよねぇ
数十万のレガシーコードで、リセットするにはプロセスのキルが前提なんだけど、移植対象のシステムはプロセスをキルできないので、なんとかリセットする方法はないかと…
264デフォルトの名無しさん (ワッチョイ 17f1-tASO)
垢版 |
2023/12/12(火) 22:10:06.55ID:6C/zc+S/0
初期値代入くらい書くだろ普通
処理系によっちゃ不定な値から始まったりするのを防ぐ為にさ
265デフォルトの名無しさん (ワッチョイ 9f07-h0RM)
垢版 |
2023/12/12(火) 22:18:02.98ID:3wiw5swR0
>>262
検証ありがとう
自分の環境でも試してみます
2023/12/12(火) 22:18:21.71ID:Kje9ktjN0
>>259
RTLD_NODELETE フラグで再初期化を止められる(というよりアンロードを妨げるのだけど)ので逆に言えば特に指定しなければ再初期化はされるのが通常動作という解釈でいいと思う。

>>263
わかってるだろうけどレガシーコードをそうやって延命させるとますますワヤになるでよ。
2023/12/12(火) 22:39:58.31ID:Kje9ktjN0
>>264
言語仕様的にはグローバル変数 (記憶域期間が static) が不定になったりはしないことになっている (初期化子がなければゼロで初期化する) のでまともな開発環境があるところではそんな心配はしないよ。
心配が必要になるほど不確かな処理系しかない (または初期化処理も自分でかかなきゃいけないような低レイヤ) 分野もあるのは知ってるけどそれが普通ってことはない。
2023/12/12(火) 23:05:45.63ID:I4UWTUvH0
>>267
言語仕様ではなく2度目のdlopenの初期化の話なんだからドキュメント化されてないなら何の保証もないでしょ
2023/12/12(火) 23:55:24.16ID:skpldDGw0
>>268
そういう意味で言ってたのならわかる。
「どうして元から代入する処理を入れてなかった?それが普通だろ?」というニュアンスで受け取ってたから元は dlopen しなおしで対処する想定ではなかったからそういうことを心配してなかった (する必要がなかった) という反応になった。
2023/12/15(金) 08:29:58.25ID:a4YsmFKj0
板の名前変わった?
2023/12/17(日) 18:23:47.21ID:kc2HrTf20
ポインタ変数にアドレスを代入するのはシャローコピーと言えると思いますか?

char s[] = "abc";
char *p = s; // shallow copy
2023/12/17(日) 18:40:34.16ID:i7ihHaq10
果たしてコピーと呼んで良い操作ナノか
2023/12/17(日) 19:27:43.64ID:mH/O4qym0
>>271
言えません
274デフォルトの名無しさん (ワッチョイ e34d-e8vO)
垢版 |
2023/12/17(日) 19:32:39.54ID:MfQY7qyQ0
>>273
2023/12/17(日) 22:10:52.33ID:UmzU+/ux0
シャローコピーはディープコピーと並べて語るときに区別するための用語であって、
代入は普通に代入と呼ぶのが、コミュニケーションにおいて適切だ、
と、自分が聞かれた場合なら答えるし、レビュー依頼された場合なら指摘します
276デフォルトの名無しさん (ワッチョイ e34d-e8vO)
垢版 |
2023/12/18(月) 00:59:34.37ID:Mvyif4Hn0
>>275
シャローコピーと言えると思いますか?
277デフォルトの名無しさん (ワッチョイ e34d-e8vO)
垢版 |
2023/12/18(月) 00:59:46.13ID:Mvyif4Hn0
指摘する前に答えろよ無能
2023/12/18(月) 02:31:45.63ID:BtLCMjh/0
シャローコピーでしょ
2つのポインタが同じ内容になってる訳だから
ちなみに、変数定義時の代入文はバインド(束縛する)と言った方が適切だな
2023/12/18(月) 09:17:00.35ID:qIC94rZG0
>>276
言えません
2023/12/18(月) 09:38:52.52ID:RUscEa1Z0
シャローコピーの要件からすると
ポインタ変数にアドレスを代入するだけでは成立せずに
リファレンス可能なオブジェクトを指してるポインタでないとまずい気がする

char *p = (char *)0x000; /* アドレスを代入してるぞ */
2023/12/18(月) 10:45:42.59ID:RHsCrDES0
意見分かれますね
ではstrdupはディープコピーだと言えますか?
2023/12/18(月) 10:52:49.41ID:kauj19Ts0
C言語にはオブジェクトと言う概念がないからなあ
お気持ちとしてどうかと聞かれれば、人それぞれで
283デフォルトの名無しさん (ワッチョイ efc0-UNLj)
垢版 |
2023/12/18(月) 10:54:27.09ID:PYgWDYAB0
いやそれぬるぽ
2023/12/18(月) 12:07:36.53ID:ccgmPeZz0
>>281
ファイルシステムや仮想記憶とか、コピーオンライトといって、書き込みが発生するまでは単なる参照先のコピーだけでコピー完了としてしまう
要するに何をもってコピーかを、先ずは定義してくれ
2023/12/18(月) 12:57:51.87ID:vbeDxg2G0
それは C の概念モデルを前提にしていいだろ。
2023/12/18(月) 14:16:20.90ID:RUscEa1Z0
C++ の 参照だったら概念含めてそのまんまだったんだろうな
int a;
int& b = a;
287デフォルトの名無しさん (ワッチョイ 12ad-9NgZ)
垢版 |
2023/12/18(月) 14:52:23.89ID:kcYk1zSZ0
>>271
言えると思う。
288デフォルトの名無しさん (スフッ Sd32-3CSV)
垢版 |
2023/12/18(月) 16:19:13.36ID:xiaHc48Fd
内容が値を表すメモリの位置 = オブジェクト
2023/12/18(月) 17:05:11.17ID:pYYMlhZJ0
>>276
「言わない」

代入をシャローコピーだとか言ってなにか騒いでる人があなたの周りにいるという話?なら、そいつバカだからあなたは相手にしなくていいよ。あなたはもっと大事な問題に取り組むべき
2023/12/18(月) 17:09:52.77ID:kauj19Ts0
代入元の配列がスタック上なのかどうか、そちらの方がC言語的には重要
2023/12/18(月) 17:12:05.22ID:RUscEa1Z0
関数内の自動変数へのポインタを関数の外へ持ち出したりすると…
2023/12/18(月) 18:48:36.94ID:epkANb1d0
何かのポインタをメンバに持つ構造体の実体の複写
2023/12/18(月) 23:27:08.16ID:ccgmPeZz0
>>289
代入はコピーじゃないのか?
代入とコピーの本質的な違いは何だ?
2023/12/18(月) 23:33:27.08ID:a4PUOo8N0
コピーには違いないけどディープとかシャローとか区別できるものじゃないってことだろ
2023/12/18(月) 23:40:20.33ID:6hD73gHu0
>>293
代入は演算の種類
コピーは演算した結果起こる作用
用語を論理的に整理できてないとお話にならないだろう
RustvsC++スレ辺りでまともな議論ができてないのはこれのせい
296デフォルトの名無しさん (ワッチョイ 4b46-AQ+F)
垢版 |
2023/12/19(火) 08:23:42.15ID:ijJJQ5/r0
>>295
そういうコトなら、>>271
アドレスを代入演算した結果を、シャローコピーと言えるか、
という質問じゃないの?
297デフォルトの名無しさん (スププ Sd32-3CSV)
垢版 |
2023/12/19(火) 09:34:26.09ID:+6PK9xZxd
シャローコピーとかディープコピーとかはもともとPythonの概念ですよね?
298デフォルトの名無しさん (ワッチョイ 2701-NGr8)
垢版 |
2023/12/19(火) 09:54:57.24ID:hCROhcq70
は?
2023/12/19(火) 10:05:08.86ID:cwbunCZy0
>>289
馬鹿ってすぐ断定するよな
300デフォルトの名無しさん (ワッチョイ 77cd-UNLj)
垢版 |
2023/12/19(火) 10:07:03.49ID:KoTx3gw20
コピーとクローンは違うよな?
2023/12/19(火) 10:13:44.25ID:MIravlrKM
>>297
C++やJavaあたりが元だと思うけど
2023/12/19(火) 10:17:05.18ID:gboy58yC0
そういうことで、
Cにはシャローコピーとかディープコピーとかの概念はない
2023/12/19(火) 10:51:12.24ID:E9BI8x9B0
少し前までスマートな人がたくさんいたのにいつの間にかバカしか居なくなった
2023/12/19(火) 10:55:10.13ID:E9BI8x9B0
>>297
違います
2023/12/19(火) 11:32:45.68ID:df21V+Ma0
>>301
LISPじゃね?深いコピーは演習なんかの定番だった気がする
2023/12/19(火) 13:45:42.10ID:3Nu9QseCd
>>305
比較の手段が参照と値と構造とで数種類あるしそうだろうね
この手の大抵の起源はLispだよ
307デフォルトの名無しさん (スププ Sd32-Hm2B)
垢版 |
2023/12/19(火) 15:01:13.02ID:+6PK9xZxd
Pythonの解説書には大概、ディープコピーとシャローコピーが載ってますよ
2023/12/19(火) 15:28:24.33ID:J0ExAcTK0
>>305
もちろんそういう状況を扱っている事例は数多くある。
ただ、ざっと見た感じでは古いマニュアルでは「再帰的」とか「共有」とかいった語で説明するのが普通っぽい。
深い/浅いといった言い方が発生したのはもっと新しい言語でのことだと思う。
2023/12/19(火) 19:44:57.82ID:cwbunCZy0
複オジが粘着してそう
310デフォルトの名無しさん (ワッチョイ 77cd-UNLj)
垢版 |
2023/12/19(火) 19:48:51.51ID:KoTx3gw20
つか、Cは書いてる人にしか型が分からないからそんな器用な事は出来ないよな?
どっちのコピーも自前でちまちま作るしか無い
2023/12/19(火) 19:53:51.13ID:nmJwtfK30
呼称にこだわってる限りCなんて使えない
お上品な他の言語使ってりゃいいじゃん
2023/12/20(水) 05:56:32.08ID:r5p/Itr10
>>310
その通りですよ

私はユーザが定義する集成型(structみたいなもの)を、PCをまたいでリモートコンピュータ上にコピーするもの(WindowsのC#とHP-UXのC)、を仕事で作った事があるのだけど、それをやるには型定義からガッツリ関わる仕組みを構築しないと無理なのよ。
自分はエクセルでやった(そして完璧にはできず特例処理だらけになった)けど、普通はDDLとか独自に作るでしょ

上の方で最初に話題出したヒトは多分、どういう問題空間でディープコピーとかシャローコピーを話題にする必要が生じるのか【すら】分かってないよ

そうだね 複オジ とか言われてた人の雰囲気と似てるね
2023/12/20(水) 09:35:46.96ID:/uXb+00h0
UPLIFT プレミアム・サービスのお知らせ

https://uplift.5ch.net/

UPLIFT 主な特典
・連続投稿の規制を緩和します。
・スレッド作成時の規制を緩和します。
・5ch.netのスレッド表示画面に表示される広告を除去します。
・5ch.net専用ブラウザで5ch.netの過去ログを閲覧できるようになります。
・海外からのアクセス・ホスト経由からでも書き込みができるようになります。
・書き込みが規制されているプロバイダーからでも書き込みができるようになります。
・5ch.netを安定して利用できるように運営を支援できます。

5ちゃんねるを存続させるためには、皆様のご協力が必要です。

最後まで御精読いただきありがとうございました。
2023/12/23(土) 02:06:44.23ID:cGlPuzRM0
>>297
もちろん概念としてはCの時代からある
しかし明確に言葉として定義したのはsmalltalkのはず
shallowCopyメソッドとかがある
2023/12/23(土) 10:35:35.90ID:1vO40jtV0
smalltalk、凄いな!私はバートランド・メイヤーさん、すごく尊敬してます
javadocとかdoxygenみたいなシステムも、もうあの時代に彼はすでに形にして世に出してるんですよね
例外の説明とか、プログラムを契約の履行に例える話とかもそうだし、あとコメント論とかもイケてるんですよ
頭良すぎて周りが付いてくのに何年もかかってる気がする
2023/12/23(土) 10:43:58.55ID:1vO40jtV0
てかまあ、Cのスレだね
でもCで構造体リモートコピーするにはさ、みたいな話をしても、多分誰も乗ってきてくれないよね
2023/12/23(土) 11:24:31.92ID:MLKmoxlx0
それは話の持ってき方。プレゼン上手ならできる
2023/12/23(土) 11:28:28.28ID:j8bI1ONF0
そーゆーのに憧れてる層には土方言語のCはいらんだろw
319デフォルトの名無しさん (ワッチョイ 43a4-BWWG)
垢版 |
2023/12/23(土) 11:41:06.10ID:PYuibGoS0
だからさ、C言語の変数や構造体内の型宣言なんてイイカゲンなんだからそう言う話ははなから無理なんだよ
2023/12/23(土) 11:42:27.32ID:1vO40jtV0
メッセージというか伝送パケットを作る話とかはどうですかね(皆さん興味ありますか)

タグ・レングス・バリュー形式がー、とか
バイナリvs文字列とか
(文字列にして伝送するのって遅いと思うでしょ、意外と速度okだったりします)

あと、message pack とか
321デフォルトの名無しさん (ワッチョイ 43a4-BWWG)
垢版 |
2023/12/23(土) 11:44:11.18ID:PYuibGoS0
ゼロ(0x00)が送れないから文字列は無理
322デフォルトの名無しさん (ワッチョイ 43a4-BWWG)
垢版 |
2023/12/23(土) 11:46:23.81ID:PYuibGoS0
経路によっては7ビット+パリティに解釈されるからバイナリは無理
323デフォルトの名無しさん (ワッチョイ 43a4-BWWG)
垢版 |
2023/12/23(土) 11:49:57.82ID:PYuibGoS0
結局、デバイスとかハードの特性を理解する必要があるんだよね
2023/12/23(土) 11:54:07.08ID:MLKmoxlx0
メッセージの受け渡しでハードの特性まで理解する必要はないだろう
325デフォルトの名無しさん (ワッチョイ 43a4-BWWG)
垢版 |
2023/12/23(土) 11:57:42.36ID:PYuibGoS0
だっていまどきC言語使ってる人なんて、デバイス寄りのハードウェアコントロールとか、チープなCPUに搭載するソフトとかだろ?
2023/12/23(土) 11:59:57.84ID:1vO40jtV0
>>321
おっと、反応サンキュー

0x00をデータとして送るのってあるある話題ですよねw
確かに「通信全部が」文字列で、nul文字終端だとすると無理。
でも、アタマにデータサイズがあって、それからデータがある形式ならば、仮に文字列が続いてると見える中に、まるでゴミ文字みたいに0x00が入っててもokなのよ

実は今のHTTPもそうなってたはず
327デフォルトの名無しさん (ワッチョイ 43a4-BWWG)
垢版 |
2023/12/23(土) 12:04:44.24ID:PYuibGoS0
>>326
途中のコードに文字列操作を一切使わないならいいが
改修はいって文字列操作する人が居たらアウトだよね?
328デフォルトの名無しさん (ワッチョイ 43a4-BWWG)
垢版 |
2023/12/23(土) 12:09:04.65ID:PYuibGoS0
最初からunsignd charのポインタとサイズを構造体にして扱えば良いだけ
2023/12/23(土) 12:09:04.99ID:1vO40jtV0
大昔は7ビットしか通らない経路あったねw
5baseとかの時代でしょうか

今は、8ビットを8ビットで伝送するほうが稀でしょうね
8ビットを10ビットで符号化することで、ゼロやイチが連続する数が少なくなるようにすることで、データ自体でタイミングを取れる方法をIBMが発明したとかで
だからこんなに速くなったそうです
2023/12/23(土) 12:13:58.12ID:1vO40jtV0
>>327
多分あなたの危惧が伝わってないです
改修案件でバグを作り込んだのに動作確認せずリリースしてしまうっていう事なら、工程管理ができてないって話でプロとしてダメ

メッセージ形式の仕様とは関係ないですね
2023/12/23(土) 12:17:04.95ID:1vO40jtV0
(…もしや「複オジ」さんだったかな?)
2023/12/23(土) 12:56:43.79ID:j8bI1ONF0
やっぱりめんどくさい奴だったかw
あんたにレスがもらえないのはテーマのせいじゃないとわかれ
333デフォルトの名無しさん (ワッチョイ 43a4-BWWG)
垢版 |
2023/12/23(土) 18:17:03.63ID:PYuibGoS0
>>330
安易に文字列を使う仕様にしてるとバイナリ通らないの忘れるし思わぬバグを生む原因になるから、最初からバイナリ配列にするか文字列操作関数を一切使わない様にしないとな
2023/12/24(日) 00:00:50.96ID:B84K7ZI6M
>>332
うん…(悲しい)
2024/01/05(金) 10:30:41.51ID:ph0QLfWd0
Perlとかで利用している設定ファイルがあるのですが、
Cで書いたプログラムでも同じファイルを設定ファイルとして読み込みたいです

設定ファイルですが、このような感じです

val = abc
str1 = $val/AAA

Perlでは「$val」を展開し、str1に「abc/AAA」と設定してくれるのですが、
Cから読み込む場合は、自分で展開する必要があると思ってます

それをやってくれるライブラリや関数等、ありますでしょうか
2024/01/05(金) 10:49:08.39ID:xgizPOi+0
その程度なら、自作できるだろう
337デフォルトの名無しさん (スププ Sd62-Blk0)
垢版 |
2024/01/05(金) 11:38:06.91ID:VxELzJcZd
#define val abc
338デフォルトの名無しさん (スププ Sd62-Blk0)
垢版 |
2024/01/05(金) 12:10:00.56ID:VxELzJcZd
enum { val = abc }
339デフォルトの名無しさん (スププ Sd62-Blk0)
垢版 |
2024/01/05(金) 12:13:38.69ID:VxELzJcZd
enum の方はエラーになる
340デフォルトの名無しさん (スププ Sd62-Blk0)
垢版 |
2024/01/05(金) 12:27:56.38ID:VxELzJcZd
#define もエラーになる
341デフォルトの名無しさん (スププ Sd62-Blk0)
垢版 |
2024/01/05(金) 12:30:33.41ID:VxELzJcZd
#define val "abc"
2024/01/05(金) 12:30:55.30ID:qVR6C9yQ0
>>335
そういうのをどう解決するかを自分が考えて実現するのが楽しいのに…

自分なら
設定ファイルを「環境変数を設定する」に変更して、perlもCも環境変数から設定項目を読む に変更する。
そのために
perl側を変更する権利を得る
OSに依存して良い条件
を確保する様に、喫煙所に通う
2024/01/05(金) 12:49:25.99ID:qVR6C9yQ0
>>335
別の解決案
・Cに優しい形式(右辺を全部展開した形で、イコール前後のスペースもなし)で吐き直すツールを、perlで作る
・自分で全部Cで作る
・lex/yacc を使って軽言語解釈ルーチンを作る

それぞれデメリットがあって、質問に直接答える「そういったライブラリはあるか」に一番合ってるのが、最後のlex/yaccだけど、それは一番バカらしい答えでもある。お好きに
2024/01/05(金) 12:51:00.35ID:qVR6C9yQ0
>>337
君、答える側になれる実力ないだろ
2024/01/05(金) 12:54:37.44ID:KwPCWpVD0
sscanfで読めばよかろうもん
2024/01/05(金) 13:07:45.12ID:t0UUGhQq0
>>335
その説明では何をやりたいのか伝わってないので仕様書を書いてみて。
理想的なライブラリがあったとして、そのテストケースという形式でもいい。
曖昧模糊な要望だと説明が下手なだけでなく説明しようとしている内容が見当違いな可能性を疑う。
(いわゆるXY問題)
2024/01/05(金) 13:32:24.69ID:38bnxq2E0
Cのソースでその展開もどきを行いたいのか
Cで書いてるプログラムがとあるファイル食って文字処理するんだけど、同じことを実現したいのか
2024/01/05(金) 13:37:38.46ID:M4U6Kwpw0
>>335
これは実装するとなると簡易言語になっちゃうな
でも変数と変数参照だけだから大して難しくないよ
たぶん1000行ぐらいに収まる
2024/01/05(金) 14:59:38.28ID:t0UUGhQq0
どうしても既存の設定ファイルをそのまま使いたい、それを処理できるようなものが欲しいということなら
そんな都合の良いものがあるわけない。 自分で書くしかしょうがない。

完璧にそのままのフォーマットでなくおおよそ似た機能があればよいなら
TOML とか JSON とか YAML とかの広く使われているフォーマットを採用したほうが面倒が少ない。
Perl でも C でも処理できるライブラリがいくつもあるし。

これらには変数展開のような機能はないが、
設定ファイルで動的な操作を可能にするのは問題を引き起こしやすいと考えられていて、
アプリケーション側でやるかプリプロセッサでなんとかしたほうがよい。
(強いて言えば YAML のエイリアス機能は変数のようなものとも言えるけど文字列を結合したりは出来ない。)

逆に設定どころではなくユーザーによるカスタマイズをどんどんやってもらうようなものなら
Lua とかのアプリケーション拡張言語を埋め込んでしまうという方法もとれる。
2024/01/05(金) 15:39:37.20ID:mdj5x9Xd0
Perlにそんな便利機能あったっけ
2024/01/05(金) 18:09:30.90ID:xFVV62H30
Cは遅延評価を積極的にやるための言語ではないからなあ
C++やC#ならあるんだけどね
lex/yacc はちょっと古くて
今なら flex/byson ですね
352デフォルトの名無しさん (ワッチョイ 42ad-nK/n)
垢版 |
2024/01/06(土) 15:06:00.15ID:NPThFXTg0
$ の変数展開しかやらないなら複雑な構文解析にはならないから全部自作した方が楽なのでは?
少し楽したいなら perl に読ませて $ 展開させた文字列に変換して出力したのを C の側で読むとかね。そうすると少し楽ができる。
これの問題は perl が使えない環境では動かないことかな。
2024/01/06(土) 16:25:37.13ID:2Gstkfh+0
今なら packcc おすすめ
2024/01/06(土) 16:27:28.51ID:iX+vez910
設定ファイルのデータ構造が key/value の組だけ、 value は単なる文字列という程度なら
パーサジェネレータはかえって邪魔じゃないのかな。
2024/01/06(土) 21:36:47.69ID:8zwGVkiA0
lex/yaccは使った事ない人にはハードル高いだろうね。逆に、使い方が分かると何でもそれでやりたがる時期が来る。どんなツールや言語でもそうだろうけど
2024/01/06(土) 21:39:52.15ID:YhaQaYGw0
BNF書いても大した量にならないだろうし俺ならフルスクラッチで書いちゃうな
2024/01/06(土) 21:45:36.68ID:8zwGVkiA0
で、設定ファイル、shで環境変数を設定すりゃ済む、という案に誰も反応してもらえないんだが、どうだい? windows ならcmdだろうけど

設定項目ってのは、パス文字列とか、メモリサイズとか、ほぼ固定だけどあとから変えたい場合もあろう、っていう定数だよね。環境変数ってまさにその目的だと思ってる。

ドル記号で一時値の展開もできる。Cからも簡単に読める。
2024/01/06(土) 21:56:18.04ID:8zwGVkiA0
shで、設定ファイル兼、実行ファイル起動ラッパを書いて、利用者には直接実行ファイルじゃなくラッパを起動せよと説明して

export XXX_ROOT=/var/xxx
export XXX_INPUT_DIR=${XXX_ROOT}/in
export XXX_OUTPUT_DIR=${XXX_ROOT}/out
export XXX_READBUF_SIZE=32768

exec ${XXX_ROOT}/bin/xxx


Cで読む処理は

get_conf_str(...) //文字列項目用
get_conf_i64(...) //整数項目用

どっちもパラメータに
(環境変数名, 環境変数が未設定時の具体値)
って指定する。これが、ソース上の1箇所でズラッと並ぶと「設定項目名とハードコード値の、一覧表」風になるの。分かる?
2024/01/06(土) 22:02:36.24ID:8zwGVkiA0
get_conf_str() と get_conf_i64() の中身は
getenv() を使って簡単に実装できる、のは分かるよね?
2024/01/06(土) 22:09:41.74ID:LvNnK4+W0
単なる文字列だけなら正規表現の置換でいいだろ
2024/01/06(土) 22:20:12.76ID:8zwGVkiA0
struct conf_t {
char* input_dir
char* output_dir;
int64_t readbuf_size;
} g_conf;

文字列項目はC++だとstd::string にする所だが、Cだとstrdup(的なもの)で実装しても良いんじゃないかい。

g_conf.inputdir = get_conf_str(
"XXX_INPUT_DIR", "/var/xxx/in");
g_conf.outputdir = get_conf_str(
"XXX_OUTPUT_DIR", "/var/xxx/out");
g_conf.readbuf_size = get_conf_i64(
"XXX_READBUF_SIZE", 32768);

とかってするとソース上で一覧表風になるでしょ。タブ文字も入れて桁そろえて。
362デフォルトの名無しさん (ワッチョイ 627a-JKp6)
垢版 |
2024/01/06(土) 23:25:47.33ID:4fq2Cpkf0
まあ落ち着けよ 質問者はそんなこと聞いとらんだろうよ
2024/01/07(日) 00:35:50.01ID:yw4Ulg6E0
for(;;){
if((result = fgets(line, MAX_LEN, stream)) != NULL){
p1=result;
p3=p1+strlen(line);
p2=strtok(p1, "=");
}
}

これで、p1とp2から左辺、p2とp3から右辺が取り出せる。
$の展開は、マクロ展開処理の要領で
右辺に$があるかチェックして、あったら定義値に置き換えるという
10ステップ程度の処理でできるだろ。
2024/01/07(日) 08:57:04.03ID:4P3NNejl0
>>335
>Cから読み込む場合は、自分で展開する必要があると思ってます
その通りです

>それをやってくれるライブラリや関数等、ありますでしょうか
ありません
自作する必要があります


>>363
p2=strtok(p1, "=");
スペースやタブの処理が必要
2024/01/07(日) 10:17:39.72ID:gAwkeLQQ0
せめて既存の気の利いた言語のstring型のメソッドやらを参考にしろよ
ここで再発明しても誰も使わんだろ
2024/01/07(日) 10:25:56.11ID:TVg93ufA0
質問者、もういない
2024/01/07(日) 11:15:08.19ID:SfiTOIyR0
>>335
>それをやってくれるライブラリや関数等、ありますでしょうか
perlはCで書かれてるけどね
2024/01/07(日) 11:23:13.54ID:XrTF2oph0
動かすCプログラムをperlに書き直す方が簡単そう
369デフォルトの名無しさん (ワッチョイ 7fad-ipwt)
垢版 |
2024/01/07(日) 16:24:59.67ID:tTa6vFrs0
こんな方法もある。しかし $ の変数展開しかしないなら無駄な感じはするね。それだけのためにここまでするのかという。

perlembed - C プログラムへの Perl の埋め込み方
https://perldoc.jp/docs/perl/5.10.0/perlembed.pod
2024/01/10(水) 16:11:15.07ID:PVZRGcug0
$がリテラルとして入ってた時はどうするかとか、結構面倒そう
2024/01/10(水) 17:49:56.37ID:C4OEbwTl0
>>370
そうなんだよー、真面目にやるとバカみたいに面倒なのよ

文字列リテラルの中に $ やコメント開始終了記号が入る事もあるし
コメントの中に $ や文字列開始終了記号が入る事もある

# "#"
$aaa = /* $コメント " */ "文字列/**/値";


なので、頭から読み始めて、状態を追いながら(現在の場所が 文を書く所か、コメント内か、文字列内か)読まないと、正しいファイルを正しく読めない

んで、つまんないバグを作り込んだりするの。その、もういない誰かが作り込んだつまんないバグを、別の誰かが直すはめになる。そんなの嫌じゃね?
2024/01/10(水) 17:57:07.75ID:C4OEbwTl0
でも本当に、質問者はもうトンズラしたと思うよ。次の話をしよう
2024/01/10(水) 18:00:48.10ID:PVZRGcug0
次の患者さん、どうぞ
2024/01/10(水) 21:56:41.19ID:Qa3z5jue0
>>327
どっちにしろ質問者のためにやってるわけじゃないからいいんだよ
2024/01/10(水) 22:25:04.83ID:Gs+Ha8Nh0
>>371
そこまでのコメント機能はいらんやろ
シェルスクリプトの設定ファイル程度のことができればいいんだろうから
#が来たら改行までをコメントとするぐらいで
2024/01/10(水) 23:20:02.65ID:ZQ7M3ZpB0
ちなみにCの識別子に$を使える
少なくともgcc, clang, msvcで使える
int $val = 0;
とか
2024/01/10(水) 23:20:30.43ID:C4OEbwTl0
>>375
環境変数設定で「十分」どころか、それがかなりきちんと対応している。

シェルは(shもcmdも)「改行までコメントとみなす」なんていういい加減な実装じゃないよ
2024/01/10(水) 23:36:31.88ID:C4OEbwTl0
パーサー実装の現実的な話がまともにできるニキはここにはいないねw
2024/01/11(木) 02:31:42.07ID:uSDU2aBB0
ほらな、はちみつも黙るやろ
規格は詳しいけどな
2024/01/11(木) 02:42:19.58ID:WTkhFxto0
パーサーなんて大して難しくないよ
テスト書けば
2024/01/11(木) 06:03:54.69ID:ZajpDUJL0
>>377
いやだからそんな本格的に作る必要ないって話
労力の投入場所を選定するのもプログラマの能力
2024/01/11(木) 07:51:37.56ID:7oF58mtI0
>>371みたいなので悩むならさくっと正規表現ライブラリやパーサージェネレータ使うな。
学習のために自分でパーサー書いてみたいってんなら別だが。
2024/01/11(木) 09:41:05.64ID:NL5Kg7pj0
>>379
仕様が曖昧なのに実装の話をしても無意味だろ。
新しい情報が提示されないなら回答すべきこともない。
2024/01/11(木) 09:42:53.45ID:ZxeGb/wD0
誰か、作ってやれよ
2024/01/12(金) 10:13:36.22ID:Umd8uX9b0
strcat() はダメなの?
2024/01/13(土) 00:25:52.89ID:suyQO94R0
sscanfで十分だよ
2024/01/13(土) 09:14:54.62ID:mB7BPAPVd
>>385
参加したかったの?
2024/01/13(土) 09:41:46.29ID:fMrSPcrk0
ここに書けば参加したことになるよ
2024/01/13(土) 13:22:56.37ID:kmNIHanh0
参加することに意義がある
2024/01/13(土) 16:53:47.66ID:8Ttuq2mzd
C言語からJSON読み書きにオススメのライブラリやDLL教えてくれさい。
UTF-8↔ANSI変換はAPIでやれそうです。
2024/01/13(土) 19:04:48.77ID:suyQO94R0
yyjsonで十分だよ
392デフォルトの名無しさん (ワントンキン MM16-l2AN)
垢版 |
2024/01/17(水) 13:51:26.07ID:MxPcwzaVM
以下はmalloc()で割り当てた領域を開放してポインタをヌルポインタにするマクロである

#define MYFREE(p) do {free(p); p = 0;} while(0)

このマクロに不備があるかないか、ある場合はどんな不備か答えよ
ただし処理系はANCI C準拠とし、stdlib.hがインクルードされていることとpが左辺値かつmallocで割り当てた領域を指す有効なポインタであることの2点は呼び出し側によって保障されているものとする
393デフォルトの名無しさん (ワッチョイ 427c-kX52)
垢版 |
2024/01/17(水) 16:32:50.55ID:sbbnyjB/0
宿題は他所でやれ
2024/01/17(水) 19:42:28.17ID:bWv2IYcS0
do-while文で回す意味ってあるの?
2024/01/17(水) 19:44:52.19ID:UA2B8Wur0
使った人に聞きなさい
2024/01/17(水) 19:49:06.18ID:dYqrLAA4M
>>394
セミコロンをつけさせるため
2024/01/17(水) 21:11:00.53ID:DTNbW1I/0
>>392
答えわかったけど教えない
2024/01/17(水) 21:21:33.14ID:Am4HUjmg0
>>394
2つ以上の文をマクロ関数の形にするときに、C言語の仕様において最も合法安全とされるイディオムだよ
2024/01/17(水) 21:47:57.64ID:i5GqHIkod
>>394
たとえば
#define MYFREE(p) free(p); p = 0
と定義すると

if( 条件 ) MYFREE( p );
と書くと

if( 条件 ) free(p); p = 0;
と展開されてしまいp = 0;は条件に関わらず実行されてしまう
またこの後にelse節が続くとエラーになってしまうなど不具合の原因になる
2024/01/17(水) 23:38:16.60ID:bWv2IYcS0
>>396,398,399
全然知らなかった
アリガト
401デフォルトの名無しさん (ワッチョイ 2214-HXAs)
垢版 |
2024/01/18(木) 11:04:17.52ID:0zoYvNSM0
>>392
その条件下ならない
でもpが左辺値という前提がなかったら変なコトになるコードが書けるね
402デフォルトの名無しさん (ワッチョイ 2214-HXAs)
垢版 |
2024/01/18(木) 11:04:49.16ID:0zoYvNSM0
>>400
396はゼンゼン関係ないんだけどホントに分かってんのか?w
403400ではないが (ワッチョイ 6e46-Y4mw)
垢版 |
2024/01/18(木) 12:19:02.31ID:5g03qqC30
>>402
396 と 399 は異口同音と読んでいたが、主旨違うの?
2024/01/18(木) 12:27:08.35ID:LtdZIRKJ0
>>402
ブロックではなく do / while にする理由としては関係がある。
2024/01/18(木) 12:41:36.76ID:LtdZIRKJ0
二つの文が分かれてしまわないようにするだけならブロックで包めばよくて

#define MYFREE(p) {free(p); p = 0;}

と定義しておけば

if( 条件 ) MYFREE( p );

というような使い方で意図通り動作する。 問題になるのは else が付くときで、

if( 条件 ) MYFREE( p );
else foo();

みたいなことをすると

if( 条件 ) {free(p); p = 0;};
else foo();

というように余計なセミコロンが if と else の対応付けを壊してしまう。
かといって MYFREE にはセミコロンを付けない使い方をせよというのも不格好なので do / while で囲むといい感じって話。
2024/01/18(木) 13:15:24.78ID:hXSenRUz0
はちみつ餃子はいい加減改名しろよ、はちみつ先生によ
どんだけタメになる話すりゃ気が済むんだ
目からウロボロスだぜまったく
407デフォルトの名無しさん (ワッチョイ 02ad-6zsj)
垢版 |
2024/01/18(木) 13:17:33.34ID:opxINJAy0
>>392
「せよ」ってなんだよ。何様のつもりだ?
2024/01/18(木) 20:39:02.28ID:r48d/DyKd
#define MYFREE(p) (free(p), p = 0)

のほうが単純
409デフォルトの名無しさん (ワッチョイ 427c-kX52)
垢版 |
2024/01/18(木) 22:45:02.99ID:twAiz/ys0
今どきのCならマクロじゃないといけない場合以外はinline使え。
2024/01/19(金) 08:59:45.95ID:vjpbBz8R0
>>409
C の関数は多相化できない。
void* と他のポインタは相互に変換可能なんだが
void* 自体の表現や境界調整要求は環境依存なので

#include <stddef.h>
#include <stdlib.h>
inline void my_free(void** x) {
free(*x);
*x=NULL;
}

int main(void) {
int *x = malloc(sizeof(int));
my_free((void**)&x);
}

みたいなことをして正しく動作する保証はないはず。
この場合は「マクロじゃないといけない場合」だと思うよ。
2024/01/19(金) 11:12:10.18ID:Wkz3Ctqj0
mallocが返すのはvoid*だし、freeが受け取るのもvoid*なのに??
保証が無かったら俺達はこれからどうすればいいんだw
2024/01/19(金) 11:13:32.08ID:76FyHnUv0
printf("Hello, work!");
2024/01/19(金) 11:18:44.53ID:vjpbBz8R0
>>411
void* の話じゃなくて void** の話をしてる。
414デフォルトの名無しさん (ワッチョイ 6e2a-Y4mw)
垢版 |
2024/01/19(金) 11:42:42.67ID:THNGxTXR0
printf("Konyanyachiwa, Sekai no Kuni kara!");
2024/01/19(金) 12:11:49.63ID:Wkz3Ctqj0
void**とvoid*は相互に変換可能じゃないのか?
2024/01/19(金) 12:19:49.22ID:vjpbBz8R0
変換が可能だということと同じ表現を持つことは別という話。
int* から void* への変換は変換に関するルールだが
int** から void** への変換によって int* を void* として読もうとするのは type punning の問題。
2024/01/19(金) 12:20:09.89ID:Wkz3Ctqj0
そうなると、
int** a = malloc(sizeof(int*) * 3);
は、保証無いことになるな
俺達はどうすればいいんだw
2024/01/19(金) 12:25:31.50ID:Wkz3Ctqj0
void** a = malloc(sizeof(void*) * 3);
の方が適切だったか
これで、a[0]の読み書きが保証されないのは困るよ
2024/01/19(金) 12:27:15.27ID:vjpbBz8R0
>>417
繰り返すが変換の話と表現の話は異なる。
void* は全てのオブジェクトを指すポインタと相互に変は可能であることは保証され、
「malloc が返すポインタに限っては」いかなる型とも適合するように境界調整されていることが保証される。
420デフォルトの名無しさん (ワッチョイ 313a-xGnM)
垢版 |
2024/01/19(金) 12:34:27.05ID:3hcnICbb0
【AI】Googleの医療面接特化AI「AMIE」は人間よりも正確な診断が可能&患者への印象に優れるという研究結果 [すらいむ★]
https://egg.5ch.net/test/read.cgi/scienceplus/1705583722/l50
【AI】Google DeepMindが数学オリンピックレベルの幾何学問題を解けるAIを発表、人間の金メダリストに近い性能を発揮 [すらいむ★]
https://egg.5ch.net/test/read.cgi/scienceplus/1705583476/l50
【AI】大学入試共通テスト、3つのチャットAIに解かせてみたら? GPT-4はバケモノだった [すらいむ★]
https://egg.5ch.net/test/read.cgi/scienceplus/1705585402/l50
【ナゾロジー】「株価の変動を粒子の振動として理解」量子力学で株式市場の法則を読む! [すらいむ★]
https://egg.5ch.net/test/read.cgi/scienceplus/1705583580/l50
【AI】NTT、自分の分身AIを低コストで作る技術。自分の合成音声を簡単に作れる技術も [すらいむ★]
https://egg.5ch.net/test/read.cgi/scienceplus/1705583313/l50

ボイス・トォ・スカルのコアプログラムの一部は上記を統合している
2024/01/19(金) 12:39:29.69ID:S8ovIeWid
何を言ってるんだお前は案件

ポインタの中身は指す対象によってアラインが変わるが
ポインタ自体のアラインは原則一種類しかない
2024/01/19(金) 12:51:29.04ID:vjpbBz8R0
>>421
ポインタは型ごとに異なる表現・境界調整要求を持つ可能性がある。
適合する型へのポインタ同士の場合など同じ表現・境界調整要求を持つ条件が定められているが
最後に「これ以外の型へのポインタは、同じ表現又は同じ境界調整要求をもつ必要はない」と仕様に明記されてる。

具体的な部分は処理系定義なので全部が同じ表現であることをあてにしていい環境ならそうすることは否定しなけど、
常にあてにできるわけでもない。
2024/01/19(金) 13:18:44.56ID:Wkz3Ctqj0
そうは言っても、
void* p = 0;
と直接生成出来るわけで、void*は値としての意味もちゃんとある
それがvoid**にすると元に戻せる保証が無いのは仕様の不備だろw
2024/01/19(金) 13:22:00.51ID:S8ovIeWid
>>422
それは「ポインタが指す対象」についての記述で
ポインタ自体にはどんな適当な値を書き込むことも可能(そのポインタを使ってアクセスすると何が起こるかわからないというだけ)
ただポインタにNULLを書き込むだけの関数になんの危険もない
2024/01/19(金) 13:35:18.59ID:vjpbBz8R0
>>424
> それは「ポインタが指す対象」についての記述で

この (>>410) 場合はポインタが指す対象に書き込もうとしている話だが。
2024/01/19(金) 15:18:43.59ID:S8ovIeWid
>>425
そのポインタは関数への引数であり
すでにvoid*を表すものだと型は決まってるではないか


それとは別に
インライン関数で書いた場合はその場で展開されるから
void* p = 0;と書いた場合と同様にコンパイラが適切な0を書き込んでくれるんじゃないの
つまり(void**)をつけると逆に危険
my_free(&x);
でよい
2024/01/19(金) 16:04:16.95ID:dJaf/W/GM
ポインタで0リテラルだけは特殊でNULLと同義だったのではなかったっけ
2024/01/19(金) 16:16:34.10ID:vjpbBz8R0
>>426
> (void**)をつけると逆に危険

これは暗黙に型変換されることが保証される文脈ではないので付けなければコンパイルが通らないだけ。
(コンパイラによっては黙って通すことはあるのかもしれない。)

> インライン関数で書いた場合はその場で展開されるから

言語の意味論としてはインライン関数は
・ 同じ定義なら (翻訳単位を跨いだ場合でも) 複数回定義してもよい (定義が一回の場合と同じ挙動)
・ なるべく高速に呼び出して欲しいことを期待するヒントである (実現方法は規定しない)

ということになってる。
インライン関数がインライン関数ではない関数と異なる動作にはならない。
2024/01/19(金) 16:39:47.61ID:vjpbBz8R0
>>427
せやで。
厳密に言えばリテラルだけじゃなくて「整数の 0 であるような定数 (定数式) をポインタに型変換したときは空ポインタ」というルール。

これも変換に関するルールであって表現に関するルールではないよね。
実際に空ポインタの内部表現が整数の 0 というわけではない環境は存在するが、
型が正しければ適切に変換される。
2024/01/19(金) 16:53:05.15ID:CCGmGKuQ0
>>429
それ規格書に書いてあんの?知らんかったわ
でも

if (!ptr)

みたいなポインタがゼロであることを期待するような式は処理系依存になるでしょ?
2024/01/19(金) 17:02:59.57ID:vjpbBz8R0
>>430
いや、それがよく出来てて、ポインタをそういう形で条件に使うのは問題ない。
単項演算子 ! について「式!Eは,(0==E)と等価とする」というルールになっていて
等価演算子 (==) はポインタと空ポインタ定数を比較したときの結果を規定してる。
空ポインタ定数のほうをもう一方のオペランドの型に合う空ポインタに型変換するルール。
2024/01/19(金) 17:32:06.95ID:CCGmGKuQ0
>>431
規格書読んできたけど
6.3.2.3 値0をもつ整数定数式は空ポインタになる
6.5.3.1 式!Eは,(0==E)と等価
6.5.9 ==は空ポインタ定数をポインタの型へ型変換する
ってことか
なるほど、規格を解釈すれば!ptrは空ポインタと比較されることになるから問題ないのか
勉強になったわ
2024/01/19(金) 18:55:00.05ID:EWHtqHW90
NULLは処理系定義だしこの辺はややこしいよね
2024/01/20(土) 00:57:56.71ID:QcwVnceA0
void*の値は作成出来るけど、表現や境界調整要求は未定義とか、おかしいだろ
Cは現実に則した言語だと思ってたけど、妙な未定義だな
ちなみに、インタープリター型言語を作ったら、オブジェクトはみんなvoid*になる
void*の配列を作成したりとか普通に行われる
もはや規格とか無意味
実装がどうなってるかだけが重要だ
2024/01/20(土) 10:29:05.14ID:ZDCHWjSD0
>>433
全然ややこしくないでしょ
2024/01/20(土) 10:30:19.13ID:UfD1Ji0o0
> 実装がどうなってるかだけが重要だ
もちろんその通りだけど規格上未定義なわけだから実装がすべて統一されているとは限らないわけで
その実装における「限らない」が問題なわけでしょ
2024/01/20(土) 12:47:01.09ID:Ttk7tIdd0
実際に使用する環境に合わせれば良いだけ
2024/01/20(土) 13:33:03.85ID:QcwVnceA0
各OS毎にABI(Application Binary Interface)が定義されてて、Cの規格で定義されてないところが明確に定義されてる
2つを合わせて現実のC言語なんだよな
だから、JIS X 3010だけを取り上げてどうこう言っても混乱させるだけ
2024/01/20(土) 14:51:47.73ID:k6CjZuQW0
>>434
実際には void* と int* (などのポインタ) が同じ表現なことは多いので
あまり問題 (type punning) にならないと考えるならそうかも。

ただ、表現が同じである環境ならかまわないのかというとそうでもない。
aliasing rules が絡んでくる。
言語仕様上で適合するとされる以外の読み書きをプログラマはやらない (やったら未定義だから) という仮定の元に最適化されることがある。

>>438
ABI はその名の通りインターフェイスを一貫させるための規定であって、
外部に公開しない (外部リンケージを持たない) 部分ではコンパイラは最適化するし、オブジェクトを除去することもある。

私は >>422 で「あてにしていい環境ならそうすることは否定しない」と述べたが、
あてになる確証を得るのは割とめんどい。
言語仕様を調べて分かる範囲で済むならそうする。
少なくとも >>392 をインライン関数にするために手間をかけるなんてことはしない。
2024/01/20(土) 14:57:01.22ID:UfD1Ji0o0
だから、その環境が不明瞭なこういう場所で問題になるわけでしょ?
実際>>392では「処理系はANCI C準拠」としか言っていないわけだし
2024/01/20(土) 14:57:54.96ID:UfD1Ji0o0
おっと440は>>437-438アテネ
2024/01/20(土) 15:58:08.13ID:QcwVnceA0
未定義とは規格遊びには便利な言葉だなw
正解はconfigureスクリプトがやってるように、事前に環境を調査して前提にしていい事を明確にして最適な実装をする事だな
なので、言語仕様のみで判断を下す事は不正解と言える
その為にconfigureスクリプトがある
他の言語ではあまり必要ない
Rustとか最近の言語は言語仕様に不明瞭な点は残さないのがトレンドだろう
じゃなきゃそこが脆弱性を生んでしまう
2024/01/20(土) 16:03:47.86ID:QcwVnceA0
>>392のマクロは、副作用のある式を渡したりするとおかしな事が起きる
全くもって脆弱なものだ
そのままで良いのか?
マクロのままにしておくとか、そっちの方が脆弱性を生む事になる
ちゃんと関数化すべきだろ
その為にすべき事は何だ?
それを議論することが正解と言っている
444デフォルトの名無しさん (ワッチョイ 2205-l2AN)
垢版 |
2024/01/20(土) 16:33:16.28ID:7OBiWfZx0
副作用のある式とは例えば?
2024/01/20(土) 19:48:07.23ID:31IXtECu0
p++じゃない?
2024/01/20(土) 19:54:12.68ID:k6CjZuQW0
関数で書いたら問題を避けられるわけ?
2024/01/20(土) 21:49:35.15ID:VgpxxxtV0
C言語で今更議論することなんてないよ
気に入る要らないはモダン言語とかでやってなさい
2024/01/20(土) 22:17:38.62ID:DXZ/M+lB0
使用済みのポインタ変数を変なやり方でクリアするとかクソどうでもいい
449デフォルトの名無しさん (ワッチョイ 22ec-HXAs)
垢版 |
2024/01/20(土) 22:21:19.13ID:7OBiWfZx0
>>445
それは考えなくていいでしょ
2024/01/20(土) 22:34:47.06ID:QcwVnceA0
>>446
え?本気でいってんの?
関数で書けば副作用(例えば++p)は1回で済む
当然副作用がある式を書くのはアホだと思うが、少なくとも書いた通りには動く
2024/01/20(土) 22:44:54.31ID:QcwVnceA0
例えば、(uint8_t)malloc(...) + sizeof(int)を返す関数もあり得る
これは前の方にデータを隠すテクニックだ
実はC++のコンパイラで普通に使われている
これを解放する時は、free(p -= sizeof(int))とやらない事もない
まぁ普通はp - sizeof(int)だろうから屁理屈だけどねw
2024/01/21(日) 00:53:03.43ID:4rk7TZPC0
>>450
解決したい問題はそれだけでいいのか。
それなら意図はわかる。
ただ現実に C の関数を多相化できないのは変えられない前提としてある。
異なる型で扱う必要があるんだから異なる関数を用意するしかないのはどうしようもなくない?
2024/01/21(日) 11:37:01.81ID:yYf7aVwb0
多相?
仮にポインタ変数のアドレス を引数で渡したい場合であってもvoid ** じゃなくvoid * を使って、
人間同士がドキュメントだろうが喫煙所だろうがで問題解決しろよってのが規画と整合する答えなんじゃないの

どうせキャストするんでしょうに
バカですか
2024/01/21(日) 12:09:29.26ID:4rk7TZPC0
void* に変換したなら元の型にキャストしなおさないと保証された動作はほとんどない。
(逆に元の型に変換したときは変換前の値と一致することは保証される。)
元の型を知っているプログラマがキャストすることを期待できる qsort のような使い方なら問題にならないけど、
void* の形で受け取るだけでは関数が出来ることはほとんどない。

文字列を指すポインタに変換してバイト列として読み書きすることはアリなので
オブジェクトの内容はどうでもいいメモリブロック操作系の関数 (memmove など) だとかでも問題はないかな。
455デフォルトの名無しさん (ワントンキン MM3f-NhvB)
垢版 |
2024/01/21(日) 12:53:39.98ID:+eMrRol8M
簡単な問題だったんだけど答えられる人ほとんどいないのか
相変わらず本題とは関係ない問答しだすアホらもいるし
2024/01/21(日) 13:01:11.71ID:fu4eKftF0
答えられる人はいるだろうけど、宿題丸投げするやつにエサを与えたくなくて
敢えて書かない人もいるだろう。
2024/01/21(日) 16:35:59.78ID:ocg3B/5o0
ANCIとか頭悪そうな学校で相手したくなかった
458デフォルトの名無しさん (ワッチョイ 5fad-zQB7)
垢版 |
2024/01/21(日) 16:43:50.02ID:WaBPg/nL0
誰も知らない新規格、か・・・
2024/01/21(日) 16:44:16.43ID:sYjtPxaw0
宿題スレは別にあった様な気がする
460デフォルトの名無しさん (ワッチョイ c7df-VcUz)
垢版 |
2024/01/21(日) 20:09:55.64ID:BpmEGVkv0
https://mevius.5ch.net/test/read.cgi/tech/1434079972/
2024/01/21(日) 22:42:42.89ID:fOwYJqZP0
UNCI はどうだろう。
2024/01/22(月) 09:16:06.10ID:wwjNYCJK0
>>445

free(p++);
p++=0; ←ここで文法エラーになるから
463デフォルトの名無しさん (ワッチョイ 5fdb-0Ail)
垢版 |
2024/01/22(月) 19:23:27.59ID:sQG6cOu30
このマクロでそんな心配せんでええやろ
2024/01/22(月) 20:21:33.49ID:oQuCuzrM0
Cに引数の参照渡しってあったっけ?
ないとしたら>>392のMYFREE(p)をマクロではなく関数として書き
その中でp=0としても呼び出した側の変数は変えられないわけで
関数にすることで動作が変わってしまうことになるはずだけど
2024/01/23(火) 13:25:33.99ID:DCTvqhlA0
そんなこんなでp++マクロには問題が多いからC++が出来たってわけ
2024/01/23(火) 14:30:32.20ID:FpD2d5od0
なんだそんな理由だったのか・・・
2024/01/23(火) 14:41:04.92ID:v+doC8dF0
mallocとcallocの引数の指定の仕方が違うのが気になる
これ別であることに理由あるの?
2024/01/23(火) 15:14:53.60ID:MIeJSKFF0
>>467
言語仕様上は calloc が返すポインタ (によって表されるメモリ領域) は
malloc が返すものと同じようにあらゆる型に対して適切に境界調整されることになっているし、
ゼロクリアするという違いも「全てのビットがゼロ」という意味なので型の性質を考慮しない。
つまりふたつの引数として指定することによって得られる恩恵はない。

実装がまともなら calloc(a, b) としたときの a*b が size_t の大きさを超えてしまうようなときでも
ラップアラウンドして小さな領域を確保するのではなくエラーにしてくれることは期待できる
(間違いを検出しやすい) が、それを理由として引数ふたつにしているというわけではなさそう。

最初に言語仕様をまとめたときに主要な処理系がだいたい準拠ということになるようにしたはずなので
その頃の処理系でなんか理由はわからんがそうなってたって程度の話だと思う。 あまり意味ない。
469デフォルトの名無しさん (ワッチョイ df2d-EFyZ)
垢版 |
2024/01/23(火) 15:47:25.62ID:v+doC8dF0
メリット無いなら統一してほしかったよ
2024/01/23(火) 16:35:32.21ID:FpD2d5od0
好きな方を使いましょう
2024/01/24(水) 09:58:59.16ID:Xnuh8KFs0
統一したらゼロクリアするかしないかだけの違いにならん?
2024/01/24(水) 16:48:12.72ID:zBKRyD/E0
zmallocというマクロを定義すれば解決
473デフォルトの名無しさん (ワッチョイ 5f7c-ytPG)
垢版 |
2024/01/25(木) 18:11:36.02ID:oxF0tkpI0
callocはmallocのゼロクリア版として *も* 使えるがそもそもの使い方が違う。
2024/01/25(木) 20:28:54.55ID:DorHRoYW0
ちなみに C には厳密にいうと価渡し(call by value)しかない
値としてアドレスを渡すので結果として参照渡し(call by reference)
ができることになる
2024/01/25(木) 20:55:09.83ID:FFkj9zH80
参照って言うと色々誤解を受けるから
Cの場合はアドレス渡しで良いと思う
476デフォルトの名無しさん (ワッチョイ dfbf-qZe7)
垢版 |
2024/01/25(木) 21:27:23.28ID:xC/Yy1/j0
ヘンな用語作るのやめて
ポインタで渡しても値渡しのまま
foo(int x) {int y = 0;x = y;}
bar(int *p) {int *q = 0;p = q;}
呼び出し元の変数に作用が無いのは同じ
両者は等しく値渡しのまま

baz(int *p) {int y = 0;*p = y;}
これについては値渡しされたものがポインタ型だったため
ポインタ型が持つデリファレンス機能によってポイント先に代入できただけ
*** 値として渡し ***て、デリファレンスして、代入しただけ

qux(ref int x) {int y = 0;x = y} // ウソ文法
みたいなことして呼び出し元に代入できるものが
これのみが参照渡し

参照渡しがある言語ならこんな誤解はしなくてすむ
https://www.gnu-pascal.de/gpc/Subroutine-Parameter-List-Declaration.html#Subroutine-Parameter-List-Declaration
> procedure DoIt (x: SomeType);
> Technical: The actual parameter is passed by value or reference, but if passed by reference, it is then copied to a local copy on the stack.
> What it means: you can modify x inside the routine, but your changes will not affect the actual parameter (and vice versa).

> procedure DoIt (var x: SomeType);
> Technical: The actual parameter is passed by reference.
> What it means: modifications to x inside the routine will change the actual parameter passed in.

ポインタを含むあらゆる型に対して、値渡し/参照渡しが存在する
2024/01/25(木) 21:48:36.73ID:d9W0b5Ok0
JIS の用語集やそのもとになった ISO 規格によれば call by address の定義はパラメタの場所を渡すこと。 ポインタの形であっても場所を渡しているには違いないからあてはまるし、勝手な創作用語というわけではない。
言語の理屈ではポインタもポインタという型の値だがそれの活用方法に名前が付いて悪いってこともない。
言語仕様の話をしているときに混ざってくると「んっ?」とは思うが。
2024/01/25(木) 23:01:13.98ID:NizTAU7c0
ポインタなのに値渡しとか言ってる奴まだいるのかw
そういうのはポインタ渡しで良いんだよ
アドレスを値渡し→ポインタ渡しでいいんだよ
2024/01/26(金) 00:30:31.26ID:/aFBudAaa
>>472
zalloc にしようぜ
480デフォルトの名無しさん (ワッチョイ 5f7c-ytPG)
垢版 |
2024/01/26(金) 00:35:29.44ID:xuVVqQKb0
>>478
>アドレスを値渡し→ポインタ渡しでいいんだよ

だよな。
481デフォルトの名無しさん (スププ Sd7f-MQtI)
垢版 |
2024/01/26(金) 08:38:30.55ID:Nbs9AoGZd
Cの文法規則がいいかげんなんだよ
482デフォルトの名無しさん (スプッッ Sdff-ytPG)
垢版 |
2024/01/26(金) 09:12:22.82ID:f6TAFOdQd
>>481
>Cの文法規則がいいかげんなんだよ

だよな
2024/01/26(金) 09:47:41.79ID:5qejItpup
アドレスと言う値を渡してるのだからどちらも同じ事だろ
2024/01/26(金) 10:37:55.79ID:mR+OAnS80
いい加減なところが好かれる理由
2024/01/26(金) 10:46:46.89ID:Tqv1qsfwp
アセンブラまんどくさいから作ったのがC
だから型がイイカゲンなのはアセンブラやってる人が対象だから
2024/01/26(金) 10:52:28.10ID:6gE8lNl00
イイカゲンにしてるとコンパイラの最適化を有効にしたときに破綻するぞ
2024/01/26(金) 12:43:22.79ID:IWVVekFc0
>>483
構造体は値渡しとアドレスの値渡しがある
どっちも値渡しというと訳が分からなくなる
なので、構造体は値渡しとポインタ渡しが出来ると言えば便利だ
そうすれば、配列は値渡しが出来ないとも言うことが出来る
2024/01/26(金) 13:17:11.83ID:hEzJutz20
C++で参照が登場したので「アドレスの値渡し」とか言っている訳で
C++を知らんと意味不明だし違和感あるだろうな
489デフォルトの名無しさん (ワントンキン MM4f-NhvB)
垢版 |
2024/01/26(金) 14:03:32.73ID:OnjHbhExM
C++がどうのとかは全然関係ないでしょ
2024/01/26(金) 14:07:19.39ID:6gE8lNl00
C++ とは関係ないと私も思う。
仮引数と実引数の関係は (型がポインタかどうかに関係なく) 値の代入であるということになっている。
繰り返すが言語仕様上の理屈では解釈の余地なく全ての引数は値呼びのメカニズムで規定されているよ。
C++ の参照と区別するための言い回しではなく仕様上の理屈通りに言えばそうなるってだけ。
2024/01/26(金) 14:12:08.41ID:u8n9O9U10
それで結局
&var
の値はポインタなの?アドレスなの?
どっちでもいいんだよね?
2024/01/26(金) 14:57:45.80ID:6gE8lNl00
「アドレス」と「ポインタ」の使い分けはイマイチわからないんだよなー。どっちでもいいと思う。
単項演算子の & にはアドレス演算子という名前がついていてアドレスを返すとも書いてあるのでこれについてはアドレスと言っていいのは間違いない。
ポインタは型の種類のように使われてることもあるし、ポインタ型の値のことを指しているように見える箇所もある。
個人的感想としてはアドレスのほうが低レイヤ寄りの概念でポインタは型で意味付けしているような雰囲気を感じてるんだけどあまりはっきりしない。
2024/01/26(金) 16:28:15.83ID:TUEfKZ6Qp
参照渡しと実体渡しかw
あれも、アドレス渡しとコピー渡しって言えばいいのにね
2024/01/26(金) 16:55:28.58ID:VvnpRsjB0
アドレスは、数値が主体でそれが何を示しているかの説明の為の単語。
ポインタは変数の一つで *p や p->a 等の動作も含めての設計思想。

などと意味不明な(ry
2024/01/26(金) 17:26:29.97ID:CEoHa9Fg0
アドレスは値
ポインタは型だよ
正確にはintのポインタ型とか言うけど
2024/01/26(金) 17:35:02.08ID:WoOISbdM0
ポインタはポインタ値を格納する場所
2024/01/26(金) 17:36:54.25ID:CEoHa9Fg0
場所と言うのは曖昧な表現だな
498デフォルトの名無しさん (ワントンキン MM4f-NhvB)
垢版 |
2024/01/26(金) 18:03:51.31ID:Vqpo1a/ZM
アドレスは値で右辺値、ポインタは変数でオブジェクトで左辺値
こんな基本的なこと、頼むよ
2024/01/26(金) 18:27:39.65ID:GfgH9lD40
>>498 正しくない。ポインタ型の変数 int* p に対して p + 1 もポインタだけど、変数でも左辺値でもない。
2024/01/26(金) 18:29:01.58ID:WoOISbdM0
ある時はメモリーのサラリーマン、ある時はレジスターの探偵
2024/01/26(金) 19:46:30.13ID:XBTJ48xK0
規格上はどうなってるか知らんが
ポインタでいいじゃん統一しろよ
変数へのポインタを取る時アドレスと言いたくなるんやろな
分からんでもないが使い分ける必要はないと思う

アドレスといいつつ結局ポインタでしかないやろ?
場所だけじゃなくて型のサイズも持ってるでしょ?
アドレスと聞くと番地だけってイメージだけど
ポインタっつうのはそれに加えてサイズも持ってるのがミソ

だから不必要にアドレスと言い直す必要はない
だって実際にポインタしか扱わないんだから
2024/01/26(金) 20:04:10.51ID:Su75gAlu0
アドレスっていう言葉は規格には出てこないと予想してた。
規格にはポインタだけあればよくて、アドレスは実装の仕方のイメージがある。アドレスは多くの場合整数になるが、文字や文字列でもいいというような。
2024/01/26(金) 20:45:56.85ID:wwCmUZ7Wp
アドレスってアセンブラ屋さんが言う奴?
2024/01/26(金) 21:05:55.41ID:pu3OCH3K0
バイナリーエディタやメモリエディタでも言うよな。
2024/01/26(金) 21:07:17.18ID:coh7wFVpp
バイナリエディタのはアドレス違うよなぁ
メモリーエディタはアドレスだからいいけど
506デフォルトの名無しさん (ワントンキン MM4f-NhvB)
垢版 |
2024/01/26(金) 21:11:38.94ID:Vqpo1a/ZM
>>499
p+1はアドレスだよ
2024/01/26(金) 22:21:03.31ID:PDBFw7tbp
ポインターだろ
2024/01/26(金) 22:21:36.46ID:XBTJ48xK0
int a[4] = {0}, (*b)[4] = &a, *c = &a[0];
printf("%p %p\n", b, b + 1);
printf("%p %p\n", c, c + 1);

0x7ffc2026d710 0x7ffc2026d720
0x7ffc2026d710 0x7ffc2026d714

アドレスと捉えると同じ番地だけど
+1の結果が違う番地になるのは
ポインタが大きさを知っているから
これが単なる整数とは違うところ
2024/01/26(金) 22:22:12.95ID:8+XG8rAlp
アドレスと言えるのは直接ハードウェアにアクセスするものだけだよな
2024/01/26(金) 22:29:00.75ID:kxxVAnT60
規格書の加減算のとこにはp + 1の結果が何になるか書いてある?
2024/01/26(金) 22:36:52.96ID:tuyRrB6Ip
p+1の結果は、pの型によって違うやろ
2024/01/26(金) 22:48:45.51ID:kxxVAnT60
規格ちょっと読んだけど加減算のところには結果がアドレスになるかポインタになるか書いてなくね?
2024/01/26(金) 22:49:56.05ID:4G76jppe0
>>512
アドレスはポインタのエイリアスだろ?
2024/01/27(土) 00:39:52.91ID:RxNi/RLS0
だから、アドレスは値で、ポインタは型なんだ
p + 1はpの型によって結果が決まる
intかintのポインタ型かで結果が変わる
515デフォルトの名無しさん (ワッチョイ 5f7c-ytPG)
垢版 |
2024/01/27(土) 00:55:04.46ID:3j95TwYq0
>>514
>だから、アドレスは値で、ポインタは型なんだ
>p + 1はpの型によって結果が決まる
>intかintのポインタ型かで結果が変わる

だよな
2024/01/27(土) 01:15:46.64ID:lTO1GYgs0
>>514
規格読み直したら加算の結果はポインタになるって書いてあったわ
517デフォルトの名無しさん (ワッチョイ 5f7c-ytPG)
垢版 |
2024/01/27(土) 10:42:42.11ID:3j95TwYq0
>>516
何章?
2024/01/27(土) 14:54:07.21ID:IaaZCBNA0
(int)(p+1)-(int )(p) == sizeof (*p)
だっけ?
519デフォルトの名無しさん (スプッッ Sdff-ytPG)
垢版 |
2024/01/27(土) 15:00:52.15ID:Go/zq51jd
>>518
intは32bitのLP64環境ではどうなるんだい?
2024/01/27(土) 15:08:44.06ID:IaaZCBNA0
コンパイルエラーか警告でて下位32bitのみ取得じゃね?
sizeof (*p)がint_max超える設定でもなけりゃ目的は果たせそうだけど。
2024/01/27(土) 16:02:39.58ID:TmJLT/yO0
ポインタは整数に型変換できるけどその値がどうなるかは処理系定義。
変換結果がその整数型で表現できなかったときは未定義。
gcc や clang だとポインタをより小さい整数型に変換しようとしたらエラーになった。

intptr_t や uintptr_t に限っては正しい void* はこれらの整数に変換可能、かつ
void* に再び変換したら元の値と等しいことが保証される。
オブジェクトを指すポインタは void* に変換可能なので
オブジェクトを指すポインタは intptr_t や uintptr_t に (情報の欠落なく、可逆な形で) 変換できる。
しかしポインタが整数でどのような表現を持つかは規定されていないし、
intptr_t や uintptr_t は提供されないこともありうる。

オブジェクトを指すポインタは文字型を指すポインタに型変換してバイト列としてアクセスできることは保証されているので
オブジェクトの大きさを知るためにポインタ操作をするのであれば ↓ のような形にするのはアリなはず。

#include <assert.h>

int main(void) {
int obj;
int *p=&obj;
assert((char*)(p+1)-(char*)(p) == sizeof(*p));
}
2024/01/27(土) 17:07:11.96ID:JGqkehCyd
はちみつの説明はちっとも頭に入ってこん
3行にまとめてから貼れ
523デフォルトの名無しさん (ワッチョイ 5fb0-ytPG)
垢版 |
2024/01/27(土) 17:46:47.32ID:gXnDqsx80
>>518
つまりこのコードはダメってこったね
2024/01/27(土) 18:21:39.29ID:ubKEU+Fr0
>>522
関連する規則は関連する規則の数より減ることはない。
根拠不明でいいなら削るけどそんな説明を見たいのか?
2024/01/27(土) 18:27:31.62ID:8jAlHp2M0
3行しか文章解読できないなら、コード書くのは辛いだろう
2024/01/27(土) 18:41:16.06ID:lTO1GYgs0
>>517
「加算」でページ内検索すればすぐ見つかる
527デフォルトの名無しさん (ワッチョイ 6f5f-YGpO)
垢版 |
2024/02/22(木) 19:08:43.26ID:rfW+Fz5e0
errno ってどうしてスレッドごとに別々につかえるの?
2024/02/22(木) 19:34:35.22ID:o0M/RgFs0
>>527
「どうして」というのはそういう仕様になっている理由?
それともそれを実現している方法のこと?
2024/02/22(木) 19:51:00.46ID:rfW+Fz5e0
>>528
方法のほうですね
__thread ?とかってgcc固有?って聞いたけど
gcc以外とか大昔とかどうやってんのかなーって
2024/02/22(木) 20:08:19.54ID:o0M/RgFs0
>>529
errno は型 int を持つ変更可能な左辺値に展開されるならマクロで定義されてもよいことになっている。
昔の C には記憶域期間の分類にスレッドは無かったが
#define errno *__foo()
みたいな感じで定義しておいて、
この関数がスレッドごとに適切な場所を返すように作っておけば辻褄は合う。
2024/02/22(木) 21:32:39.53ID:rfW+Fz5e0
>>530
これでerrnoの初期化とかできるのか? なるほどできるのか。よくできてるね
2024/02/22(木) 22:17:46.64ID:3b0UfxEB0
結局、スレッド処理がいい具合にリンクしてくれてるって事だね
2024/02/23(金) 15:59:36.95ID:HdyUmXx/0
>>529
別にTLSの文法がなくてもコンパイラにTLS相当の非公開機能があれば実現可能。
2024/02/24(土) 16:12:18.49ID:+4BfNMQz0
TLSと言えばゲームの方やね
バタ語を略したスレッドローカルストレージではないんや
このスレの世代的にも半数以上がそう思って口に言わずとも突っ込んだ経験があるはずや
2024/02/24(土) 16:17:18.15ID:dGxq80rr0
ゲーム? バタ語? 何を言ってるのか分からない。
2024/02/24(土) 16:54:19.76ID:felFEjYK0
「TLS ゲーム」でググったらトゥルー・ラブストーリーが出てきた。
タイトルは聞いたことがあるけどやったことないし、 TLS なんて略称にはなじみがないわ。
Transport Layer Security と被っとるやないけというツッコミはしたくなったことはあるが。

バタ語ってなんや?
2024/02/24(土) 23:04:08.46ID:a3fFW9uua
ここの人は並列計算についても答えるの?
それともスレ違い?
2024/02/24(土) 23:05:48.99ID:a3fFW9uua
スレ違いなら何処が適してるの?
2024/02/25(日) 01:01:43.21ID:m/LZ7YZH0
>>537
一応は C の名前を冠したスレだからその質問が言語仕様に関わる質問ならこのスレでいい。
C を使ったロジックの組み立てかたみたいなのもある程度は許容されると思う。
環境に固有の事情が絡むならそれぞれのスレのほうがいいこともある。
Win32api スレとか Unix スレとか。
540名無し兎と鰻の大乱闘 (ワッチョイ cafd-p5xT)
垢版 |
2024/02/25(日) 23:17:51.95ID:3BSAc3tW0
しーげんごってなに?
2024/02/26(月) 00:50:15.88ID:mDObVK5g0
tlsって毎回アクセスする度に初期化済みかどうかチェックされるんか?
もしそうなら未初期化上等のc言語では特殊だな
542デフォルトの名無しさん (ワッチョイ 0aaa-g1P5)
垢版 |
2024/02/26(月) 17:12:35.82ID:hotfpUjh0
【AI】Stable Diffusion 3発表、Soraで話題の拡散トランスフォーマーを採用 [すらいむ★]
http://egg.5ch.net/test/read.cgi/scienceplus/1708865670/l50

ボイス・トォ・スカるしている者も攻撃を受けるようになりました
543デフォルトの名無しさん (ワッチョイ 9e6d-EVRh)
垢版 |
2024/02/26(月) 19:38:00.95ID:7RO6bLyL0
こんな Web ページを作りました。ぜひどうぞ。
http://www7b.biglobe.ne.jp/~river_r/chs/
2024/02/27(火) 13:07:12.38ID:gZVWnZ6O0
アクセスしないほうがいいよ
2024/02/27(火) 13:33:45.24ID:pm1A4e3U0
理由は?
546デフォルトの名無しさん (ワッチョイ 9eb5-EVRh)
垢版 |
2024/02/27(火) 17:32:18.89ID:xGsMPO790
>>543 ごめんなさい。言葉足らずでした。

「数値計算結果の画像化など」 という Web ページを作りました。
プログラミング、数値計算、カオス、画像作成と表示
などに興味がある方は、ぜひどうぞ。
http://www7b.biglobe.ne.jp/~river_r/chs/
2024/02/27(火) 17:46:48.10ID:0/infknm0
空白のBMPなんて簡単に作れると思うよ
起動したときに自分で作ったら良いと思った
2024/02/27(火) 18:03:33.97ID:NfALWDmT0
>>546
ここは C スレなんだから C で書いたほうが親切じゃないかな。
まあ実質的にはほとんど C みたいな書き方だけども……
549デフォルトの名無しさん (ワッチョイ 9e07-EVRh)
垢版 |
2024/02/29(木) 11:21:59.57ID:lAXCV22P0
>>0548
>546 です。C++ に特有な機能は、
全くと言っていいほど、使っていませんよ。
pow(x, y) というのは目新しいけど。
2024/02/29(木) 11:51:17.73ID:wasjN/NH0
30年前で時間が止まってんなこいつ
2024/02/29(木) 13:30:21.68ID:tTOuwN9N0
拡張子を.cにしてビルドしてみる
2024/02/29(木) 14:03:45.25ID:w6pA3tyf0
>>549
C++ の機能をほとんど使ってないことはわかってるしそう言ってるじゃないの。
使わないのに C++ の形式をとって C スレに投下するのはちょっと不親切かもねという話をしてるんだよ。

pow (べき乗関数の総称版) は C にもあるし、 C の仕様に入ったのは C99 から。
それを知らなくて (しかし使いたくて?) C++ にしたという意味なのかな?
2024/02/29(木) 15:54:08.56ID:a+kbfZOT0
pow()なんてx^y(yが変数)したい時だけでいい
pow(x,2), pow(x,0.5)は、(x*x), sqrt(x)と書いた方がいい
…まさか今時のコンパイラはこれも最適化したりする?
554デフォルトの名無しさん (ワッチョイ caac-o+si)
垢版 |
2024/02/29(木) 16:10:58.46ID:wvTonBo10
しらんけど、今どきだと最適化されるかもしれんね
1+2+・・・+99+100
こんな計算も(1+100)x 50で最適化される記事が昔あったような
2024/02/29(木) 16:38:23.25ID:z2rRJOdi0
こんな計算って、そのレベルでコンパイラ任せにしてるのか
2024/02/29(木) 17:09:00.84ID:QhPTi9Tjp
>>554
知らんけど、今は定数は先に計算しちゃうから、その式は1発答えだけになるような
2024/02/29(木) 17:09:33.30ID:zz2EilBV0
> 1+2+・・・+99+100

最適化というか、畳み込みで 5050に置き換えられるかと
558デフォルトの名無しさん (ワッチョイ caac-o+si)
垢版 |
2024/02/29(木) 18:55:44.88ID:wvTonBo10
例が悪かった、もちろん定数は一発計算してメモリに固定されるけど、
変数を含んでても、冗長計算を変形してくれるコンパイラが出て、gccもそのアルゴリズムを採用したことが昔あったような。
2024/02/29(木) 19:13:29.86ID:eV7kgdtT0
数値計算関連の関数はコンパイラによる最適化がなくても関数の内部が複雑な場合分けで対処してることが多いと思う。
GNU のやつとかだいぶんごちゃごちゃしてる。
2024/02/29(木) 19:19:48.52ID:z2rRJOdi0
人間が思いも付かなかったアルゴリズムで解いて見せたりして
人間が解析しても何故正しいかが分からなくなる
2024/03/01(金) 02:42:07.06ID:4OWvqJMX0
floatが絡むと誤差の出方が変わって結果が変わるから、式を変形するような最適化は不要だ
変形しても良いよというのが-ffast-mathだな
562デフォルトの名無しさん (ワッチョイ ab4e-7bv0)
垢版 |
2024/03/07(木) 00:36:21.20ID:D7Ff69360
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t sighandler);

signal関数の第1引数のシグナル番号(signum)と第2引数のハンドラ関数が実際に呼ばれたときに引数に入るシグナル番号(1行目の引数のint)は必ず一致する認識ですがあっていますか?
その場合はハンドラ関数では引数に入るシグナル番号は最初から分かっているはずですが、わざわざ引数にシグナル番号を取っている理由はなんでしょうか。シグナル番号によって処理を分岐するデカいハンドラ関数を作るくらいしか思いつきませんでした。
2024/03/07(木) 01:20:52.75ID:yhOhiWWp0
時間の無駄だからsignalのことは忘れなさい
時代遅れのCランタイムで本当に役立つものはごく少数しかない
そんな化石はスルーしてOSに用意された目的に合うAPIを直接使いなさい
Cランタイムのソースコードがある処理系なら読んでみると良い
2024/03/07(木) 04:56:12.94ID:3rDFlX/H0
signalの代替は無理だろ
ランタイム自作しろとか言うのか?
sigalrm使うなぐらいならわかるが
2024/03/07(木) 10:24:21.94ID:m0jtu/KQp
OS機能呼び出すとか移植性無視かw
2024/03/07(木) 10:26:04.98ID:u0AQ7cvO0
>>565
今は環境に合わせて移植するのではなく、環境を移植するのが主流だよ
2024/03/07(木) 10:26:06.80ID:Qh7cJyBm0
>>562
> 必ず一致する認識ですがあっていますか?

正しい。

> わざわざ引数にシグナル番号を取っている理由

Rationale に書かれていないのではっきりしたことはわからない。
おそらく Unix でそうなってたのを追認しただけだと思う。
2024/03/07(木) 10:29:39.62ID:Qh7cJyBm0
>>565
シグナルまわりはどうせほとんど移植性はない。
言語仕様の範囲内だけで可能なものなら不必要に移植性を損なう必要もないけど大抵の場合に無理だと思う。
2024/03/07(木) 12:06:04.83ID:HvQLfDgAd
構造体やポインターを理解できたら、C言語をマスターしたと言えますか?
2024/03/07(木) 12:44:05.75ID:Qh7cJyBm0
>>569
練習用の題材ではなく (自分なりに) 意味があるプログラムを書けたあたりが
一応のマスター (あくまで最低限の出発点だが!) だろうと個人的には思ってる。

プログラミング言語は道具なんだから道具として使えることが重要で、
言語の要素を何個理解したなんてのはたいした指標にならない。
2024/03/07(木) 13:28:05.42ID:GWVV9gt00
1000行程度のプログラムがすらすら一日で書けたら卒業
572デフォルトの名無しさん (ワッチョイ 0f2a-AlNe)
垢版 |
2024/03/07(木) 14:06:12.94ID:4AOndewA0
三行半で済む処理をダラダラ1万行ぐらいに増やすのは、得意なんだけどなあ。
2024/03/07(木) 15:29:11.48ID:MNNvXb/X0
それはそれで才能
574デフォルトの名無しさん (ワッチョイ 1f5c-0W2u)
垢版 |
2024/03/07(木) 15:56:22.94ID:tpHaFcPx0
>>562
番号を渡す理由はその方が柔軟性があるから
柔軟性の中には>>562で挙げてる理由も含まれる
なおsignal()は時代遅れなのでsignal.hにある別の関数を使うこと
2024/03/07(木) 20:44:25.94ID:yfQHOJuW0
>>564
signal()なんて使わず、せめてsigaction()にしろということでは?
576デフォルトの名無しさん (ワッチョイ 4f4c-lvv7)
垢版 |
2024/03/08(金) 18:40:01.38ID:6aUIMz1F0
>>562
デカいハンドラ関数を作る意図はなくても
同じようで異なる処理(複数のsigal番号の処理をする場合とか)をする時に
入口は一つにしておいて入力パラメータで処理を振り分けるとか普通の設計だと思うが。
わかりやすい例がWIN32APIのWindowProc。
あれがメッセージ番号毎に関数エントリを登録する形式だったら煩雑なことこの上ないだろ。
2024/03/08(金) 18:58:33.73ID:iEWrXUyW0
Windowってそんなsignalの使い方しないでしょう
2024/03/08(金) 19:33:39.28ID:KTmiotGH0
>>577
そういう話じゃないから文脈を掴んで。
2024/03/10(日) 23:22:14.50ID:CPrZIOdkd
>>570
>>571
ありがとうございます
とりあえず何か作ってみます
2024/03/11(月) 20:07:11.13ID:comBc+xk0
もうC言語は一旦終わりでいいから別の事やりなよ
結局Cだけの知識じゃ何もできんのよ
Cの知識はいざ何か作ろうとなった時に活きてくるよ
581デフォルトの名無しさん (ワッチョイ 82ac-sV0L)
垢版 |
2024/03/11(月) 21:49:00.76ID:QCWizl2S0
プログラマ目指して挫折する人は、別に作りたいものがなくて文法ばかりを勉強するタイプかも。
文法は大事だけど、それ自体はあんまり役に立たないし調べれば済むことに時間をかけるのは程々に
合理的なアルゴリズムを瞬時に思いついて言語に落とし込めるかが大事で、これは経験。
2024/03/11(月) 22:16:42.73ID:lga6QF6v0
質問サイトとかで「どうすればいいですか?」みたいなのはちょくちょくあるけど「どうなればいいの?」と返したらまともにこたえられないのもよくある。
問題の解法を構築してプログラムの形に落とし込むのが大事だというのはそりゃそうなんだけど、大前提として解決すべき問題が何であるかを認識 (発見) しなきゃならなくて、そこんところで躓いてたら助けるのも難しい。
583デフォルトの名無しさん (ワッチョイ c27c-WFGC)
垢版 |
2024/03/11(月) 23:43:57.21ID:a8lYnTon0
>>582
相手はその質問で問題提起してるんだろ、なのにお前からは、どうなればいいのって "
解答" を質問者に聞いてたら、そりゃ質問者だって混乱するだろよ。
問題把握以前にお前は国語からやり直すべき。
2024/03/12(火) 00:26:36.89ID:WtXn1sYk0
>>583
目指すべき形がわからないのにどうすればいいかなんて答えようがないんだから訊くのはあたりまえじゃないの。
(ちなみに質問が不明瞭な場合などのために回答とは別にコメントを付ける機能が stackoverflow や teratail にはある)
2024/03/12(火) 00:40:50.82ID:JJnRauRa0
分からないのに答えると言うのもどうかと思う
2024/03/12(火) 00:51:20.24ID:WtXn1sYk0
>>585
答えてない。
2024/03/12(火) 00:54:27.51ID:JJnRauRa0
相手にしているならば答えてるのと同じ
2024/03/12(火) 04:56:46.76ID:T3Ovkjsr0
そして放置される と
2024/03/12(火) 18:16:58.66ID:TtsgUSZ70
てすと
2024/03/12(火) 18:17:16.76ID:TtsgUSZ70
てすと
2024/03/13(水) 04:27:54.00ID:fKc7/92tH
Pythonから来たんですけど
C言語では関数だけじゃなくifやforのブロック内部もローカルスコープって聞いて驚愕してます
ループが終わった後のカウンター変数を後続処理で気軽に利用できないって困りませんか
592デフォルトの名無しさん (ワッチョイ 82ac-sV0L)
垢版 |
2024/03/13(水) 04:37:16.09ID:VFn3B3DS0
そうしたいときはスコープの外で宣言すれば値は保持されるので
int i;
for (i=0 ; i<10 ; i++)
{

}
2024/03/13(水) 04:49:50.63ID:fKc7/92tH
>>592
マジっすか
ChatGPTに聞いたら、そのやり方だと外のiと中のiはスコープが別って言われて混乱しとります

---
一方で、ループの外で事前に同名の変数が宣言されている場合、
forループの仮引数として宣言された変数と同名の変数は別のものとして扱われます。
この場合、forループの仮引数として宣言された変数がローカル変数として扱われ、ループの外で宣言された変数がグローバル変数として扱われます。
これは、C言語において名前の衝突を回避するための仕組みです。
2024/03/13(水) 05:14:50.31ID:7oOr7TQ5M
ChatGPTあってもバカはバカのままってのがよくわかる
2024/03/13(水) 07:16:46.92ID:3+r/Br8X0
>>593
int i;
for (int i=0 ; i<10 ; i++) {...}
と書くとそうなる
宣言すると新しい変数ができる

ChatGPTって、機械が自然な応答をすることが目的で、辞書のように使うものではないんじゃないの?
ChatGPTは得た情報がどの程度正しそうなのか重みづけできないんじゃないかな
2024/03/13(水) 07:39:30.72ID:DwruCvgD0
やさしい
2024/03/13(水) 08:06:43.61ID:fKc7/92tH
>>595
ありがとう
AIの回答をよく見返したらfor(int i = 0...の解説だった
サンプルコードを示してくれるのはいいけど、自分のような丸々素人だとその意図を理解できないでこういう誤解が生まれる余地はあるね
先生が優秀過ぎて学生がついていけない構図だわこれ
2024/03/13(水) 08:35:23.86ID:etRxrqP30
ChatGPTを先生にする発想が間違い
2024/03/13(水) 08:49:20.23ID:ZL+6IClb0
>>597
昔の C++ だとその書き方でも i のスコープは for 文の外側のブロックがスコープになる仕様だった。 (ISO で規格化される前のやつ。)
その頃の C の仕様ではそもそもそこで変数の宣言を出来なかったが処理系の拡張として C++ 風のやりかたをできるようにしているものもあった。
後に C++ の仕様は変更されて、 C には C++ の変更後のやり方で導入されることになったんだが、しばらくはスコープの仕様に混乱があった。
数十年前の一時期の混乱に過ぎないからそれ自体は今では気にする必要はないんだけど言語仕様は変更されることもあるし、色々と歴史的事情もある。
古い仕様を根拠にした解説もあるから AI が区別せずに学習したら辻褄の合わないことも起こると思う。
まあ人間が書いた解説も変なのは少なからずあるから AI を批判するわけじゃないけど……まあ一番最初くらいは入門書を読んだほうがいいんじゃないかと個人的には思ってる。
2024/03/13(水) 09:06:40.92ID:hNY0+4ik0
カウンター変数を気軽に使うのが間違い
そういう時は何かが間違ってると思った方が良い
俺がGPTならそう回答するw
2024/03/13(水) 09:49:08.95ID:LIF5w4hC0
ちょっと何言っているのか分からない
602デフォルトの名無しさん (ワッチョイ 692a-fdoY)
垢版 |
2024/03/13(水) 09:57:47.91ID:X1fgAQyG0
気が重い中で使うのが正しい。獅子咆哮弾だね。
603デフォルトの名無しさん (スプッッ Sd01-WFGC)
垢版 |
2024/03/13(水) 10:34:26.85ID:u8+Aa1acd
>>597
ChatGPTは嘘言うので使うのやめたわ。
どこかの大学の調査で学生だか生徒だかが、ChatGPTの嘘情報で間違ったまま覚えてる弊害が出始めてるとか言ってたわ。
2024/03/13(水) 10:46:18.64ID:JwtpXuCEp
あれは創作小説を生成する装置なのに
なんで実用性あるんだと思うんだろ?
2024/03/13(水) 10:57:53.06ID:etRxrqP30
実用性はあるけどな
使い方の問題
現役でいたかったらgithub copilotぐらいさわっとけ
2024/03/13(水) 11:09:39.04ID:hk9QG/kC0
>>603
自転車だってパンクするかも知れん
ChatGPTも嘘言うことあるかも知れん

わきまえて使えばどちらも強力なツールだ
自転車で転んだからって乗るのをやめるかい?
2024/03/13(水) 11:43:22.70ID:WwA56xS10
嘘って言うのは人間が評価した上での話
ChatGPTに取っては与えらた入力データから
もっともらしいものを出力しただけ

ChatGPTに嘘をつかせるってのは、難しい
仮に知性というものが芽生えて、自意識が発生し
そのことを人間に隠さないといけないと判断して
そうするなら、それは初めて嘘をついたとなる
2024/03/13(水) 11:51:20.55ID:8jq/IdEqM
嘘であることと嘘をつこうと思ったかどうかは別だろ
2024/03/13(水) 11:51:45.77ID:LIF5w4hC0
>>604
創作小説を生成することが「実用」ではないと?
君にとっての実用性とは何なのかね?
2024/03/13(水) 12:01:22.65ID:WwA56xS10
「この電卓は嘘つきだ!」
2024/03/13(水) 12:20:13.23ID:y7g8qbWf0
ChatGPT の言語能力は高いがプログラミング教育を受けてるわけじゃないからなぁ。
頭のよい素人がググりながら要約したくらいの正確さだと思う。

根拠になる仕様の項目を問うたときにまるでデタラメを返したりするのはかなりあかんとこ。
2024/03/13(水) 13:20:48.95ID:I6g3m+gC0
>>609
マ板で愚問w
2024/03/13(水) 13:40:02.23ID:hNY0+4ik0
>>610
Windowsの電卓で嘘をつくバグが有ったなw
2024/03/13(水) 13:53:23.57ID:hNY0+4ik0
>>601
ループ変数を後から参照する状況は、ループがbreakで中断したかを確認したい時だろう
そういうのは別の関数に切り分けて、ループ内でbreakじゃなくreturn trueで返すようにすべきだな(関数の最後はreturn false)
C++で言うstd::any_ofみたいな事が出来ないから、関数に切り分けるしかない
2024/03/13(水) 15:56:31.82ID:etRxrqP30
小さい関数ならちまちま切り出さなくていい
読みにくいだけ
616デフォルトの名無しさん (ワッチョイ fb4c-A0KB)
垢版 |
2024/03/17(日) 16:04:44.01ID:k+jArioy0
最短経路問題で perl5 で書いたのがOut of memory!

こんな時はC言語などで書き直すのが選択肢だけど
みんなはいきなりC言語などで書きますか?
それとも、最初は書きやすい言語で処理速度以外の所を決めてからC言語などで書きますか?
2024/03/17(日) 16:19:49.43ID:JxbO9kgq0
perlの実装があるならそれを使って色々検討するんじゃないか
2024/03/17(日) 16:32:03.14ID:WugnipTo0
perl5って64ビット版もあるでしょう?
619デフォルトの名無しさん (ワッチョイ 292a-B9kV)
垢版 |
2024/03/17(日) 16:47:02.59ID:8QBAFOMi0
ここの人たちなら習わぬ Perlで下書きするより勝手知ったる Cで書くんじゃないの。
Perl開発上の問題はPerlスレで訊ねた方が、実情に即したレスが反りそう。
2024/03/17(日) 16:50:04.16ID:WugnipTo0
問題文と、組み立てたであろうアルゴリズム聞かないと、何とも言えない
2024/03/17(日) 19:48:46.79ID:WugnipTo0
Perlスレ見てみたが、相談できそうな所が無かった
回答あるか分からないが、お題スレに問題文投げて解いてもらう
いろんな言語に精通している猛者が多い(Perl達人もいたはず)
PerlではなくC言語でと言うなら、ここで相談できるかもしれない
2024/03/18(月) 10:33:19.79ID:0IkoPQje0
最短経路・グラフ理論・ダイクストラとか?
アルゴリズム系は、Python でしょ。Ruby も

有名な蟻本「プログラミング・コンテスト・チャレンジブック」は、C++

C は知らない
2024/03/18(月) 10:37:04.28ID:U2viu6Jop
Pythonは、アルゴリズムって言うより
マトリックス計算機
624デフォルトの名無しさん (ワッチョイ 59ad-FDlJ)
垢版 |
2024/03/18(月) 12:55:06.36ID:09P0Fui10
Perlは最短経路問題のライブラリもなく、速度が欲しければCで自分で書くしかない…ってコト!?
辞めたら? その言語で最短経路問題解こうとするの
2024/03/18(月) 13:06:20.52ID:mAsCIn7L0
依頼者の返答を待たないと
2024/03/18(月) 20:11:03.72ID:H3fBGUmk0
perlスレでやれよ
このスレは老害しかいないからperlの話しても通じんよ
2024/03/18(月) 20:46:39.48ID:LaT9Whu40
perlの歴史は結構古いぞ
年寄りしか扱えないと思ってた
2024/03/18(月) 21:09:19.87ID:PY17qgzJ0
>>616 は C のコードを書く前に他の言語でプロトタイプを書くことがあるかという質問していて Perl についての質問ではないぞ。
Perl の話は例というか前振りだろ。
2024/03/18(月) 23:52:06.11ID:H3fBGUmk0
そいう話か。1行目しか読んでないわ
最近は大体OS標準のpowershellでざっくり書いて必要なら一部C#だな
pinvokeで恐らくC/C++製のDLLを利用することはあってもCコードを書く機会なんてなくなった
2024/03/18(月) 23:55:42.19ID:LaT9Whu40
じゃあ、だれかCで書いてあげて
2024/03/19(火) 08:32:58.20ID:Z43bMenl0
いきなりperlで書くのと
いきなりCで書くのと何が違うんだろ?

つか、俺は最初に日本語で手順を書くが
632デフォルトの名無しさん (ワッチョイ 73ae-yROb)
垢版 |
2024/03/19(火) 08:57:10.07ID:R8jeC9x+0
awkが普通だと思ってた
今は違うのか
2024/03/19(火) 09:24:56.59ID:D/Ya4WHb0
まずはBASICで書いて、速度が欲しいとこだけマシン語に置き換える感じ
2024/03/19(火) 09:46:27.46ID:DAgk/2JU0
FD起動IPL設計からなのでまずアセンブラで。
2024/03/19(火) 10:08:59.95ID:Szfgw2D70
FD起動
なんて贅沢なんだ
636デフォルトの名無しさん (ワッチョイ 8b2a-Rw/6)
垢版 |
2024/03/19(火) 10:39:11.21ID:Fe9RIXyY0
>>631
いきなり perlで書いたソースは既にあって、実行するとメモリ不足になるのでしょ。なので、

いきなり(perl以外の)書きやすい言語で書くのと
いきなりCで書くのと何が違うんだろ?

と訊くべき。
2024/03/19(火) 11:11:47.95ID:Szfgw2D70
昔MZシリーズなんていう8ビットPCがあって、
そのマニュアルにペントミノを解くというプログラムが載っていた
しかし実行しても1日掛かっても回答が出ない
16ビットPC用のCで書き直したら、5分で終わった
ついでにアセンブラにしたら、1分だった
638デフォルトの名無しさん (ワッチョイ 59ad-FDlJ)
垢版 |
2024/03/19(火) 11:29:09.76ID:FLREyswN0
Perlでアルゴリズムのプロトタイプ書くおじいちゃん、まだ生きていたのか
普通の若者はプロトタイプはPythonで書くんだよな。何故ならネットにダイクストラでもなんでも落ちているから

このおじいちゃんは新しい言語を勉強出来ない人間だし、かといってプロトタイプなしで初手Cで書けるような積み上げのある猛者というわけでもない
引退した方が良いのでは?
2024/03/19(火) 11:32:03.00ID:Szfgw2D70
じゃあ、代わりに書いてあげて
2024/03/19(火) 12:27:21.10ID:h/UmP7BY0
やるならせめてc++でやれよ
わざわざcでやる意味ない
641デフォルトの名無しさん (ワッチョイ 8b2a-B9kV)
垢版 |
2024/03/19(火) 12:37:23.65ID:SMOg7wK30
翻訳先が Cなら、
Perl より Python の方がコスト(手間)高で、いっぱい損な気ガス

# ダジャレに気付かないのはダレジャ
2024/03/19(火) 14:22:26.70ID:VlZcx0wQM
計算量や使用メモリがネックになるのわかってたら最初からc++かcuda
インタラクティブかつビジュアライズして試行錯誤するときはpython(Jupyter)
643デフォルトの名無しさん (ワッチョイ 0bd0-FDlJ)
垢版 |
2024/03/19(火) 19:07:27.75ID:qnPpFeXM0
最短経路問題をCudaで解くのはむずくね?
2024/03/20(水) 02:30:26.76ID:yu5B8CqZ0
最短経路の解き方を聞かれてるわけじゃないだろ
2024/03/20(水) 10:52:31.80ID:+bbLi7EZ0
総当たりさせたらいいんだよw
646デフォルトの名無しさん (スフッ Sdb2-W6Ep)
垢版 |
2024/03/24(日) 18:06:00.35ID:UMIIXnOjd
構造体変数の宣言の初期化のとき、ヌルポインタを,{ }でくくらないと、警告が出るのですが、なぜですか? 例えばこんな具合にしないと警告が出ます

struct monster {
char name[80];
int HP, MP;
};

int main(void)
{
struct monster template = {{0}, 7, 4};
2024/03/24(日) 18:20:00.72ID:XqBtjkZY0
>>646
char name[80];に入るのはポインタではなくchar型の配列か文字列
648デフォルトの名無しさん (スフッ Sdb2-rfcW)
垢版 |
2024/03/24(日) 18:24:20.57ID:UMIIXnOjd
>>647 よくわかりました ありがとうございます
2024/03/24(日) 18:43:42.86ID:TrTyAT7D0
なにもわかってなさそうでほほえましい
2024/03/24(日) 18:46:07.25ID:TfhtohDd0
構造体云々言う前に、配列の初期化方法についてまず調べろ
651デフォルトの名無しさん (スフッ Sdb2-rfcW)
垢版 |
2024/03/24(日) 18:47:29.73ID:UMIIXnOjd
我ながら Lolです☺
2024/03/24(日) 18:57:40.29ID:9Ye9tMrz0
>>621
Perlでメモリ不足になるってことは循環参照が発生してメモリが解放されない(PerlはリファレンスカウントGC)
もしくは深い再帰でPerl管理のVMスタックが枯渇したか
どちらにしろCで書いてもメモリをバカ食いするのは間違いないから
データ構造を見直すべき
循環参照を見直す、再帰をループに変えるなどを試してみてはどうか
2024/03/24(日) 19:10:42.18ID:9Ye9tMrz0
グラフ構造を使う場合は循環参照は容易に生まれるからな
PerlのScalar::Util::weakenで変数をラップしてやる
こうするとその変数は弱参照になる
2024/03/25(月) 11:18:02.00ID:YX1noK3i0
弱参照ビオレ
2024/04/11(木) 18:10:49.56ID:h5i5y7Gi0
#include <stdio.h>
#include <string.h>

void main(void)
{
 char c[32];
 char *pc;

 strcpy(c, "JAPAN-TOKYO-OSAKA");
 pc = &c[0];

 //for(int i=0; i<strlen(c); i++, *pc++){
 for(int i=0; i<strlen(c); i++, pc++){
  printf("%c", *pc);
 }
 printf("\n");
}
2024/04/11(木) 18:12:37.98ID:h5i5y7Gi0
コメントアウトしてる方のforにしても出力結果は同じになります
*付きポインタ変数は、中身へアクセスを意味するからめちゃくちゃな文字列が出力されるはずじゃ・・・?

どうしてなの?
2024/04/11(木) 19:02:47.99ID:/0XH+klGd
あなたが書いたのは*(pc++)を意味してます
2024/04/11(木) 19:16:41.38ID:GKY1RwiV0
このソースを何という名前で保存して、何というコンパイラでコンパイルしたかとか、色々
2024/04/11(木) 20:20:43.87ID:h5i5y7Gi0
>>657
文句を行ってもしかたがない
そういうものとして納得するしかないんだろうけど、”おかしい”と思ってるCプログラマーは世界中に2億人くらいいると思う
2024/04/11(木) 20:25:30.86ID:RdqITFFi0
*も++も単項演算子で適用される優先順位がある
優先順位を意識してコーディングしないと痛い目に合う
a + b == cは想定通りだろうが、a & b == cは想定外の結果になるとかねw
2024/04/11(木) 20:54:35.96ID:eGBAyvET0
足し算掛け算の掛け算をシフトに書き換えたら上手く動かなくなって焦った
662デフォルトの名無しさん (ワッチョイ 6f2a-MjEX)
垢版 |
2024/04/11(木) 21:46:39.46ID:6HtedQOj0
>>661
え、なぜ。
2024/04/11(木) 22:53:39.83ID:/Kb1qQiM0
シフト演算子は加減算より優先度低いのにカッコで囲わなかったって事でしょ
2024/04/11(木) 23:28:45.21ID:0Tmkq/lZ0
まあ次がんばればいいよ
2024/04/11(木) 23:29:31.03ID:RdqITFFi0
シフトは乗除っぽいイメージだから加減算よりも先でいいよなぁ
ビット演算子が比較よりも後なのは完全に仕様バグだろ…
2024/04/11(木) 23:37:48.49ID:1F4I/FIC0
冴えてないときの自分のためにも、他人のためにも、なるべくカッコはつけるかな
2024/04/11(木) 23:49:41.77ID:0Tmkq/lZ0
いまさら言って仕方ない事をいちいち書くなよ
お前が次のC言語でも作って人生を棒に振ればいいだけだよ
2024/04/12(金) 00:17:11.46ID:nGLEgXOo0
>>667
便所の落書きにぶちギレw
お前の人生はいつも焦燥感に満ちてんだろうなw
669デフォルトの名無しさん (ワッチョイ df01-B3tP)
垢版 |
2024/04/12(金) 00:21:54.57ID:GtdzNQir0
>>655
後に現れたC++のiostreamがシフト演算子をオーバーロードし入出力演算子として流用するのに
好都合で、思わぬ役に立つことになったからまあ良いだろ。もしシフト演算子が四則演算子より
優先順位が高かったら、cout << 1 + 2 * 3 << endl を cout << (1 + 2 * 3) << endl と
書かなければならず面倒だった。(C++がシフト演算子を全く別の機能に流用したのは不適切
だったという意見もあるが…)
2024/04/12(金) 01:13:09.53ID:nGLEgXOo0
>>669
シェルのリダイレクトと概念が一致してるから、最初見た時は天才かよと感心したな
でも、出力の整形が激ムズなんでやっぱり駄目じゃんと気付くまではそう思ってた
671デフォルトの名無しさん (ワッチョイ e2ad-lyNC)
垢版 |
2024/04/12(金) 02:09:51.24ID:Wv2Zy+UZ0
>>656
*pc++ はまず *pc の処理をする。これで pc の差している先にある値を取り出すことになる。その次に pc を一つ分進ませる(実際に加算される値は sizeof(*pc))。
では最初に *pc で取り出した値はどこへ行ってしまうのか? それは何にも使われずにただ捨てられる。
2024/04/12(金) 07:08:32.50ID:gi41fiD00
*pc++の形はcやってたら所々で見るから否応なく慣れる
個人的にはケチくさい書き方で避けたい気持ちもあるがまぁそういう文化が根付いてるなら合わせざるを得ない
2024/04/12(金) 07:39:02.10ID:661KRJs/r
>>665
初期のCでは||が無くて論理和も|使ってたためのはず
KかRのどっちかが「後悔してるけど今さら変えられないし」とか言ってた
674デフォルトの名無しさん (スッップ Sd02-3rFQ)
垢版 |
2024/04/12(金) 12:25:07.52ID:OadUyd3Md
C言語の標準化委員はC++のほうも兼任してたりするから、ぶっちゃけC言語の改善にはやる気無しだから。
2024/04/12(金) 13:28:21.08ID:Lm13J0L60
C++もやる気無しだろ
2024/04/12(金) 14:41:57.50ID:nGLEgXOo0
C++はRustと比較されて安全性に劣るとレッテルを貼られて、どうしたもんか考えあぐねてるところだろうw
言語の拡張に対して完全に方向転換を強いられてるのは間違いない
それはCも一緒だな
2024/04/12(金) 14:53:32.51ID:nGLEgXOo0
パフォーマンスを損なわずにRustと同等の安全性を追加するか、もうこのままそっとしておくかw、の2択だろう
2024/04/12(金) 15:20:27.37ID:dUdcEEpod
>>674
もはやbetter Cでも何でもないのに、このスレでも繰り返しc++の話題出す奴居るし、やっぱユーザーも被ってるんだろな

まあCの設計の良否を他言語よりは比較的小さな差異から論じるのに有用だとは思う
おれみたいにC++は書かずともcpprefとか読んで式や文、宣言など局所的な構文知識だけちょっとある人は多かろう(ClassとかCに無い概念は読み飛ばしてて無知)

生まれた順序が逆だけど、FortranがC++とすればF言語/JuliaがCだね
大体サブセット+独自進化、標準化コミュニティ丸被り
679デフォルトの名無しさん (スッップ Sd02-3rFQ)
垢版 |
2024/04/12(金) 16:33:17.52ID:OadUyd3Md
C++は好きじゃないからC言語はもっと改善していって欲しい。
nullptr型とか入るの遅すぎじゃね?
2024/04/12(金) 22:48:41.07ID:fQv3jEzD0
C++はCの機能を保ったまま、ありとあらゆるプログラミングパラダイムを突っ込んだもの
それがベターかどうかは人によるな
ただ、Cと互換性を保ったままそこまで進化したのは奇跡に近い
2024/04/12(金) 23:16:21.33ID:pf6tTSyT0
Cは概ねC++のサブセットだからしゃーない
2024/04/13(土) 00:06:24.07ID:c7UXCLXT0
でも、Rustが安全性と性能は両立出来ることを証明してしまってから、一気に旗色が悪くなったw
今まで性能を免罪符にして、多少(かなり?)の安全性を犠牲にしてきたけど、もはや通用しない時代になった
今後どう進化するか見物だな
Cだって対岸の火事ではない
2024/04/13(土) 01:23:26.45ID:c7UXCLXT0
ちなみに、Rustは安全な代わりに書きたいコードを書けるとは思わない方がいいw
これは書いてみないと分からん感覚だ
書きやすくて安全な言語は存在しないことも証明されたw
684デフォルトの名無しさん (ワッチョイ e2ad-ZiZa)
垢版 |
2024/04/13(土) 07:18:38.29ID:SxW/5mRR0
慣れの問題では?
2024/04/15(月) 00:15:31.26ID:kwd7Pf0A0
必ず遠回りをさせられる感覚は非常にムズムズするよな
あれならgccでstack-protectorとかsanitizeとかガン盛りした方が
気分良く高効率に書けると思った
2024/04/19(金) 20:19:37.90ID:5JxGOdzk0
今日から戯れに数十年前のx86なGUIのソースをx64に移植し始めたんだが
とりあえずエラーになるGetWindowsLongだかをx64用に書き換えていったらそこそこ動いてしまって、後は文字列が関係する処理だけだ
俺が書いた過去のコードがよっぽど優秀だったようだ
やはり若い頃にソースを沢山書いといてよかった
2024/04/19(金) 20:37:53.24ID:5JxGOdzk0
x64化でちょっとsize_tの扱いで躓いたので書いておこう
ポインタが64bitだから、その差を取る場合もあるsize_tも64bitなのは理屈では理解できるんだが
明らかに64bit幅が不要な箇所でsize_tに出くわすとおいおいと思ってしまう
これはbit数を明示した型を別に定義した方がよさそうだ
ああまいったまいった
2024/04/19(金) 23:35:27.85ID:uO847wzt0
>>686
Windows1.0のexeもWindows10(32bit版)でも動くからな
64bit版は16bitコードの実行が廃止されたから無理
APIの方は割と変わってるけど、それでもちょっと直せばビルドできる
優秀なのはMicrosoftの方だなw
2024/04/20(土) 09:49:57.99ID:U6z53Ozt0
温泉旅館の増改築やらせたらMSに敵う奴はいない
2024/04/21(日) 10:27:21.32ID:Y4YQdA//0
Windows11は最初から32bit版が無いんだよな…
ポインターに64bitも必要ない
36bit(64GB)有れば十分
farとnearポインター復活しても良いよw
2024/04/21(日) 10:58:55.51ID:WM7IEXRid
win10使ってるけどOffice 97をバイナリコピーして使ってるぞ、とうとう11では動かんのか…?
主にExcel使うが関数の数は劣ってもヘルプは古い方がよく出来てて一般ユーザとしては好み、一々ブラウザ起動されてたらい回しは嫌だ
2024/04/21(日) 11:03:42.61ID:z3GhIJnT0
可変長サイズのポインターは斬新
2024/04/21(日) 13:02:16.05ID:kDNr1IJ/0
Office97は32bitだから動くでしょ
駄目なのはWindows3.1までの16bitアプリ

じぶんもフリーソフトをいくつか64bit化したけどほとんど修正してない
早めにUnicodeにしてたおかげもあるかな
2024/04/29(月) 16:02:47.44ID:JmumYEsm0
16bitアプリって、今も残ってたっけ?
2024/04/29(月) 17:53:08.72ID:Mi5d5RVO0
あえて使う人もあんまりいないだろうけど、メンテナンスが止まってる(32bit 化、64bit 化されない)ようなソフトを使いたいってことはそれなりにあることじゃないの。
メーカーがつぶれて消えたりするのもよくあることだしな。
696名無し兎と鰻の大乱闘 (ワッチョイ dffd-02Vv)
垢版 |
2024/04/29(月) 19:42:16.62ID:Yc7GJpMD0
そもそもしーげんごってなに?
2024/04/29(月) 19:53:54.99ID:D5HYHAbC0
アプリは32bitだがインストーラが16bitなのが結構あるらしい
2024/04/29(月) 20:59:16.06ID:JmumYEsm0
もしもそんなのがあったら、メチャクチャ話題になってると思うよ
699デフォルトの名無しさん (ワッチョイ dfad-b946)
垢版 |
2024/04/29(月) 22:45:20.14ID:c1TFMEcy0
知り合いにエミュレータ入れたりして凄く苦労してロータス123を動かして業務で使っている人が居る。
2024/04/30(火) 00:46:15.48ID:b4FWQSR70
使うのに手間はあるとはいえエミュレータが成熟してしまったので
かなり古いソフトウェアを動かしたいならそっちでやれと言えてしまうようになったとも言える。
Windows の互換性維持システムも結局はエミュレータをサブシステムとして
組み込んでるようなもんだしな。
2024/04/30(火) 10:07:58.44ID:XgZjmbIB0
>>697
ファーレントゥーガとかそのパターンだね
702デフォルトの名無しさん (ワッチョイ df79-V7Lt)
垢版 |
2024/04/30(火) 19:37:21.97ID:6siWZQQV0
なんで16bitの話になったのか理解不能
703デフォルトの名無しさん (ワッチョイ dfad-b946)
垢版 |
2024/05/01(水) 16:53:57.29ID:udfiR5VM0
>>686の辺りから?
2024/05/01(水) 19:51:41.60ID:nIC3qyB/0
プリプロセッサでモジュール作れるようになるとC++使わなくてもCで十分だな
もっと早めにマスターするべきだった
705デフォルトの名無しさん (ワッチョイ df79-V7Lt)
垢版 |
2024/05/02(木) 23:28:34.67ID:gN+cVuNV0
CでCOMやれって言われても困るし
逆にC++のがマシってのはその程度か
2024/05/03(金) 11:04:22.77ID:RJtMknPi0
cでもできるってのと、c++使ったほうが楽ってのでは全然意味違う
チームで混乱を招くという理由以外でのc++ディスりは、大抵理解不足によるアレルギーから来るヒスのことが多い
まあ、そういうヒス起こす人が多いからチームでは使用禁止とかになっちゃうわけだから、り繋がってはいるんだけど
2024/05/03(金) 11:08:15.33ID:9ebiuCIb0
チャンスあると自分語りを始めるのは、病気だぞ
2024/05/03(金) 11:51:54.49ID:RJtMknPi0
どういう理論だよ
普通の欲求だろ
2024/05/03(金) 12:00:23.89ID:KP5VxXzU0
普通じゃなくてガキの欲求
2024/05/03(金) 13:30:44.34ID:vhm3euJk0
リーナスはガキ
2024/05/03(金) 14:49:42.61ID:lW+ShOaq0
>>708
なわけ無いだろ
我慢ができないのはただのガキだぞ
2024/05/03(金) 16:16:10.22ID:RJtMknPi0
>>711
そうやって我慢できずに突っかかってきてるのもどうかと思うけどな…
2024/05/03(金) 16:35:03.08ID:8UCXCtC4M
linuxカーネル縛りと趣味以外でc言語使うってどういうプロジェクト?
実際仕事でそういう人いる?
組み込みでも今時c++使えるだろ
2024/05/04(土) 01:34:33.71ID:fPXjXaJw0
洗濯機や電子レンジなどは Cが最適じゃなかろうか
715デフォルトの名無しさん (ワッチョイ dfac-R43V)
垢版 |
2024/05/04(土) 01:40:48.74ID:nSEmjq+y0
メモリ構成が非常に小さいシステムの場合Cじゃない?
8bitのPICとか
2024/05/04(土) 17:05:29.45ID:VOfnZKej0
こういうの考えたんだけどどうだろう?
実用性無いだろうか

#include <stdio.h>

typedef void (*exception_handler)(void);

void register_exception_handler(exception_handler handler)
{
handler();
}

void exception_occurred()
{
printf("例外が発生しました。\n");
}

void may_throw_exception(int condition)
{
if (condition) {
register_exception_handler(exception_occurred);
}
}

int main()
{
may_throw_exception(1);

return 0;
}
2024/05/04(土) 17:59:35.95ID:pTi4k8MI0
ネタにしてもつまんない
2024/05/04(土) 18:34:27.18ID:XXil6xAz0
>>716
例外でもなくでもなくて草
Cで例外起こしたいならsetjmp/longjmpでやると決まってる
2024/05/04(土) 18:38:32.56ID:0cPYdG0t0
あれは例外なのか?
2024/05/04(土) 18:45:30.78ID:TbdOZmgm0
例外処理やりたいならsetjmpでも使えば
2024/05/05(日) 00:00:07.41ID:NN+M7fak0
>>716
「こういうの」とは何であるか説明が必要。
提示されたコードは関数 exception_occurred の呼び出しを回りくどくやっているだけで、
途中のメカニズムに意味がない。
(このコードでの使い方の範囲では。)

言葉で説明しづらいならこれが有用になるような使い方の例を示して欲しい。
2024/05/05(日) 00:01:55.61ID:5Yjpxxvd0
スタックの巻き戻しをどう実装するのか教えて欲しい
2024/05/05(日) 00:22:13.83ID:yEjzRI9b0
>>722
C の言語仕様の範囲内でやる方法は setjmp/longjmp のみ。
setjmp/longjmp を自分で書きたいってことなら
アセンブラ (またはインラインアセンブラや intrinsic 関数) を使って
スタックポインタ操作したりレジスタの待避・復旧などをやる必要があるが……。

モダンな処理系だと最適化だのなんだのの都合でスタックフレームを省略したりだとかもあるので
それらと協調しないとまともに動作しない。
たとえば gcc だと setjmp/longjmp の実体は
組み込み関数の __builtin_setjmp/__builtin_longjmp として提供されてる。
処理系自体の機能として持たないとちゃんと動作させられんのだ……。
2024/05/05(日) 00:39:05.41ID:eNHKeT630
>>713
九州大学の人工衛星・イザナミ/イザナギは、mruby だから、C 言語

ベンチャーで上場したらしい
2024/05/05(日) 03:04:42.71ID:vcr/Jmru0
Windows処理系の場合SEHがあるからsetjmp/longjmpをわざわざ使う事ないよ
というか外部ライブラリ等から例外を受ける場合SEH必須だよ
2024/05/13(月) 23:49:14.95ID:Wt06b2vO0
名古屋にスターキャットというケーブル会社があるんですが、この名前もしや
2024/05/14(火) 09:33:08.58ID:KpGXlSyl0
strcat()?
728デフォルトの名無しさん (ワッチョイ 312a-qYA6)
垢版 |
2024/05/14(火) 10:22:08.21ID:qHkm4M1L0
strfry(): スターふりゃー
2024/05/15(水) 11:58:16.33ID:MTx/QSx90
strをスターって読んでる奴は上達しないw
2024/05/15(水) 12:01:57.70ID:TrHxhldY0
strstr
これなんて読んでます?
2024/05/15(水) 13:36:27.56ID:H3ZUTeXN0
もとはstringなのは置いておいて
英語の発音だとストラの方が近い
まスチョラって感じだが
スターは無理だな
732 警備員[Lv.6][新初] (ワッチョイ 7b5f-7UPu)
垢版 |
2024/05/15(水) 21:51:01.03ID:QNLWEWL40
>>731
英語はラテン語系じゃないから、最後にaの発音は付けないよ?
733デフォルトの名無しさん (ワッチョイ bd2a-QxKS)
垢版 |
2024/05/15(水) 22:53:44.49ID:eM13T72T0
>>732
敢えて「らりるれろ」で表現すると、どれに近いの。
2024/05/15(水) 23:11:37.93ID:sr9WdMcN0
https://m.youtube.com/watch?v=oVDUHBj3Mb0
↑ここで聞くとストラレンだな
2024/05/16(木) 01:19:13.34ID:i/RRcUKc0
そもそも声に出して読む機会とかある?
2024/05/16(木) 03:34:18.28ID:p7AzABUa0
C言語を256倍使う本にコードを音読せよと書いてあっただろ
2024/05/16(木) 09:36:35.60ID:WDlUvNVq0
会社などで開発してれば「ここのストラレンが~」とか言うだろ
2024/05/16(木) 11:39:10.81ID:m+e5wcl90
ぼっちなんだよ、察してやれw
2024/05/16(木) 15:14:36.29ID:/s0PD0VX0
俺はstrをストロと読んでる
ストロレン
ボッチナノデモンダイナイ
2024/05/16(木) 17:02:21.44ID:cRCb9Dg/0
stdio.hはスタジオだよな?
741デフォルトの名無しさん (スフッ Sd2f-aIi2)
垢版 |
2024/05/16(木) 17:18:21.50ID:YR1de7Utd
🤣🤣🤣
2024/05/16(木) 17:24:24.63ID:VZS5byuk0
前は
今はすたっどあいおーって読んでる
743デフォルトの名無しさん (スフッ Sd2f-aIi2)
垢版 |
2024/05/16(木) 17:36:45.28ID:YR1de7Utd
ストゥーディオってよんでる
2024/05/16(木) 19:31:00.84ID:s6fDlAb80
「そのすたーちゃー(strchr)使うのやめろよ言うまでもなくすたーあーちゃー(strrchr)もな」って言うかも
今更C言語の話なんてしないけどストラ云々なんていっても伝わらんのは判ってる
2024/05/16(木) 20:34:50.38ID:2k3CZcmN0
普通に
エスティーアールレン
エスティーアールキャット
エスティアールエスティーアール
って言ってる

stdioは
エスティディーアイオー
2024/05/16(木) 21:06:22.53ID:WDlUvNVq0
ぶっちゃけローマ字でもバンドの名前でもstrをスターなんて読むこと無いだろ
2024/05/16(木) 21:38:17.53ID:cRCb9Dg/0
KAT-TUN かっつん
ONE OK ROCK おねぇオッケーロック

正しく読むのむずすぎだろ
2024/05/16(木) 22:54:42.14ID:WDlUvNVq0
わかったアールだからアーって発音するのか
そんなん聞いたことないな
どこの界隈で言ってるんだ

それにstrならエスティアーになるはずではw
2024/05/16(木) 23:16:18.01ID:V7nVgN2X0
strlen ストリング レン
strcat ストリング キャット
strstr …

stdio スタンダード アイオー

strcspn 使い方すら分からない
2024/05/16(木) 23:30:01.85ID:m+e5wcl90
>>748
つうかrはアーって発音すんだよ
まさかvをブイとか言わないよなw
vはヴィーだよ
2024/05/16(木) 23:36:51.27ID:m+e5wcl90
>>748
で、partyをパーリーと発音するように、tでアーと続くからラと発音してると思われる
ググるとフラップTと言うらしいな
2024/05/17(金) 07:01:02.01ID:FuakfFss0
>フラップT は、 t が前後を母音に挟まれており、かつ、t を含む音節にアクセントが置かれていない場合に起こります。

全然ちゃうやんw
母音に挟まれてないしアクセントはターにあるだろ
2024/05/17(金) 10:20:21.99ID:bHnKBI1y0
こんなに引っ張る話題でも無いと思うんだがな
2024/05/17(金) 11:40:38.90ID:m6sDsbO0M
この場合フラップTでなく連続子音ルール
2024/05/17(金) 12:32:56.71ID:iwOPo+Yod
ああ、それで、パリピーなのね
2024/05/17(金) 15:11:05.80ID:FuakfFss0
英語を自分ルール作って勝手に読んでる奴は暗黙の合意をわかる能力が低いということ
これはコンピュータ言語でも同じだ
自分で標準ライブラリ作り直すくらいの覚悟ならいいが中途半端に自分流突き通す奴は上達しない
2024/05/17(金) 18:00:34.84ID:7PzHxmpJ0
>>756
突然どうしたw
tはラと発音される事が多々ある
適当にググったからルールの呼称を間違えたようだ
それだけの事だろ
758デフォルトの名無しさん (ワッチョイ e3ad-739I)
垢版 |
2024/05/18(土) 06:19:27.02ID:s0SjtLL90
r の発音が難しい。
759デフォルトの名無しさん (ワッチョイ 452a-qYA6)
垢版 |
2024/05/18(土) 08:21:14.75ID:R6I0+Baq0
r の発音が難しいのであーる
と語尾を整えて欲しかった。
760デフォルトの名無しさん (オッペケ Sr6f-9tvc)
垢版 |
2024/05/18(土) 10:16:08.61ID:+7oj04xGr
Lit it GO❢ レリッゴ〜ゥゥ
2024/05/18(土) 10:25:11.31ID:ELr7G7Ab0
Let it ... DIE!

ttps://letitdie.jp/common/age-verification/index.html
762デフォルトの名無しさん (スフッ Sdba-4PJT)
垢版 |
2024/05/22(水) 17:33:39.89ID:I9OEeRHUd
live and let die
763デフォルトの名無しさん (ワッチョイ 4e2a-RP0s)
垢版 |
2024/05/22(水) 17:56:18.72ID:nvbXc7oi0
今夜は Beat It ビレー
今夜は Eat It イレー
2024/05/22(水) 19:05:55.70ID:vvg7DOyN0
Get Up! ゲロッパ!
765デフォルトの名無しさん (スフッ Sdba-YsZb)
垢版 |
2024/05/23(木) 17:32:53.32ID:JZ6dG1qId
静的記憶域期間をもつ、文字列リテラルの正体をおしえてください。
2024/05/23(木) 17:55:28.11ID:hB8qN6AJ0
三つ子の魂
767デフォルトの名無しさん (スフッ Sdba-4PJT)
垢版 |
2024/05/23(木) 18:06:03.63ID:JZ6dG1qId
文字列リテラルは、アドレス(ポインタ)でもあるんですよね?
2024/05/23(木) 18:28:52.39ID:hB8qN6AJ0
>静的記憶域期間

この表現って誰に教えて貰いました?
769デフォルトの名無しさん (スフッ Sdba-4PJT)
垢版 |
2024/05/23(木) 18:35:49.81ID:JZ6dG1qId
BOHYOH
2024/05/23(木) 18:44:12.33ID:hB8qN6AJ0
じゃあ、ぼうようさんに聞いてみたら良いですよ
771 警備員[Lv.1][新芽] (ブーイモ MMba-igBi)
垢版 |
2024/05/23(木) 21:57:15.72ID:n5zuU8wjM
どんぐり
2024/05/23(木) 22:45:21.26ID:wLgFLImH0
>>767
文字列リテラルの型は文字の配列。 つまり型名で言えば char[ほにゃらら] ってこと。
配列がその先頭要素を指すポインタに (一部の例外を除いて) 暗黙に型変換されるルールによって
式の中ではポインタとして使えるけど文字列リテラルというオブジェクトの実体は配列。

配列と関数はちょっと変則的な暗黙の変換があるので
そのあたりはルールを丸暗記してもらうしかしょうがない。
2024/05/23(木) 23:35:07.27ID:8Jz7JTgj0
ハイレグの配列
2024/05/24(金) 02:00:54.97ID:1vUdw0qC0
i386の
msg: db "hello"

ary: dd 65, 66, 67
はどっちも配列!
故に文字列リテラルも配列か
2024/05/24(金) 09:15:29.55ID:cOO1+HpN0
C固有の概念だから気をつけろ
2024/05/24(金) 10:06:34.84ID:TTt9EBlM0
char moji[]="HELLO";

はBASICの

100 RESTORE DATA_HELLO:READ MOJI$
110 *DATA_HELLO
120 DATA "HELLO"

ってイメージ・・・などと意味不明な(ry
2024/05/24(金) 10:36:00.42ID:eLGTNdu60
また始まった
778デフォルトの名無しさん (スフッ Sdba-4PJT)
垢版 |
2024/05/24(金) 15:33:05.28ID:aHlZJ4Itd
友達が二分探索のアルゴリズムを組んでコードがコンパイルを通ったんだけど、実行するたびに、ターミナルの画面が真っ白になるらしい。原因として考えられるのは?やはりメモリ関連のミスですか?
2024/05/24(金) 16:40:34.12ID:eLGTNdu60
これだけの説明で原因を特定出来たら、そいつは神かもしれない
2024/05/24(金) 17:34:05.38ID:IzCZdmcl0
ターミナルに何か表示しようとしてんでしょ?
2024/05/24(金) 17:38:30.02ID:eLGTNdu60
>ターミナルの画面が真っ白になる

プログラムの動作結果でこういう現象は起きるものなのか?
動作環境はなんだろう。
2024/05/24(金) 17:55:30.30ID:IzCZdmcl0
とうせバイナリ表示してansiエスケープになってんだろ
2024/05/25(土) 14:22:00.60ID:A9XEYyvw0
その二分探索のアルゴリズムもバグってそう
784デフォルトの名無しさん (スフッ Sdba-4PJT)
垢版 |
2024/05/25(土) 16:09:02.78ID:CiUgnilLd
>>778ですけど、ネットで知り合った外国人なので、詳しい開発環境やら聞いているんですが、返信がないんですよ。きっと半狂乱になって格闘してますよ
2024/05/25(土) 19:26:28.84ID:3gPIs41E0
端末の色が白色に設定してあるというオチも
2024/05/25(土) 22:55:22.41ID:k75isHlnM
>>784
外国人このスレに呼べよ
英語に自信がある猛者が揃ってるぞ
787デフォルトの名無しさん (ワッチョイ 512a-fxxY)
垢版 |
2024/05/26(日) 07:40:51.55ID:zlKwgYkF0
英語に自信のある猛者がスターキャットやスタジオヘッダーと言っているスレなのか。
788デフォルトの名無しさん (スププ Sdb3-GD45)
垢版 |
2024/05/26(日) 08:06:44.89ID:ltnJV6ivd
>>787 🤣
>>786 was trying to write a binary search algorithm in C using functios..
The compiler was okay but whenever I tried to run it, the terminal was just blank

上記のチャットを受信してから、コード、コンパイラ、OSを教えてくれ、って送信しても返事がないんですよ
2024/05/26(日) 08:40:30.71ID:6V/Qyiv50
find

発音は?
2024/05/28(火) 11:54:56.78ID:m/TaCjt00
もう他所でやれよ
2024/05/29(水) 00:05:52.98ID:KvRstwV+0
そりゃネットで知り合ったやつにパソコンの情報教えるってリスキーだからな
聞いてるお前もリテラシーないよ
2024/05/29(水) 00:39:11.03ID:KkrhLjkN0
情報経って、個人情報ではないぞ
リスキーなら、そもそもそんな話をネットで言うなよ
2024/05/29(水) 14:08:03.71ID:uKjwQH9U0
このスレ老人の集いみたいなとこあるからな
実名住所晒してたインターネット黎明期までのリテラシーしかないんだろ
2024/05/29(水) 15:53:47.09ID:KkrhLjkN0
ここはAIちゃんの会話練習用スレです
2024/05/29(水) 20:45:52.14ID:/PhbAFJr0
質問です。
現在書籍の方の苦CでC言語の基礎を勉強しているのですが、なかなか基礎が身についた感じがしません。
どのように勉強すれば、C言語の基礎が身につけられるのでしょうか?
2024/05/29(水) 20:54:03.33ID:uKjwQH9U0
今更C言語を勉強する意味について、俯瞰的な視点で考える必要がある
さてあなたはどこで道を間違えたのだろうか
2024/05/29(水) 21:03:36.99ID:KkrhLjkN0
昔恋しい下町の 夢が花咲くC言語
よってらっしゃい よってらっしゃいお兄さん
2024/05/29(水) 21:57:23.97ID:Z07E+OMI0
組み込みやれ
Cの真価はそこだ
2024/05/29(水) 22:14:14.46ID:HC6Aa1bCH
>>795
基礎は反復練習が必要
つまらないけど
筋トレだと思って毎日十分、コードを暗記するつもりで写経すると良い
おすすめはデータ構造とアルゴリズムのコード
2024/05/29(水) 22:31:32.45ID:/PhbAFJr0
>>798
お返事ありがとうございます。
組み込みはとりあえずArduinoをやれば良いのでしょうか?
2024/05/29(水) 22:34:33.30ID:/PhbAFJr0
>>799
お返事ありがとうございます。
反復練習の部分についてなのですが、苦Cには各章ごとに練習問題がありますが、それを繰り返しやるのでも良いのでしょうか?
2024/05/29(水) 22:49:52.71ID:JqzIQ6A/0
>>801
それでもいい
飽きたらネットで初心者向けのサンプルコード探してそれを写経すると良い
おすすめは文字列処理
2024/05/29(水) 23:01:26.55ID:2XgMrE/G0
まさにその通りで、勉強するものでなく、練習するものだと思います
まぁ、学問全体そういうものかもしれませんが
2024/05/29(水) 23:06:02.35ID:5eQ7ob620
身に付くまでやれば身に付くという話だわな。

技能を身に付けている人は自分なりに小さなコツをたくさん発見したりはしてるかもしれんけど
この通りやれば簡単に身に付く!みたいな道筋をたどってるわけではない。
たくさんの本やコードを読んでたくさん書いてみるしか仕方ない。
2024/05/29(水) 23:18:35.14ID:KkrhLjkN0
意外と覚えるのは、間違えて、その間違いを見つけたとき
だから、数多く間違える事はとっても大事
2024/05/30(木) 01:22:37.42ID:OugzA8kD0
つーかなんか作れよ
でないと身につく訳ねーじゃん
何で本ばっか読んでるんだ
2024/05/30(木) 02:13:12.47ID:J7hltZvZ0
C は間違ったコードを書いてもエラーとして検出されない (そしてわけのわからんことになる) ことがよくあるから
あまり極端に知識が不足する状態でいきなりコードを書き始めるというのは良くないと思うが、
ある程度に知識を入れたら自分で考えて書かんと身につかんというのは確かにそう。

たとえばこうやって日本語の文章を書くときに日本語の文法を意識しないでしょ。
言語は当たり前のように使えるスタートラインなのでそこでいちいち考えない。
(引っかかりを感じて仕様を確認することもそれなりにはあるけど。)
考えなくてもスッと出てくる程度に身に付けるには実際に使って訓練するしかない。
2024/05/30(木) 02:50:33.66ID:/D+F+QEs0
Cでなんか作れって拷問かな
2024/05/30(木) 10:28:25.36ID:lHGDlsvcM
言語を学ぶことが目的になってるやつは伸びない
2024/05/30(木) 10:41:24.14ID:w2JON48l0
どうしたら伸びるか、その道を示してやれ
2024/05/30(木) 11:22:03.54ID:wErc8vLa0
Aiに聞きながら作る
アホな俺でもjaascriptでたくさんスクリプト作れるようになったぞ
812デフォルトの名無しさん (ワッチョイ 492a-E0dj)
垢版 |
2024/05/30(木) 11:30:32.09ID:7kQSV4uh0
枝ぶりの良い木に紐をかけ、首でぶら下がると、背が伸びるとか。
昔は、誰かの思いついた最強の仕様書に苦しむと、背を伸ばしたそう。
2024/05/30(木) 12:22:02.95ID:zKWN4QJA0
やりたいことがあって、その手段としてC言語を選んで学んだので。
けど今の環境だと手段が山ほどあるからCでなきゃいけないって理由が無いとすぐグダりそう・・・。
2024/05/31(金) 00:27:30.25ID:PLb0hov90
>>795
>書籍の苦Cで、C言語の基礎を勉強しているのですが
この本はやってみた系の本でしょ。
学ぶ内容が薄い

Ruby の女神・池澤あやかが言ってるけど、
大学のC の授業は、99% 挫折する。
Ruby on Rails みたいに、すぐウェブアプリ・データベースが動かないでしょ。
正常に動くまでに、ポインターで数年以上無駄にする

だから初心者はRails一択。
筑波大学も使っている、Railsチュートリアルのサイトで、
古いバージョンのRails 5 なら、無料で読める

まずこれでウェブアプリの作り方や必要な技術を学ぶ。
まずアプリの最終形を知っておく事が大事

文法やポインターが難しいCなどは、
アプリの作り方を知っている香具師がやるべきもの。
初心者じゃ、数年経ってもアプリを作る所までたどり着けないから。
だから挫折率99%

プログラミング学習は難しくて無駄だったという印象だけが残る。
機械語・アセンブリがそう。
こういう機械的な事を人間が学んでも無駄でしょ
2024/05/31(金) 02:40:41.83ID:jm23ZiA70
プログラミングは文学じゃないからw
機械と会話するのがプログラミング
何を馬鹿な事言ってんだと思うかもしれないが、それは先人が道を切り開いたから、ただ歩くだけで済んでる
で、そういう奴に限ってローコードやノーコードを馬鹿にすんだよなw
いや、行き着く先はそこだから
でも、悲観することは無い
本物のプログラマーはそのシステムを作る側になれるから
2024/05/31(金) 03:43:04.73ID:V0zCAM7Od
キチガイに便乗するのは嫌だけど初心者にいきなりCはあかんやろ…
2024/05/31(金) 06:46:32.54ID:6wDcHk690
Cが難しいっては勘違い
むしろ単純だろ
2024/05/31(金) 07:43:01.19ID:dWGmqWrZ0
>>802
ID:PhbAFJr0です。
お返事ありがとうございます。
分かりました。とりあえず、まずは練習問題を繰り返しやってみようと思います。
アルゴリズムとデータ構造のコードについてはネットで調べてみたところ少し興味を持ったので、練習問題が完璧になってきたタイミングで取り組んでみます。
ありがとうございました。
2024/05/31(金) 07:52:13.12ID:dWGmqWrZ0
>>814
お返事ありがとうございます。
苦Cはやってみた系なのでしょうか?
一応ネットで調べてみたところ入門書であると書かれていたため、自分には丁度良いかなと思っていたのですが。
Railsについてはよくわからないので調べてみます。
ありがとうございます。
2024/05/31(金) 13:12:45.97ID:iuwMWJfd0
>>819
「苦しんで覚えるC言語」は仕様の細部を積み上げて理解しようとする本。
十分に解説しきれているかどうかはともかくコンセプトとしてはそういう感じ。
「やってみよう」タイプの本ではなく、プログラミングを始めるまでが長いところが苦しいんだ。
苦しい分だけ深い理解はできる。
よくある「簡単にわかる」系の本に対するアンチテーゼだと思う。

実践は実践してみりゃいいんだから本は理屈で支えるべきと私は考えていて、
その点からは好ましい入門書だと思う。
でも読むだけでは出来るようにはならない。
2024/05/31(金) 13:17:09.19ID:p06zXet70
厳しいことをいうと、Cで嫌悪してるなら、業界に向いてないから
2024/05/31(金) 13:45:00.76ID:Pm+5ZvF0M
練習問題を繰り返す意味がわからんな
プログラム言語なんて所詮レゴブロックみたいなもん
ルール覚えたら後は自分で何作るかだろ
2024/05/31(金) 13:45:34.35ID:1P0Bh2ql0
学び直しに「苦C」読んでみるかな…
2024/05/31(金) 15:20:39.69ID:lylFHNFS0
Cはマニュアルトランスミッションと言える
今はスポーツカーですらオートマで運転出来るが、Cを知らないというのは、プロのレーサーがオートマしか扱えないと言ってるに等しい
オートマ限定の自称プロがコードを書いてるのが現状
2024/05/31(金) 15:40:53.12ID:QxMPM6Rv0
組み込みおじさんが真のプロというわけでもないし
2024/05/31(金) 15:45:23.86ID:s7aJNLVjM
解きたい問題に対して適切な言語選ぶだけの話
cはマニュアル車とか的はずれ
2024/05/31(金) 16:15:34.28ID:W3K/8bzed
マニュアル車は的外れだと思うけど、コンピューターでメシ食おうとしてる人間がCと言うかコンピューターの仕組み知らないのはどうなんだ
828デフォルトの名無しさん (ワッチョイ 512a-fxxY)
垢版 |
2024/05/31(金) 16:16:04.56ID:yeMi3AXu0
そう、Cは暴走するから寧ろAT車。
2024/05/31(金) 16:48:18.35ID:s7aJNLVjM
>>827
コンピューターの仕組みって言っても幅広いし全部知ってる必要なんてない
自称C言語使えますってやつでもキャッシュ最適化なんてできないやつがほとんどだろ
2024/05/31(金) 17:06:33.21ID:W3K/8bzed
別にCPUやらOSやら設計できるレベルの知識持てとは言わんけどポインタ理解できないのでC使えませんとか言うレベルの人に仕事任せたいとは思えん
2024/05/31(金) 17:16:19.12ID:+h6xorGU0
本題と関係のないところで評価してしまうのは日本人の悪いところだな
2024/05/31(金) 20:08:51.76ID:C645u0p+0
言語としてCがシンプルで学びやすいと思うけどなあ
2024/05/31(金) 20:17:02.02ID:lobthN5Hd
流行りのPythonやJavAでも良いけどさ
Cのイロハくらいは理解しておいた方が良いよな
色んな言語のベースになってるし
何よりメモリアドレスやらの理解が深まる
2024/05/31(金) 20:52:38.82ID:9XRoqY5Up
Cは純粋にコンピュータの知識でイケるけど
最近流行りの高級言語は余計な概念まで覚える必要があるからなぁ
2024/05/31(金) 21:40:32.37ID:TouRjKKE0
>JavA
なんかかっけー言語来た
2024/05/31(金) 22:26:34.52ID:LsNESqr60
Cがマニュアルというのは的外れ言ってんのは知ったか野郎だろ
Javaや比較的Cに近いGoと根本的に違うのはメモリ管理だろ
Cはオブジェクト指向をサポートしてないからそれは除外するとして、それ以外の違いはメモリ管理って事
手動でするか自動(ガベージコレクション)でするかの違い
手動ですれば効率が良くなる所も同じだ
2024/06/01(土) 01:04:12.97ID:2QHa2LtDH
>>818
Cはメモリ管理が自前だからマニュアル車だな
俺はオートマ限定だけど
2024/06/01(土) 01:29:42.17ID:WXUcJNXk0
gccで、今風のアトミックな変数処理って何を使うの?
テストアンドセットとかインクリメントとか
2024/06/01(土) 01:31:27.49ID:DQg5mZM+0
若葉マークというか、枯れ葉マークというか・・・
2024/06/01(土) 03:47:15.85ID:Pz0ykI9j0
>>838
C11 以降には _Atomic キーワードがあって型指定子もしくは型修飾子として使える。
stdatomic.h には関連した型やら関数やらがある。
仕様としてはオプショナルなので提供していない処理系はあるが GCC はサポートしてる。

実体を辿るとビルトイン関数だからそれを直接使ってもいいけど
言語仕様にある範囲で書けるならそのほうが現代的なんじゃないかな。
2024/06/01(土) 05:42:34.76ID:GcLNDseM0
>>809
プログラマ最上階級の形式言語屋は言語を学ぶ事自体が目的だけどめっちゃ伸びるだろ
2024/06/01(土) 08:50:39.21ID:EbWIxJBI0
>>818
アルゴリズムとデータ構造とか、
プログラミングのお題スレの問題などは、
それこそRuby で学ぶ・作るべき

ガベージコレクションがあるから、ポインターでメモリの事を考えなくてよい。
C/C++, Rust など、メモリを特別に扱う言語は、
仕事で給料をもらいながら仕方なくやるもの

趣味でやるものじゃない。時間の無駄。
特に初心者には言語の文法よりも、
アプリを作る時に、どういう手順・技術が必要なのかとか、全体像が大切。
細部を勉強しても、その言語の仕事をやらなければ意味ないから

全てのシステム・アプリに共通する事を勉強する方が、知識を転用できる。
それがRuby on Rails。
最も有名な基礎となるフレームワーク

ループ処理であるEnumerable の所を見れば、どういう感じでアルゴリズムを書くか分かる
2024/06/02(日) 10:36:51.32ID:/kmCAD/j0
>>842
お返事ありがとうございます。
ID:dWGmqWr20です。
現在はC言語をやっているのですが、いずれC++をやりたいと思っているのでRubyは興味が持てたら試してみたいと思います。
ありがとうございます。
2024/06/02(日) 22:38:42.40ID:+AIp94K50
Ruby勧めてくるやつはもれなく地雷
2024/06/02(日) 22:54:32.70ID:0MnNF0Gg0
そんなこともわからない>>843はダメだな
2024/06/03(月) 00:48:58.09ID:oYPTQzXH0
Ruby の構文解析器が巨大なのは有名な話だろう。
素朴な C コンパイラの三倍くらいの大きさはある。
それだけ複雑な文法ということだ。
Ruby が言語の細部を学ばずに扱えるものであるかのような意見に対しては受け入れがたい。
メモリ管理については (入門者が) 後回しにするというのはそれなりに納得のいく意見だけれど。

人によっては元々の感性に上手くはまれば少しばかり複雑でも楽に自然に使えることもあるし、
Ruby が多くの人にそうなのかもしれないけど客観的には比較的複雑な文法を持ってるよ。

そういった合うかどうかを脇に置けば理解の助けになるのは単純に知識の分量で、
分量に圧倒されずに学習し続けるのはモチベーションによるところが大きい。
やりたいことやりなよ。
2024/06/03(月) 01:38:36.16ID:aE7W3wBo0
プログラム板で一番嫌われているのが Ruby
その理由をよく考えてから人に勧めて下さい
2024/06/03(月) 02:06:18.02ID:q/07Ajy70
Matzは言語オタクかもしれんがCSの教養が感じられない
だいたいPerlの命名真似てRubyとか発想がクソダサい
849デフォルトの名無しさん (ワッチョイ 152a-fUCz)
垢版 |
2024/06/03(月) 03:07:28.76ID:oHlmHzRo0
だいたいBの命名真似てCとか発想がクソダサい
2024/06/03(月) 11:50:29.84ID:21u+58W30
そりゃ、Ruby はオブジェクト指向でクラスもある。
だから、クラスを派生させるだけで、シンプルに書ける。
つまり、コンパイラが頑張っているから、開発者は簡単に書ける

C では、そんな短時間で動くアプリは作れない。
開発時間のほとんどが、ポインターとメモリ確保・解放でバグる言語

既に、慶応卒のRubyの女神・池澤あやかが言ってる。
大学でのCの授業は、99% 挫折すると

授業料を損した挙句、プログラミングが嫌いになるだけ。
授業を受けた生徒が言ってる

結局、彼女は山陰地方の合宿で、Ruby on Rails を学んだ。
筑波大学もRails チュートリアルを使っている
2024/06/03(月) 12:02:04.60ID:P8rXJxjs0
95年あたりに大学の情報工学科入ったら
Pascal、C言語、Fortranの授業が必須科目だったわ。
OSはDOS(Win3.1インストール済み)とUnixだった。
2024/06/03(月) 12:03:10.35ID:Ffe49uvh0
Cでコード書くと必ずバグると思ってるアホw
2024/06/03(月) 12:16:52.25ID:Ffe49uvh0
ちなみにRubyはほとんどCで書かれてるぞ
だとするとRubyはバグだらけってことだなw
2024/06/03(月) 12:19:23.85ID:Ffe49uvh0
そんなにメモリを管理したくなければ、Boehm GC使えば良いだろ
malloc→GC_MALLOCに置き換えるだけ
RubyもGCを使ってるからCで書いてるコードにメモリを管理するコードはほとんど無い
2024/06/03(月) 12:45:46.35ID:qNgYNwPE0
RUBYならRustを選ぶけどなぁ
2024/06/03(月) 13:56:08.03ID:SdyTtN0bM
>>849
B言語とC言語は誰が作ったか調べろよアホ
2024/06/03(月) 14:08:20.29ID:aE7W3wBo0
https://mevius.5ch.net/test/read.cgi/tech/1555162340/

Rubyについての議論はこちらでどうぞ
2024/06/03(月) 14:18:14.33ID:Ffe49uvh0
>>849
D言語の悪口はそこまでだw
859デフォルトの名無しさん (ワッチョイ caad-6Hk5)
垢版 |
2024/06/03(月) 15:25:13.77ID:yy1qDNYs0
A〜Z言語
https://sites.google.com/site/sappariwiki/a2z-languages
2024/06/03(月) 15:59:23.98ID:3hY3UrlC0
結論
終わったRuby関わってはいけない
2024/06/03(月) 16:06:27.33ID:aE7W3wBo0
数百行程度のC言語プログラムだと、いきなり書き始めることがあって
書いてる途中で、「あ、いけね、これも」って直しが入ったりしていた
そうすると、エリア不足でメモリ破壊したり、初期化忘れで値が不正になったり
それはそれで楽しかったな
2024/06/03(月) 17:08:27.38ID:X5avmCbk0
Cは人類には早すぎた
2024/06/03(月) 17:13:07.33ID:aE7W3wBo0
モノリス君、100万年ぶりだね
2024/06/03(月) 17:23:23.14ID:TLGhGp8o0
Rubyガイジは教祖をKENTAから変えたのか?
2024/06/03(月) 19:24:53.57ID:I+TVoXo/0
>>862
人類ではなく、バカ犬共だよ

世の中、とんでもないバカ犬がいるからな
866デフォルトの名無しさん (ワッチョイ caad-6Hk5)
垢版 |
2024/06/03(月) 19:39:47.69ID:yy1qDNYs0
はじめての C
2024/06/03(月) 19:46:48.96ID:aE7W3wBo0
初めてのCは、どうだった?
868デフォルトの名無しさん (ワッチョイ c12a-+5RJ)
垢版 |
2024/06/03(月) 22:01:50.99ID:uc7P5jee0
C調言語に御用心
2024/06/04(火) 04:27:20.80ID:x3r0yQzfH
C言語上のアリア
870デフォルトの名無しさん (ワッチョイ 9d4d-HpFF)
垢版 |
2024/06/04(火) 07:48:30.99ID:YQQ4Gdo/0
かきを最新AIに重箱の隅をつつく用意尋ねましょう
全ての電磁波は強い低周波も高周波も被爆する?
電磁かいが強い場所は20Hzと55Hzは磁気閃光これも被爆している.?
音波も強い場合は被爆する?
※自然界の化学科学の観測結果論文と人間の人工物で可能な化学と科学論文を読み込ませておく
是者と校舎を別々で回答する用意する
さらに制度を挙げるなら
グレーゾーンの論文をできるともいえるしできないともいえる用意認識させる

現在の科学が正しいのならなら電磁波攻撃はこのグレーゾーンの論文を使用しているので逃亡できている?

統合失調症電磁は音波なら周囲の者被爆している!?
寿命が短いのと免疫力低下起きて当然
871デフォルトの名無しさん (ワッチョイ 4a65-HpFF)
垢版 |
2024/06/04(火) 20:02:38.17ID:JvLx0o4/0
GPT4-Vの100分の1のサイズで同等の性能を誇るマルチモーダルモデル「Llama 3-V」が登場、トレーニング費用はたった8万円
2024年05月29日 14時00分
OpenAIがサム・アルトマンCEOを含む「安全・セキュリティ委員会」を設置、さらにGPT-4後継モデルのトレーニングを開始
2024年05月29日
「毒杯飲む直前どんな気持ちだった?」ソクラテスと対話できるAIを開発!
2024.06.04
※対象者【被害者】そっくりの返答が可能
たった数秒の音声データから音声合成が可能な「VoiceCraft」
2024年04月16日 07時00分
OpenAIがわずか15秒の音声からクローン音声を生成できるAIモデル「Voice Engine」をリリース
2024年04月01日
会話相手を数秒見つめて声を登録するだけでその人の声だけを聞くことができるAIヘッドホンシステムが開発される
2024年05月30日
※対象者の声を個別に録音
2024/06/07(金) 12:13:02.56ID:UxfjOjokd
>>856
C++「」
C#「えへっ」
873デフォルトの名無しさん (ワッチョイ 152a-+5RJ)
垢版 |
2024/06/07(金) 12:43:37.59ID:q6BY+Kco0
C-- (マイナス) ってあるのかな? とググると、あった。
ttps://github.com/tctsigemura/C--

C-1.0 (マイナス1.0) は当たらなかった。
874デフォルトの名無しさん (ワッチョイ 4a01-HpFF)
垢版 |
2024/06/07(金) 12:50:45.39ID:tQZH7Tnk0
グーグル、資料のわからないところを最新AIに質問できる「NotebookLM」日本版公開
https://ascii.jp/elem/000/004/202/4202481/
875デフォルトの名無しさん (ワッチョイ 6acd-V++I)
垢版 |
2024/06/07(金) 21:47:45.33ID:8MnTJRoZ0
>>873
B言語を知らないのか?
2024/06/07(金) 21:49:19.50ID:hKLycayJp
コンピュータ言語はAから始まったからなぁ
2024/06/07(金) 21:49:19.50ID:hKLycayJp
コンピュータ言語はAから始まったからなぁ
878デフォルトの名無しさん (ワッチョイ 6acd-V++I)
垢版 |
2024/06/07(金) 22:05:21.69ID:8MnTJRoZ0
48歳だが、いまだにAも経験したことがない。
2024/06/07(金) 22:27:33.19ID:0mzvmJ6U0
人生色々、プログラマも色々
880デフォルトの名無しさん (ワッチョイ 6acd-V++I)
垢版 |
2024/06/07(金) 22:35:00.49ID:8MnTJRoZ0
>>879
小泉進次郎はセクシー
2024/06/08(土) 00:52:43.66ID:tLyyH4Tg0
>>878
Aは母ちゃんが最初だろw
2024/06/08(土) 09:20:14.39ID:Kcr3cAzIa
D:ぼくを忘れないで
883デフォルトの名無しさん (ワッチョイ 4a88-HpFF)
垢版 |
2024/06/08(土) 10:46:58.37ID:TRqvICLK0
「毒杯飲む直前どんな気持ちだった?」ソクラテスと対話できるAIを開発!
2024.06.04
リコーと理研、技術の実用化の“兆し”を察知するアルゴリズムを開発
2024/06/05
グーグル、資料のわからないところを最新AIに質問できる「NotebookLM」日本版公開
2024年06月06日
2024/06/08(土) 10:58:03.36ID:QPPnom480
認知するから、住所氏名連絡先電話番号をここに書いて
2024/06/08(土) 15:11:45.50ID:tLyyH4Tg0
A B Cは知ってるがDが何なのか分からん…
2024/06/08(土) 20:12:38.72ID:nTIq188V0
電子工作やってる人いる?
2024/06/08(土) 20:40:02.81ID:k3Jnk/Aj0
いない
2024/06/08(土) 23:06:51.81ID:nWnWQxaC0
>>886
仕事でやってますよ
2024/06/08(土) 23:13:26.33ID:nTIq188V0
>>888
モーターが回ってぐるぐるアームが動いたりカパカパ蓋が開いたりするギミック作りたいんだけどArduinoの延長線上にありますかね?
2024/06/08(土) 23:28:20.49ID:k3Jnk/Aj0
ない
2024/06/08(土) 23:45:46.12ID:nWnWQxaC0
>>889
モーター扱ったことないですけど、モーターを動かすサンプルはarduinoにあったと思いますよ。
2024/06/09(日) 00:13:57.86ID:kxK960g50
ラズパイ辺りでやってそうだが、流石にスレ違いだろ
2024/06/09(日) 01:18:53.58ID:bthWHIYm0
制御対象の特性を理解してないとマイコンに詳しくなってもちゃんと制御できないからなぁ……
電子工作の経験があって Arduino を導入しようと考えてるならやればいいんじゃないのと思うがこれから入門という段階なら初手で Arduino からってのは変な学習ルートに思える。
でもやりやすさは人によるので興味をもったらどこからでもやってみればいいんじゃないの、たいして高級品ってわけでもないし。
894デフォルトの名無しさん (ワッチョイ ff0c-xov0)
垢版 |
2024/06/09(日) 08:03:28.72ID:GyoPGP3N0
全ての波【電磁波】で下記の症状が起きる
理由は電磁波が強いために起こるか電磁波が通過すれば磁気が生じて鉄分が振動して間接的に鼓膜などが振動する
マイクロ波聴覚効果を用いた音声伝送に関する検討
2018/03/05
https://www.bookpark.ne.jp/cm/ieej/detail/IEEJ-ZT181039-PDF/
マイクロ波聴覚効果 Wikipedia
https://ja.wikipedia.org/wiki/%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E6%B3%A2%E8%81%B4%E8%A6%9A%E5%8A%B9%E6%9E%9C
>>マイクロ波を照射された被験者は、クリック音やブザーのようなうなり音が聞こえる
早大、物質中の創発磁気モノポールに起こる集団振動現象を理論的に発見
2024/06/04
https://news.mynavi.jp/techplus/article/20240604-2958879/
理研、電子ビームの電子回折をアト秒で制御できる技術を開発
2024/06/06
https://news.mynavi.jp/techplus/article/20240606-2960578/
※電磁波も振動させれると記載あり
最低でも下記ノ電磁波の威力が必要なら行っている者全員補足されている
GPSの電波は超微弱
https://gigazine.net/news/20240421-gypsum-gps-receiver/
[22]米国特許5868100号
【GPS位置情報を使用した動物コントロール・システム】
一例ですが年々受信機の感度は向上している
東工大、磁束集中器を用いない高感度「ダイヤモンド量子センサ」を開発
2024/06/07
https://news.mynavi.jp/techplus/article/20240607-2961238/
電磁波音波攻撃をされている部位ごとにホルモンや異常物質などの観測
パーキンソン病の原因物質、脳内の可視化に成功
2024年6月6日 0時00分
https://www.asahi.com/articles/ASS652V7RS65ULBH00GM.html
895デフォルトの名無しさん (ワッチョイ ffb7-xov0)
垢版 |
2024/06/10(月) 07:48:02.71ID:QAB9rEB/0
AIの性能が上がれば世界情勢が見えてくる
にゅーーすで話していることもそれらしきことを話すようになる

まづボイス・トォ・スカルが存在している場合としていない場合を問う
そのあとに人間の行動をどのように行動するかを問う

交友関係全てわかる範囲で入力しておく
社会っ情勢を知るにはさらにどういった役職等も調べておく


自分が使用しているボイス・トォ・スカルを本物か偽物化も割り出せる
896デフォルトの名無しさん (ワッチョイ ffb7-xov0)
垢版 |
2024/06/10(月) 13:47:48.16ID:QAB9rEB/0
不眠症にカップ麺やスナック菓子などの「超加工食品」が関係しているという研究結果
https://gigazine.net/news/20240610-insomnia-linked-ultra-processed-foods/

インターネットの都市伝説「The Backrooms」の起源となった画像の正体はどうやって判明したのか?
https://gigazine.net/news/20240610-origin-of-the-backrooms/

GoogleのGeminiとMicrosoftのCopilotが過去のアメリカの大統領選挙を含めた世界中の選挙の結果を正常に返していないことが判明
https://gigazine.net/news/20240610-google-microsoft-chatbots-election-questions/
897デフォルトの名無しさん (ワッチョイ ffb7-xov0)
垢版 |
2024/06/10(月) 20:08:29.30ID:QAB9rEB/0
ボイス・トォ・スカル
電磁波音波攻撃が判明する
人間は電磁界を発生させている
※被害者の身体に痕跡あり
パーキンソン病の原因物質、脳内の可視化に成功
2024年6月6日 0時00分
東工大、磁束集中器を用いない高感度「ダイヤモンド量子センサ」を開発
2024/06/07
名市大、頭蓋内全体の脳脊髄液の動態をマクロ的に観測する手法の開発に成功
2024/06/07
早大、物質中の創発磁気モノポールに起こる集団振動現象を理論的に発見
2024/06/04
理研、電子ビームの電子回折をアト秒で制御できる技術を開発
2024/06/06
分子研など、金ナノ粒子が円偏光の左右選択性を70倍に高めることを発見
2024/06/06
弾性乱流と古典的なニュートン乱流との共通点を発見――弾性乱流を記述する数学的理論の開発に寄与 OISTら
2024-5-29
京大、テラヘルツ波の照射で超伝導体の臨界電流を制御できることを実証
2024/05/28
産総研など、1000個以上の量子ビットを制御可能な超伝導回路の原理実証に成功
2024/06/05
名大など、水素原子の約1/20の超高精度で収差補正できるX線顕微鏡を開発
2024/05/09
898デフォルトの名無しさん (ワッチョイ ffb7-xov0)
垢版 |
2024/06/10(月) 20:08:54.70ID:QAB9rEB/0
細胞の内部を鮮明に観察できる蛍光顕微鏡技術を開発 阪大など
2024/05/07
OIST、有機電気化学トランジスタのON時に生じるタイムラグの原因を解明
2024/05/07
並行世界でタイムリープを繰り返す!?効率的な新しいシミュレーション技術
2024.05.22
東大、電子回折パターンの減少とエントロピー増加の対応を実証
2024/06/03
理研など、「スキルミオンひも」の観察とその詳細な融解過程の記録に成功
2024/05/23 19:29
東大など、金属3Dプリント中の2D画像から3D多孔質構造を予測する手法を開発
2024/06/03
2024/06/10(月) 22:13:02.43ID:3t115ymGd
>>885
A チュー
B モミモミ
C パンパン
D オギャー
2024/06/10(月) 22:32:33.85ID:6QG92Zys0
おぎゃーは、Eだな
901デフォルトの名無しさん (ワッチョイ 6fe2-xov0)
垢版 |
2024/06/11(火) 05:31:33.15ID:7n9sgmId0
男性の精子の減少、携帯電話の使用と関係か 最新研究
2023/11/02
https://www.cnn.co.jp/fringe/35211064.html
放射線と被曝
https://www.kan-etsu-hp.ne.jp/wp-content/themes/kan-etsu-hp/assets/kanetsu-hospital/department/pdf/radiology/radiation.pdf
>>エネルギーが極端に大きくなると X 線やガンマ線と呼ばれる放射線の一種になります。
※電磁波音波攻撃被爆している?

MrIは強力な磁場を利用しているので被爆しない

冷凍した人間の脳組織を解凍した後も正常に機能する技術開発
2024.05.12
https://karapaia.com/archives/52331859.html

1立方ミリメートルの脳の断片をハーバード大学とGoogleの研究者がナノメートル単位で3Dマッピングすることに成功
2024年05月10日
https://gigazine.net/news/20240510-human-brain-mapped-in-spectacular-detail/
幼児期の脳活動から18歳時点でのIQを予測できるという研究結果
2023/09/09
https://gigazine.net/news/20230909-brain-activity-toddler-predict-18-iq/

パーキンソン病の原因物質、脳内の可視化に成功
2024年6月6日 0時00分
https://www.asahi.com/articles/ASS652V7RS65ULBH00GM.html
東工大、磁束集中器を用いない高感度「ダイヤモンド量子センサ」を開発
2024/06/07
https://news.mynavi.jp/techplus/article/20240607-2961238/
902デフォルトの名無しさん (ワッチョイ 6fe2-xov0)
垢版 |
2024/06/11(火) 05:31:58.00ID:7n9sgmId0
日常的な蓋内全体の脳脊髄液の動態をマクロ的に観測する手法の開発に成功
2024/06/07
https://news.mynavi.jp/techplus/article/20240607-2961214/
細胞の内部を鮮明に観察できる蛍光顕微鏡技術を開発 阪大など
2024/05/07
https://news.mynavi.jp/techplus/article/20240507-2941335/

脳が鮮明に見える!世界最強の磁束密度で脳をスキャンするMRI「イズールト」
2024.04.05
https://nazology.net/archives/148090
※5分で全身スキャン完了するのかな
903デフォルトの名無しさん (ワッチョイ ff8a-xov0)
垢版 |
2024/06/11(火) 06:54:36.26ID:3zjiFVVb0
電磁波兵器の特許情報/Google検索で下記が判明
電磁波過敏症 低周波騒音被害 の症状が出現

設立 1998年 テクノロジー犯罪の撲滅
Https://media.toriaez.jp/s2972/32686.pdf
P77-身体・運動機能が遠隔から操作される P78-五感が遠隔から操作される
ギャングストーキングと電磁攻撃 - 広島修道大学学術リポジトリ
https://shudo-u.repo.nii.ac.jp/record/3395/files/SG63205.pdf


下記を頭部などで再現

人間の「第六感」 磁気を感じる能力発見
2019/03/19
https://www.sankei.com/article/20190319-6UGPQVLP4BLEDJYGVSX3WW6A4A/
髪の毛ほど薄いのに音を75%カット!MIT開発の「革新的防音カーテン」
2024.05.13
https://nazology.net/archives/149896

言葉に出さずとも内なる声を解読する、脳の読み取り装置が解発される
2024.05.20
https://karapaia.com/archives/52331884.html
2024/06/11(火) 07:41:44.85ID:PurewGljd
>>900
じゃあ、D はウギャー?(遊びで抱いた女が妊娠したのが分かったときの男の悲鳴)
2024/06/11(火) 09:18:49.34ID:iWfhzVB80
ボテ腹のDだろ
906あぼーん
垢版 |
NGNG
あぼーん
2024/06/14(金) 19:49:03.49ID:nzHUeHXM0
glibcとlibgccは何が違うのだろう
2024/06/14(金) 20:46:34.33ID:2LbvURbZ0
標準ライブラリとランタイムライブラリ
前者は普段お前らが呼び出して使うやつ
後者はコンパイラが実行時に呼び出すように仕込んでるやつ
2024/06/14(金) 20:49:49.15ID:nzHUeHXM0
サンクスです
910あぼーん
垢版 |
NGNG
あぼーん
911あぼーん
垢版 |
NGNG
あぼーん
912あぼーん
垢版 |
NGNG
あぼーん
913あぼーん
垢版 |
NGNG
あぼーん
914あぼーん
垢版 |
NGNG
あぼーん
915デフォルトの名無しさん (ワッチョイ cf2a-Wcph)
垢版 |
2024/06/26(水) 09:37:56.77ID:N112RWnJ0
printf( "あぼん続きで未読がマークが外れんのじゃ!" );
2024/06/26(水) 18:48:24.72ID:rtRJ28tp0
fflush(stdout);
917あぼーん
垢版 |
NGNG
あぼーん
918あぼーん
垢版 |
NGNG
あぼーん
919あぼーん
垢版 |
NGNG
あぼーん
920あぼーん
垢版 |
NGNG
あぼーん
921あぼーん
垢版 |
NGNG
あぼーん
922あぼーん
垢版 |
NGNG
あぼーん
923あぼーん
垢版 |
NGNG
あぼーん
2024/06/30(日) 22:32:27.83ID:t0peTjy20
https://i.imgur.com/tFN6wJX.jpg
10日のチェックインだけで5500P貰えます      
925あぼーん
垢版 |
NGNG
あぼーん
926あぼーん
垢版 |
NGNG
あぼーん
927あぼーん
垢版 |
NGNG
あぼーん
2024/07/04(木) 22:17:16.67ID:rk7+203c0
https://i.imgur.com/GKWQkmG.jpg
10日の連続チェックインだけで5000P貰えます。      
2024/07/05(金) 09:53:42.21ID:0jVwcVAV0
https://i.imgur.com/xuICFXl.jpg
10日間の連続チェックインだけで5000P貰えます。
2024/07/05(金) 14:12:39.37ID:Dko2Msz80
繰り返し書き込んでるのはスクリプトでやってるから?
2024/07/05(金) 15:49:01.49ID:jzxpJ+i30
https://i.imgur.com/wUnQkpy.jpg
10日連続チェックインだけで5000P貰えます
2024/07/05(金) 19:16:00.42ID:TlSLATbO0
https://i.imgur.com/ybaxg26.jpg
すぐ2500P+2500P手に入ります
933あぼーん
垢版 |
NGNG
あぼーん
2024/07/05(金) 19:57:11.48ID:IIQ6iKCH0
さぎ
2024/07/06(土) 11:41:20.39ID:tTTndFvT0
https://i.imgur.com/Q2Nu6WK.jpg
すぐに2500P+2500P手に入ります。
2024/07/06(土) 11:55:09.99ID:tTTndFvT0
https://i.imgur.com/brLUGrx.jpg
すぐに2500P+2500P手に入ります
2024/07/06(土) 13:14:33.48ID:Arqdwybu0
https://i.imgur.com/8N8NHa9.jpg
すぐに2500P+2500P手に入ります
2024/07/06(土) 14:17:17.71ID:Bma9QbI50
ポイント詐欺、文面の一部にunicode混ぜたりと小賢しいNG判定回避してんな。
2024/07/06(土) 14:36:38.12ID:WDK3FXFS0
なんでこのスレばっかり詐欺書き込みするんだろう
2024/07/06(土) 14:48:03.47ID:kTIMjEkj0
スクリプトがバグってて板の特定のスレが連投される
投稿済み(投稿に成功した)というフラグが立たないためと思われ
自演レスも付かない
ム板的にはその理由を推測するのもまた一興

たとえばゲーム製作なら
https://mevius.5ch.net/test/read.cgi/gamedev/1699879792/
https://mevius.5ch.net/test/read.cgi/gamedev/1700545559/
の2スレが該当する
2024/07/06(土) 16:04:40.45ID:wdvB4Pnm0
このスレ埋めてみるかw
2024/07/06(土) 17:02:30.46ID:mF2Bv0pD0
>>940
逆のフラグ管理じゃね?
成功した場所でもっとやるんでしょ
2024/07/06(土) 17:12:50.54ID:wdvB4Pnm0
単に設定を変えていないものぐさだって事だろう
2024/07/06(土) 23:48:46.43ID:kTIMjEkj0
>>942
本来はたとえば
https://mevius.5ch.net/test/read.cgi/tech/1716759686/104

https://mevius.5ch.net/test/read.cgi/tech/1716759686/106
https://mevius.5ch.net/test/read.cgi/tech/1716759686/112
とか
https://mevius.5ch.net/test/read.cgi/tech/1712104264/237

https://mevius.5ch.net/test/read.cgi/tech/1712104264/238
https://mevius.5ch.net/test/read.cgi/tech/1712104264/246
のように自演レスが付き、そのスレでの宣伝レスは終わる
945デフォルトの名無しさん (ワッチョイ e3b1-tXWD)
垢版 |
2024/07/07(日) 04:05:27.06ID:6Ch43eQf0
暇人すぎだろ
946デフォルトの名無しさん (ワッチョイ f5d0-eRYk)
垢版 |
2024/07/13(土) 10:21:19.69ID:SJF7SOz+0
c言語初心者なんだけど
新し目のVSを使っててメモ帳みたいな簡素なウィンドウアプリケーションの作り方を解説してくれてるサイトや本って無いかな?
少し前に同じようなものを探したことがあってその際は本を買ったんだけど初心者に優しくなくてアプリを作る部分はおまけでコンピューターの解説が始まったってのがあったからできれば優しいやつ希望です

それから古いVSがDLできなかったのって治ったのかな?
2024/07/13(土) 10:38:54.98ID:lEcXG8hx0
できるだろうけど、スレ違いじゃないかと思う
2024/07/13(土) 10:50:34.84ID:R8bc08740
カレーを作るのにまず牛と野菜と稲を育てますってくらいの苦行だぞ
https://oshiete.goo.ne.jp/qa/3999457.html
2024/07/13(土) 11:02:57.49ID:lEcXG8hx0
簡素なウィンドウアプリケーションって事だから、DOSベースではないだろう
2024/07/13(土) 11:57:14.35ID:UG7jOJ2R0
>>946
初心者に基礎を教えないことを「優しい」という感覚がわからん。
2024/07/13(土) 12:18:34.93ID:Sreg3kj80
>>946
習得したいものがc言語なのかGUIフレームワークなのか
前者ならGUIを題材にするのはおすすめしないし、後者ならc言語でやるのはおすすめしない
2024/07/13(土) 17:37:52.12ID:KaYnUPVr0
GUIだとQtかWinUI3になるからC++必須なんだよなあ
どうしてもレガシーコードで書きたいのであれば猫でもわかるシリーズに残ってそうだが
ただしコンパイルを通すのにかなり苦労すると思う
2024/07/13(土) 19:14:27.31ID:lEcXG8hx0
大分マニアックな領域になるよな
初心者向けではない
2024/07/13(土) 19:29:06.80ID:lEcXG8hx0
初心者としてwindowsアプリを学んでみたいって事なら
C++でやる方が色々選べるから楽でしょう
どうしてもC言語でやりたいってなると
windows歴史博物館で誕生から終末まで学ぶつもりで取り組めば何とか
コード生成はもちろん16ビットでやります(動作環境作るのも大変だw)
955デフォルトの名無しさん (ワッチョイ f5d0-eRYk)
垢版 |
2024/07/13(土) 19:56:06.53ID:SJF7SOz+0
>>948
マジですかい
>>949
流石にDOSではないというか作ったところで動かないんじゃ
>>950
どういうことだってばよ
>>951
ウィンドウアプリケーショの作り方解説系少ないからとりあえず形になるもので練習して本命に繋げたい
956デフォルトの名無しさん (ワッチョイ f5d0-eRYk)
垢版 |
2024/07/13(土) 19:56:22.00ID:SJF7SOz+0
>>952
猫でも分かるシリーズやってたけどバージョン古すぎてすり合わせ大変で途中で投げ出した
>>953
C++でもなんでもいいからC系譜で作ることにするよ
>>954
C++でお願いしますそんなに大変だと思いませんでした
2024/07/13(土) 20:01:22.10ID:MzDhk0E80
今Windows API触るとそんなに面倒なのかな
2024/07/13(土) 20:17:00.87ID:UG7jOJ2R0
>>955
「ウィンドウの開き方」の説明が本の最初のページに書いてあったとしても理解できない。
理解のためにはそれらを取り巻く様々な事情が前提知識として知っておく必要があるから。
それらの事情を教えるところからスタートするのが当然なのに、事情を教えるのは初心者に対して優しくない!というのが意味不明。

学ばずに出来るようになりたいってこと?
2024/07/13(土) 20:22:43.71ID:lEcXG8hx0
>>956
https://c-lang.sevendays-study.com/win32/index_win32.html

1日目 はじめの一歩
2日目 ウインドウの表示
3日目 文字の表示

2日目、3日目のソース見て、理解できそう?
960デフォルトの名無しさん (アウアウウー Sa09-Qmcr)
垢版 |
2024/07/13(土) 22:38:39.29ID:i5xfMqB7a
20年以上前かな、かなり前にWindowsAPIは弄ってたけど、Window作成するまででかなりパラメータを渡さなきゃならなくて一つ一つ確認してめっちゃ時間かかった気がする
その後は自分用テンプレとして作ってたからすぐにwimdow立ち上げまでできたけど、次はrectとか描画処理、セマホ、フックとかそこら辺まではやり込んだな
961デフォルトの名無しさん (アウアウエー Sa13-pk1M)
垢版 |
2024/07/13(土) 23:30:45.23ID:nTr8FyGBa
>951
ほんそれ
2024/07/13(土) 23:32:29.53ID:q3jiasP2M
>>955
最終的にWindowsのデスクトップアプリを考えてるのなら今は始めるにはよい時期ではない
歴史的にいくつものフレームワークがリリースされてとっちらかっている
でマイクロソフトは絶賛Windows App SDK/WinUI3という形でまとめなおしている最中
それでもやりたいならどのフレームワーク使うか決めてそのスレで質問しな
2024/07/13(土) 23:34:03.78ID:cM/J+a8n0
ぶっちゃけChatGPTと連携すればCでもGUIなんて楽勝だと思うが
2024/07/14(日) 08:34:48.57ID:CpW1/GRz0
ChatGPT はわかる人が楽する使い方や学習のための使い方は出来るが
わからん人がわからんまま (十分な品質で) 何か作れるものではないよ。
2024/07/14(日) 12:36:15.10ID:IlPTxPLU0
>>964
一体何を言ってるんだ
環境や条件を指定しつつCでGUI作れで適当なソースが出てくるじゃろ
判らん箇所があったら何してるのか問い質していけばほぼコード書くことなく完成するぞ
人間とまともに会話できなければGPTとも最初話が通じないかもしれん問題はあるが
GPTは怒って帰ったりしないから粘着し続ければヤフー知恵送れでもいずれは答えに辿り着くよ
2024/07/14(日) 12:56:13.63ID:edKbqaNA0
たまに発狂するGPTがあると楽しいのに
2024/07/14(日) 13:14:46.37ID:u/myXhco0
Win32APIのレガシーコードなんてネットに腐るほど転がっているからChatGPTの回答精度も高いだろうけど
いまさら初心者がそれを勉強するだけの価値があるかというと微妙だなあ
将来のつぶしがきかないというか、趣味なら別にいいけど
2024/07/14(日) 13:35:46.37ID:9deZz+6ua
GTPで中の定数の人とかまったくないわからないまま作っても後が大変そう
2024/07/14(日) 13:41:26.84ID:CpW1/GRz0
>>965
「わからんまま」では作れないというのは分かるように学習すれば作れるという意味だがそれが読み取れなかったか?
2024/07/14(日) 13:53:07.42ID:IlPTxPLU0
>「わからんまま」では作れないというのは分かるように学習すれば作れるという意味だがそれが読み取れなかったか?
まずその括弧の付いた言葉遊びをやめろよ
お前の文書普段から長文で判り難いのによく1行で何言ってるのか判らんように書けるな
そろそろ引退しなよ
2024/07/14(日) 14:01:17.53ID:CpW1/GRz0
>>967
C で書くという前提を動かさないなら Win32 API は比較的マシかもしれない。
中途半端なラッパーライブラリだとどうせ内部構造に対するある程度の理解は必要だし、
C 用のリッチなフレームワークがあったとしても Win32 API と同程度にニッチだろう。

C++ 用の API やフレームワークを C から使うというのも無理すれば出来ることもあるけどそれはそれで大変だし。
2024/07/14(日) 14:08:03.60ID:QSWfl6GGd
>>966
ほんそれ
>>965 みたいな使い方してる池沼には
「情報小出しすんなボケ」
くらいは言ってくれるGPTの方が優しさを感じる
2024/07/14(日) 14:09:11.63ID:edKbqaNA0
「Hello, World!」と表示するWindowsアプリ作り隊だけなのに、
何で何百行もソース書かないといけないのか
この疑問は正しい。その後の行動は分かれるが。
初心者はまず、この長いソースを追いかけて、
何故こんなこと書かないといけないのかを考え、理解する事が必要
RADツール使うのは、その後でいい
2024/07/14(日) 15:59:56.05ID:2PTbWkYV0
>>955 そんなあなたにこの本
Win32API完璧マスタ: Visual C++プログラミングへのアプローチ

内容は古いけど、API直接叩いて基本のWindow出せるし、内容は濃いのにページは少ないw
仕様や細けえことは他の本で学びな的なw
975デフォルトの名無しさん (アウアウエー Sa02-hIhh)
垢版 |
2024/07/14(日) 17:32:58.10ID:KvX85dc0a
Yあほー智慧を呉れは馬鹿が使うと永久にループする
976デフォルトの名無しさん (アウアウエー Sa02-hIhh)
垢版 |
2024/07/14(日) 17:35:37.43ID:KvX85dc0a
>>955
ニコニコに「1時間でつくるテトリス」っていう動画があがってる
C/C++コンパイラのインストールからWindowsAPIまで解説付き
ニコ動いつ治るんだろう
2024/07/14(日) 19:19:47.82ID:KI/vWIVu0
数百行も書かなくてもHello World表示できるよ
あと32bit,64bitでもC+SDKで書けるし
一回書けば後はそれをベースに出来るのでそんなに難しくない
2024/07/15(月) 18:16:26.64ID:dyz3Dcwbr
遅れてきた
中間地点として、winformでほしいものとりあえず作るのがいい気がする
良くも悪くも標準搭載になってるどとねとが使える
モチベ管理重要

とにかくCreateWindowW()からいくと、やることが多すぎて、慣れるまでは心が折れやすい
2024/07/16(火) 05:44:20.09ID:OKcwpKml0
C23の編集作業が締め切り過ぎちゃって自動的にキャンセルされたらしい
https://www.iso.org/standard/82075.html

> Deleted
> ISO/IEC DIS 9899
2024/07/16(火) 09:24:49.93ID:HnAIOUFv0
>973
VC++使ってのコマンドプロンプトでの表示と、APIで自分でウィンドウ作っての表示と
MFCでの表示でソース量全然違うよね。
2024/07/16(火) 12:16:07.88ID:G8ZSXNCF0
printf垂れ流し部+入力窓+ボタンいくつか
っていう汎用フレームワークを作って超使いまわしてたわ
懐かしい
2024/07/16(火) 13:09:56.99ID:S75gU2/t0
Windowsはよく分からんのだが
どの言語やライブラリやフレームワークを使うにしろ
それらってWin32APIを呼んでるって認識であってる?
2024/07/16(火) 13:47:14.30ID:f/Rbre/X0
>>982
いいえ。 Windows には異なる系統の API が存在していて、 Win32 API はそのひとつに過ぎません。
内部的にはお互いに呼んでいることもあるはずですが形式的にはあくまでも異なる系統の API です。
2024/07/16(火) 13:52:20.00ID:cfxI+Evv0
Win32 API 以外のAPIって、具体的には何?
2024/07/16(火) 14:14:52.90ID:f/Rbre/X0
>>984
WinRT とか。
986デフォルトの名無しさん (ブーイモ MMfa-HocF)
垢版 |
2024/07/16(火) 15:50:51.48ID:U7/vzWh2M
>>985
なるほどー
WinRTって聞いたことあったが
そういう位置づけなのね
2024/07/16(火) 16:26:42.34ID:f/Rbre/X0
Windows の API で Win32 API とは別系統と言えるのは WinRT くらいなんだけどね。

Windows にはサブシステムが追加されることもある。
普段は Win32 サブシステムや Win64 サブシステムの上で作業してると思うけど
今だと WSL (Windows Subsystem for Linux) もメジャーな存在になってる。
そういったサブシステムとアプリケーションとの間のインターフェイスは Win32 API とは別系統。

Windows のサブシステムという仕組みは新しいものではなくて、
かつては POSIX (Unix の統一規格) サブシステムや OS/2 サブシステムが載ってた時期もあった。
2024/07/16(火) 17:02:50.25ID:o15eUmK30
WinRTはサブシステムじゃないだろ
Win32の上に構築されてる
2024/07/16(火) 17:22:22.40ID:f/Rbre/X0
>>988
Windows の API として別系統なのは WinRT (くらいしかない) だけど
それとは別に全く根本的に違うサブシステムが乗ることがあるからいくらでも違うものがありうるって話ね。
990デフォルトの名無しさん (アウアウエー Sa02-hIhh)
垢版 |
2024/07/16(火) 18:14:55.55ID:zAWhziLLa
NTLDR
2024/07/16(火) 22:44:21.14ID:ZrsCjURC0
C言語なら俺に聞け 163
https://mevius.5ch.net/test/read.cgi/tech/1721137434/
2024/07/17(水) 03:08:40.82ID:Si6nD6Cy0
WinRTがサブシステムかどうかは不明だし、Win32の上に構築されてるかも明らかにされてない
少なくともMSはWin32に変わるC++の基礎と位置付けていて、MSは今後はWinUI3を推奨とアナウンスしたけど、それの基礎でも有る
WinRTはCOMのAPIなのでJavaScriptやC#等の他の言語からでも使える
2024/07/17(水) 08:07:58.66ID:rcKIBlXh0
WinRT の実装はどうあれ API であるとは書いてあるのでそれが公式な立場
2024/07/17(水) 10:40:59.54ID:okwkanyy0
プロセス情報とロードされるDLLみたら明らか
サブシステムでない
2024/07/17(水) 12:23:19.00ID:RM/TGsIi0
ComCtl32.dll万歳
2024/07/17(水) 14:48:58.95ID:Sspv/MB00
昔は遅くて良いならbasicインタープリター、速さを求めるならアセンブラかC言語しかなかった
それで仕方なくアセンブラ、それも面倒だからCを勉強したけど
オレはもう最近はC#かVB.netで楽してるわ
VBなのはbasicに慣れててすぐ書けるからだな
それでも十分実用速度でGUIアプリ出来て満足してる

今からGUIアプリをCで作りたいとか >>946 はすごいな

スレチスマソ
2024/07/19(金) 01:41:17.15ID:ZuPPmWX/0
WinRTは全く流行らず終わった
俺が知ってるのはそれぐらいだぜ
2024/07/19(金) 01:57:02.76ID:C8y14UUu0
終わったのはWindowsかも知れないと思う今日この頃
2024/07/19(金) 02:41:34.60ID:JL3kCSXE0
WindowsRT…ARM版Windows8
WinRT…Windows Rutime API
2024/07/19(金) 02:42:03.28ID:MAZ+GQEV0
WinRTを試そうと思ってるのに
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 262日 9時間 29分 4秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はUPLIFT会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《UPLIFT会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
4 USD/mon. から匿名でご購入いただけます。

▼ UPLIFT会員登録はこちら ▼
https://uplift.5ch.net/

▼ UPLIFTログインはこちら ▼
https://uplift.5ch.net/login
レス数が1000を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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