C言語なら俺に聞け 162at TECH
C言語なら俺に聞け 162 - 暇つぶし2ch331:デフォルトの名無しさん
23/12/23 12:09:04.65 PYuibGoS0.net
最初からunsignd charのポインタとサイズを構造体にして扱えば良いだけ

332:デフォルトの名無しさん
23/12/23 12:09:04.99 1vO40jtV0.net
大昔は7ビットしか通らない経路あったねw
5baseとかの時代でしょうか
今は、8ビットを8ビットで伝送するほうが稀でしょうね
8ビットを10ビットで符号化することで、ゼロやイチが連続する数が少なくなるようにすることで、データ自体でタイミングを取れる方法をIBMが発明したとかで
だからこんなに速くなったそうです

333:デフォルトの名無しさん
23/12/23 12:13:58.12 1vO40jtV0.net
>>327
多分あなたの危惧が伝わってないです
改修案件でバグを作り込んだのに動作確認せずリリースしてしまうっていう事なら、工程管理ができてないって話でプロとしてダメ
メッセージ形式の仕様とは関係ないですね

334:デフォルトの名無しさん
23/12/23 12:17:04.95 1vO40jtV0.net
(…もしや「複オジ」さんだったかな?)

335:デフォルトの名無しさん
23/12/23 12:56:43.79 j8bI1ONF0.net
やっぱりめんどくさい奴だったかw
あんたにレスがもらえないのはテーマのせいじゃないとわかれ

336:デフォルトの名無しさん
23/12/23 18:17:03.63 PYuibGoS0.net
>>330
安易に文字列を使う仕様にしてるとバイナリ通らないの忘れるし思わぬバグを生む原因になるから、最初からバイナリ配列にするか文字列操作関数を一切使わない様にしないとな

337:デフォルトの名無しさん (ワントンキン MM07-TKg5)
23/12/24 00:00:50.96 B84K7ZI6M.net
>>332
うん…(悲しい)

338:デフォルトの名無しさん (ワッチョイ 4602-UkJf)
24/01/05 10:30:41.51 ph0QLfWd0.net
Perlとかで利用している設定ファイルがあるのですが、
Cで書いたプログラムでも同じファイルを設定ファイルとして読み込みたいです

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

val = abc
str1 = $val/AAA

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

それをやってくれるライブラリや関数等、ありますでしょうか

339:デフォルトの名無しさん (ワッチョイ e563-7PFe)
24/01/05 10:49:08.39 xgizPOi+0.net
その程度なら、自作できるだろう

340:デフォルトの名無しさん
24/01/05 11:38:06.91 VxELzJcZd.net
#define val abc

341:デフォルトの名無しさん (スププ Sd62-Blk0)
24/01/05 12:10:00.56 VxELzJcZd.net
enum { val = abc }

342:デフォルトの名無しさん (スププ Sd62-Blk0)
24/01/05 12:13:38.69 VxELzJcZd.net
enum の方はエラーになる

343:デフォルトの名無しさん (スププ Sd62-Blk0)
24/01/05 12:27:56.38 VxELzJcZd.net
#define もエラーになる

344:デフォルトの名無しさん (スププ Sd62-Blk0)
24/01/05 12:30:33.41 VxELzJcZd.net
#define val "abc"

345:デフォルトの名無しさん (ワッチョイ 651a-R/a6)
2024


346:/01/05(金) 12:30:55.30 ID:qVR6C9yQ0.net



347:デフォルトの名無しさん
24/01/05 12:49:25.99 qVR6C9yQ0.net
>>335
別の解決案
・Cに優しい形式(右辺を全部展開した形で、イコール前後のスペースもなし)で吐き直すツールを、perlで作る
・自分で全部Cで作る
・lex/yacc を使って軽言語解釈ルーチンを作る
それぞれデメリットがあって、質問に直接答える「そういったライブラリはあるか」に一番合ってるのが、最後のlex/yaccだけど、それは一番バカらしい答えでもある。お好きに

348:デフォルトの名無しさん
24/01/05 12:51:00.35 qVR6C9yQ0.net
>>337
君、答える側になれる実力ないだろ

349:デフォルトの名無しさん
24/01/05 12:54:37.44 KwPCWpVD0.net
sscanfで読めばよかろうもん

350:はちみつ餃子
24/01/05 13:07:45.12 t0UUGhQq0.net
>>335
その説明では何をやりたいのか伝わってないので仕様書を書いてみて。
理想的なライブラリがあったとして、そのテストケースという形式でもいい。
曖昧模糊な要望だと説明が下手なだけでなく説明しようとしている内容が見当違いな可能性を疑う。
(いわゆるXY問題)

351:デフォルトの名無しさん (ワッチョイ 2eab-zkkm)
24/01/05 13:32:24.69 38bnxq2E0.net
Cのソースでその展開もどきを行いたいのか
Cで書いてるプログラムがとあるファイル食って文字処理するんだけど、同じことを実現したいのか

352:デフォルトの名無しさん (ワッチョイ 45bb-dhuT)
24/01/05 13:37:38.46 M4U6Kwpw0.net
>>335
これは実装するとなると簡易言語になっちゃうな
でも変数と変数参照だけだから大して難しくないよ
たぶん1000行ぐらいに収まる

353:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 823e-slPv)
24/01/05 14:59:38.28 t0UUGhQq0.net
どうしても既存の設定ファイルをそのま�


354:ワ使いたい、それを処理できるようなものが欲しいということなら そんな都合の良いものがあるわけない。 自分で書くしかしょうがない。 完璧にそのままのフォーマットでなくおおよそ似た機能があればよいなら TOML とか JSON とか YAML とかの広く使われているフォーマットを採用したほうが面倒が少ない。 Perl でも C でも処理できるライブラリがいくつもあるし。 これらには変数展開のような機能はないが、 設定ファイルで動的な操作を可能にするのは問題を引き起こしやすいと考えられていて、 アプリケーション側でやるかプリプロセッサでなんとかしたほうがよい。 (強いて言えば YAML のエイリアス機能は変数のようなものとも言えるけど文字列を結合したりは出来ない。) 逆に設定どころではなくユーザーによるカスタマイズをどんどんやってもらうようなものなら Lua とかのアプリケーション拡張言語を埋め込んでしまうという方法もとれる。



355:デフォルトの名無しさん (ワッチョイ c2b5-R5Zd)
24/01/05 15:39:37.20 mdj5x9Xd0.net
Perlにそんな便利機能あったっけ

356:デフォルトの名無しさん (ワッチョイ c6bb-bJ3A)
24/01/05 18:09:30.90 xFVV62H30.net
Cは遅延評価を積極的にやるための言語ではないからなあ
C++やC#ならあるんだけどね
lex/yacc はちょっと古くて
今なら flex/byson ですね

357:デフォルトの名無しさん
24/01/06 15:06:00.15 NPThFXTg0.net
$ の変数展開しかやらないなら複雑な構文解析にはならないから全部自作した方が楽なのでは?
少し楽したいなら perl に読ませて $ 展開させた文字列に変換して出力したのを C の側で読むとかね。そうすると少し楽ができる。
これの問題は perl が使えない環境では動かないことかな。

358:デフォルトの名無しさん
24/01/06 16:25:37.13 2Gstkfh+0.net
今なら packcc おすすめ

359:はちみつ餃子
24/01/06 16:27:28.51 iX+vez910.net
設定ファイルのデータ構造が key/value の組だけ、 value は単なる文字列という程度なら
パーサジェネレータはかえって邪魔じゃないのかな。

360:デフォルトの名無しさん
24/01/06 21:36:47.69 8zwGVkiA0.net
lex/yaccは使った事ない人にはハードル高いだろうね。逆に、使い方が分かると何でもそれでやりたがる時期が来る。どんなツールや言語でもそうだろうけど

361:デフォルトの名無しさん
24/01/06 21:39:52.15 YhaQaYGw0.net
BNF書いても大した量にならないだろうし俺ならフルスクラッチで書いちゃうな

362:デフォルトの名無しさん
24/01/06 21:45:36.68 8zwGVkiA0.net
で、設定ファイル、shで環境変数を設定すりゃ済む、という案に誰も反応してもらえないんだが、どうだい? windows ならcmdだろうけど
設定項目ってのは、パス文字列とか、メモリサイズとか、ほぼ固定だけどあとから変えたい場合もあろう、っていう定数だよね。環境変数ってまさにその目的だと思ってる。
ドル記号で一時値の展開もできる。Cからも簡単に読める。

363:デフォルトの名無しさん
24/01/06 21:56:18.04 8zwGVkiA0.net
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箇所でズラッと並ぶと「設定項目名とハードコード値の、一覧表」風になるの。分かる?

364:デフォルトの名無しさん
24/01/06 22:02:36.24 8zwGVkiA0.net
get_conf_str() と get_conf_i64() の中身は
getenv() を使って簡単に実装できる、のは分かるよね?

365:デフォルトの名無しさん
24/01/06 22:09:41.74 LvNnK4+W0.net
単なる文字列だけなら正規表現の置換でいいだろ

366:デフォルトの名無しさん
24/01/06 22:20:12.76 8zwGVkiA0.net
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);
とかってするとソース上で一覧表風になるでしょ。タブ文字も入れて桁そろえて。

367:デフォルトの名無しさん (ワッチョイ 627a-JKp6)
24/01/06 23:25:47.33 4fq2Cpkf0.net
まあ落ち着けよ 質問者はそんなこと聞いとらんだろうよ

368:デフォルトの名無しさん
24/01/07 00:35:50.01 yw4Ulg6E0.net
for(;;){
if((result = fgets(line, MAX_LEN, stream)) != NULL){
p1=result;
p3=p1+strlen(line);
p2=strtok(p1, "=");
}
}
これで、p1とp2から左辺、p2とp3から右辺が取り出せる。
$の展開は、マクロ展開処理の要領で
右辺に$があるかチェックして、あったら定義値に置き換えるという
10ステップ程度の処理でできるだろ。

369:デフォルトの名無しさん (ワッチョイ 7fb5-j9I8)
24/01/07 08:57:04.03 4P3NNejl0.net
>>335
>Cから読み込む場合は、自分で展開する必要があると思ってます
その通りです

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


>>363
p2=strtok(p1, "=");
スペースやタブの処理が必要

370:デフォルトの名無しさん (ワッチョイ 7f79-e2pS)
24/01/07 10:17:39.72 gAwkeLQQ0.net
せめて既存の気の利いた言語のstring型のメソッドやらを参考にしろよ
ここで再発明しても誰も使わんだろ

371:デフォルトの名無しさん (ワッチョイ 5f1a-nsdu)
24/01/07 10:25:56.11 TVg93ufA0.net
質問者、もういない

372:デフォルトの名無しさん (ワッチョイ df01-6482)
24/01/07 11:15:08.19 SfiTOIyR0.net
>>335
>それをやってくれるライブラリや関数等、ありますでしょうか
perlはCで書かれてるけどね

373:デフォルトの名無しさん (ワッチョイ 5f63-vNrU)
24/01/07 11:23:13.54 XrTF2oph0.net
動かすCプログラムをperlに書き直す方が簡単そう

374:デフォルトの名無しさん (ワッチョイ 7fad-ipwt)
24/01/07 16:24:59.67 tTa6vFrs0.net
こんな方法もある。しかし $ の変数展開しかしないなら無駄な感じはするね。それだけのためにここまでするのかという。

perlembed - C プログラムへの Perl の埋め込み方
URLリンク(perldoc.jp)

375:デフォルトの名無しさん
24/01/10 16:11:15.07 PVZRGcug0.net
$がリテラルとして入ってた時はどうするかとか、結構面倒そう

376:デフォルトの名無しさん (ワッチョイ 5f1f-nsdu)
24/01/10 17:49:56.37 C4OEbwTl0.net
>>370
そうなんだよー、真面目にやるとバカみたいに面倒なのよ

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

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


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

んで、つまんないバグを作り込んだりするの。その、もういない誰かが作り込んだつまんないバグを、別の誰かが直すはめになる。そんなの嫌じゃね?

377:デフォルトの名無しさん (ワッチョイ 5f1f-nsdu)
24/01/10 17:57:07.75 C4OEbwTl0.net
でも本当に、質問者はもうト


378:ンズラしたと思うよ。次の話をしよう



379:デフォルトの名無しさん (ワッチョイ 5f63-vNrU)
24/01/10 18:00:48.10 PVZRGcug0.net
次の患者さん、どうぞ

380:デフォルトの名無しさん (ワッチョイ ffcf-mfjK)
24/01/10 21:56:41.19 Qa3z5jue0.net
>>327
どっちにしろ質問者のためにやってるわけじゃないからいいんだよ

381:デフォルトの名無しさん (ワッチョイ 5ff5-j9I8)
24/01/10 22:25:04.83 Gs+Ha8Nh0.net
>>371
そこまでのコメント機能はいらんやろ
シェルスクリプトの設定ファイル程度のことができればいいんだろうから
#が来たら改行までをコメントとするぐらいで

382:デフォルトの名無しさん (ワッチョイ 7fd9-EKXI)
24/01/10 23:20:02.65 ZQ7M3ZpB0.net
ちなみにCの識別子に$を使える
少なくともgcc, clang, msvcで使える
int $val = 0;
とか

383:デフォルトの名無しさん (ワッチョイ 5f1f-nsdu)
24/01/10 23:20:30.43 C4OEbwTl0.net
>>375
環境変数設定で「十分」どころか、それがかなりきちんと対応している。

シェルは(shもcmdも)「改行までコメントとみなす」なんていういい加減な実装じゃないよ

384:デフォルトの名無しさん (ワッチョイ 5f1f-nsdu)
24/01/10 23:36:31.88 C4OEbwTl0.net
パーサー実装の現実的な話がまともにできるニキはここにはいないねw

385:デフォルトの名無しさん
24/01/11 02:31:42.07 uSDU2aBB0.net
ほらな、はちみつも黙るやろ
規格は詳しいけどな

386:デフォルトの名無しさん
24/01/11 02:42:19.58 WTkhFxto0.net
パーサーなんて大して難しくないよ
テスト書けば

387:デフォルトの名無しさん
24/01/11 06:03:54.69 ZajpDUJL0.net
>>377
いやだからそんな本格的に作る必要ないって話
労力の投入場所を選定するのもプログラマの能力

388:デフォルトの名無しさん
24/01/11 07:51:37.56 7oF58mtI0.net
>>371みたいなので悩むならさくっと正規表現ライブラリやパーサージェネレータ使うな。
学習のために自分でパーサー書いてみたいってんなら別だが。

389:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f3e-Cx9t)
24/01/11 09:41:05.64 NL5Kg7pj0.net
>>379
仕様が曖昧なのに実装の話をしても無意味だろ。
新しい情報が提示されないなら回答すべきこともない。

390:デフォルトの名無しさん (ワッチョイ 5f63-vNrU)
24/01/11 09:42:53.45 ZxeGb/wD0.net
誰か、作ってやれよ

391:デフォルトの名無しさん
24/01/12 10:13:36.22 Umd8uX9b0.net
strcat() はダメなの?

392:デフォルトの名無しさん
24/01/13 00:25:52.89 suyQO94R0.net
sscanfで十分だよ

393:デフォルトの名無しさん (スッップ Sd9f-j9I8)
24/01/13 09:14:54.62 mB7BPAPVd.net
>>385
参加したかったの?

394:デフォルトの名無しさん
24/01/13 09:41:46.29 fMrSPcrk0.net
ここに書けば参加したことになるよ

395:デフォルトの名無しさん (ワッチョイ 5f59-P7l0)
24/01/13 13:22:56.37 kmNIHanh0.net
参加することに意義がある

396:デフォルトの名無しさん (スッップ Sd9f-+zra)
24/01/13 16:53:47.66 8Ttuq2mzd.net
C言語からJSON読み書きにオススメのライブラリやDLL教えてくれさい。
UTF-8↔ANSI変換はAPIでやれそうです。

397:デフォルトの名無しさん
24/01/13 19:04:48.77 suyQO94R0.net
yyjsonで十分だよ

398:デフォルトの名無しさん
24/01/17 13:51:26.07 MxPcwzaVM.net
以下はmalloc()で割り当てた領域を開放してポインタをヌルポインタにするマクロである
#define MYFREE(p) do {free(p); p = 0;} while(0)
このマクロに不備があるかないか、ある場合はどんな不備か答えよ
ただし処理系はANCI C準拠とし、stdlib.hがインクルードされていることとpが左辺値かつmallocで割り当てた領域を指す有効なポインタであることの2点は呼び出し側によって保障されているものとする

399:デフォルトの名無しさん (ワッチョイ 427c-kX52)
24/01/17 16:32:50.55 sbbnyjB/0.net
宿題は他所でやれ

400:デフォルトの名無しさん
24/01/17 19:42:28.17 bWv2IYcS0.net
do-while文で回す意味ってあるの?

401:デフォルトの名無しさん
24/01/17 19:44:52.19 UA2B8Wur0.net
使った人に聞きなさい

402:デフォルトの名無しさん
24/01/17 19:49:06.18 dYqrLAA4M.net
>>394
セミコロンをつけさせるため

403:デフォルトの名無しさん
24/01/17 21:11:00.53 DTNbW1I/0.net
>>392
答えわかったけど教えない

404:デフォルトの名無しさん
24/01/17 21:21:33.14 Am4HUjmg0.net
>>394
2つ以上の文をマクロ関数の形にするときに、C言語の仕様において最も合法安全とされるイディオムだよ

405:デフォルトの名無しさん
24/01/17 21:47:57.64 i5GqHIkod.net
>>394
たとえば
#define MYFREE(p) free(p); p = 0
と定義すると
if( 条件 ) MYFREE( p );
と書くと
if( 条件 ) free(p); p = 0;
と展開されてしまいp = 0;は条件に関わらず実行されてしまう
またこの後にelse節が続くとエラーになってしまうなど不具合の原因になる

406:デフォルトの名無しさん (ワッチョイ f901-LNAd)
24/01/17 23:38:16.60 bWv2IYcS0.net
>>396,398,399
全然知らなかった
アリガト

407:デフォルトの名無しさん (ワッチョイ 2214-HXAs)
24/01/18 11:04:17.52 0zoYvNSM0.net
>>392
その条件下ならない
でもpが左辺値という前提がなかったら変なコトになるコードが書けるね

408:デフォルトの名無しさん (ワッチョイ 2214-HXAs)
24/01/18 11:04:49.16 0zoYvNSM0.net
>>400
396はゼンゼン関係ないんだけどホントに分かってんのか?w

409:400ではないが
24/01/18 12:19:02.31 5g03qqC30.net
>>402
396 と 399 は異口同音と読んでいたが、主旨違うの?

410:はちみつ餃子
24/01/18 12:27:08.35 LtdZIRKJ0.net
>>402
ブロックではなく do / while にする理由としては関係がある。

411:はちみつ餃子
24/01/18 12:41:36.76 LtdZIRKJ0.net
二つの文が分かれてしまわないようにするだけならブロックで包めばよくて
#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 で囲むといい感じって話。

412:デフォルトの名無しさん
24/01/18 13:15:24.78 hXSenRUz0.net
はちみつ餃子はいい加減改名しろよ、はちみつ先生によ
どんだけタメになる話すりゃ気が済むんだ
目からウロボロスだぜまったく

413:デフォルトの名無しさん
24/01/18 13:17:33.34 opxINJAy0.net
>>392
「せよ」ってなんだよ。何様のつもりだ?

414:デフォルトの名無しさん
24/01/18 20:39:02.28 r48d/DyKd.net
#define MYFREE(p) (free(p), p = 0)
のほうが単純

415:デフォルトの名無しさん
24/01/18 22:45:02.99 twAiz/ys0.net
今どきのCならマクロじゃないといけない場合以外はinline使え。

416:はちみつ餃子
24/01/19 08:59:45.95 vjpbBz8R0.net
>>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);
}
みたいなことをして正しく動作する保証はないはず。
この場合は「マクロじゃないといけない場合」だと思うよ。

417:デフォルトの名無しさん
24/01/19 11:12:10.18 Wkz3Ctqj0.net
mallocが返すのはvoid*だし、freeが受け取るのもvoid*なのに??
保証が無かったら俺達はこれからどうすればいいんだw

418:デフォルトの名無しさん
24/01/19 11:13:32.08 76FyHnUv0.net
printf("Hello, work!");

419:はちみつ餃子
24/01/19 11:18:44.53 vjpbBz8R0.net
>>411
void* の話じゃなくて void** の話をしてる。

420:デフォルトの名無しさん
24/01/19 11:42:42.67 THNGxTXR0.net
printf("Konyanyachiwa, Sekai no Kuni kara!");

421:デフォルトの名無しさん
24/01/19 12:11:49.63 Wkz3Ctqj0.net
void**とvoid*は相互に変換可能じゃないのか?

422:はちみつ餃子
24/01/19 12:19:49.22 vjpbBz8R0.net
変換が可能だということと同じ表現を持つことは別という話。
int* から void* への変換は変換に関するルールだが
int** から void** への変換によって int* を void* として読もうとするのは type punning の問題。

423:デフォルトの名無しさん
24/01/19 12:20:09.89 Wkz3Ctqj0.net
そうなると、
int** a = malloc(sizeof(int*) * 3);
は、保証無いことになるな
俺達はどうすればいいんだw

424:デフォルトの名無しさん
24/01/19 12:25:31.50 Wkz3Ctqj0.net
void** a = malloc(sizeof(void*) * 3);
の方が適切だったか
これで、a[0]の読み書きが保証されないのは困るよ

425:はちみつ餃子
24/01/19 12:27:15.27 vjpbBz8R0.net
>>417
繰り返すが変換の話と表現の話は異なる。
void* は全てのオブジェクトを指すポインタと相互に変は可能であることは保証され、
「malloc が返すポインタに限っては」いかなる型とも適合するように境界調整されていることが保証される。

426:デフォルトの名無しさん
24/01/19 12:34:27.05 3hcnICbb0.net
【AI】Googleの医療面接特化AI「AMIE」は人間よりも正確な診断が可能&患者への印象に優れるという研究結果 [すらいむ★]
スレリンク(scienceplus板)
【AI】Google DeepMindが数学オリンピックレベルの幾何学問題を解けるAIを発表、人間の金メダリストに近い性能を発揮 [すらいむ★]
スレリンク(scienceplus板)
【AI】大学入試共通テスト、3つのチャットAIに解かせてみたら? GPT-4はバケモノだった [すらいむ★]
スレリンク(scienceplus板)
【ナゾロジー】「株価の変動を粒子の振動として理解」量子力学で株式市場の法則を読む! [すらいむ★]
スレリンク(scienceplus板)
【AI】NTT、自分の分身AIを低コストで作る技術。自分の合成音声を簡単に作れる技術も [すらいむ★]
スレリンク(scienceplus板)
ボイス・トォ・スカルのコアプログラムの一部は上記を統合している

427:デフォルトの名無しさん (スッップ Sd22-aNQv)
24/01/19 12:39:29.69 S8ovIeWid.net
何を言ってるんだお前は案件

ポインタの中身は指す対象によってアラインが変わるが
ポインタ自体のアラインは原則一種類しかない

428:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 423e-/YAw)
24/01/19 12:51:29.04 vjpbBz8R0.net
>>421
ポインタは型ごとに異なる表現・境界調整要求を持つ可能性がある。
適合する型へのポインタ同士の場合など同じ表現・境界調整要求を持つ条件が定められているが
最後に「これ以外の型へのポインタは、同じ表現又は同じ境界調整要求をもつ必要はない」と仕様に明記されてる。

具体的な部分は処理系定義なので全部が同じ表現であることをあてにしていい環境ならそうすることは否定しなけど、
常にあてにできるわけでもない。

429:デフォルトの名無しさん (ワッチョイ 463f-ggGG)
24/01/19 13:18:44.56 Wkz3Ctqj0.net
そうは言っても、
void* p = 0;
と直接生成出来るわけで、void*は値としての意味もちゃんとある
それがvoid**にすると元に戻せる保証が無いのは仕様の不備だろw

430:デフォルトの名無しさん (スッップ Sd22-aNQv)
24/01/19 13:22:00.51 S8ovIeWid.net
>>422
それは「ポインタが指す対象」についての記述で
ポインタ自体にはどんな適当な値を書き込むことも可能(そのポインタを使ってアクセスすると何が起こるかわからないというだけ)
ただポインタにNULLを書き込むだけの関数になんの危険もない

431:はちみつ餃子
24/01/19 13:35:18.59 vjpbBz8R0.net
>>424
> それは「ポインタが指す対象」についての記述で
この (>>410) 場合はポインタが指す対象に書き込もうとしている話だが。

432:デフォルトの名無しさん (スッップ Sd22-aNQv)
24/01/19 15:18:43.59 S8ovIeWid.net
>>425
そのポインタは関数への引数であり
すでにvoid*を表すものだと型は決まってるではないか


それとは別に
インライン関数で書いた場合はその場で展開されるから
void* p = 0;と書いた場合と同様にコンパイラが適切な0を書き込んでくれるんじゃないの
つまり(void**)をつけると逆に危険
my_free(&x);
でよい

433:デフォルトの名無しさん
24/01/19 16:04:16.95 dJaf/W/GM.net
ポインタで0リテラルだけは特殊でNULLと同義だったのではなかったっけ

434:はちみつ餃子
24/01/19 16:16:34.10 vjpbBz8R0.net
>>426
> (void**)をつけると逆に危険
これは暗黙に型変換されることが保証される文脈ではないので付けなければコンパイルが通らないだけ。
(コンパイラによっては黙って通すことはあるのかもしれない。)
> インライン関数で書いた場合はその場で展開されるから
言語の意味論としてはインライン関数は
・ 同じ定義なら (翻訳単位を跨いだ場合でも) 複数回定義してもよい (定義が一回の場合と同じ挙動)
・ なるべく高速に呼び出して欲しいことを期待するヒントである (実現方法は規定しない)
ということになってる。
インライン関数がインライン関数ではない関数と異なる動作にはならない。

435:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 423e-/YAw)
24/01/19 16:39:47.61 vjpbBz8R0.net
>>427
せやで。
厳密に言えばリテラルだけじゃなくて「整数の 0 であるような定数 (定数式) をポインタに型変換したときは空ポインタ」というルール。

これも変換に関するルールであって表現に関するルールではないよね。
実際に空ポインタの内部表現が整数の 0 というわけではない環境は存在するが、
型が正しければ適切に変換される。

436:デフォルトの名無しさん (ワッチョイ 25bb-ggGG)
24/01/19 16:53:05.15 CCGmGKuQ0.net
>>429
それ規格書に書いてあんの?知らんかったわ
でも

if (!ptr)

みたいなポインタがゼロであることを期待するような式は処理系依存になるでしょ?

437:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 423e-/YAw)
24/01/19 17:02:59.57 vjpbBz8R0.net
>>430
いや、それがよく出来てて、ポインタをそういう形で条件に使うのは問題ない。
単項演算子 ! について「式!Eは,(0==E)と等価とする」というルールになっていて
等価演算子 (==) はポインタと空ポインタ定数を比較したときの結果を規定してる。
空ポインタ定数のほうをもう一方のオペランドの型に合う空ポインタに型変換するルール。

438:デフォルトの名無しさん (ワッチョイ 25bb-0zjl)
24/01/19 17:32:06.95 CCGmGKuQ0.net
>>431
規格書読んできたけど
6.3.2.3 値0をもつ整数定数式は空ポインタになる
6.5.3.1 式!Eは,(0==E)と等価
6.5.9 ==は空ポインタ定数をポインタの型へ型変換する
ってことか
なるほど、規格を解釈すれば!ptrは空ポインタと比較されることになるから問題ないのか
勉強になったわ

439:デフォルトの名無しさん
24/01/19 18:55:00.05 EWHtqHW90.net
NULLは処理系定義だしこの辺はややこしいよね

440:デフォルトの名無しさん (ワッチョイ 463f-ggGG)
24/01/20 00:57:56.71 QcwVnceA0.net
void*の値は作成出来るけど、表現や境界調整要求は未定義とか、おかしいだろ
Cは現実に則した言語だと思ってたけど、妙な未定義だな
ちなみに、インタープリター型言語を作ったら、オブジェクトはみんなvoid*になる
void*の配列を作成したりとか普通に行われる
もはや規格とか無意味
実装がどうなってるかだけが重要だ

441:デフォルトの名無しさん
24/01/20 10:29:05.14 ZDCHWjSD0.net
>>433
全然ややこしくないでしょ

442:デフォルトの名無しさん
24/01/20 10:30:19.13 UfD1Ji0o0.net
> 実装がどうなってるかだけが重要だ
もちろんその通りだけど規格上未定義なわけだから実装がすべて統一されているとは限らないわけで
その実装における「限らない」が問題なわけでしょ

443:デフォルトの名無しさん
24/01/20 12:47:01.09 Ttk7tIdd0.net
実際に使用する環境に合わせれば良いだけ

444:デフォルトの名無しさん
24/01/20 13:33:03.85 QcwVnceA0.net
各OS毎にABI(Application Binary Interface)が定義されてて、Cの規格で定義されてないところが明確に定義されてる
2つを合わせて現実のC言語なんだよな
だから、JIS X 3010だけを取り上げてどうこう言っても混乱させるだけ

445:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 423e-/YAw)
24/01/20 14:51:47.73 k6CjZuQW0.net
>>434
実際には void* と int* (などのポインタ) が同じ表現なことは多いので
あまり問題 (type punning) にならないと考えるならそうかも。

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

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

私は >>422 で「あてにしていい環境ならそうすることは否定しない」と述べたが、
あてになる確証を得るのは割とめんどい。
言語仕様を調べて分かる範囲で済むならそうする。
少なくとも >>392 をインライン関数にするために手間をかけるなんてことはしない。

446:デフォルトの名無しさん
24/01/20 14:57:01.22 UfD1Ji0o0.net
だから、その環境が不明瞭なこういう場所で問題になるわけでしょ?
実際>>392では「処理系はANCI C準拠」としか言っていないわけだし

447:デフォルトの名無しさん
24/01/20 14:57:54.96 UfD1Ji0o0.net
おっと440は>>437-438アテネ

448:デフォルトの名無しさん (ワッチョイ 463f-ggGG)
24/01/20 15:58:08.13 QcwVnceA0.net
未定義とは規格遊びには便利な言葉だなw
正解はconfigureスクリプトがやってるように、事前に環境を調査して前提にしていい事を明確にして最適な実装をする事だな
なので、言語仕様のみで判断を下す事は不正解と言える
その為にconfigureスクリプトがある
他の言語ではあまり必要ない
Rustとか最近の言語は言語仕様に不明瞭な点は残さないのがトレンドだろう
じゃなきゃそこが脆弱性を生んでしまう

449:デフォルトの名無しさん (ワッチョイ 463f-ggGG)
24/01/20 16:03:47.86 QcwVnceA0.net
>>392のマクロは、副作用のある式を渡したりするとおかしな事が起きる
全くもって脆弱なものだ
そのままで良いのか?
マクロのままにしておくとか、そっちの方が脆弱性を生む事になる
ちゃんと関数化すべきだろ
その為にすべき事は何だ?
それを議論することが正解と言っている

450:デフォルトの名無しさん
24/01/20 16:33:16.28 7OBiWfZx0.net
副作用のある式とは例えば?

451:デフォルトの名無しさん
24/01/20 19:48:07.23 31IXtECu0.net
p++じゃない?

452:はちみつ餃子
24/01/20 19:54:12.68 k6CjZuQW0.net
関数で書いたら問題を避けられるわけ?

453:デフォルトの名無しさん (ワッチョイ 0279-5stn)
24/01/20 21:49:35.15 VgpxxxtV0.net
C言語で今更議論することなんてないよ
気に入る要らないはモダン言語とかでやってなさい

454:デフォルトの名無しさん (ワッチョイ 450a-rpIY)
24/01/20 22:17:38.62 DXZ/M+lB0.net
使用済みのポインタ変数を変なやり方でクリアするとかクソどうでもいい

455:デフォルトの名無しさん (ワッチョイ 22ec-HXAs)
24/01/20 22:21:19.13 7OBiWfZx0.net
>>445
それは考えなくていいでしょ

456:デフォルトの名無しさん (ワッチョイ 463f-ggGG)
24/01/20 22:34:47.06 QcwVnceA0.net
>>446
え?本気でいってんの?
関数で書けば副作用(例えば++p)は1回で済む
当然副作用がある式を書くのは


457:アホだと思うが、少なくとも書いた通りには動く



458:デフォルトの名無しさん (ワッチョイ 463f-ggGG)
24/01/20 22:44:54.31 QcwVnceA0.net
例えば、(uint8_t)malloc(...) + sizeof(int)を返す関数もあり得る
これは前の方にデータを隠すテクニックだ
実はC++のコンパイラで普通に使われている
これを解放する時は、free(p -= sizeof(int))とやらない事もない
まぁ普通はp - sizeof(int)だろうから屁理屈だけどねw

459:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5f3e-3Dea)
24/01/21 00:53:03.43 4rk7TZPC0.net
>>450
解決したい問題はそれだけでいいのか。
それなら意図はわかる。
ただ現実に C の関数を多相化できないのは変えられない前提としてある。
異なる型で扱う必要があるんだから異なる関数を用意するしかないのはどうしようもなくない?

460:デフォルトの名無しさん (ワッチョイ e785-6dvo)
24/01/21 11:37:01.81 yYf7aVwb0.net
多相?
仮にポインタ変数のアドレス を引数で渡したい場合であってもvoid ** じゃなくvoid * を使って、
人間同士がドキュメントだろうが喫煙所だろうがで問題解決しろよってのが規画と整合する答えなんじゃないの

どうせキャストするんでしょうに
バカですか

461:はちみつ餃子
24/01/21 12:09:29.26 4rk7TZPC0.net
void* に変換したなら元の型にキャストしなおさないと保証された動作はほとんどない。
(逆に元の型に変換したときは変換前の値と一致することは保証される。)
元の型を知っているプログラマがキャストすることを期待できる qsort のような使い方なら問題にならないけど、
void* の形で受け取るだけでは関数が出来ることはほとんどない。
文字列を指すポインタに変換してバイト列として読み書きすることはアリなので
オブジェクトの内容はどうでもいいメモリブロック操作系の関数 (memmove など) だとかでも問題はないかな。

462:デフォルトの名無しさん
24/01/21 12:53:39.98 +eMrRol8M.net
簡単な問題だったんだけど答えられる人ほとんどいないのか
相変わらず本題とは関係ない問答しだすアホらもいるし

463:デフォルトの名無しさん
24/01/21 13:01:11.71 fu4eKftF0.net
答えられる人はいるだろうけど、宿題丸投げするやつにエサを与えたくなくて
敢えて書かない人もいるだろう。

464:デフォルトの名無しさん
24/01/21 16:35:59.78 ocg3B/5o0.net
ANCIとか頭悪そうな学校で相手したくなかった

465:デフォルトの名無しさん
24/01/21 16:43:50.02 WaBPg/nL0.net
誰も知らない新規格、か・・・

466:デフォルトの名無しさん
24/01/21 16:44:16.43 sYjtPxaw0.net
宿題スレは別にあった様な気がする

467:デフォルトの名無しさん (ワッチョイ c7df-VcUz)
24/01/21 20:09:55.64 BpmEGVkv0.net
スレリンク(tech板)

468:デフォルトの名無しさん (ワッチョイ 7f2a-Hmn+)
24/01/21 22:42:42.89 fOwYJqZP0.net
UNCI はどうだろう。

469:デフォルトの名無しさん (ワッチョイ 7fab-JMeY)
24/01/22 09:16:06.10 wwjNYCJK0.net
>>445

free(p++);
p++=0; ←ここで文法エラーになるから

470:デフォルトの名無しさん
24/01/22 19:23:27.59 sQG6cOu30.net
このマクロでそんな心配せんでええやろ

471:デフォルトの名無しさん (ワッチョイ 7f63-HLt9)
24/01/22 20:21:33.49 oQuCuzrM0.net
Cに引数の参照渡しってあったっけ?
ないとしたら>>392のMYFREE(p)をマクロではなく関数として書き
その中でp=0としても呼び出した側の変数は変えられないわけで
関数にすることで動作が変わってしまうことになるはずだけど

472:デフォルトの名無しさん
24/01/23 13:25:33.99 DCTvqhlA0.net
そんなこんなでp++マクロには問題が多いからC++が出来たってわけ

473:デフォルトの名無しさん
24/01/23 14:30:32.20 FpD2d5od0.net
なんだそんな理由だったのか・・・

474:デフォルトの名無しさん
24/01/23 14:41:04.92 v+doC8dF0.net
mallocとcallocの引数の指定の仕方が違うのが気になる
これ別であることに理由あるの?

475:はちみつ餃子
24/01/23 15:14:53.60 MIeJSKFF0.net
>>467
言語仕様上は calloc が返すポインタ (によって表されるメモリ領域) は
malloc が返すものと同じようにあらゆる型に対して適切に境界調整されることになっているし、
ゼロクリアするという違いも「全てのビットがゼロ」という意味なので型の性質を考慮しない。
つまりふたつの引数として指定することによって得られる恩恵はない。
実装がまともなら calloc(a, b) としたときの a*b が size_t の大きさを超えてしまうようなときでも
ラップアラウンドして小さな領域を確保するのではなくエラーにしてくれることは期待できる
(間違いを検出しやすい) が、それを理由として引数ふたつにしているというわけではなさそう。
最初に言語仕様をまとめたときに主要な処理系がだいたい準拠ということになるようにしたはずなので
その頃の処理系でなんか理由はわからんがそうなってたって程度の話だと思う。 あまり意味ない。

476:デフォルトの名無しさん
24/01/23 15:47:25.62 v+doC8dF0.net
メリット無いなら統一してほしかったよ

477:デフォルトの名無しさん
24/01/23 16:35:32.21 FpD2d5od0.net
好きな方を使いましょう

478:デフォルトの名無しさん (ワッチョイ 5f8c-/eig)
24/01/24 09:58:59.16 Xnuh8KFs0.net
統一したらゼロクリアするかしないかだけの違いにならん?

479:デフォルトの名無しさん
24/01/24 16:48:12.72 zBKRyD/E0.net
zmallocというマクロを定義すれば解決

480:デフォルトの名無しさん
24/01/25 18:11:36.02 oxF0tkpI0.net
callocはmallocのゼロクリア版として *も* 使えるがそもそもの使い方が違う。

481:デフォルトの名無しさん
24/01/25 20:28:54.55 DorHRoYW0.net
ちなみに C には厳密にいうと価渡し(call by value)しかない
値としてアドレスを渡すので結果として参照渡し(call by reference)
ができることになる

482:デフォルトの名無しさん
24/01/25 20:55:09.83 FFkj9zH80.net
参照って言うと色々誤解を受けるから
Cの場合はアドレス渡しで良いと思う

483:デフォルトの名無しさん
24/01/25 21:27:23.28 xC/Yy1/j0.net
ヘンな用語作るのやめて
ポインタで渡しても値渡しのまま
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} // ウソ文法
みたいなことして呼び出し元に代入できるものが
これのみが参照渡し
参照渡しがある言語ならこんな誤解はしなくてすむ
URLリンク(www.gnu-pascal.de)
> 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.
ポインタを含むあらゆる型に対して、値渡し/参照渡しが存在する

484:はちみつ餃子
24/01/25 21:48:36.73 d9W0b5Ok0.net
JIS の用語集やそのもとになった ISO 規格によれば call by address の定義はパラメタの場所を渡すこと。 ポインタの形であっても場所を渡しているには違いないからあてはまるし、勝手な創作用語というわけではない。
言語の理屈ではポインタもポインタという型の値だがそれの活用方法に名前が付いて悪いってこともない。
言語仕様の話をしているときに混ざってくると「んっ?」とは思うが。

485:デフォルトの名無しさん
24/01/25 23:01:13.98 NizTAU7c0.net
ポインタなのに値渡しとか言ってる奴まだいるのかw
そういうのはポインタ渡しで良いんだよ
アドレスを値渡し→ポインタ渡しでいいんだよ

486:デフォルトの名無しさん
24/01/26 00:30:31.26 /aFBudAaa.net
>>472
zalloc にしようぜ

487:デフォルトの名無しさん
24/01/26 00:35:29.44 xuVVqQKb0.net
>>478
>アドレスを値渡し→ポインタ渡しでいいんだよ
だよな。

488:デフォルトの名無しさん (スププ Sd7f-MQtI)
24/01/26 08:38:30.55 Nbs9AoGZd.net
Cの文法規則がいいかげんなんだよ

489:デフォルトの名無しさん (スプッッ Sdff-ytPG)
24/01/26 09:12:22.82 f6TAFOdQd.net
>>481
>Cの文法規則がいいかげんなんだよ

だよな

490:デフォルトの名無しさん (ササクッテロラ Sp7b-NMAD)
24/01/26 09:47:41.79 5qejItpup.net
アドレスと言う値を渡してるのだからどちらも同じ事だろ

491:デフォルトの名無しさん
24/01/26 10:37:55.79 mR+OAnS80.net
いい加減なところが好かれる理由

492:デフォルトの名無しさん
24/01/26 10:46:46.89 Tqv1qsfwp.net
アセンブラまんどくさいから作ったのがC
だから型がイイカゲンなのはアセンブラやってる人が対象だから

493:はちみつ餃子
24/01/26 10:52:28.10 6gE8lNl00.net
イイカゲンにしてるとコンパイラの最適化を有効にしたときに破綻するぞ

494:デフォルトの名無しさん
24/01/26 12:43:22.79 IWVVekFc0.net
>>483
構造体は値渡しとアドレスの値渡しがある
どっちも値渡しというと訳が分からなくなる
なので、構造体は値渡しとポインタ渡しが出来ると言えば便利だ
そうすれば、配列は値渡しが出来ないとも言うことが出来る

495:デフォルトの名無しさん
24/01/26 13:17:11.83 hEzJutz20.net
C++で参照が登場したので「アドレスの値渡し」とか言っている訳で
C++を知らんと意味不明だし違和感あるだろうな

496:デフォルトの名無しさん
24/01/26 14:03:32.73 OnjHbhExM.net
C++がどうのとかは全然関係ないでしょ

497:はちみつ餃子
24/01/26 14:07:19.39 6gE8lNl00.net
C++ とは関係ないと私も思う。
仮引数と実引数の関係は (型がポインタかどうかに関係なく) 値の代入であるということになっている。
繰り返すが言語仕様上の理屈では解釈の余地なく全ての引数は値呼びのメカニズムで規定されているよ。
C++ の参照と区別するための言い回しではなく仕様上の理屈通りに言えばそうなるってだけ。

498:デフォルトの名無しさん
24/01/26 14:12:08.41 u8n9O9U10.net
それで結局
&var
の値はポインタなの?アドレスなの?
どっちでもいいんだよね?

499:はちみつ餃子
24/01/26 14:57:45.80 6gE8lNl00.net
「アドレス」と「ポインタ」の使い分けはイマイチわからないんだよなー。どっちでもいいと思う。
単項演算子の & にはアドレス演算子という名前がついていてアドレスを返すとも書いてあるのでこれについてはアドレスと言っていいのは間違いない。
ポインタは型の種類のように使われてることもあるし、ポインタ型の値のことを指しているように見える箇所もある。
個人的感想としてはアドレスのほうが低レイヤ寄りの概念でポインタは型で意味付けしているような雰囲気を感じてるんだけどあまりはっきりしない。

500:デフォルトの名無しさん (ササクッテロラ Sp7b-NMAD)
24/01/26 16:28:15.83 TUEfKZ6Qp.net
参照渡しと実体渡しかw
あれも、アドレス渡しとコピー渡しって言えばいいのにね

501:デフォルトの名無しさん
24/01/26 16:55:28.58 VvnpRsjB0.net
アドレスは、数値が主体でそれが何を示しているかの説明の為の単語。
ポインタは変数の一つで *p や p->a 等の動作も含めての設計思想。
などと意味不明な(ry

502:デフォルトの名無しさん
24/01/26 17:26:29.97 CEoHa9Fg0.net
アドレスは値
ポインタは型だよ
正確にはintのポインタ型とか言うけど

503:デフォルトの名無しさん
24/01/26 17:35:02.08 WoOISbdM0.net
ポインタはポインタ値を格納する場所

504:デフォルトの名無しさん
24/01/26 17:36:54.25 CEoHa9Fg0.net
場所と言うのは曖昧な表現だな

505:デフォルトの名無しさん (ワントンキン MM4f-NhvB)
24/01/26 18:03:51.31 Vqpo1a/ZM.net
アドレスは値で右辺値、ポインタは変数でオブジェクトで左辺値
こんな基本的なこと、頼むよ

506:デフォルトの名無しさん
24/01/26 18:27:39.65 GfgH9lD40.net
>>498 正しくない。ポインタ型の変数 int* p に対して p + 1 もポインタだけど、変数でも左辺値でもない。

507:デフォルトの名無しさん
24/01/26 18:29:01.58 WoOISbdM0.net
ある時はメモリーのサラリーマン、ある時はレジスターの探偵

508:デフォルトの名無しさん
24/01/26 19:46:30.13 XBTJ48xK0.net
規格上はどうなってるか知らんが
ポインタでいいじゃん統一しろよ
変数へのポインタを取る時アドレスと言いたくなるんやろな
分からんでもないが使い分ける必要はないと思う
アドレスといいつつ結局ポインタでしかないやろ?
場所だけじゃなくて型のサイズも持ってるでしょ?
アドレスと聞くと番地だけってイメージだけど
ポインタっつうのはそれに加えてサイズも持ってるのがミソ
だから不必要にアドレスと言い直す必要はない
だって実際にポインタしか扱わないんだから

509:デフォルトの名無しさん
24/01/26 20:04:10.51 Su75gAlu0.net
アドレスっていう言葉は規格には出てこないと予想してた。
規格にはポインタだけあればよくて、アドレスは実装の仕方のイメージがある。アドレスは多くの場合整数になるが、文字や文字列でもいいというような。

510:デフォルトの名無しさん (ササクッテロラ Sp7b-NMAD)
24/01/26 20:45:56.85 wwCmUZ7Wp.net
アドレスってアセンブラ屋さんが言う奴?

511:デフォルトの名無しさん (ワッチョイ 5f36-zwhO)
24/01/26 21:05:55.41 pu3OCH3K0.net
バイナリーエディタやメモリエディタでも言うよな。

512:デフォルトの名無しさん (ササクッテロラ Sp7b-NMAD)
24/01/26 21:07:17.18 coh7wFVpp.net
バイナリエディタのはアドレス違うよなぁ
メモリーエディタはアドレスだからいいけど

513:デフォルトの名無しさん
24/01/26 21:11:38.94 Vqpo1a/ZM.net
>>499
p+1はアドレスだよ

514:デフォルトの名無しさん (ササクッテロラ Sp7b-NMAD)
24/01/26 22:21:03.31 PDBFw7tbp.net
ポインターだろ

515:デフォルトの名無しさん (ワッチョイ e730-qZe7)
24/01/26 22:21:36.46 XBTJ48xK0.net
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の結果が違う番地になるのは
ポインタが大きさを知っているから
これが単なる整数とは違うところ

516:デフォルトの名無しさん (ササクッテロラ Sp7b-NMAD)
24/01/26 22:22:12.95 8+XG8rAlp.net
アドレスと言えるのは直接ハードウェアにアクセスするものだけだよな

517:デフォルトの名無しさん (ワッチョイ e7bb-iTDz)
24/01/26 22:29:00.75 kxxVAnT60.net
規格書の加減算のとこにはp + 1の結果が何になるか書いてある?

518:デフォルトの名無しさん (ササクッテロラ Sp7b-NMAD)
24/01/26 22:36:52.96 tuyRrB6Ip.net
p+1の結果は、pの型によって違うやろ

519:デフォルトの名無しさん (ワッチョイ e7bb-iTDz)
24/01/26 22:48:45.51 kxxVAnT60.net
規格ちょっと読んだけど加減算のところには結果がアドレスになるかポインタになるか書いてなくね?

520:デフォルトの名無しさん (ワッチョイ df20-NMAD)
24/01/26 22:49:56.05 4G76jppe0.net
>>512
アドレスはポインタのエイリアスだろ?

521:デフォルトの名無しさん (ワッチョイ 5f10-iTDz)
24/01/27 00:39:52.91 RxNi/RLS0.net
だから、アドレスは値で、ポインタは型なんだ
p + 1はpの型によって結果が決まる
intかintのポインタ型かで結果が変わる

522:デフォルトの名無しさん (ワッチョイ 5f7c-ytPG)
24/01/27 00:55:04.46 3j95TwYq0.net
>>514
>だから、アドレスは値で、ポインタは型なんだ
>p + 1はpの型によって結果が決まる
>intかintのポインタ型かで結果が変わる

だよな

523:デフォルトの名無しさん (ワッチョイ e7bb-iTDz)
24/01/27 01:15:46.64 lTO1GYgs0.net
>>514
規格読み直したら加算の結果はポインタになるって書いてあったわ

524:デフォルトの名無しさん (ワッチョイ 5f7c-ytPG)
24/01/27 10:42:42.11 3j95TwYq0.net
>>516
何章?

525:デフォルトの名無しさん (ワッチョイ 4710-zwhO)
24/01/27 14:54:07.21 IaaZCBNA0.net
(int)(p+1)-(int )(p) == sizeof (*p)
だっけ?

526:デフォルトの名無しさん (スプッッ Sdff-ytPG)
24/01/27 15:00:52.15 Go/zq51jd.net
>>518
intは32bitのLP64環境ではどうなるんだい?

527:デフォルトの名無しさん (ワッチョイ 4710-zwhO)
24/01/27 15:08:44.06 IaaZCBNA0.net
コンパイルエラーか警告でて下位32bitのみ取得じゃね?
sizeof (*p)がint_max超える設定でもなけりゃ目的は果たせそうだけど。

528:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5f3e-G0Zh)
24/01/27 16:02:39.58 TmJLT/yO0.net
ポインタは整数に型変換できるけどその値がどうなるかは処理系定義。
変換結果がその整数型で表現できなかったときは未定義。
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));
}

529:デフォルトの名無しさん (スッップ Sd7f-hxDZ)
24/01/27 17:07:11.96 JGqkehCyd.net
はちみつの説明はちっとも頭に入ってこん
3行にまとめてから貼れ

530:デフォルトの名無しさん
24/01/27 17:46:47.32 gXnDqsx80.net
>>518
つまりこのコードはダメってこったね

531:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 478b-3Dea)
24/01/27 18:21:39.29 ubKEU+Fr0.net
>>522
関連する規則は関連する規則の数より減ることはない。
根拠不明でいいなら削るけどそんな説明を見たいのか?

532:デフォルトの名無しさん (ワッチョイ e763-amFq)
24/01/27 18:27:31.62 8jAlHp2M0.net
3行しか文章解読できないなら、コード書くのは辛いだろう

533:デフォルトの名無しさん (ワッチョイ e7bb-iTDz)
24/01/27 18:41:16.06 lTO1GYgs0.net
>>517
「加算」でページ内検索すればすぐ見つかる

534:デフォルトの名無しさん (ワッチョイ 6f5f-YGpO)
24/02/22 19:08:43.26 rfW+Fz5e0.net
errno ってどうしてスレッドごとに別々につかえるの?

535:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7332-tW/T)
24/02/22 19:34:35.22 o0M/RgFs0.net
>>527
「どうして」というのはそういう仕様になっている理由?
それともそれを実現している方法のこと?

536:デフォルトの名無しさん (ワッチョイ 6f5f-YGpO)
24/02/22 19:51:00.46 rfW+Fz5e0.net
>>528
方法のほうですね
__thread ?とかってgcc固有?って聞いたけど
gcc以外とか大昔とかどうやってんのかなーって

537:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7332-tW/T)
24/02/22 20:08:19.54 o0M/RgFs0.net
>>529
errno は型 int を持つ変更可能な左辺値に展開されるならマクロで定義されてもよいことになっている。
昔の C には記憶域期間の分類にスレッドは無かったが
#define errno *__foo()
みたいな感じで定義しておいて、
この関数がスレッドごとに適切な場所を返すように作っておけば辻褄は合う。

538:デフォルトの名無しさん
24/02/22 21:32:39.53 rfW+Fz5e0.net
>>530
これでerrnoの初期化とかできるのか? なるほどできるのか。よくできてるね

539:デフォルトの名無しさん
24/02/22 22:17:46.64 3b0UfxEB0.net
結局、スレッド処理がいい具合にリンクしてくれてるって事だね

540:デフォルトの名無しさん
24/02/23 15:59:36.95 HdyUmXx/0.net
>>529
別にTLSの文法がなくてもコンパイラにTLS相当の非公開機能があれば実現可能。

541:デフォルトの名無しさん
24/02/24 16:12:18.49 +4BfNMQz0.net
TLSと言えばゲームの方やね
バタ語を略したスレッドローカルストレージではないんや
このスレの世代的にも半数以上がそう思って口に言わずとも突っ込んだ経験があるはずや

542:デフォルトの名無しさん (ワッチョイ bfbd-X6hX)
24/02/24 16:17:18.15 dGxq80rr0.net
ゲーム? バタ語? 何を言ってるのか分からない。

543:はちみつ餃子
24/02/24 16:54:19.76 felFEjYK0.net
「TLS ゲーム」でググったらトゥルー・ラブストーリーが出てきた。
タイトルは聞いたことがあるけどやったことないし、 TLS なんて略称にはなじみがないわ。
Transport Layer Security と被っとるやないけというツッコミはしたくなったことはあるが。
バタ語ってなんや?

544:デフォルトの名無しさん (アウアウウー Sae7-LYxY)
24/02/24 23:04:08.46 a3fFW9uua.net
ここの人は並列計算についても答えるの?
それともスレ違い?

545:デフォルトの名無しさん (アウアウウー Sae7-LYxY)
24/02/24 23:05:48.99 a3fFW9uua.net
スレ違いなら何処が適してるの?

546:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5f32-a3My)
24/02/25 01:01:43.21 m/LZ7YZH0.net
>>537
一応は C の名前を冠したスレだからその質問が言語仕様に関わる質問ならこのスレでいい。
C を使ったロジックの組み立てかたみたいなのもある程度は許容されると思う。
環境に固有の事情が絡むならそれぞれのスレのほうがいいこともある。
Win32api スレとか Unix スレとか。

547:名無し兎と鰻の大乱闘
24/02/25 23:17:51.95 3BSAc3tW0.net
しーげんごってなに?

548:デフォルトの名無しさん
24/02/26 00:50:15.88 mDObVK5g0.net
tlsって毎回アクセスする度に初期化済みかどうかチェックされるんか?
もしそうなら未初期化上等のc言語では特殊だな

549:デフォルトの名無しさん
24/02/26 17:12:35.82 hotfpUjh0.net
【AI】Stable Diffusion 3発表、Soraで話題の拡散トランスフォーマーを採用 [すらいむ★]
スレリンク(scienceplus板)
ボイス・トォ・スカるしている者も攻撃を受けるようになりました

550:デフォルトの名無しさん (ワッチョイ 9e6d-EVRh)
24/02/26 19:38:00.95 7RO6bLyL0.net
こんな Web ページを作りました。ぜひどうぞ。
URLリンク(www7b.biglobe.ne.jp)

551:デフォルトの名無しさん (ワッチョイ b301-43ji)
24/02/27 13:07:12.38 gZVWnZ6O0.net
アクセスしないほうがいいよ

552:デフォルトの名無しさん (ワッチョイ 0a97-46dB)
24/02/27 13:33:45.24 pm1A4e3U0.net
理由は?

553:デフォルトの名無しさん (ワッチョイ 9eb5-EVRh)
24/02/27 17:32:18.89 xGsMPO790.net
>>543 ごめんなさい。言葉足らずでした。

「数値計算結果の画像化など」 という Web ページを作りました。
プログラミング、数値計算、カオス、画像作成と表示
などに興味がある方は、ぜひどうぞ。
URLリンク(www7b.biglobe.ne.jp)

554:デフォルトの名無しさん (ワッチョイ 6763-9+AH)
24/02/27 17:46:48.10 0/infknm0.net
空白のBMPなんて簡単に作れると思うよ
起動したときに自分で作ったら良いと思った

555:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5f32-a3My)
24/02/27 18:03:33.97 NfALWDmT0.net
>>546
ここは C スレなんだから C で書いたほうが親切じゃないかな。
まあ実質的にはほとんど C みたいな書き方だけども……

556:デフォルトの名無しさん
24/02/29 11:21:59.57 lAXCV22P0.net
>>0548
>546 です。C++ に特有な機能は、
全くと言っていいほど、使っていませんよ。
pow(x, y) というのは目新しいけど。

557:デフォルトの名無しさん
24/02/29 11:51:17.73 wasjN/NH0.net
30年前で時間が止まってんなこいつ

558:デフォルトの名無しさん
24/02/29 13:30:21.68 tTOuwN9N0.net
拡張子を.cにしてビルドしてみる

559:はちみつ餃子
24/02/29 14:03:45.25 w6pA3tyf0.net
>>549
C++ の機能をほとんど使ってないことはわかってるしそう言ってるじゃないの。
使わないのに C++ の形式をとって C スレに投下するのはちょっと不親切かもねという話をしてるんだよ。
pow (べき乗関数の総称版) は C にもあるし、 C の仕様に入ったのは C99 から。
それを知らなくて (しかし使いたくて?) C++ にしたという意味なのかな?

560:デフォルトの名無しさん
24/02/29 15:54:08.56 a+kbfZOT0.net
pow()なんてx^y(yが変数)したい時だけでいい
pow(x,2), pow(x,0.5)は、(x*x), sqrt(x)と書いた方がいい
…まさか今時のコンパイラはこれも最適化したりする?

561:デフォルトの名無しさん
24/02/29 16:10:58.46 wvTonBo10.net
しらんけど、今どきだと最適化されるかもしれんね
1+2+・・・+99+100
こんな計算も(1+100)x 50で最適化される記事が昔あったような

562:デフォルトの名無しさん
24/02/29 16:38:23.25 z2rRJOdi0.net
こんな計算って、そのレベルでコンパイラ任せにしてるのか

563:デフォルトの名無しさん
24/02/29 17:09:00.84 QhPTi9Tjp.net
>>554
知らんけど、今は定数は先に計算しちゃうから、その式は1発答えだけになるような

564:デフォルトの名無しさん
24/02/29 17:09:33.30 zz2EilBV0.net
> 1+2+・・・+99+100
最適化というか、畳み込みで 5050に置き換えられるかと

565:デフォルトの名無しさん
24/02/29 18:55:44.88 wvTonBo10.net
例が悪かった、もちろん定数は一発計算してメモリに固定されるけど、
変数を含んでても、冗長計算を変形してくれるコンパイラが出て、gccもそのアルゴリズムを採用したことが昔あったような。

566:はちみつ餃子
24/02/29 19:13:29.86 eV7kgdtT0.net
数値計算関連の関数はコンパイラによる最適化がなくても関数の内部が複雑な場合分けで対処してることが多いと思う。
GNU のやつとかだいぶんごちゃごちゃしてる。

567:デフォルトの名無しさん
24/02/29 19:19:48.52 z2rRJOdi0.net
人間が思いも付かなかったアルゴリズムで解いて見せたりして
人間が解析しても何故正しいかが分からなくなる

568:デフォルトの名無しさん (ワッチョイ 4aae-8VSo)
24/03/01 02:42:07.06 4OWvqJMX0.net
floatが絡むと誤差の出方が変わって結果が変わるから、式を変形するような最適化は不要だ
変形しても良いよというのが-ffast-mathだな

569:デフォルトの名無しさん
24/03/07 00:36:21.20 D7Ff69360.net
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t sighandler);
signal関数の第1引数のシグナル番号(signum)と第2引数のハンドラ関数が実際に呼ばれたときに引数に入るシグナル番号(1行目の引数のint)は必ず一致する認識ですがあっていますか?
その場合はハンドラ関数では引数に入るシグナル番号は最初から分かっているはずですが、わざわざ引数にシグナル番号を取っている理由はなんでしょうか。シグナル番号によって処理を分岐するデカいハンドラ関数を作るくらいしか思いつきませんでした。

570:デフォルトの名無しさん (ワッチョイ 9f79-rZWy)
24/03/07 01:20:52.75 yhOhiWWp0.net
時間の無駄だからsignalのことは忘れなさい
時代遅れのCランタイムで本当に役立つものはごく少数しかない
そんな化石はスルーしてOSに用意された目的に合うAPIを直接使いなさい
Cランタイムのソースコードがある処理系なら読んでみると良い

571:デフォルトの名無しさん
24/03/07 04:56:12.94 3rDFlX/H0.net
signalの代替は無理だろ
ランタイム自作しろとか言うのか?
sigalrm使うなぐらいならわかるが

572:デフォルトの名無しさん (ササクッテロロ Sp4f-/BY0)
24/03/07 10:24:21.94 m0jtu/KQp.net
OS機能呼び出すとか移植性無視かw

573:デフォルトの名無しさん (ワッチョイ efe7-Y1S9)
24/03/07 10:26:04.98 u0AQ7cvO0.net
>>565
今は環境に合わせて移植するのではなく、環境を移植するのが主流だよ

574:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 3b32-FATS)
24/03/07 10:26:06.80 Qh7cJyBm0.net
>>562
> 必ず一致する認識ですがあっていますか?

正しい。

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

Rationale に書かれていないのではっきりしたことはわからない。
おそらく Unix でそうなってたのを追認しただけだと思う。

575:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 3b32-FATS)
24/03/07 10:29:39.62 Qh7cJyBm0.net
>>565
シグナルまわりはどうせほとんど移植性はない。
言語仕様の範囲内だけで可能なものなら不必要に移植性を損なう必要もないけど大抵の場合に無理だと思う。

576:デフォルトの名無しさん (スップ Sdbf-iW2Q)
24/03/07 12:06:04.83 HvQLfDgAd.net
構造体やポインターを理解できたら、C言語をマスターしたと言えますか?

577:はちみつ餃子
24/03/07 12:44:05.75 Qh7cJyBm0.net
>>569
練習用の題材ではなく (自分なりに) 意味があるプログラムを書けたあたりが
一応のマスター (あくまで最低限の出発点だが!) だろうと個人的には思ってる。
プログラミング言語は道具なんだから道具として使えることが重要で、
言語の要素を何個理解したなんてのはたいした指標にならない。

578:デフォルトの名無しさん
24/03/07 13:28:05.42 GWVV9gt00.net
1000行程度のプログラムがすらすら一日で書けたら卒業

579:デフォルトの名無しさん
24/03/07 14:06:12.94 4AOndewA0.net
三行半で済む処理をダラダラ1万行ぐらいに増やすのは、得意なんだけどなあ。

580:デフォルトの名無しさん
24/03/07 15:29:11.48 MNNvXb/X0.net
それはそれで才能

581:デフォルトの名無しさん (ワッチョイ 1f5c-0W2u)
24/03/07 15:56:22.94 tpHaFcPx0.net
>>562
番号を渡す理由はその方が柔軟性があるから
柔軟性の中には>>562で挙げてる理由も含まれる
なおsignal()は時代遅れなのでsignal.hにある別の関数を使うこと

582:デフォルトの名無しさん
24/03/07 20:44:25.94 yfQHOJuW0.net
>>564
signal()なんて使わず、せめてsigaction()にしろということでは?

583:デフォルトの名無しさん
24/03/08 18:40:01.38 6aUIMz1F0.net
>>562
デカいハンドラ関数を作る意図はなくても
同じようで異なる処理(複数のsigal番号の処理をする場合とか)をする時に
入口は一つにしておいて入力パラメータで処理を振り分けるとか普通の設計だと思うが。
わかりやすい例がWIN32APIのWindowProc。
あれがメッセージ番号毎に関数エントリを登録する形式だったら煩雑なことこの上ないだろ。

584:デフォルトの名無しさん
24/03/08 18:58:33.73 iEWrXUyW0.net
Windowってそんなsignalの使い方しないでしょう

585:はちみつ餃子
24/03/08 19:33:39.28 KTmiotGH0.net
>>577
そういう話じゃないから文脈を掴んで。

586:デフォルトの名無しさん (スップ Sd02-R4O2)
24/03/10 23:22:14.50 CPrZIOdk


587:d.net



588:デフォルトの名無しさん
24/03/11 20:07:11.13 comBc+xk0.net
もうC言語は一旦終わりでいいから別の事やりなよ
結局Cだけの知識じゃ何もできんのよ
Cの知識はいざ何か作ろうとなった時に活きてくるよ

589:デフォルトの名無しさん
24/03/11 21:49:00.76 QCWizl2S0.net
プログラマ目指して挫折する人は、別に作りたいものがなくて文法ばかりを勉強するタイプかも。
文法は大事だけど、それ自体はあんまり役に立たないし調べれば済むことに時間をかけるのは程々に
合理的なアルゴリズムを瞬時に思いついて言語に落とし込めるかが大事で、これは経験。

590:はちみつ餃子
24/03/11 22:16:42.73 lga6QF6v0.net
質問サイトとかで「どうすればいいですか?」みたいなのはちょくちょくあるけど「どうなればいいの?」と返したらまともにこたえられないのもよくある。
問題の解法を構築してプログラムの形に落とし込むのが大事だというのはそりゃそうなんだけど、大前提として解決すべき問題が何であるかを認識 (発見) しなきゃならなくて、そこんところで躓いてたら助けるのも難しい。

591:デフォルトの名無しさん
24/03/11 23:43:57.21 a8lYnTon0.net
>>582
相手はその質問で問題提起してるんだろ、なのにお前からは、どうなればいいのって "
解答" を質問者に聞いてたら、そりゃ質問者だって混乱するだろよ。
問題把握以前にお前は国語からやり直すべき。

592:はちみつ餃子
24/03/12 00:26:36.89 WtXn1sYk0.net
>>583
目指すべき形がわからないのにどうすればいいかなんて答えようがないんだから訊くのはあたりまえじゃないの。
(ちなみに質問が不明瞭な場合などのために回答とは別にコメントを付ける機能が stackoverflow や teratail にはある)

593:デフォルトの名無しさん
24/03/12 00:40:50.82 JJnRauRa0.net
分からないのに答えると言うのもどうかと思う

594:はちみつ餃子
24/03/12 00:51:20.24 WtXn1sYk0.net
>>585
答えてない。

595:デフォルトの名無しさん
24/03/12 00:54:27.51 JJnRauRa0.net
相手にしているならば答えてるのと同じ

596:デフォルトの名無しさん
24/03/12 04:56:46.76 T3Ovkjsr0.net
そして放置される と

597:デフォルトの名無しさん
24/03/12 18:16:58.66 TtsgUSZ70.net
てすと

598:デフォルトの名無しさん
24/03/12 18:17:16.76 TtsgUSZ70.net
てすと

599:デフォルトの名無しさん
24/03/13 04:27:54.00 fKc7/92tH.net
Pythonから来たんですけど
C言語では関数だけじゃなくifやforのブロック内部もローカルスコープって聞いて驚愕してます
ループが終わった後のカウンター変数を後続処理で気軽に利用できないって困りませんか

600:デフォルトの名無しさん
24/03/13 04:37:16.09 VFn3B3DS0.net
そうしたいときはスコープの外で宣言すれば値は保持されるので
int i;
for (i=0 ; i<10 ; i++)
{
}

601:デフォルトの名無しさん
24/03/13 04:49:50.63 fKc7/92tH.net
>>592
マジっすか
ChatGPTに聞いたら、そのやり方だと外のiと中のiはスコープが別って言われて混乱しとります
---
一方で、ループの外で事前に同名の変数が宣言されている場合、
forループの仮引数として宣言された変数と同名の変数は別のものとして扱われます。
この場合、forループの仮引数として宣言された変数がローカル変数として扱われ、ループの外で宣言された変数がグローバル変数として扱われます。
これは、C言語において名前の衝突を回避するための仕組みです。

602:デフォルトの名無しさん
24/03/13 05:14:50.31 7oOr7TQ5M.net
ChatGPTあってもバカはバカのままってのがよくわかる

603:デフォルトの名無しさん
24/03/13 07:16:46.92 3+r/Br8X0.net
>>593
int i;
for (int i=0 ; i<10 ; i++) {...}
と書くとそうなる
宣言すると新しい変数ができる
ChatGPTって、機械が自然な応答をすることが目的で、辞書のように使うものではないんじゃないの?
ChatGPTは得た情報がどの程度正しそうなのか重みづけできないんじゃないかな

604:デフォルトの名無しさん
24/03/13 07:39:30.72 DwruCvgD0.net
やさしい

605:デフォルトの名無しさん
24/03/13 08:06:43.61 fKc7/92tH.net
>>595
ありがとう
AIの回答をよく見返したらfor(int i = 0...の解説だった
サンプルコードを示してくれるのはいいけど、自分のような丸々素人だとその意図を理解できないでこういう誤解が生まれる余地はあるね
先生が優秀過ぎて学生がついていけない構図だわこれ

606:デフォルトの名無しさん
24/03/13 08:35:23.86 etRxrqP30.net
ChatGPTを先生にする発想が間違い

607:はちみつ餃子
24/03/13 08:49:20.23 ZL+6IClb0.net
>>597
昔の C++ だとその書き方でも i のスコープは for 文の外側のブロックがスコープになる仕様だった。 (ISO で規格化される前のやつ。)
その頃の C の仕様ではそもそもそこで変数の宣言を出来なかったが処理系の拡張として C++ 風のやりかたをできるようにしているものもあった。
後に C++ の仕様は変更されて、 C には C++ の変更後のやり方で導入されることになったんだが、しばらくはスコープの仕様に混乱があった。
数十年前の一時期の混乱に過ぎないからそれ自体は今では気にする必要はないんだけど言語仕様は変更されることもあるし、色々と歴史的事情もある。
古い仕様を根拠にした解説もあるから AI が区別せずに学習したら辻褄の合わないことも起こると思う。
まあ人間が書いた解説も変なのは少なからずあるから AI を批判するわけじゃないけど……まあ一番最初くらいは入門書を読んだほうがいいんじゃないかと個人的には思ってる。

608:デフォルトの名無しさん (ワッチョイ f260-3wDj)
24/03/13 09:06:40.92 hNY0+4ik0.net
カウンター変数を気軽に使うのが間違い
そういう時は何かが間違ってると思った方が良い
俺がGPTならそう回答するw

609:デフォルトの名無しさん (ワッチョイ 82ad-g1JC)
24/03/13 09:49:08.95 LIF5w4hC0.net
ちょっと何言っているのか分からない

610:デフォルトの名無しさん (ワッチョイ 692a-fdoY)
24/03/13 09:57:47.91 X1fgAQyG0.net
気が重い中で使うのが正しい。獅子咆哮弾だね。

611:デフォルトの名無しさん
24/03/13 10:34:26.85 u8+Aa1acd.net
>>597
ChatGPTは嘘言うので使うのやめたわ。
どこかの大学の調査で学生だか生徒だかが、ChatGPTの嘘情報で間違ったまま覚えてる弊害が出始めてるとか言ってたわ。

612:デフォルトの名無しさん
24/03/13 10:46:18.64 JwtpXuCEp.net
あれは創作小説を生成する装置なのに
なんで実用性あるんだと思うんだろ?

613:デフォルトの名無しさん
24/03/13 10:57:53.06 etRxrqP30.net
実用性はあるけどな
使い方の問題
現役でいたかったらgithub copilotぐらいさわっとけ

614:デフォルトの名無しさん
24/03/13 11:09:39.04 hk9QG/kC0.net
>>603
自転車だってパンクするかも知れん
ChatGPTも嘘言うことあるかも知れん
わきまえて使えばどちらも強力なツールだ
自転車で転んだからって乗るのをやめるかい?

615:デフォルトの名無しさん (ワッチョイ 8563-lhhw)
24/03/13 11:43:22.70 WwA56xS10.net
嘘って言うのは人間が評価した上での話
ChatGPTに取っては与えらた入力データから
もっともらしいものを出力しただけ

ChatGPTに嘘をつかせるってのは、難しい
仮に知性というものが芽生えて、自意識が発生し
そのことを人間に隠さないといけないと判断して
そうするなら、それは初めて嘘をついたとなる

616:デフォルトの名無しさん
24/03/13 11:51:20.55 8jq/IdEqM.net
嘘であることと嘘をつこうと思ったかどうかは別だろ

617:デフォルトの名無しさん
24/03/13 11:51:45.77 LIF5w4hC0.net
>>604
創作小説を生成することが「実用」ではないと?
君にとっての実用性とは何なのかね?

618:デフォルトの名無しさん
24/03/13 12:01:22.65 WwA56xS10.net
「この電卓は嘘つきだ!」

619:はちみつ餃子
24/03/13 12:20:13.23 y7g8qbWf0.net
ChatGPT の言語能力は高いがプログラミング教育を受けてるわけじゃないからなぁ。
頭のよい素人がググりながら要約したくらいの正確さだと思う。
根拠になる仕様の項目を問うたときにまるでデタラメを返したりするのはかなりあかんとこ。

620:デフォルトの名無しさん
24/03/13 13:20:48.95 I6g3m+gC0.net
>>609
マ板で愚問w

621:デフォルトの名無しさん
24/03/13 13:40:02.23 hNY0+4ik0.net
>>610
Windowsの電卓で嘘をつくバグが有ったなw

622:デフォルトの名無しさん (ワッチョイ f260-3wDj)
24/03/13 13:53:23.57 hNY0+4ik0.net
>>601
ループ変数を後から参照する状況は、ループがbreakで中断したかを確認したい時だろう
そういうのは別の関数に切り分けて、ループ内でbreakじゃなくreturn trueで返すようにすべきだな(関数の最後はreturn false)
C++で言うstd::any_ofみたいな事が出来ないから、関数に切り分けるしかない

623:デフォルトの名無しさん
24/03/13 15:56:31.82 etRxrqP30.net
小さい関数ならちまちま切り出さなくていい
読みにくいだけ

624:デフォルトの名無しさん
24/03/17 16:04:44.01 k+jArioy0.net
最短経路問題で perl5 で書いたのがOut of memory!
こんな時はC言語などで書き直すのが選択肢だけど
みんなはいきなりC言語などで書きますか?
それとも、最初は書きやすい言語で処理速度以外の所を決めてからC言語などで書きますか?

625:デフォルトの名無しさん
24/03/17 16:19:49.43 JxbO9kgq0.net
perlの実装があるならそれを使って色々検討するんじゃないか

626:デフォルトの名無しさん (ワッチョイ 8163-IOXH)
24/03/17 16:32:03.14 WugnipTo0.net
perl5って64ビット版もあるでしょう?

627:デフォルトの名無しさん (ワッチョイ 292a-B9kV)
24/03/17 16:47:02.59 8QBAFOMi0.net
ここの人たちなら習わぬ Perlで下書きするより勝手知ったる Cで書くんじゃないの。
Perl開発上の問題はPerlスレで訊ねた方が、実情に即したレスが反りそう。

628:デフォルトの名無しさん (ワッチョイ 8163-IOXH)
24/03/17 16:50:04.16 WugnipTo0.net
問題文と、組み立てたであろうアルゴリズム聞かないと、何とも言えない

629:デフォルトの名無しさん (ワッチョイ 8163-IOXH)
24/03/17 19:48:46.79 WugnipTo0.net
Perlスレ見てみたが、相談できそうな所が無かった
回答あるか分からないが、お題スレに問題文投げて解いてもらう
いろんな言語に精通している猛者が多い(Perl達人もいたはず)
PerlではなくC言語でと言うなら、ここで相談できるかもしれない

630:デフォルトの名無しさん
24/03/18 10:33:19.79 0IkoPQje0.net
最短経路・グラフ理論・ダイクストラとか?
アルゴリズム系は、Python でしょ。Ruby も
有名な蟻本「プログラミング・コンテスト・チャレンジブック」は、C++
C は知らない

631:デフォルトの名無しさん
24/03/18 10:37:04.28 U2viu6Jop.net
Pythonは、アルゴリズムって言うより
マトリックス計算機

632:デフォルトの名無しさん (ワッチョイ 59ad-FDlJ)
24/03/18 12:55:06.36 09P0Fui10.net
Perlは最短経路問題のライブラリもなく、速度が欲しければCで自分で書くしかない…ってコト!?
辞めたら? その言語で最短経路問題解こうとするの

633:デフォルトの名無しさん (ワッチョイ 1384-8Hbo)
24/03/18 13:06:20.52 mAsCIn7L0.net
依頼者の返答を待たないと

634:デフォルトの名無しさん
24/03/18 20:11:03.72 H3fBGUmk0.net
perlスレでやれよ
このスレは老害しかいないからperlの話しても通じんよ

635:デフォルトの名無しさん
24/03/18 20:46:39.48 LaT9Whu40.net
perlの歴史は結構古いぞ
年寄りしか扱えないと思ってた

636:はちみつ餃子
24/03/18 21:09:19.87 PY17qgzJ0.net
>>616 は C のコードを書く前に他の言語でプロトタイプを書くことがあるかという質問していて Perl についての質問ではないぞ。
Perl の話は例というか前振りだろ。

637:デフォルトの名無しさん (ワッチョイ 1379-7+fg)
24/03/18 23:52:06.11 H3fBGUmk0.net
そいう話か。1行目しか読んでないわ
最近は大体OS標準のpowershellでざっくり書いて必要なら一部C#だな
pinvokeで恐らくC/C++製のDLLを利用することはあってもCコードを書く機会なんてなくなった

638:デフォルトの名無しさん (ワッチョイ 8163-IOXH)
24/03/18 23:55:42.19 LaT9Whu40.net
じゃあ、だれかCで書いてあげて

639:デフォルトの名無しさん (ワッチョイ b15f-FuGx)
24/03/19 08:32:58.20 Z43bMenl0.net
いきなりperlで書くのと
いきなりCで書くのと何が違うんだろ?

つか、俺は最初に日本語で手順を書くが

640:デフォルトの名無しさん
24/03/19 08:57:10.07 R8jeC9x+0.net
awkが普通だと思ってた
今は違うのか

641:デフォルトの名無しさん (ワッチョイ fbe7-7lhN)
24/03/19 09:24:56.59 D/Ya4WHb0.net
まずはBASICで書いて、速度が欲しいとこだけマシン語に置き換える感じ

642:デフォルトの名無しさん (ワッチョイ 2910-ZAEI)
24/03/19 09:46:27.46 DAgk/2JU0.net
FD起動IPL設計からなのでまずアセンブラで。

643:デフォルトの名無しさん
24/03/19 10:08:59.95 Szfgw2D70.net
FD起動
なんて贅沢なんだ

644:デフォルトの名無しさん
24/03/19 10:39:11.21 Fe9RIXyY0.net
>>631
いきなり perlで書いたソースは既にあって、実行するとメモリ不足になるのでしょ。なので、
いきなり(perl以外の)書きやすい言語で書くのと
いきなりCで書くのと何が違うんだろ?
と訊くべき。

645:デフォルトの名無しさん
24/03/19 11:11:47.95 Szfgw2D70.net
昔MZシリーズなんていう8ビットPCがあって、
そのマニュアルにペントミノを解くというプログラムが載っていた
しかし実行しても1日掛かっても回答が出ない
16ビットPC用のCで書き直したら、5分で終わった
ついでにアセンブラにしたら、1分だった

646:デフォルトの名無しさん
24/03/19 11:29:09.76 FLREyswN0.net
Perlでアルゴリズムのプロトタイプ書くおじいちゃん、まだ生きていたのか
普通の若者はプロトタイプはPythonで書くんだよな。何故ならネットにダイクストラでもなんでも落ちているから
このおじいちゃんは新しい言語を勉強出来ない人間だし、かといってプロトタイプなしで初手Cで書けるような積み上げのある猛者というわけでもない
引退した方が良いのでは?

647:デフォルトの名無しさん
24/03/19 11:32:03.00 Szfgw2D70.net
じゃあ、代わりに書いてあげて

648:デフォルトの名無しさん
24/03/19 12:27:21.10 h/UmP7BY0.net
やるならせめてc++でやれよ
わざわざcでやる意味ない

649:デフォルトの名無しさん
24/03/19 12:37:23.65 SMOg7wK30.net
翻訳先が Cなら、
Perl より Python の方がコスト(手間)高で、いっぱい損な気ガス
# ダジャレに気付かないのはダレジャ

650:デフォルトの名無しさん
24/03/19 14:22:26.70 VlZcx0wQM.net
計算量や使用メモリがネックになるのわかってたら最初からc++かcuda
インタラクティブかつビジュアライズして試行錯誤するときはpython(Jupyter)

651:デフォルトの名無しさん
24/03/19 19:07:27.75 qnPpFeXM0.net
最短経路問題をCudaで解くのはむずくね?

652:デフォルトの名無しさん (ワッチョイ 7bc9-VMz+)
24/03/20 02:30:26.76 yu5B8CqZ0.net
最短経路の解き方を聞かれてるわけじゃないだろ

653:デフォルトの名無しさん
24/03/20 10:52:31.80 +bbLi7EZ0.net
総当たりさせたらいいんだよw

654:デフォルトの名無しさん (スフッ Sdb2-W6Ep)
24/03/24 18:06:00.35 UMIIXnOjd.net
構造体変数の宣言の初期化のとき、ヌルポインタを,{ }でくくらないと、警告が出るのですが、なぜですか? 例えばこんな具合にしないと警告が出ます

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

int main(void)
{
struct monster template = {{0}, 7, 4};

655:デフォルトの名無しさん (ワッチョイ 1261-Juro)
24/03/24 18:20:00.72 XqBtjkZY0.net
>>646
char name[80];に入るのはポインタではなくchar型の配列か文字列

656:デフォルトの名無しさん (スフッ Sdb2-rfcW)
24/03/24 18:24:20.57 UMIIXnOjd.net
>>647 よくわかりました ありがとうございます

657:デフォルトの名無しさん (ワッチョイ 9279-uYHt)
24/03/24 18:43:42.86 TrTyAT7D0.net
なにもわかってなさそうでほほえましい

658:デフォルトの名無しさん (ワッチョイ ad63-Juro)
24/03/24 18:46:07.25 TfhtohDd0.net
構造体云々言う前に、配列の初期化方法についてまず調べろ

659:デフォルトの名無しさん (スフッ Sdb2-rfcW)
24/03/24 18:47:29.73 UMIIXnOjd.net
我ながら Lolです☺

660:デフォルトの名無しさん (ワッチョイ 09f0-d20A)
24/03/24 18:57:40.29 9Ye9tMrz0.net
>>621
Perlでメモリ不足になるってことは循環参照が発生してメモリが解放されない(PerlはリファレンスカウントGC)
もしくは深い再帰でPerl管理のVMスタックが枯渇したか
どちらにしろCで書いてもメモリをバカ食いするのは間違いないから
データ構造を見直すべき
循環参照を見直す、再帰をループに変えるなどを試してみてはどうか

661:デフォルトの名無しさん (ワッチョイ 09f0-d20A)
24/03/24 19:10:42.18 9Ye9tMrz0.net
グラフ構造を使う場合は循環参照は容易に生まれるからな
PerlのScalar::Util::weakenで変数をラップしてやる
こうするとその変数は弱参照になる

662:デフォルトの名無しさん
24/03/25 11:18:02.00 YX1noK3i0.net
弱参照ビオレ

663:デフォルトの名無しさん (ワッチョイ 6fb3-MjEX)
24/04/11 18:10:49.56 h5i5y7Gi0.net
#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");
}

664:デフォルトの名無しさん (ワッチョイ 6fb3-MjEX)
24/04/11 18:12:37.98 h5i5y7Gi0.net
コメントアウトしてる方のforにしても出力結果は同じになります
*付きポインタ変数は、中身へアクセスを意味するからめちゃくちゃな文字列が出力されるはずじゃ・・・?

どうしてなの?

665:デフォルトの名無しさん (スッップ Sd02-nKjL)
24/04/11 19:02:47.99 /0XH+klGd.net
あなたが書いたのは*(pc++)を意味してます

666:デフォルトの名無しさん (ワッチョイ 2363-Ky5X)
24/04/11 19:16:41.38 GKY1RwiV0.net
このソースを何という名前で保存して、何というコンパイラでコンパイルしたかとか、色々

667:デフォルトの名無しさん (ワッチョイ 6fb3-MjEX)
24/04/11 20:20:43.87 h5i5y7Gi0.net
>>657
文句を行ってもしかたがない
そういうものとして納得するしかないんだろうけど、”おかしい”と思ってるCプログラマーは世界中に2億人くらいいると思う

668:デフォルトの名無しさん (ワッチョイ 4ef0-WBP1)
24/04/11 20:25:30.86 RdqITFFi0.net
*も++も単項演算子で適用される優先順位がある
優先順位を意識してコーディングしないと痛い目に合う
a + b == cは想定通りだろうが、a & b == cは想定外の結果になるとかねw

669:デフォルトの名無しさん (ワッチョイ af69-zSwZ)
24/04/11 20:54:35.96 eGBAyvET0.net
足し算掛け算の掛け算をシフトに書き換えたら上手く動かなくなって焦った

670:デフォルトの名無しさん
24/04/11 21:46:39.46 6HtedQOj0.net
>>661
え、なぜ。

671:デフォルトの名無しさん
24/04/11 22:53:39.83 /Kb1qQiM0.net
シフト演算子は加減算より優先度低いのにカッコで囲わなかったって事でしょ

672:デフォルトの名無しさん
24/04/11 23:28:45.21 0Tmkq/lZ0.net
まあ次がんばればいいよ

673:デフォルトの名無しさん
24/04/11 23:29:31.03 RdqITFFi0.net
シフトは乗除っぽいイメージだから加減算よりも先でいいよなぁ
ビット演算子が比較よりも後なのは完全に仕様バグだろ…

674:デフォルトの名無しさん
24/04/11 23:37:48.49 1F4I/FIC0.net
冴えてないときの自分のためにも、他人のためにも、なるべくカッコはつけるかな

675:デフォルトの名無しさん (ワッチョイ e279-V3xu)
24/04/11 23:49:41.77 0Tmkq/lZ0.net
いまさら言って仕方ない事をいちいち書くなよ
お前が次のC言語でも作って人生を棒に振ればいいだけだよ

676:デフォルトの名無しさん (ワッチョイ 4ef0-WBP1)
24/04/12 00:17:11.46 nGLEgXOo0.net
>>667
便所の落書きにぶちギレw
お前の人生はいつも焦燥感に満ちてんだろうなw

677:デフォルトの名無しさん
24/04/12 00:21:54.57 GtdzNQir0.net
>>655
後に現れたC++のiostreamがシフト演算子をオーバーロードし入出力演算子として流用するのに
好都合で、思わぬ役に立つことになったからまあ良いだろ。もしシフト演算子が四則演算子より
優先順位が高かったら、cout << 1 + 2 * 3 << endl を cout << (1 + 2 * 3) << endl と
書かなければならず面倒だった。(C++がシフト演算子を全く別の機能に流用したのは不適切
だったという意見もあるが…)

678:デフォルトの名無しさん
24/04/12 01:13:09.53 nGLEgXOo0.net
>>669
シェルのリダイレクトと概念が一致してるから、最初見た時は天才かよと感心したな
でも、出力の整形が激ムズなんでやっぱり駄目じゃんと気付くまではそう思ってた

679:デフォルトの名無しさん
24/04/12 02:09:51.24 Wv2Zy+UZ0.net
>>656
*pc++ はまず *pc の処理をする。これで pc の差している先にある値を取り出すことになる。その次に pc を一つ分進ませる(実際に加算される値は sizeof(*pc))。
では最初に *pc で取り出した値はどこへ行ってしまうのか? それは何にも使われずにただ捨てられる。

680:デフォルトの名無しさん
24/04/12 07:08:32.50 gi41fiD00.net
*pc++の形はcやってたら所々で見るから否応なく慣れる
個人的にはケチくさい書き方で避けたい気持ちもあるがまぁそういう文化が根付いてるなら合わせざるを得ない

681:デフォルトの名無しさん
24/04/12 07:39:02.10 661KRJs/r.net
>>665
初期のCでは||が無くて論理和も|使ってたためのはず
KかRのどっちかが「後悔してるけど今さら変えられないし」とか言ってた

682:デフォルトの名無しさん
24/04/12 12:25:07.52 OadUyd3Md.net
C言語の標準化委員はC++のほうも兼任してたりするから、ぶっちゃけC言語の改善にはやる気無しだから。

683:デフォルトの名無しさん
24/04/12 13:28:21.08 Lm13J0L60.net
C++もやる気無しだろ

684:デフォルトの名無しさん
24/04/12 14:41:57.50 nGLEgXOo0.net
C++はRustと比較されて安全性に劣るとレッテルを貼られて、どうしたもんか考えあぐねてるところだろうw
言語の拡張に対して完全に方向転換を強いられてるのは間違いない
それはCも一緒だな

685:デフォルトの名無しさん
24/04/12 14:53:32.51 nGLEgXOo0.net
パフォーマンスを損なわずにRustと同等の安全性を追加するか、もうこのままそっとしておくかw、の2択だろう

686:デフォルトの名無しさん
24/04/12 15:20:27.37 dUdcEEpod.net
>>674
もはやbetter Cでも何でもないのに、このスレでも繰り返しc++の話題出す奴居るし、やっぱユーザーも被ってるんだろな
まあCの設計の良否を他言語よりは比較的小さな差異から論じるのに有用だとは思う
おれみたいにC++は書かずともcpprefとか読んで式や文、宣言など局所的な構文知識だけちょっとある人は多かろう(ClassとかCに無い概念は読み飛ばしてて無知)
生まれた順序が逆だけど、FortranがC++とすればF言語/JuliaがCだね
大体サブセット+独自進化、標準化コミュニティ丸被り

687:デフォルトの名無しさん
24/04/12 16:33:17.52 OadUyd3Md.net
C++は好きじゃないからC言語はもっと改善していって欲しい。
nullptr型とか入るの遅すぎじゃね?

688:デフォルトの名無しさん
24/04/12 22:48:41.07 fQv3jEzD0.net
C++はCの機能を保ったまま、ありとあらゆるプログラミングパラダイムを突っ込んだもの
それがベターかどうかは人によるな
ただ、Cと互換性を保ったままそこまで進化したのは奇跡に近い

689:デフォルトの名無しさん
24/04/12 23:16:21.33 pf6tTSyT0.net
Cは概ねC++のサブセットだからしゃーない

690:デフォルトの名無しさん
24/04/13 00:06:24.07 c7UXCLXT0.net
でも、Rustが安全性と性能は両立出来ることを証明してしまってから、一気に旗色が悪くなったw
今まで性能を免罪符にして、多少(かなり?)の安全性を犠牲にしてきたけど、もはや通用しない時代になった
今後どう進化するか見物だな
Cだって対岸の火事ではない

691:デフォルトの名無しさん
24/04/13 01:23:26.45 c7UXCLXT0.net
ちなみに、Rustは安全な代わりに書きたいコードを書けるとは思わない方がいいw
これは書いてみないと分からん感覚だ
書きやすくて安全な言語は存在しないことも証明されたw

692:デフォルトの名無しさん
24/04/13 07:18:38.29 SxW/5mRR0.net
慣れの問題では?

693:デフォルトの名無しさん (ワッチョイ bf5f-/8Es)
24/04/15 00:15:31.26 kwd7Pf0A0.net
必ず遠回りをさせられる感覚は非常にムズムズするよな
あれならgccでstack-protectorとかsanitizeとかガン盛りした方が
気分良く高効率に書けると思った

694:デフォルトの名無しさん
24/04/19 20:19:37.90 5JxGOdzk0.net
今日から戯れに数十年前のx86なGUIのソースをx64に移植し始めたんだが
とりあえずエラーになるGetWindowsLongだかをx64用に書き換えていったらそこそこ動いてしまって、後は文字列が関係する処理だけだ
俺が書いた過去のコードがよっぽど優秀だったようだ
やはり若い頃にソースを沢山書いといてよかった

695:デフォルトの名無しさん
24/04/19 20:37:53.24 5JxGOdzk0.net
x64化でちょっとsize_tの扱いで躓いたので書いておこう
ポインタが64bitだから、その差を取る場合もあるsize_tも64bitなのは理屈では理解できるんだが
明らかに64bit幅が不要な箇所でsize_tに出くわすとおいおいと思ってしまう
これはbit数を明示した型を別に定義した方がよさそうだ
ああまいったまいった

696:デフォルトの名無しさん
24/04/19 23:35:27.85 uO847wzt0.net
>>686
Windows1.0のexeもWindows10(32bit版)でも動くからな
64bit版は16bitコードの実行が廃止されたから無理
APIの方は割と変わってるけど、それでもちょっと直せばビルドできる
優秀なのはMicrosoftの方だなw

697:デフォルトの名無しさん (ワッチョイ 7763-hJEz)
24/04/20 09:49:57.99 U6z53Ozt0.net
温泉旅館の増改築やらせたらMSに敵う奴はいない

698:デフォルトの名無しさん (ワッチョイ 1e01-EjCi)
24/04/21 10:27:21.32 Y4YQdA//0.net
Windows11は最初から32bit版が無いんだよな…
ポインターに64bitも必要ない
36bit(64GB)有れば十分
farとnearポインター復活しても良いよw

699:デフォルトの名無しさん
24/04/21 10:58:55.51 WM7IEXRid.net
win10使ってるけどOffice 97をバイナリコピーして使ってるぞ、とうとう11では動かんのか…?
主にExcel使うが関数の数は劣ってもヘルプは古い方がよく出来てて一般ユーザとしては好み、一々ブラウザ起動されてたらい回しは嫌だ

700:デフォルトの名無しさん
24/04/21 11:03:42.61 z3GhIJnT0.net
可変長サイズのポインターは斬新

701:デフォルトの名無しさん (ワッチョイ 66ad-6Ywt)
24/04/21 13:02:16.05 kDNr1IJ/0.net
Office97は32bitだから動くでしょ
駄目なのはWindows3.1までの16bitアプリ

じぶんもフリーソフトをいくつか64bit化したけどほとんど修正してない
早めにUnicodeにしてたおかげもあるかな

702:デフォルトの名無しさん
24/04/29 16:02:47.44 JmumYEsm0.net
16bitアプリって、今も残ってたっけ?

703:デフォルトの名無しさん
24/04/29 17:53:08.72 Mi5d5RVO0.net
あえて使う人もあんまりいないだろうけど、メンテナンスが止まってる(32bit 化、64bit 化されない)ようなソフトを使いたいってことはそれなりにあることじゃないの。
メーカーがつぶれて消えたりするのもよくあることだしな。

704:名無し兎と鰻の大乱闘
24/04/29 19:42:16.62 Yc7GJpMD0.net
そもそもしーげんごってなに?

705:デフォルトの名無しさん
24/04/29 19:53:54.99 D5HYHAbC0.net
アプリは32bitだがインストーラが16bitなのが結構あるらしい

706:デフォルトの名無しさん
24/04/29 20:59:16.06 JmumYEsm0.net
もしもそんなのがあったら、メチャクチャ話題になってると思うよ

707:デフォルトの名無しさん
24/04/29 22:45:20.14 c1TFMEcy0.net
知り合いにエミュレータ入れたりして凄く苦労してロータス123を動かして業務で使っている人が居る。

708:デフォルトの名無しさん
24/04/30 00:46:15.48 b4FWQSR70.net
使うのに手間はあるとはいえエミュレータが成熟してしまったので
かなり古いソフトウェアを動かしたいならそっちでやれと言えてしまうようになったとも言える。
Windows の互換性維持システムも結局はエミュレータをサブシステムとして
組み込んでるようなもんだしな。

709:デフォルトの名無しさん (ワッチョイ c7fa-WbgR)
24/04/30 10:07:58.44 XgZjmbIB0.net
>>697
ファーレントゥーガとかそのパターンだね

710:デフォルトの名無しさん (ワッチョイ df79-V7Lt)
24/04/30 19:37:21.97 6siWZQQV0.net
なんで16bitの話になったのか理解不能

711:デフォルトの名無しさん
24/05/01 16:53:57.29 udfiR5VM0.net
>>686の辺りから?

712:デフォルトの名無しさん
24/05/01 19:51:41.60 nIC3qyB/0.net
プリプロセッサでモジュール作れるようになるとC++使わなくてもCで十分だな
もっと早めにマスターするべきだった

713:デフォルトの名無しさん
24/05/02 23:28:34.67 gN+cVuNV0.net
CでCOMやれって言われても困るし
逆にC++のがマシってのはその程度か

714:デフォルトの名無しさん
24/05/03 11:04:22.77 RJtMknPi0.net
cでもできるってのと、c++使ったほうが楽ってのでは全然意味違う
チームで混乱を招くという理由以外でのc++ディスりは、大抵理解不足によるアレルギーから来るヒスのことが多い
まあ、そういうヒス起こす人が多いからチームでは使用禁止とかになっちゃうわけだから、り繋がってはいるんだけど

715:デフォルトの名無しさん
24/05/03 11:08:15.33 9ebiuCIb0.net
チャンスあると自分語りを始めるのは、病気だぞ

716:デフォルトの名無しさん
24/05/03 11:51:54.49 RJtMknPi0.net
どういう理論だよ
普通の欲求だろ

717:デフォルトの名無しさん
24/05/03 12:00:23.89 KP5VxXzU0.net
普通じゃなくてガキの欲求


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch