23/06/06 13:06:36.37 h4TMdgn6a.net
>>190
void *hoge は hoge++ 出来ないけど
int *i は i++ 出来るし
double *d も d++ 出来るし
i++ と d++ で足される数も違う
switch case で対応するのはおすすめしない
201:デフォルトの名無しさん
23/06/06 13:23:11.34 Ydo+/HsJM.net
>>198
forkは効率が悪いから必要ない
プロセスは_spawnを使ってスポーンっと産み出すもんだw
202:デフォルトの名無しさん
23/06/06 15:35:36.55 DWV+4S+md.net
GetLastErrorみたいにスレッドローカルにすればいいんだよ
203:デフォルトの名無しさん
23/06/06 21:21:59.69 XFiIFtrgd.net
>>190
そろそろそのやり方自体が賢くないって気づかないかな
204:デフォルトの名無しさん
23/06/06 21:26:13.17 9F60+Uyo0.net
是非賢いお手本をお願い
205:デフォルトの名無しさん
23/06/06 21:43:27.13 t5k+pzJSM.net
switchは良くないと思うよ
利用側でそれぞれの型用に別々の関数を書いて使う人が使い分ける感じじゃないかな
それこそ知らんけどレベルで申し訳ないが
206:デフォルトの名無しさん
23/06/06 22:36:35.79 QLr+SdPOd.net
>>203
毎回関数を作る
だってリングバッファだぞ
目をつぶっていても作れるぞw
207:デフォルトの名無しさん
23/06/07 07:49:00.73 uhVmgr37a.net
>>203
お手本の定番は qsort() だろ
208:デフォルトの名無しさん
23/06/07 08:29:44.13 MtVH7DHg0.net
>>205
そういうのはライブラリ化しておくべき
209:デフォルトの名無しさん
23/06/07 09:26:39.45 PykR7vOnd.net
fread(void *buf, size_t size, size_t n, …
の順もあれば
qsort(void *base, size_t num, size_t size, …
の順もあって
行き当たりばったり感
210:デフォルトの名無しさん
23/06/07 12:34:45.81 hQs7a5Jyd.net
>>207
じゃあ、ほい
struct CUE{
int size;
int max;
int inp;
int out;
char buf[1];
};
struct CUE *create_cue(int size, int max)
{
struct CUE *cue =malloc(sizeof(struct CUE)+size*max);
if(cue){
cue->size=size;
cue->max=max;
cue->inp=cue->out=0
}
return cue;
}
int cue_get(struct CUE *cue, void*data)
{
if( cue->inp ==cue->out )
return 0;//buffer empty
memcpy(data,&cue->buf[cue->out* cue->size],cue->size);
if(++cue->out>=cue->max) cue->out=0;
return 1;
}
int cue_add(struct CUE *cue, void*newdata)
{
int index = cue->inp;
if(++index>=cue->max) index=0;
if( index ==cue->out ) return 0;//buffer full
memcpy(&cue->buf[cue->inp* cue->size],newdata,cue->size);
cue->inp=index;
return 1;
}
目をつぶって作ったのでバグがあっても知らない
要するにこういうことでしょ
他の人が言ってるように型チェックがまったく働かないので俺は使いたくない
211:デフォルトの名無しさん (スッップ Sda2-NC7J)
23/06/07 13:05:36.32 xTW5tL3jd.net
memcpyは余計だな。ポインタを返して後は使用者(自分)に委ねるね俺は
212:デフォルトの名無しさん
23/06/07 14:05:23.13 lsOQP3og0.net
見てないけどCUEって時点でもう程度が知れる
213:デフォルトの名無しさん
23/06/07 15:08:50.29 hYVl7Kw10.net
重箱の鬼の首をとる応用例
・(Perlを)Pearl って時点でもう程度が知れる
・(Daemon を)Demon って時点でもう程度が知れる
214:デフォルトの名無しさん
23/06/07 16:05:48.27 e1NBMLRC0.net
Luciferの事もたまには思い出してあげて
215:デフォルトの名無しさん
23/06/07 21:46:42.98 xi4mV2dDp.net
ダブルスラッシュがコメントに採用されたのどの版から?
216:デフォルトの名無しさん
23/06/07 22:41:36.55 JgjHIelbd.net
>>210
概念的にはgetした瞬間にリングバッファから取り除かれてるはずなので
実際にはバッファが一回りするまで残っているが
消えてるかどうか曖昧で気持ち悪いのでコピーで返したほうが望ましい
まあ好みかもしれんが
217:デフォルトの名無しさん
23/06/08 11:06:02.87 rxjbLVG0a.net
>>214
MSVC じゃなくて MS-C の 3 くらいからあったかも
218:デフォルトの名無しさん (スプッッ Sd02-w9Bk)
23/06/08 12:46:07.00 m0+KFU8md.net
C99から
それ以前でもコンパイラ拡張で//コメントをサポートしてるのはあるらしいけど
以下のようなエッジケースで解釈が変わる
b=a//**/ 2
;
//コメントを認めないならb=a/2;
//コメントを認めるならb=a;
219:デフォルトの名無しさん (ワッチョイ 916e-aXLw)
23/06/08 12:55:42.05 ldHYl5bi0.net
> 目をつぶって作ったのでバグがあっても知らない
そういうのは「作った」とは言わない
220:デフォルトの名無しさん (ワッチョイ 5146-rNJ6)
23/06/08 13:01:02.12 5qYvg3Wg0.net
盲者のモノ作りなど認めない。
221:デフォルトの名無しさん (ワッチョイ 4297-UW6r)
23/06/08 13:06:43.94 2i+h5Gbt0.net
目開けても何も見てない奴いるからな
222:デフォルトの名無しさん
23/06/08 13:39:09.53 JhrUsqpHd.net
野良審査員には餌をやらん主義
223:はちみつ餃子
23/06/08 14:35:42.49 Iro3x2NJ0.net
>>214
C99 からだが経緯としては先に C++ で採用されていたという事情がある。
C with Classes から C++ になる 1984 年頃に BCPL 風を参考にして
スラッシュふたつで始めるコメント記法が導入され、
更に 1998 年にそのコメント記法も含めて ISO の規格として確立した。
C と C++ でプリプロセッサは共用することも多いだろうし
コメントはプリプロセッサで除去するだろうから
C++ で採用された段階で実際には C でもスラッシュふたつのコメント記法を
使えていた環境は割と有ったのだと思う。
224:デフォルトの名無しさん
23/06/08 14:52:55.41 ldHYl5bi0.net
マイクロソフトが独自拡張で当時C++のみのはずの//をCでも許していた
言わずと知れた屈指の大手がやっているので規格が追認することとなった
225:デフォルトの名無しさん
23/06/08 16:45:48.60 JA9B62300.net
gccも使えてた気がする
226:デフォルトの名無しさん
23/06/10 18:04:06.65 Yvl44ooC0.net
90年後半からしか実務で使ってないけどVCでは普通に書けてたな
UNIX系はベンダー製のCの制限が酷かった思い出
227:デフォルトの名無しさん
23/06/10 18:47:34.87 Yrme8ZC10.net
borlandやwatcomでも使えなかったっけか?
228:デフォルトの名無しさん
23/06/10 20:49:31.43 6EfmWVuRd.net
便利だからね
オプションで使えなくすることもできたはず
229:デフォルトの名無しさん (ワッチョイ c1bb-s+nx)
23/06/16 01:45:49.62 q8ApsJJ90.net
int a[3] = {};
int b[3] = {0};
aの初期化はgcc拡張で規格に沿っているのはbの初期化だと記憶していたんだけど、
規格の6.7.8を見るとメンバの個数より波カッコで囲まれた初期化子が少ない場合は暗黙的に静的に初期化するとあった。
この規格の文章を見る限りはaも規格に合致していると思えるんだけど、aがgcc拡張っていうのは本当ですか?
230:228 (ワッチョイ c1bb-s+nx)
23/06/16 02:08:30.52 q8ApsJJ90.net
参照した規格はX 3010:2003 (ISO/IEC 9899:1999) です
231:デフォルトの名無しさん (ワッチョイ e95f-2rqm)
23/06/16 08:46:04.94 qgM8i0iT0.net
>>228
本当。文法が空の {} を許していない。
initializer:
assignment-expression
{ initializer-list }
{ initializer-list , }
initializer-list:
designation(opt) initializer
initializer-list , designation(opt) initializer
C23 から↓で initializer に {} が追加されてようやく通るようになる。
URLリンク(www.open-std.org)
232:デフォルトの名無しさん (アウアウウー Sadd-g1CP)
23/06/16 16:12:05.48 ly+Q1cW8a.net
struct hoge {
char a[];
};
struct fuga {
char a[0];
};
233:デフォルトの名無しさん (ワッチョイ c1bb-s+nx)
23/06/16 16:20:37.85 q8ApsJJ90.net
>>230
なるほど構文規則ってところを見るんですね
どうもありがとう
234:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ c13e-2rqm)
23/06/16 17:28:57.05 QEmhRLek0.net
>>228
gcc でも -pedantic オプションを付けたら警告は出るぞ。
> warning: ISO C forbids empty initializer braces
235:デフォルトの名無しさん (ワッチョイ 0dbb-p8ty)
23/06/17 21:50:15.83 q+Kf8pNU0.net
>>233
知りませんでした!
どうもありがとう
236:デフォルトの名無しさん (ワッチョイ a52d-wYA+)
23/06/25 08:36:37.75 D6GgnyEK0.net
int main(void)って書く流派ってどこでそんなの身に着けたの?
237:デフォルトの名無しさん (ワッチョイ 856e-gmRT)
23/06/25 09:20:49.86 yrM2OONq0.net
>>235
ISO/IEC 9899:2011
5.1.2.2.1 Program startup
1 The function called at program startup is named main. The implementation declares no
prototype for this function. It shall be defined with a return type of int and with no
parameters:
int main(void) { /* ... */ }
238:デフォルトの名無しさん (ワッチョイ 4b46-GfJH)
23/06/25 10:53:26.83 /MLTigPj0.net
>>235
この指摘をしばしば見るが、int main(void) が違反だった時代はいつ頃なの。
239:デフォルトの名無しさん (ワッチョイ a52d-wYA+)
23/06/25 10:56:42.79 D6GgnyEK0.net
C99からint main(void)と書いてもいいらしい
240:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ dd3e-F8yx)
23/06/25 11:13:38.04 +vRVyhzX0.net
main については C89 のときから変わってないよ。
241:デフォルトの名無しさん (ワッチョイ 856e-gmRT)
23/06/25 11:58:52.46 yrM2OONq0.net
>>237
K&R Cにはvoidというキーワードが存在しなかった
242:デフォルトの名無しさん (ワッチョイ a52d-wYA+)
23/06/25 12:22:01.62 D6GgnyEK0.net
K&R第2版にint main(void)なんて書き方出てきた記憶がないんだよね
243:デフォルトの名無しさん (ワッチョイ a397-HUf/)
23/06/25 12:38:23.47 6RRGV0Qg0.net
printf(null);
244:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ dd3e-F8yx)
23/06/25 12:38:51.73 +vRVyhzX0.net
>>241
日本語版だと 41 ページに
「リストが明らかに空であるときには,予約語 void を使うべきである」
と書かれているのを見つけた。
245:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ dd3e-F8yx)
23/06/25 17:09:36.88 +vRVyhzX0.net
関数定義のときに仮引数がゼロ個なら void を書くのは当然の作法なんだから
main についてはどうでも良いとはいえども main だけ空にするのもなんか変じゃない?
246:デフォルトの名無しさん (ワッチョイ 1b79-SnHJ)
23/06/25 19:26:05.36 20Xxe9+j0.net
処理系は引数で任意のスタートアップを指定できるからmain書きたくない需要も満たせるよ
247:デフォルトの名無しさん (スッププ Sd43-W+UZ)
23/06/25 22:39:44.42 7VFzLtX7d.net
>>235
めんどくさいだけだろ
248:デフォルトの名無しさん (ワッチョイ 955f-bte+)
23/06/26 06:14:35.93 F8cl0T7T0.net
めんどくさい流免許皆伝
249:デフォルトの名無しさん (ワッチョイ 4b46-GfJH)
23/06/26 07:16:23.26 xzT4Agq20.net
初級、めんどくさいので略記
初段、めんどくさいので無注釈
免許皆伝、めんどくさいので無ドキュメント
250:デフォルトの名無しさん (ワッチョイ ad5f-9QlF)
23/06/26 08:07:26.96 5ZBA7oeF0.net
組み込み系ならmainに引き数なんて不用
251:デフォルトの名無しさん (スプッッ Sd03-+QuN)
23/06/26 08:52:43.48 r2qj24yMd.net
元々プログラムはまんどくさいを代行するものだし・・・
252:デフォルトの名無しさん (ワッチョイ 856e-gmRT)
23/06/26 12:05:19.83 TXNTP2LF0.net
組み込みでmainか・・・
ベクタテーブル作るときのラベルがマングリングされてないから短く済むけどそれだけ
253:デフォルトの名無しさん (ワッチョイ 856e-gmRT)
23/06/26 12:06:17.67 TXNTP2LF0.net
あ、ここCだっけ
サーセン
254:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ dd3e-F8yx)
23/06/26 13:00:03.75 DZPgqn/v0.net
>>249
main に引数が有るか無いかの話じゃなくて、無いときに void を書くという話題だよ。
255:デフォルトの名無しさん (ササクッテロラ Sp81-9QlF)
23/06/26 13:16:56.95 6bPwUIFfp.net
実際の組み込み系には、二つのmainエントリーがある
引数のある奴と、無い奴な
256:デフォルトの名無しさん (ワッチョイ 856e-gmRT)
23/06/26 13:20:15.17 TXNTP2LF0.net
>>254
組み込みでargcとargvはどんな意味があるってんだ?
コンソールがあるって前提?
257:デフォルトの名無しさん (ササクッテロラ Sp81-9QlF)
23/06/26 13:24:00.16 6bPwUIFfp.net
意味なんて知るか
ブートローダとか色々都合があるんだよ
258:デフォルトの名無しさん (ワッチョイ 9dc9-3ptY)
23/06/26 13:31:08.91 yiohjGaX0.net
環境依存しまくってる部分だとは思うけど
組み込み用のコンパイラでも エントリは main のままなのね
259:デフォルトの名無しさん (ササクッテロラ Sp81-9QlF)
23/06/26 13:43:40.71 6bPwUIFfp.net
組込みの真のエントリーはresetな
でも普通はそこからmainまではハード会社が提供してる
初期化処理が入るからあんまり触らない
260:デフォルトの名無しさん (スッププ Sdab-W+UZ)
23/06/26 16:47:50.70 D5GxB3wJd.net
リンカにわたすオプションで_startだか_resetだかを指定してるだけ(例えばld -e _start)
自分で初期化を書きたければmakefileに先頭ラベルを記述すればいい
261:デフォルトの名無しさん (ラクッペペ MM4b-d+Ca)
23/06/26 17:33:04.45 O3f/yVVZM.net
割込みベクタテーブルのリセット割込みのアドレスがエントリポイント
マイコンのリセットでプログラムカウンタのアドレスが設定される
262:デフォルトの名無しさん (ササクッテロラ Sp81-9QlF)
23/06/26 20:20:34.26 6bPwUIFfp.net
>>260
石によるだろそんなん
263:デフォルトの名無しさん (ワッチョイ 856e-gmRT)
23/06/26 20:39:52.87 TXNTP2LF0.net
K&R Cで「死産だった」とされるentryというキーワードは、多分このへんの話だったんだろうな
264:デフォルトの名無しさん (スプッッ Sd03-eK8M)
23/06/26 20:56:23.88 aG57g/0Md.net
そもそもCPU(マイコン)と、そのCPUの命令セットに翻訳するコンパイラに自由度を与えるためにC言語規格で明言することを少なめにしてる
0x100からカウンタが始まるだのブートローダーが必要だの環境依存の初期化はコンパイラが知ってれば十分。
265:デフォルトの名無しさん (ササクッテロラ Sp81-9QlF)
23/06/26 21:02:50.78 6bPwUIFfp.net
コンパイラは知らないよ
スタートアップライブラリが知ってる
266:デフォルトの名無しさん (ワッチョイ 856e-gmRT)
23/06/26 21:10:49.81 TXNTP2LF0.net
そそ
267:デフォルトの名無しさん (ワッチョイ e3fb-eK8M)
23/06/26 21:26:51.56 L7dTsKCZ0.net
ああそうかコンパイラ自体は初期化手段知らなくてもいいのね
268:デフォルトの名無しさん (ワッチョイ bb2d-ctHD)
23/07/07 14:46:28.07 Cp8NbwGm0.net
#include <stdio.h>
void stack_size_estimate()
{
int dummy; // スタック上に確保するダミー変数
// スタック上のポインタとダミー変数の差を計算
unsigned long stack_size = (unsigned long)&dummy - (unsigned long)&stack_size_estimate;
printf("Estimated stack size: %lu bytes\n", stack_size);
}
int main()
{
stack_size_estimate();
return 0;
}
Windowsで実行すると毎回結果がばらばらになる
269:デフォルトの名無しさん (ワッチョイ e26a-3VO7)
23/07/07 14:52:43.24 RkflWXNN0.net
.textと.bssを比較すりゃさもありなん
270:デフォルトの名無しさん (ササクッテロラ Sp5f-SBEo)
23/07/07 15:00:57.31 Rpkmzd56p.net
プログラムとデータは別れてんだよなぁ
271:デフォルトの名無しさん (テテンテンテン MM8e-OS6S)
23/07/07 16:12:54.67 h0HZTRPQM.net
アドレス空間レイアウトのランダム化 (ASLR)だろ
差じゃなくてポインターの中身を表示してみればいいじゃん
272:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 433e-hRAP)
23/07/07 16:20:17.47 gGTaLgTI0.net
>>267
64bit 版の Windows だとしたら unsigned long はポインタを表すのに十分なサイズではない。
上位バイトが丸ごと抜け落ちて意図した計算が出来てないと思う。
へんなところを引き算するよりベースアドレスを基準に観察したほうがわかりやすいよ。
歴史的事情で Windows ではインスタンスハンドルがベースアドレスそのものということになってる。
273:デフォルトの名無しさん (スップ Sd22-PY2F)
23/07/07 16:42:49.80 LOYSagRvd.net
そういやlongはWindows環境だと32bitだっけか
size_t使ったほうが面倒がなさそう
274:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 433e-hRAP)
23/07/07 16:53:06.75 gGTaLgTI0.net
Windows だとどっちでもいいけど意味の上では uintptr_t のほうが妥当だと思う。
275:デフォルトの名無しさん (ワッチョイ 0e79-p0MK)
23/07/07 16:55:15.60 tybFBPle0.net
いやもう露骨にbit数書いてくれた方がいいわ
int128とか
276:デフォルトの名無しさん (ワッチョイ bb2d-ctHD)
23/07/07 17:07:14.08 Cp8NbwGm0.net
#include <stdio.h>
#include <Windows.h>
void stack_size_estimate()
{
int dummy; // スタック上に確保するダミー変数
SIZE_T stack_size;
// ダミー変数のアドレスを取得
LPVOID dummy_addr = &dummy;
// メモリ領域の情報を取得
MEMORY_BASIC_INFORMATION mbi;
VirtualQuery(dummy_addr, &mbi, sizeof(mbi));
// スタックサイズを計算
stack_size = (SIZE_T)dummy_addr - (SIZE_T)mbi.AllocationBase;
printf("Estimated stack size: %lu bytes\n", stack_size);
}
int main()
{
stack_size_estimate();
return 0;
}
2096444 bytes
になります、予想の5分の1くらいでした
277:デフォルトの名無しさん (ワッチョイ c67c-mdfO)
23/07/07 17:38:01.25 GxNDHmP50.net
>>274
#include <stdint.h> の
int64_tとかじゃあかんの?
278:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 433e-hRAP)
23/07/07 17:44:32.91 gGTaLgTI0.net
ここで欲しいのは「ポインタを格納するのに適した整数型」であって
具体的に何ビットなのかをプログラム上で表現するのは筋違いだと思うんだけど
でもまあどうせ処理系に依存するなら抽象を挟んでもあまり得なことも無いかな
とも思うし、まあそこらへんは感覚的なもんやからね……。
279:デフォルトの名無しさん (ワッチョイ c67c-mdfO)
23/07/07 17:46:08.50 GxNDHmP50.net
>>277
#include <stdint.h>の
intptr_tやuintptr_tじゃあかんの?
280:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 433e-hRAP)
23/07/07 17:49:07.83 gGTaLgTI0.net
>>278
いいよ。
私は uintptr_t が妥当と述べてる。 (>>273)
281:デフォルトの名無しさん (ワッチョイ c67c-mdfO)
23/07/07 17:55:31.01 GxNDHmP50.net
Windowsならこうなってるね
LONG_PTR SetWindowLongPtrA(
[in] HWND hWnd,
[in] int nIndex,
[in] LONG_PTR dwNewLong
);
282:デフォルトの名無しさん (ラクッペペ MM8f-VHD8)
23/07/08 09:25:06.78 ZG00xBJMM.net
それハンドルを取得する関数なのでポインタとはちょっと違う
283:デフォルトの名無しさん (スプープ Sd3f-4U7T)
23/07/08 11:55:06.89 pEcLN/B5d.net
>>275
それで本当にスタックサイズ計算できてるの?
MSの文書だとデフォルトでは1MBと書いてあるし
もし不足が予想されるのならリンクオプションでサイズ変更できるし
本来大きいメモリはalloc系で確保すべき
284:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f73e-kkOg)
23/07/08 12:43:32.13 svQTfB7/0.net
メモリ空間は 64bit あるけどその全てに実メモリが割り当てられているわけでは当然ない。
仮想的なメモリを管理するから API の名前に Virtual とついてて、
AllocationBase は管理している一塊の単位のベースってだけ。
その単位の中の全てがスタック用とは限らないので基準にはならないと思う。
各スレッドのスタックの底は thread information block に格納されているはず。
285:デフォルトの名無しさん (ワッチョイ ff7c-DxV6)
23/07/08 19:02:15.63 wtJKE3gc0.net
>>281
????
286:蟻人間 ◆T6xkBnTXz7B0 (スフッ Sdbf-yJMt)
23/07/08 19:05:04.15 E2jAOZHYd.net
>>281
違うよ。ポインタと同じサイズの整数値を設定できる関数だよん。
型キャストすればポインタも渡せる。
287:デフォルトの名無しさん (スップ Sd3f-hfg2)
23/07/09 12:33:23.59 6bAebKnHd.net
井の中の蛙だったか
あーくだらん
288:デフォルトの名無しさん (ワッチョイ 17b3-S1Rn)
23/07/09 18:21:47.85 nGZbLr+D0.net
#include <stdio.h>
void main(void) {
int card[5][5];
int *p;
p = card;
}
gccでコンパイルすると
aa.c:7:11: warning: assignment to ‘int *’ from incompatible pointer type ‘int (*)[5]’ [-Wincompatible-pointer-types]
7 | p = card;
となります。
エラーではないので動くのですが・・・この警告はどうすれば消えますか?
やりたいことは、2次元で宣言してる変数cardを2次元を意識することなくアクセスしたくて*pに代入しています。
289:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f73e-kkOg)
23/07/09 18:24:43.97 6ZzBc/+b0.net
>>287
p = *card;
290:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f73e-kkOg)
23/07/09 18:31:02.01 6ZzBc/+b0.net
>>287
この場合に card の型は int[5][5] なんだけど
配列は配列の先頭要素を指すポインタに暗黙に型変換されるのが基本ルール
だから式中に card が出てきたら int(*)[5] として扱われる。
この型は int* と互換性のない型ということを警告は言ってる。
型が int(*)[5] であるような式に * を付けたら int[5] ということになるんだけど
上述の暗黙の型変換のルールで int* ということになって p の型と一致するようになる。
故に p = *card; で通る。
291:デフォルトの名無しさん (ワッチョイ 17b3-6GCC)
23/07/09 18:37:18.48 nGZbLr+D0.net
サンクス
292:デフォルトの名無しさん (ワッチョイ 9ffb-9JJG)
23/07/09 18:49:34.69 vTvbeyL00.net
この場合ってpを長さ25の1次元配列として使っていいという保証あるっけ?
`card[0]`の長さ5の配列と`card[1]`の長さ5の配列に隙間がないことが保証されてればいいんだけど
293:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f73e-kkOg)
23/07/09 19:43:00.43 6ZzBc/+b0.net
>>291
二次元配列ってのは理屈の上では一次元配列を要素とする配列と解釈される。
一次元配列で要素間に詰め物が入らないなら二次元でも理屈は同じ。
294:デフォルトの名無しさん (ワッチョイ ff7c-DxV6)
23/07/09 20:21:15.21 DZU7rHSU0.net
アフォはこう書く
p = (int*)card;
先輩方に見捨てられるので気をつけて
295:デフォルトの名無しさん (スプープ Sd3f-4U7T)
23/07/09 20:52:22.88 QgBW0FA9d.net
>>291
心配なら
int card[5*5];
とでも宣言すれば安心だけど
パディングがもしあるなら card[5];の各要素の間にすでに挟まってるはずなので
card[5][5];も同じようにアクセスできるはず
296:デフォルトの名無しさん (ワッチョイ 175f-kkOg)
23/07/09 23:01:01.58 uNLQZN7w0.net
>>291-292
隙間の有無とアクセス保証は関係ないでしょ。少なくとも規格上は。
297:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f73e-kkOg)
23/07/10 00:28:02.91 EhhseXmK0.net
規格上の規定は要素のレイアウトの規定として私は理解してたので
そのレイアウトと矛盾しなければ一次元の配列として
扱っても仕様に反しないという解釈でいたんだが……。
直接的に書かれている演算方法を経由した場合しか許さん
と捉えたなら保証はないのかもしれない。
298:デフォルトの名無しさん (ワッチョイ ff63-kkOg)
23/07/10 00:33:20.12 SSHQru750.net
保証がないと、困るよ・・
299:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f73e-kkOg)
23/07/10 00:36:21.43 EhhseXmK0.net
解釈の余地があるときは安全側 (制約が厳しい側) で解釈しておくのが筋ではある。
300:デフォルトの名無しさん (ワッチョイ ff63-kkOg)
23/07/10 00:53:08.94 SSHQru750.net
元々配列なんて一次元が基本だし、mallocで確保して多次元配列として扱うなんてのもよくあるし
301:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f73e-kkOg)
23/07/10 01:20:39.58 EhhseXmK0.net
>>299
malloc で確保した領域はどんなオブジェクト (少なくとも仕様の範囲内で作れる型に対応するオブジェクト) に対しても適切に境界調整されている。
そこらへんは別の話。
302:デフォルトの名無しさん (スプープ Sd3f-4U7T)
23/07/10 08:43:48.54 Xrxae+evd.net
先頭と領域が確保されていればその間にアクセスできない部分があることはないだろう
そんな器用なことをする必然性がないわ
303:デフォルトの名無しさん (アウアウウー Sa9b-8N3f)
23/07/10 08:47:35.15 7JEyTvQka.net
#include <stdio.h>
void main(void) {
int card[5][5];
int **p1;
int *p2
p1 = card;
p2 = card[0];
}
304:デフォルトの名無しさん (ワッチョイ ff7c-DxV6)
23/07/10 09:02:15.74 BD2ve/J+0.net
>>302
こっちでやれ
スレリンク(tech板)
305:デフォルトの名無しさん (アウアウウー Sa9b-8N3f)
23/07/10 09:24:10.89 dS/bwvgRa.net
>>303
おまえそっちでやれ
○○のはずとかそんなんで書くぐらいなら普通に書け
306:デフォルトの名無しさん (ワッチョイ ff7c-DxV6)
23/07/10 09:29:04.81 BD2ve/J+0.net
>>304
何のことだよ?
307:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f73e-kkOg)
23/07/10 09:53:48.86 EhhseXmK0.net
>>301
オブジェクトのレイアウトについての話じゃなくてポインタ演算に制約がある。
ポインタの演算の結果は配列の要素か配列の最後の要素を
ひとつ過ぎた位置を指さなければならない。
その位置にアクセスする (単項演算子 * を適用する) かどうかに関係なく
ポインタの演算の結果がその条件を満たさない場所を指すときは未定義となる。
(C99 なら 6.5.6 の加減演算子の項目に書いてある。)
今回の場合は *card が返すのは二次元配列の「最初の行」を指すポインタなので
このポインタを元に演算した結果が最初の行の外を指してしまったらダメと解釈できる。
仕様に書かれている演算はその演算に相当するレイアウトで配置される
という意味で解釈することも出来ると私は考えていたが
仕様の文面に厳密に言えば駄目かもわからん。
現代的な処理系ではポインタは由来 (provenance) という概念を持っていて
演算の元になったオブジェクトを外れたら未定義であるということを
利用して最適化することもある。
これは実際にある話で、必然性を言うならそれで速くなる可能性があるという理由がある。
仕様に厳密にしないとわけのわからないことが起こるのが C というものなので
仕様の解釈は大事だよ。
308:デフォルトの名無しさん (ワッチョイ 9fad-kkOg)
23/07/10 10:31:52.15 ifz8cUKw0.net
>>302
p1 = card; の所はコンパイルエラーが出て欲しいところだが、Cだと警告だけ出して先に進んじゃうかな。
309:デフォルトの名無しさん (ワッチョイ ff7c-DxV6)
23/07/10 10:34:39.51 BD2ve/J+0.net
int card[5][5]; となっているとき
&card 二次元配列全体へのポインタ
card 最初の行へのポインタ
*card 最初の要素へのポインタ
310:デフォルトの名無しさん (ワッチョイ bf79-CBkq)
23/07/10 12:23:15.05 pvSg+WfU0.net
2次元配列なんてExcelのRangeオブジェクトが返す配列ぐらいでしかお世話になったことないわ
特に効率的でもないし構造体でええやろ
311:デフォルトの名無しさん (スップ Sd3f-hfg2)
23/07/10 12:47:58.91 Wg7MEfSed.net
何でそこで構造体?
312:デフォルトの名無しさん (ワッチョイ 175f-kkOg)
23/07/10 12:53:57.17 AzWw4sMa0.net
>>308 下2行は正しくない。
313:デフォルトの名無しさん (スップ Sd3f-hfg2)
23/07/10 13:25:18.46 Wg7MEfSed.net
§6.3.2.1の段落2で定める例外にあたらない場合という但し書きが足りないね
悪かったよ
314:デフォルトの名無しさん (ワッチョイ ff63-/79E)
23/07/10 18:04:08.51 SSHQru750.net
5ch、専用ブラウザがサポート終了し、撤退する様です。
FireFoxだと書き込める様です。
それ以外のブラウザも多分大丈夫なんでしょうが、試してはいません。
315:デフォルトの名無しさん (ワッチョイ ff7c-rqKn)
23/07/10 18:05:43.31 BD2ve/J+0.net
ソースplz
316:デフォルトの名無しさん (スップ Sd3f-9JJG)
23/07/10 18:24:57.71 EIZKDTevd.net
処理系が16byte境界に合うように
「card[0][4]とcard[1][0]の間にパディングを入れる」ってのが起こりうるか不安
わざわざコンパイラがそんなことする理由は
1. 16byte境界の合わせたほうがindexの計算が速い
2. card[0][5]へのアクセスを不正とみなして、ここへの書き込みを検知するフラグを入れる
規格上パディングが入らないことが保証されるならこの話は忘れてくれ
317:デフォルトの名無しさん (ワッチョイ ff63-/79E)
23/07/10 18:29:02.59 SSHQru750.net
Talk専用ブラウザ 「Jane Style」 ← 5chの記述が消えました
20230710
Version 5.00 公開
・Talk に対応しました
* 5ch.net のサポートを終了しました
URLリンク(janesoft.net)
318:デフォルトの名無しさん (アウアウウー Sa9b-HEX/)
23/07/10 18:54:15.08 ebofKpc7a.net
>int **p1;
無いわωωω
319:デフォルトの名無しさん (ワッチョイ 9fad-OD6X)
23/07/11 02:24:43.39 vn98dBP10.net
>>314
スレリンク(operate板)
正確にはJaneStyleが離反した
> 00015ちゃんねる ★2023/07/11(火) 00:00:00.00ID:LokiTech
> Janestyleはもう5ch.netと提携していません。
> Janestyle以外の専用ブラウザをご利用ください。
> 旧バージョンの5chブラウザ(API前)は近く再度利用可能となります。
> (以下略)
320:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 3732-/79E)
23/07/11 11:41:03.76 MoKwTryZ0.net
>>315
おそらく連続 (contiguously) というのは間に余計なものが入ることはないという意味で書いてると思う。
321:デフォルトの名無しさん (ワッチョイ b702-VAl4)
23/07/11 12:37:10.33 UJem4sQV0.net
テスト
> どういう理屈か知らんけど
> chmateで『URLから開く』で見たい板のURL貼り付けして
> 「5ch」の部分を「5Ch」に変えて開くと
> 5chのスレchmateで見れて草
URLリンク(twitter.com)
(deleted an unsolicited ad)
322:デフォルトの名無しさん (ワッチョイ e2ad-/jfo)
23/07/17 05:23:15.01 0PvTd+Ok0.net
chmate はもう対応できてないかな。俺は読み書きできるようになったよ。
今これはPCからで Siki っていうの使って書いてるが。
323:デフォルトの名無しさん (ワッチョイ 163e-MI76)
23/07/17 09:16:25.38 YifLUjyU0.net
旧 API を復活させて制限が緩くなったから昔の専ブラがそのままかちょっとした設定変更で使えるよ。
今のところ PC 用の専ブラとしては JaneXeno か Siki が決定版だと思われているようだ。
324:デフォルトの名無しさん (ワッチョイ 3279-EJzg)
23/07/17 11:31:18.04 SG+RSRxx0.net
>>321
PCはAPI対応前の昔のlive2ch(live5ch)が使える
325:デフォルトの名無しさん (ワッチョイ 4d46-am1z)
23/07/17 11:33:54.45 o8kBjP6A0.net
ninja は make を完全に置き換え可能になったでござるかニンニン?
326:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 163e-MI76)
23/07/17 11:48:18.17 YifLUjyU0.net
>>324
設計思想が異なる。
ninja は make ほど多機能ではなく、メタビルドツール (cmake など) と組み合わせるのを前提としている。
どうせメタビルドツールは使うという前提なら ninja のほうが使い勝手が良いと思うが、
そうでないなら make のほうが楽だと思う。
327:デフォルトの名無しさん (ワッチョイ dfad-onGn)
23/07/22 17:50:40.48 ZqN2VkQO0.net
Siki はおすすめ記事が出ていた。
5chブラウザー、JaneStyle代わりのオススメは「Siki」
URLリンク(news.yahoo.co.jp)
328:デフォルトの名無しさん (ワッチョイ 7f63-cTWz)
23/07/27 01:32:04.41 z625zk2O0.net
現状専用ブラウザJaneStyle4.23を落としてきて修正パッチを当てて動かしてます。
修正パッチは有志が機械語レベルまで降りて解析し対処してます。
今まで無かった機能まで追加してます。その技術力はスゴイですね。
ただ、専用ブラウザは今後5ちゃんねるの仕様が変わったときに
開発者がメンテできるかどうかで生死が決まりそうですね。
329:デフォルトの名無しさん (ワッチョイ 7310-X/lp)
23/08/02 10:02:23.97 6slkiMgF0.net
なんか昔「コンパイル言語は消滅してスクリプト言語が主流になる!!」って主張聞いて
オープンソースアプリはともかく商業アプリでスクリプト言語使ってたら
速攻解析されてコピーなりクラックされて(その結果どうなるかはわからんけど)商売にならないんじゃないのかと思ったけど
現状どうなのかな?
JaneStyleの 不具合発生→ねらー修正 っての見てるとバイナリーコードでもスクリプトコードでも解析難易度は変わらないのかなとも思うけど。
330:デフォルトの名無しさん (ワッチョイ 1746-ZTxv)
23/08/02 10:53:42.75 19FN81hV0.net
>>328
事実如何を措いて、
主流以外の傍流は消滅するという理屈がそもそもおかしい。
331:デフォルトの名無しさん (ラクッペペ MMe6-Fuds)
23/08/02 11:00:33.97 Vv20iihFM.net
バイナリクラックなら開発言語そのものにはあまり意味はない気がするけどな
バイナリエディタで稼働中の実行コード覗かれれば元の言語が何であろうが同じこと
332:デフォルトの名無しさん (ワッチョイ be63-1j9t)
23/08/02 11:10:57.90 STym7Vrv0.net
こういうのはやはりファームやってた人は強いのだろうか?笑
333:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b73e-yh3V)
23/08/02 11:11:56.50 Vhf3uqZN0.net
暗号化やら難読化やらを駆使しても
実行中には実行できる形になってるのは
どうしようもないもんな。
だからライセンスで制約を付けるんだが、
不特定多数をユーザーとするビジネスモデルだと
制約を守らせるのも難しいのだと思う。
334:デフォルトの名無しさん (ワッチョイ be63-1j9t)
23/08/02 11:38:35.24 STym7Vrv0.net
不具合を何度も指摘されても放置していて
痺れ切らしたユーザーが解析してパッチを公開した
これが最初だったと思う
335:デフォルトの名無しさん (ワッチョイ 4af0-0TAO)
23/08/02 11:45:48.58 JKibevwe0.net
あれ難読化してあるの?
336:デフォルトの名無しさん (ワッチョイ 6aad-kNqZ)
23/08/02 11:54:41.63 na1pjdup0.net
業務用アプリならサブスクとクラウドって感じだろうけど
個人向けのだとどうなんだろうね
まあそういう海賊版はアップロードした奴を捕まえることで対処しているっぽいけど
アプリの制限取っ払われるのはもうどうしようもないんじゃないかな
337:デフォルトの名無しさん (ワッチョイ 6aad-kNqZ)
23/08/02 11:55:36.50 na1pjdup0.net
難読化はしてない
いやらしいほどに丸見え
338:デフォルトの名無しさん (スッププ Sdb6-FXAW)
23/08/02 20:21:52.90 Zi22N3SKd.net
>>328
オープンソースを勘違いしてる?
339:デフォルトの名無しさん (ワッチョイ be63-1j9t)
23/08/02 20:58:10.27 STym7Vrv0.net
質問型式ではなく、自分はこう考えていると書いて
340:デフォルトの名無しさん (スッププ Sdb6-FXAW)
23/08/02 23:54:36.96 W7+oBwzNd.net
>>328
次元の違う問題を比較してると思う
スクリプトでコンパイル言語を代替できるようになったとしても
商業ソフトを供給するほうがスクリプトでないと実装できないことにはならないし
サーバーサイドで重要な処理を行うようにすればスクリプトでもそこは解析できないわけだし(今回の5chのAPI仕様変更みたいに)
341:デフォルトの名無しさん (ワッチョイ 6aad-Z/b2)
23/08/03 04:03:41.71 /xW45k0z0.net
>>328
主流かどうかはわからんけどJavaのような仮想マシンで動くやつは流行ったな(Androidスマホで採用されたので思い切り流行った)。Perlとかのインタープリタの言語も内部でコンパイルしてから動くのでなんとなく似ている。
こういう風に仮想マシンで動くようにするとOSやCPUが違っても互換性を保つのが楽になる。
342:デフォルトの名無しさん (ワッチョイ 5b2d-IPSQ)
23/08/03 17:16:30.77 5KUHoXNc0.net
tiktokなんかjavascriptでVMを実装してその上で独自のコードが動いてるせいで解析が極めて困難になってる
343:デフォルトの名無しさん (ワッチョイ 1746-ZTxv)
23/08/04 08:54:17.97 4oDPVLgw0.net
>>341
こわっ...
344:デフォルトの名無しさん (スフッ Sd8a-KN61)
23/08/04 15:45:40.86 GMHK0FTid.net
/* 文字列を反転させる */
#include <stdio.h>
#include <string.h>
void reverse(char *);
void reverse(char *cp)
{
char *p, *q, wk;
p = cp;
q = &cp[strlen(cp)]-1; // strlen()は'\0'を数えないのに1引かないと正しく動作しない
while (p < q) {
wk = *p;*p = *q;*q = wk;
p++;
q--;
}
}
int main(void)
{
char ss[] = "Program123456789";
reverse(ss);
printf("%s\n", ss);
return 0;
}
上記プログラムでstrlenは'\0'文字をカウントしないのに、1引かないと正しく動作しないのはなぜですか?
345:デフォルトの名無しさん (スフッ Sd8a-KN61)
23/08/04 15:49:34.67 GMHK0FTid.net
343の訂正です
q = &cp[strlen(cp)-1]です
346:デフォルトの名無しさん (ワッチョイ 17c9-NYH+)
23/08/04 15:57:00.72 /AVxr1FX0.net
末尾の \0 を入れ替えたらあかんやろ
"AB" は strlen() == 2 になって
0 1 2
[A][B][\0]
こういう配置や
347:デフォルトの名無しさん (ワッチョイ 17c9-NYH+)
23/08/04 16:03:23.77 /AVxr1FX0.net
strlen は文字数を返す一方で [ ] の中はオフセット量(0スタートの相対距離)だから
1文字目を指すのは オフセット0 の場所なんだわ
348:デフォルトの名無しさん (スフッ Sd8a-rFCo)
23/08/04 16:09:46.38 GMHK0FTid.net
>>>345 >>>346 即答ありがとうございます
自分はまったく そこまで考えてstlrenを使ってませんでした。ありがとうございます。勉強になります
349:デフォルトの名無しさん (ワッチョイ 17c9-NYH+)
23/08/04 16:25:43.11 /AVxr1FX0.net
そこまで考えてというか ポインタ/配列添え字 が 0 から始まるだけの話でな
1文字目 = (オフセット)0
2文字目 = (オフセット)1
:
n文字目 = (オフセット)n-1
他所言語(特に古めのBASIC) だと配列の添え字は 1から始まるのが自然だから
その感覚のままだと およよ? ってなる
350:デフォルトの名無しさん (ワッチョイ be63-1j9t)
23/08/04 16:33:03.37 h8ImZ1qQ0.net
COBOL, PL/I, RPG, FORTRAN, BASIC, R, Lua, Julia は、1で始まる
351:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b73e-yh3V)
23/08/04 16:45:56.55 vdf3rEq10.net
BASIC はバリエーションが多いよ。
0 と 1 を切り替える機能があるやつを知ってる。
352:デフォルトの名無しさん (ブーイモ MMe6-rA3N)
23/08/04 22:18:35.44 3UzK9dfoM.net
>>341
そのやり方だとapple審査通らないのでは?
353:デフォルトの名無しさん (ブーイモ MMe6-rA3N)
23/08/04 22:23:16.57 3UzK9dfoM.net
環境はwebkitでvm自体dlしてくるから問題ないということなのか…
354:デフォルトの名無しさん (ワッチョイ e3ad-c/5M)
23/08/05 14:06:37.50 7Tp3cevL0.net
>>349
Pascal もよろしく
355:デフォルトの名無しさん (ワッチョイ bb01-tyL0)
23/08/05 21:43:38.19 p8skrLMB0.net
>>353
Fortranは添字の開始値を指定しない場合は1から始まり、添字の開始値を指定する場合は任意の整数
(負も可)を指定できるが、Pascalは添字の開始値指定が必須で任意の整数(負も可)を指定できるから、
1から始まるとは言えない。
356:デフォルトの名無しさん (スプープ Sdc3-EMqx)
23/08/05 22:05:05.59 Rq9CiLOMd.net
>>350
ああOPTION BASEかあ
N88BASICの頃からあるが使ってるの見たことない
357:デフォルトの名無しさん (ワッチョイ e3ad-c/5M)
23/08/05 23:14:06.26 7Tp3cevL0.net
>>354
そういやそうだった。忘れてた。
358:デフォルトの名無しさん (ワッチョイ c379-IXit)
23/08/06 12:09:56.49 SuulMMGF0.net
今時はExcelのセルをCellsでアクセスしたり配列に代入した場合だけ1オリジン固定でちょっと困る
歴史的経緯というよりExcelのCOMオブジェクトの仕様なんだろうけど
359:デフォルトの名無しさん (テテンテンテン MM17-2Tt6)
23/08/06 13:13:28.45 GDllPCgfM.net
配列って
array + sizeof(*array) * index
だから、0からの方が理にかなってると思う
1からの場合は、実行時にアドレスを割り出すときに絶対1引いてるよね…
そこまでしても人間の直感に合わせたかったのだろう
360:デフォルトの名無しさん (ワッチョイ ebad-9S8H)
23/08/06 13:25:15.07 jxDYmhFo0.net
1引いているのはあくまで内部的なもの
それこそ人間の直感に合わせたインターフェイスとコンピュータの都合の良い情報に相互変換するのがプログラムじゃなかろうか
0からのほうが分かりやすいと思うのはプログラマだからだろうし
10個のデータの最後のインデックスは10というのは添え字で考える場合は分かりやすいしね
361:デフォルトの名無しさん (ワッチョイ 7510-WTQk)
23/08/06 14:09:12.01 VdM0xi000.net
先頭をゼロと呼ぶか1と呼ぶかならまだマシよ
音楽なんて先頭要素を1と呼ぶだけじゃなく、要素間の差がない事まで、ゼロじゃなく1と呼ぶ
現代人からするとどう考えても頭おかしいが、仕方がない。ゼロの概念がなかった時代から定義が変わらず続いてるらしい
362:デフォルトの名無しさん (ワッチョイ c379-IXit)
23/08/06 14:15:40.68 SuulMMGF0.net
Cはゼロに限らず何もないを示すvoidが無い頃は全部intでやってた時代もあるんだよ
頭おかしいな
363:デフォルトの名無しさん (ワッチョイ ebad-9S8H)
23/08/06 14:37:12.68 jxDYmhFo0.net
voidが何もないことを示すならvoid*の存在のほうが気になる
364:デフォルトの名無しさん (ワッチョイ e3ad-c/5M)
23/08/06 14:59:14.25 RhhSFLLO0.net
void だけ特殊な型と考えるしかないのではないかな。大きさが0ビットの型と考えても良いのかも知れないが。
365:デフォルトの名無しさん (テテンテンテン MM17-2Tt6)
23/08/06 15:50:27.26 3R7VaRJUM.net
sizeof(void) → 1 だな
これって正式な仕様なのか分からんけど
366:デフォルトの名無しさん (ワッチョイ 87cf-n4fA)
23/08/06 16:40:17.07 Raz9Sh7o0.net
それgccなんかの独自仕様のはず。void*をバイト単位で計算できるから便利なんだけどね。
367:デフォルトの名無しさん (スッププ Sd03-EMqx)
23/08/06 17:35:17.48 /aV5Am17d.net
それは気持ち悪いな
368:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b3e-tyL0)
23/08/06 17:46:22.79 Mgx3ApDu0.net
言語仕様上は void は不完全型とする扱い、かつ sizeof に不完全型を与えることは出来ない。
369:デフォルトの名無しさん (スッププ Sd03-EMqx)
23/08/06 17:48:27.27 /aV5Am17d.net
gccだとsizeof(関数名)も1なんでしょ
明らかにただの手抜き
370:デフォルトの名無しさん (ワッチョイ b363-aAN6)
23/08/06 17:52:12.98 wnylhiXb0.net
仕様上の問題は置いておいて
1として扱うと何か良いことあるんでしょうか?
371:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b3e-tyL0)
23/08/06 17:56:04.37 Mgx3ApDu0.net
未定義な動作は規格として規格が何ら要求を課さないことを意味するが
但し書きの中に「文書化された環境に特有な方法で処理してもよい」ともある。
GNU C のドキュメントには void と関数 (関数指示子) の大きさについて記述がある。
URLリンク(gcc.gnu.org)
これも規格が認める正しい動作のひとつ。
それはそうとして処理系に固有の挙動に依存するのを避けるに越したことは無いけど。
372:デフォルトの名無しさん (ワッチョイ 87cf-n4fA)
23/08/06 18:03:13.82 Raz9Sh7o0.net
>>369
>>365にも書いたけど、演算するのにいちいちchar*などにキャストする必要がない。
373:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b3e-tyL0)
23/08/06 18:10:14.29 Mgx3ApDu0.net
void* は演算させないという意思表示なこともあるんで
演算できることが良いわけでもないんだけどね。
374:デフォルトの名無しさん (ワッチョイ 87cf-n4fA)
23/08/06 18:29:53.89 Raz9Sh7o0.net
どんな用途があるかな?デリファレンス先にアクセスできないってだけで十分な気もするが。
375:デフォルトの名無しさん (アウアウウー Sa9f-W3Bx)
23/08/06 18:36:51.14 mq8IFmf1a.net
任意に渡ってきたポインタ間の距離?
376:デフォルトの名無しさん (ワッチョイ 7510-WTQk)
23/08/07 01:08:17.44 zJXXdP4R0.net
アレじゃないかな?メリットあるとしたら
【struct に含めたメンバーは、サイズゼロはダメ】っていう仕様があったかと思う。
正確には【structの違うメンバーが同じアドレスになったらダメ】だったか
----
以下は蛇足
ただサイズゼロだめってのは例外があって。
structの末尾メンバーでchar[] だか char[0]ってのが、確かC99あたりでアリになった気がする。
これは…それまでも使われてたテクで
【structの最後に char [1] のメンバーを置いて、実際にはメモリ確保の時structのサイズ+可変長部のサイズでメモリ確保し、最後のメンバーを使ってstructのサイズを超えてアクセスする】という慣用句があって、
それの目的で
C言語公式仕様風では char[1] と書き
確か昔は gccだとchar[]
vcだと char[0]
ていう書き方してた。(gccとvcは逆だったかも知れない)
のが、公式仕様でもサイズゼロokになった…という話だったかと。
377:デフォルトの名無しさん (ワッチョイ 7510-WTQk)
23/08/07 01:23:44
378:.93 ID:zJXXdP4R0.net
379:デフォルトの名無しさん (スッップ Sdd7-EMqx)
23/08/07 08:18:18.04 SwgOJiZRd.net
意味不明
メンバーにvoidを含められたとしても参照すればエラーになるはずなので使いようがない
(void*はもともと正しいサイズを持つ)
unionで似たようなことはできる
380:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b3e-tyL0)
23/08/07 09:11:24.17 U9It/DCQ0.net
>>375
サイズゼロをOKとすると言ってしまうと語弊があると思う。
仕様上の理屈だと「不完全型を指定できる」だし、そうした場合の動作は
いくつかの特例で成立していて「長さ 0 の配列」は現れない。
sizeof などでは「フレキシブル配列メンバは無視される」だし、
メンバにアクセスするときは
> 置き換えられた配列が要素をもたないとき,それはただ一つの要素をもつのと同じ規則で動作する。
> しかし,その要素にアクセスした場合,又はその要素を一つ越えたポインタを生成した場合,
> その動作は未定義とする。
とあって、長さ 1 として扱うけど要素にはアクセスするなという回りくどい言い回しになってる。
381:デフォルトの名無しさん (アウアウウー Sa9d-mBaV)
23/08/07 10:17:41.09 wl/Lx6N5a.net
>>375
typedef struct { int x; char a[1]; } A; A *p = (A *)malloc(sizeof(A) - 1 + N);
typedef struct { int y; char b[]; } B; B *q = (B *)malloc(sizeof(B) + N);
typedef struct { int z; char c[0]; } C; C *r = (C *)malloc(sizeof(C) + N);
かな
382:デフォルトの名無しさん (アウアウウー Sa9d-mBaV)
23/08/07 10:19:25.16 wl/Lx6N5a.net
>>378 の主張だと
typedef struct { int y; char b[]; } B; B *q = (B *)malloc(sizeof(B) - 1 + N);
でなければならないのかな
383:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b3e-tyL0)
23/08/07 11:05:26.04 U9It/DCQ0.net
>>379
配列の大きさとして 1 を指定して可変長のように扱うやり方については
ちょっと不明瞭なんだが仕様に厳密にいうと準拠してない方法だと考えられている。
URLリンク(c-faq.com)
配列の大きさが 0 より大きくなければならないということについては
例外を見つけられないのでどこであろうと 0 を指定したら未定義と解釈していいと思う。
GNU C では構造体メンバの最後の配列要素に 0 を指定した場合は
C99 でフレキシブル配列メンバにしたときとほぼ同じような扱いになることがドキュメント化されてる。
URLリンク(gcc.gnu.org)
つまり GNU C では 0 を指定していいわけだが……結果が同じならあえてやる必要もないな。
GNU C でも構造体の最後の要素を除いて配列の大きさに 0 を指定するのは (可能だが) 推奨されていない。
アクセスした結果は未定義なのでなんの役に立つのかようわからん。
384:デフォルトの名無しさん (スッップ Sdd7-EMqx)
23/08/07 11:36:51.88 SwgOJiZRd.net
>>380
-1する必要ないな
1バイト程度なら余計に取っても害はない
385:デフォルトの名無しさん (ブーイモ MMf3-DyKn)
23/08/07 14:20:51.17 Xd8Y6/QgM.net
>>382
そういういい加減な見積もりは感心しないな
それに、この場合は-sizeof(int) が正解だと思う
386:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b3e-tyL0)
23/08/07 14:26:13.65 U9It/DCQ0.net
>>382-383
どっちも間違い。 この場合は -1 をしてはいけない。
387:デフォルトの名無しさん (スッップ Sdd7-EMqx)
23/08/07 20:36:36.16 SwgOJiZRd.net
>>383
いい加減なのではなく無駄なことに神経を使わないのがプログラマの秘訣だ
それに他人が見て「この-1はなんだろう?」と無駄な思考時間を取られる可能性を考えたら百害あって一利なしだ
>>384
よく見たらデタラメだな
すまん
388:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ eb32-oz9p)
23/08/07 21:06:32.92 +g1cDN8+0.net
>>385
1バイトごときのために余計なことをしないってのは理解できる理屈だが、不必要な1バイトを確保するってのもそれはそれで無駄に考えさせられてしまう感じがする。
やろうとしていることと合致しないコードなわけだから。
害はないが役に立ってもいないということを確信するのはどういう役に立っているのかを見つけるより難しい。
389:デフォルトの名無しさん (ブーイモ MMf3-DyKn)
23/08/07 21:30:20.59 6YHeZP2fM.net
>>384
ああ、[1]の場合のコード見てたわ、お恥ずかしい。
どっちにしろ[1]の場合もoffsetofかalignof使ってあれこれだね…sizeofじゃ正解ではない…
390:デフォルトの名無しさん (スッップ Sdd7-EMqx)
23/08/07 22:08:57.23 SwgOJiZRd.net
>>386
どうせmallocは1バイト単位では確保しないので正確なサイズを指定しても構造体一個につき数バイト以上の無駄な領域が確保されることになるし…
この構造体を数万個単位で使うような大規模プログラムで極力ムダを避けたいならmallocは使わず最初に大きなリニア領域を確保してそこから切り分けたほうがいいだろう
蛇足だが経験上こういう構造体を使うときはcopy=malloc(sizeof(A) + strlen(src)); strcpy(copy->a,src);のように使うことが多い
これなら正確なサイズ指定になる
>>387
どっちにしろ君は何か勘違いしてないかな
長ったらしく書くなら-sizeof(int)ではなく-sizeof(char)となる
391:デフォルトの名無しさん (ワッチョイ 7510-WTQk)
23/08/07 22:21:06.53 zJXXdP4R0.net
どんどん蛇足的になってしまってる気はするが
1バイトの加減算ってのはインクリ・デクリの1命令で演算できるし分岐しないし、
アライメント境界を1バイト超えたらバス幅分-1の無駄ができるかもなので
しかも100万個の「3d座標型」とかがその理屈で1個につき7バイト無駄にしたら700万バイトが無駄になるので
たかが1バイトと軽視して良いか否かは、状況によります
で、はちみつさんのちみつな調査に感謝。蛇足で変な事書いて仕事増やしてごめんなさい
392:デフォルトの名無しさん (ワッチョイ 7510-WTQk)
23/08/07 22:28:38.60 zJXXdP4R0.net
でも、ワシは(もしそれが有効だと判断したら)公式なC言語仕様上未定義になるとしても、
伝統的にgccとvcが「独自拡張」として許してきた書き方で
書くよ
もちろん責任者の許可は伺うけどね
ダメと言われたらもちろんやらない
393:デフォルトの名無しさん (ワッチョイ 0547-DyKn)
23/08/07 22:34:55.16 hZrkDm/B0.net
>>388
ちゃんとサイズ確かめた?そんなに簡単なら[]拡張なんて要らないと思わない?
394:デフォルトの名無しさん (ワッチョイ 7510-WTQk)
23/08/07 22:36:31.40 zJXXdP4R0.net
で
時には自分が、あるプロジェクトの最高責任者だったりする訳で
その環境は特定のカスタムgccの特定バージョンを使うしか選択肢がないから無用な心配は意味がなくて
次のプロジェクトではどうせ全部作り直しだったりする
395:デフォルトの名無しさん (スッップ Sdd7-EMqx)
23/08/07 22:48:24.16 SwgOJiZRd.net
>>391
何を確かめればいいのかね
正確に書いてくれないと答えようがないな
後半個人的には「要らない」ね
誰かが拡張したら使わないとイケないという「強迫観念」を持ってないか?
それは不要なものだよ
396:デフォルトの名無しさん (ワッチョイ 0547-DyKn)
23/08/07 22:52:47.17 hZrkDm/B0.net
>>393
sizeof(A) != sizeof(int) + sizeof(char)
397:デフォルトの名無しさん (ワッチョイ 0b01-W3Bx)
23/08/07 23:31:53.12 +QyISSA90.net
>>394
メンバの配置はきっちりつめるのから
nバイトアラインで飛び飛びにしてるのもあるしね
398:デフォルトの名無しさん (ワッチョイ 0b01-W3Bx)
23/08/07 23:39:40.36 +QyISSA90.net
>>395
一番最後のメンバの後ろにパディングが足されるかどうかが焦点になる
足されないならイージーに引き算すりゃいいんだが…
399:デフォルトの名無しさん (スップ Sdcf-YWx9)
23/08/08 07:56:15.14 QQsYUamCd.net
引き算とか言ってる馬鹿初めて見たわ
400:デフォルトの名無しさん (ワッチョイ b363-uQHI)
23/08/08 11:03:00.71 +jW/mKCz0.net
複素数使って計算すれば馬鹿にされませんよ?
401:デフォルトの名無しさん (スッップ Sdd7-EMqx)
23/08/08 20:31:55.04 sLVQKk30d.net
>>394
意味はわかったけど
君のコードは可搬性がないわけだね
全部作り直しになるのもうなづける
そんなのやってられないw
402:デフォルトの名無しさん (ブーイモ MMf3-DyKn)
23/08/08 22:38:48.82 MjZ+EK1qM.net
>>399
初歩的な構造体のパッキングルールを理解していたらどうって事無いはずなのだけども…この程度で可読性とか労力とか、そういうレベルの仕事なら使用禁止で良いんじゃないかな。
あと、何か勘違いしているようだけど、[1]だとややこしいけど出来るねって言ってだけで、使うなら[]だよ。c99標準な訳だし。
403:デフォルトの名無しさん (スッップ Sdd7-EMqx)
23/08/09 00:47:58.70 3Zyc8vU6d.net
「-sizeof(int) が正解」とは言えないよ環境による
パッキングルールを変更できる#pragmaもあるから
それは単なる「思い込み」ということになるな
404:デフォルトの名無しさん (ワッチョイ 7510-WTQk)
23/08/09 06:00:17.77 ye8eZ1o40.net
>>399
あなたが「君」って言ってる相手は少なくとも私と私以外の2人以上なので 何か誤解してると思う
ここは匿名掲示板なので、想像した人格じゃなくて内容に反応して欲しい
405:デフォルトの名無しさん (アウアウウー Sa9d-mBaV)
23/08/09 08:10:28.54 KudoDE9Va.net
言語仕様知らずに叩いてるんだから無理だろ
406:デフォルトの名無しさん (ワッチョイ 915f-1PqA)
23/08/11 14:52:37.80 fYiGiCzQ0.net
質問失礼します
Windowsソフトが作りたく基礎を勉強したのですがここからソフトを作る道筋が見えてきません
SDKを用い制作するということまではわかったのですがそれについて解説しているサイトがなく詰まっている状態です
おすすめのサイトや参考書などあればご教示くさだい
407:デフォルトの名無しさん (スフッ Sd2f-SP/C)
23/08/11 15:39:30.67 zcS71Tbhd.net
URLリンク(dxlib.xsrv.jp)
URLリンク(marupeke296.com)
408:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b3e-oz9p)
23/08/11 15:46:47.16 EnF/lRSf0.net
モダンなフレームワークを使った方が良いが
Windows の基礎的な理念というか考え方をかなり平易に
説明したものということだと↓とかが有名だと思う。
URLリンク(www.kumei.ne.jp)
ただ、古いので実情に合わない部分はある。
Windows には異なる系統の API があって、
現在では COM をベースにした WinRT がモダン API として
整備されているのでそちらを軸にしても良いかもしれない。
409:デフォルトの名無しさん (ワッチョイ b363-yDkU)
23/08/11 16:09:36.01 Ib19PZqn0.net
SDK使っての開発は30年位昔のやり方なんではないだろうか
410:デフォルトの名無しさん (ワッチョイ 915f-1PqA)
23/08/11 16:11:15.49 fYiGiCzQ0.net
>>405
>>406
ありがとうございます
早速進めてみます
411:デフォルトの名無しさん (ワッチョイ 915f-1PqA)
23/08/11 16:12:13.55 fYiGiCzQ0.net
>>407
基礎しかわからない初心者なものでして、、、
412:デフォルトの名無しさん (ワッチョイ e3ad-c/5M)
23/08/11 16:53:28.21 j3k4ZyED0.net
Windows のネイティブなプログラム作りには C というよりは C++ の方がよく使われていたと思うので、C++ も覚えた方が作り易くなるような気がする。
413:デフォルトの名無しさん (アウアウウー Sa9d-SP/C)
23/08/11 17:26:57.28 v1edpQDwa.net
>>407
使えるものは使えば良い
昔の方がシンプル
>>410
MFCやATL/WTLやCOMやQtやwxWidgets使いたいならC++だが
生WindowsAPIとSDKやCOMやOpenGLやtcl/tkとか使うならCで充分
むしろCが標準と言っても良いので勉強用ならC
414:デフォルトの名無しさん (ワッチョイ e3ad-c/5M)
23/08/11 17:52:29.73 j3k4ZyED0.net
なるほど。
415:デフォルトの名無しさん (ワッチョイ b363-yDkU)
23/08/11 17:54:37.84 Ib19PZqn0.net
最初残ろは16ビットアプリだったから、
メモリーモデルやアプリが使用可能なリソースサイズなど
結構管理が大変だった記憶がある
416:デフォルトの名無しさん (ワッチョイ b363-yDkU)
23/08/11 17:55:37.06 Ib19PZqn0.net
最初のころは
なんて変換するんだよ・・・
417:デフォルトの名無しさん (ワッチョイ 87cf-uQHI)
23/08/11 18:22:42.78 WGGkjKOg0.net
勉強目的の縛りプレイじゃなければ最初からCじゃなくC++使う方が良いと思うが。
418:デフォルトの名無しさん (ワッチョイ c379-IXit)
23/08/11 18:30:11.06 I7dwFhkG0.net
いまだにCOM ATL DirectX IDL辺りの定義見るとC知識では手に負えないイメージ
C++MFC全盛の時代は本当に嫌いだった
C#でそれらに一切関わる必要がなくなってほんと良かったわ
419:デフォルトの名無しさん (ワッチョイ 2f9f-mBaV)
23/08/11 18:52:16.19 DMm7pQwE0.net
古いAPIの設計思想が時代に合わないのも多いし、フレッシュな知識を蓄積したほうがいいという意味ではWinRTかな
420:デフォルトの名無しさん (ワッチョイ c379-IXit)
23/08/11 19:09:53.39 I7dwFhkG0.net
>WinRTかな
名前が終わってる
421:デフォルトの名無しさん (アウアウウー Sa9d-mBaV)
23/08/11 19:10:12.84 v1edpQDwa.net
DirectXはCでも使える
422:デフォルトの名無しさん (アウアウウー Sa9d-mBaV)
23/08/11 19:11:09.76 v1edpQDwa.net
MFCは糞だから触るな危険
423:デフォルトの名無しさん (アウアウウー Sa9d-mBaV)
23/08/11 19:12:06.88 v1edpQDwa.net
WinRTはないな
424:デフォルトの名無しさん (ワッチョイ 0902-MkJ9)
23/08/11 19:17:33.71 yxSWeMo+0.net
とりあえず現在でWindowsアプリのプログラミングを始めるにあたり、C言語というのはやめるべき
悪いこと言わないからせめてC++にしておけ
そして楽に作りたいならC#にしておけ
425:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b3e-oz9p)
23/08/11 19:26:30.18 EnF/lRSf0.net
C でやってみれば (やれるだけの知識を身に付ければ) 低レイヤで何が起こっているのかという具体的なメカニズムを理解できるという意味で悪くはないと思う。
ただ、今となっては日常的にやるもんではない。
426:デフォルトの名無しさん (ワッチョイ c379-IXit)
23/08/11 19:26:45.26 I7dwFhkG0.net
C#で.NETにない事をやろうとするとpnvoke知識が必須だから
Cを適当に摘みつつC#でいいんじゃなかろうか
C++はもう時間の無駄
時間が無限にあるならどうぞ
427:デフォルトの名無しさん (ワッチョイ b363-yDkU)
23/08/11 19:35:56.75 Ib19PZqn0.net
Windowsの動作原理を学びたいなら、SDKやMFCは良いと思うよ
428:デフォルトの名無しさん (テテンテンテン MM17-2Tt6)
23/08/11 19:53:56.21 eb/xI15cM.net
今のWindowsの最新のUIは全てWinRTの上に構築されている
Githubでソース見れば一目瞭然
完全に今のWindowsの基礎となるAPI
無知というのは罪だな
429:デフォルトの名無しさん (ワッチョイ c379-IXit)
23/08/11 19:58:54.93 I7dwFhkG0.net
まさかWinRTでマウント取ろうとする馬鹿が居ると思わないわ
430:デフォルトの名無しさん (ワッチョイ 0f5f-4nYy)
23/08/11 20:00:58.18 xXGnDnZp0.net
黙NG
431:デフォルトの名無しさん (テテンテンテン MM17-2Tt6)
23/08/11 20:32:13.88 iNvWur52M.net
>>427
無知乙w
正論にキレるの図w
反応しなきゃいいのにw
432:デフォルトの名無しさん (テテンテンテン MM17-2Tt6)
23/08/11 20:35:15.14 iNvWur52M.net
>>427
WinRT終わってるとか無いわーw
433:デフォルトの名無しさん (ワッチョイ b363-yDkU)
23/08/11 21:00:42.88 Ib19PZqn0.net
変なのが湧いてきたね
434:デフォルトの名無しさん (ワッチョイ 6b7a-o30X)
23/08/11 23:10:37.93 je510yk+0.net
mallocの戻り値は代入先のポインタ型にキャストして使おうと言ってる入門サイトがほとんどです。
これは正しくなくて、キャスト不要が正しいと思いますが達人の皆さんの意見はどうですか。
435:デフォルトの名無しさん (ワッチョイ 87cf-uQHI)
23/08/11 23:16:31.85 WGGkjKOg0.net
void*はキャストしなきゃ使いようがないだろ
436:蟻人間 ◆T6xkBnTXz7B0 (スフッ Sdd7-38VD)
23/08/11 23:37:09.78 903ETN7Yd.net
C++ならvoid*からのキャスト必須。C言語ならキャスト不要。
437:デフォルトの名無しさん (ワッチョイ ab36-uQHI)
23/08/11 23:43:24.35 ayxoKHEe0.net
現場猫案件。
438:デフォルトの名無しさん (テテンテンテン MMb6-v80P)
23/08/12 00:37:36.88 dWTISXa3M.net
>>431
害悪はオマエだろ!
WinRTが終わったAPIみたいなフェイクを正したんだよ!
WinUIとかGithubでソース公開されてんだから、ソース見れば一目瞭然だろ!
2度とフェイクを書き込むなよ!
439:デフォルトの名無しさん (ワッチョイ df9f-DXLR)
23/08/12 01:20:09.40 PG846lpi0.net
もしかしてWindowsRT(ARM版Windows8)と勘違いしてたりして
440:デフォルトの名無しさん (テテンテンテン MMb6-v80P)
23/08/12 02:14:36.52 dWTISXa3M.net
WindowsRTは失敗したプロダクトだけど、WinRTは完全にWin32を置き換える為のモダンな基盤APIになった
ちなみにWinRTに関する情報は全然出回ってないな(少なくとも日本では)
MSも直接使うAPIじゃないと考えてるのかもしれない
実際、WinUI3とかを通して使うことになるのだろう
441:デフォルトの名無しさん (テテンテンテン MMb6-v80P)
23/08/12 02:21:43.01 dWTISXa3M.net
MSは一時的に、DirectXやActiveXみたいにRTを流行らそうと考えてたふしがある
でも、まったく浸透せずにRTに悪いイメージだけが残ったw
442:デフォルトの名無しさん (アウアウウー Sac7-DXLR)
23/08/12 04:30:30.39 XzrhAFZoa.net
ないわ
443:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f3e-Z7S6)
23/08/12 11:53:24.11 BlsfQ4Nv0.net
>>432
型変換とキャストを混同して説明していることがそれなりにある。
それとは別に不要でもキャストすべきかどうかというのは習慣の問題。 人にとっての読みやすさは仕様上の要・不用とは別の話なので明瞭な答えはない。
444:デフォルトの名無しさん (オイコラミネオ MMe3-vKG+)
23/08/12 12:15:02.77 ufIhf+igM.net
UWPのWinRTでファイルアクセスなどに制約がある場合があって
APIレベルでセキュリティ上の制限があるのかと思ってたが間違いで
他のプラットフォームで呼ぶと普通に色々アクセス出来てしまう
445:デフォルトの名無しさん (ワッチョイ 7679-BXQ2)
23/08/12 14:04:01.34 DbL0Mu2X0.net
そろそろ他所でやってくれんか
普段Windowsには世話になってるけどUWPの存在には憎しみさえ感じる
446:デフォルトの名無しさん (ワッチョイ 9aad-eQmn)
23/08/12 14:18:40.69 2oorck2f0.net
>>441
cast という単語には型変換の意味があると思うが?
で、実際にプログラミング言語では型が変換されるから、型変換で良いんじゃないの?
447:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f3e-po/e)
23/08/12 14:53:08.69 BlsfQ4Nv0.net
>>444
Cの仕様上の意味合いとしてはキャストという用語は構文 (記法) を指している。
括弧の中に型を書いたやつを式の前に置く、あの構文のことね。
キャストを使わない形でも (暗黙の) 型変換が起こることはあるし、
型を変えないキャストも出来る。 型変換とキャストは同一ではないよ。
カジュアルな場合では文脈でわかるし、ときには同一視してもいいこともあるけど >>442 の文脈では
構文のことを言っているのか型変換のことを言っているのかで事情が変わってくるので
厳密でなくても良いとは言えない。
448:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f3e-po/e)
23/08/12 14:54:12.64 BlsfQ4Nv0.net
>>445
アンカーを間違えた。 >>442 じゃなくて >>432 ね。
449:デフォルトの名無しさん (ワッチョイ 9701-DXLR)
23/08/12 20:19:50.46 eS+ePZlf0.net
「毎日出社したい」わずか3.8% リモートワーク経験者に聞いた
学研ホールディングスのグループ会社であるベンド(東京都千代田区)は、リモートワーク
経験者を対象に「リモートワークに関するアンケート」を実施した。その結果、半数近くの
人が「週5(フルリモート)」(44.4%)をリモートワークの理想の頻度だと考えていること
が分かった。
次いで「週3~4」(30.7%)、「週1~2」(20.1%)と続き、96.2%の人がリモートワークの
継続を希望していることが分かった。毎日出社を希望する人は、わずか3.8%だった。
出社を希望しない理由は「通勤にかかる時間や体力がもったいない」「子どもの都合で、
リモートワークのほうが仕事と家庭のバランスが取りやすい」「職場の人と毎日顔を合わせる
のはさすがにつらい」といった意見が寄せられた。
一方、「コミュニケーションが取りにくくなる」「出社しないとできない業務がある」
「たまには出社もいい気分転換になる」など、完全リモートだと不都合だという声もあった。
450:デフォルトの名無しさん (ワッチョイ b67a-TNXw)
23/08/12 22:15:14.90 jlvbpae70.net
>>445
冗長 int *p = (int *)malloc(400);
簡潔 int *p = malloc(400);
ということを言うつもりで書きました。
451:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f3e-Z7S6)
23/08/12 22:54:57.04 BlsfQ4Nv0.net
>>448
仕様上は暗黙の型変換が適用される場面。
キャストを書かなくても型変換はされることが保証される。
ただ、 >>434 で言及されているように C++ ではキャスト必須なのでそれに合わせる (ことで C++ としてもコンパイルできるようにする) ほうが好ましいという考え方もある。 これが暗黙に変換できてしまうのは良い仕様とは言えないのは確かだからより厳しいルールの C++ に合わせるのも一応の合理性はある。
誤解の余地もない (と思う) ので私はキャストを書かない派なのだけど、以前にツイッターかどこかのアンケートで見た感じでは拮抗してて、どちらが優勢というわけでもなかった。
452:デフォルトの名無しさん (アウアウウー Sac7-DXLR)
23/08/13 11:59:59.00 mxfdwtiAa.net
int *p = (int *)malloc(400);
冗長ではないよ
453:デフォルトの名無しさん (ワッチョイ 6301-vKG+)
23/08/13 22:00:40.70 37XsjItY0.net
C++でnewではなくmallocをあえて使う理由って何かあるのかな?
454:デフォルトの名無しさん (ワッチョイ b67a-TNXw)
23/08/13 23:29:06.42 oUeYwTCa0.net
>>449
くわしくありがとう。そういう見方もあるのですね。
アンケートで拮抗というのはわかる気がしていて、その理由が入門書やサイトにあるのではと思うのです。
>>450はなぜそう思いますか。
455:デフォルトの名無しさん (ワッチョイ 7679-BXQ2)
23/08/14 00:14:53.81 VnUPK1/b0.net
void *が無かった頃はmallocもintやchar *を返していた時代がある
処理系渡り歩いてきた老害ほどmallocでキャストしたがるだけだろ
大した話でも何でもない
456:デフォルトの名無しさん (ワッチョイ 9aad-eQmn)
23/08/14 00:21:55.24 B5PklEie0.net
可読性を上げるためでもあるのでは?
457:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f3e-po/e)
23/08/14 00:30:57.60 sy90BXR10.net
>>454
可読性が上がるだろうか? 少なくとも >>448 のように変数の型がその行に書いてあるようなケースでは
誤読の余地は全然ないように見えるので同じ情報を重複して書く意味が感じられない。
458:デフォルトの名無しさん (ワッチョイ 9aad-eQmn)
23/08/14 00:38:36.06 B5PklEie0.net
まあ確かに型がすぐ分かる場合は意味ないな。
459:デフォルトの名無しさん (ワッチョイ 4e46-8Neb)
23/08/14 09:03:40.40 6kZXa4aF0.net
>>448
組織(会社とか)のコードだと、どんな水準の人がメンテするか分からないので、冗長を採るかな。
> 冗長 int *p = (int *)malloc(400);
460:デフォルトの名無しさん (オイコラミネオ MMe3-vKG+)
23/08/14 09:28:55.46 4XD1xMqSM.net
この話が一番冗長だtoomou
kanjidenakunatta
461:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f3e-Z7S6)
23/08/14 10:36:19.28 sy90BXR10.net
>>452
K&R の第二版 (日本語版) でもキャストは必要だと書かれているんだよなあ……。
本の最後に仕様をまとめているところでは暗黙に変換されることも言及されているのでおそらく改定漏れなだけなんだろうけど。
かなり長く定番の入門書だったのでこの本の影響も大きいと思う。
462:デフォルトの名無しさん (ワッチョイ 4e63-GMkv)
23/08/14 11:55:47.09 s6PscRDz0.net
暗黙に変換って、プログラム書いてる本人の意図通りなら良いんだけど
意図と違った変換するとやっかいだな
463:デフォルトの名無しさん (オイコラミネオ MMe3-vKG+)
23/08/14 13:20:28.84 JlnnwsPwM.net
ここがC言語スレだと思い出して欲しい
464:デフォルトの名無しさん (スップ Sd5a-f0d0)
23/08/14 13:23:53.19 4NX3l0Vmd.net
Cの暗黙の型変換なんて高が知れてるだろ
465:デフォルトの名無しさん (テテンテンテン MMb6-v80P)
23/08/14 14:02:18.88 XhXbjspZM.net
昔のmalloc()ってchar*とか返してた気がするな
最初っからvoid*って有ったのだろうか?
466:デフォルトの名無しさん (オイコラミネオ MMe3-vKG+)
23/08/14 14:16:28.68 JlnnwsPwM.net
すべての戻り値はintである
ポインタかどうかは書いた人間がが判断する
467:デフォルトの名無しさん (ワッチョイ 4e63-GMkv)
23/08/14 15:03:08.99 s6PscRDz0.net
(void)main(void)
468:蟻人間 ◆T6xkBnTXz7B0 (スフッ Sdba-F9Mj)
23/08/14 15:17:16.05 MULxLxBHd.net
>>464
AIが混乱するようなことを言わないでほしいも
469:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f3e-po/e)
23/08/14 16:43:05.60 sy90BXR10.net
>>464
それ LLP64 でも同じこと言えるの?
470:デフォルトの名無しさん (ワッチョイ 4ecf-vKG+)
23/08/14 17:46:44.25 3TQy/ZGT0.net
>>464
それはB言語のようなミニ言語やBLISSやアセンブラのようなシステム記述言語でよくあるやつだな。
そういう血塗られたルーツを持つCが普及してしまったのがこの大災害の原因ではあるが。
471:デフォルトの名無しさん (ワッチョイ 4e63-GMkv)
23/08/14 18:03:50.08 s6PscRDz0.net
今は血を流さずに戦争ができます
472:デフォルトの名無しさん (ワッチョイ 9710-8Nw3)
23/08/14 18:07:41.52 WVbdJjmk0.net
ポインタじゃない構造体の代入はメモリコピーで、intじゃないよね
473:デフォルトの名無しさん (ワッチョイ 9710-8Nw3)
23/08/14 18:22:17.15 WVbdJjmk0.net
>>467
それですよ。
あと、実際の案件で
メモリバスが32より大きい環境でも、64ビット全部が使われてるとは限らないです。
あるビットにこう入ってたら40ビットのxxメモリ空間を指し、あるビットにこう入ってたら48ビットのyy空間を指す、とか
ポインタ値にも複数の種類がある(ように設計する事がある)
何が言いたいかというと全部intだなんてのは、分かってない証拠
474:デフォルトの名無しさん (ワッチョイ 4e63-GMkv)
23/08/14 18:39:04.59 s6PscRDz0.net
可変長のポインタって、すごいな
475:デフォルトの名無しさん (オイコラミネオ MMe3-vKG+)
23/08/14 18:42:29.14 JlnnwsPwM.net
昔は関数から戻り値として構造体が返せなかった
MSか勝手に実装した
476:デフォルトの名無しさん (ワッチョイ 4e63-GMkv)
23/08/14 18:47:31.20 s6PscRDz0.net
返せなくても困らなかったけど
例えばポインタで返しているAPIはいくつかあるだろうし
呼出時に渡す構造体で返すやり方も普通にある(こちらの方が多いかも)
477:デフォルトの名無しさん (ワッチョイ b67a-TNXw)
23/08/14 21:33:10.14 VCWTWKLb0.net
8051風のMCUにはメモリ空間が複数種類あるものがあって、どのメモリ空間をポイントするかによってポインタのサイズが1byteか2byteかに分かれるというのがありました。
478:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f3e-po/e)
23/08/14 22:08:33.35 sy90BXR10.net
>>473
K&R の初版 (1978 年) の段階では
構造体を関数の返却値に出来る仕様ではなかったのは確かだが
その制限は将来的に削除されるとも書いてある。
構造体を返せるようにするのは設計者の計画の内だ。
最初に実装したのが誰なのかは知らんが「勝手に」とは言えないだろう。
479:デフォルトの名無しさん (ワッチョイ 4e63-GMkv)
23/08/14 22:12:43.60 s6PscRDz0.net
えてして実装が先で、規格になるのは後
というのはよくある話
480:デフォルトの名無しさん (ワッチョイ 7679-BXQ2)
23/08/15 18:53:02.89 hBALyWzq0.net
規格が先行することなんて無いでしょ
出来レースみたいな例外を除けば
481:デフォルトの名無しさん (ワッチョイ 4ecf-eQmn)
23/08/15 19:27:12.11 RzZaP1Xc0.net
仕様もクソもANSI Cが出来るまでCに仕様だの規格だの自体がなかったよ
K&Rにしても当時はあくまで標準って位置づけだったし、各処理系で互換性のない部分が結構ある時代だった
そもそもK&Rって本自体Cの言語としての仕様を示すための本じゃなくて、Cの使い方を説明するユーザーガイド的な書籍だしな
大体、当のデニスリッチーからしてK&R初版の時点で自分のコンパイラではすでに構造体のやりとりを実装させてたんだから
482:デフォルトの名無しさん (ワッチョイ f358-yhDR)
23/08/17 17:55:25.45 3zgw8j7r0.net
K&Rはバイブルってだけ
宗教に喩えて開祖だか教祖だかが著したもの
483:デフォルトの名無しさん (ワッチョイ 8b01-vKG+)
23/08/17 17:57:11.47 PGwDphC60.net
バイブルに従え
484:デフォルトの名無しさん (ワッチョイ 4e46-8Neb)
23/08/17 18:38:44.78 ZHeAFIgr0.net
C言語ルター派
485:デフォルトの名無しさん (ワッチョイ 2702-4obo)
23/08/17 19:50:44.50 J3LrsntM0.net
般若心経
486:デフォルトの名無しさん (スップ Sdba-QvTc)
23/08/17 20:29:24.71 o4Mq35bqd.net
>>481
天国が来るだろう(構造体の戻り値)って書いてあるんだから天国の到来を疑ってはいかんだろw
487:デフォルトの名無しさん (アウアウウー Sa45-GdOV)
23/08/19 16:55:05.41 YiVhsdBOa.net
剣かK&Rか貢納か
488:デフォルトの名無しさん (ワントンキン MMd3-3T4A)
23/08/19 21:36:28.88 cGpjgVdNM.net
天国から帰ってくるのはヨッパライくらい
489:デフォルトの名無しさん (オッペケ Sr0d-/Zz/)
23/08/19 22:45:11.13 /061VjvDr.net
なーおまえ、c言語ちゅーもんはそんなに甘いもんやおまへんのや。もっと真面目にやれー
490:デフォルトの名無しさん (ワッチョイ 93ad-qLW0)
23/08/20 15:24:28.02 pbHEs6OP0.net
>>480
そういう感じでバイブルと呼ばれる本がいくつかあって、暫くしたら本のタイトルにバイブルって入ってるやつが出てきてアホかと思った事がある。
まあ、本のタイトルは出版社側がなんとなく売れそうな感じのものを考えて付ける事が多いらしいので仕方がない事なのかも知れないが。
491:デフォルトの名無しさん (ワッチョイ 93ad-qLW0)
23/08/20 15:26:20.60 pbHEs6OP0.net
>>487
レコードの回転数変えるように。
などと書いて話が通じる人は年寄り。
492:デフォルトの名無しさん (ラクッペペ MM4b-pGo3)
23/08/20 16:08:23.89 CcD0k09aM.net
33回転、45回転、78回転
493:デフォルトの名無しさん (ワッチョイ c946-6Yea)
23/08/20 16:45:30.39 bQFpfsbr0.net
LP 33+1/3 回転を更に Long Play 化したのが LLP64 なの?
494:デフォルトの名無しさん (ワッチョイ 2b63-/QKx)
23/08/20 20:08:06.72 GxzweHHZ0.net
針ってまだ売ってるんだな、知らなかったw
495:デフォルトの名無しさん (テテンテンテン MM4b-0mpE)
23/08/20 20:37:34.57 qQCDJN6bM.net
逆に今はレコードブームだし
496:デフォルトの名無しさん (スッップ Sdb3-jt3B)
23/08/20 20:38:55.31 WX+gcEAed.net
>>491
なんで回転数早くなってるねんw
497:デフォルトの名無しさん (テテンテンテン MM4b-0mpE)
23/08/20 20:40:51.45 qQCDJN6bM.net
回転数が速いと情報量が増える
要するに音質が良くなるんだろ
498:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 893e-glFA)
23/08/20 21:28:54.03 CVtYBdI90.net
>>492
いまどきのレコードプレイヤーはレーザーで読み取るタイプのもあるんやが
音質や使い勝手よりも針を落とす感覚が好きな懐古趣味の人も
少なからずいそうやなと思う。
499:デフォルトの名無しさん (ワッチョイ 2b63-/QKx)
23/08/20 21:44:18.30 GxzweHHZ0.net
そのうち量子センサーなんてでてきて、
盤面を一瞬で読み取って再生する何て出てくるかもね
知らんけど
500:デフォルトの名無しさん (ワッチョイ 93ad-hPrW)
23/08/20 22:47:50.93 pbHEs6OP0.net
盤面を写真撮影して凹凸を一度に全部読み、後は再生するだけ。なんてのはできそうだな。
501:デフォルトの名無しさん (テテンテンテン MM4b-0mpE)
23/08/20 22:56:04.52 pKCQsYPtM.net
>>498
盤面をスマホで読み取らせて、それを再生してると思わせといて、実はラベルを解析して事前に録音済みのデータを再生するという、イカサマサービスを思い付いたw
502:デフォルトの名無しさん (ワッチョイ 2bcf-YAjS)
23/08/20 23:03:56.28 P3ytobrG0.net
こまわりくんはレコードの溝読めたな。
503:デフォルトの名無しさん (ワッチョイ 93ad-hPrW)
23/08/20 23:13:57.98 pbHEs6OP0.net
>>499
OCRプログラムでラベルの写真のタイトル部分の文字列読ませれば可能だが、問題は、ラベルに似せたものの上に書いた文字でも同じように読んで成功してしまうことだ。つまりレコード不要。
504:デフォルトの名無しさん (ワッチョイ 2b63-/QKx)
23/08/20 23:16:52.12 GxzweHHZ0.net
そういえばオープンリールも速度とトラック数にこだわりがあったな
505:デフォルトの名無しさん (テテンテンテン MM4b-0mpE)
23/08/20 23:22:22.29 pKCQsYPtM.net
>>501
さすがにレコードか位は判別可能なんで、そういう誤魔化しは除外できるでしょ
つうか、インチキなんだからどうでもいいんだけどねw
506:デフォルトの名無しさん (スッップ Sdb3-jt3B)
23/08/20 23:46:32.25 WX+gcEAed.net
人間「このレコードかけて」
AIスピーカー「かしこまりました…あーあーはってしーないー」
人間「お前が歌うんかい!」
507:デフォルトの名無しさん (ワッチョイ 5910-oBFI)
23/08/21 00:56:03.52 h/vumT/U0.net
>>499
ワロタ
…でも「顧客が本当に必要なもの」はそれかもしれない
508:デフォルトの名無しさん (ワッチョイ 2b63-/QKx)
23/08/21 00:58:44.27 EVtKvg8p0.net
曲を再生して、それをスマホに聴かせ、曲名やアルバム名を調べる
というのは割と使ってる
509:デフォルトの名無しさん (ワッチョイ 7101-vfxM)
23/08/23 12:33:50.88 WRsTeN290.net
localtimeでtm型のポインタが返ってきますが
これはfreeのような後始末はしなくても良かったんでしたっけ?
以下のt1の後始末です
#include <time.h>
#include <stdio.h>
int main () {
time_t t0 = time (NULL);
struct tm *t1 = localtime (&t0);
return 0;
}
510:デフォルトの名無しさん (ワッチョイ 93ad-Dfy6)
23/08/23 12:46:33.56 RWX4pd1L0.net
不要
静的な領域なんで
その代わりスレッドセーフじゃないし
次に呼び出したら値が変わっちゃうのでそのまま使うならコピー必須
511:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 893e-glFA)
23/08/23 13:08:22.64 d+s8esX90.net
時間系関数の一部では同じ型のポインタを返す他の関数が
内容を書き換えることもあるということにも気を付ける必要がある。
つまり localtime が返したポインタが指す先は
gmtime の呼び出しで内容が変わるかもしれないし変わらないかもしれない。
512:デフォルトの名無しさん (ワッチョイ 7101-vfxM)
23/08/23 13:18:07.19 WRsTeN290.net
>>508,509
あざーす!
思い出しました! そうでした
513:デフォルトの名無しさん (スップ Sdb3-Vj9P)
23/08/23 13:23:04.60 Tm9lJ2oNd.net
Cの標準ライブラリはメモリ操作関係やsprintfみたいな書式出力系以外は古臭くてほぼ使い物にならないから
システムのAPIを直接呼んだ方がいいよ
ガハハ
514:デフォルトの名無しさん (ワッチョイ 5910-oBFI)
23/08/23 13:57:11.07 dIB9DDlN0.net
>>511
えー、お名前教えて
あなたとあなたのコードが関係するプロジェクトは全部避けたいですw
515:デフォルトの名無しさん (ワッチョイ 7101-vfxM)
23/08/23 13:59:16.75 WRsTeN290.net
>>511
以前に以下のように書いてるところを
using boost::posix_time;
using std;
cout << to_simple_string (second_clock::local_time ()) << '\n';
C++にchronoが入ったので標準ではどう書けば良いのか調べてまして
以下の例を見つけそこでstd::localtime使ってるので聞きました
URLリンク(cpprefjp.github.io)
std::system_clock::time_pointってstd::ostreamに直接出力できないんですかね?
すれ違いかもしれんですが
516:デフォルトの名無しさん (ワッチョイ 7101-vfxM)
23/08/23 15:39:04.68 WRsTeN290.net
同じ出力になる以下を使用することにします
$ cat test.cpp
#include <iostream>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <chrono>
#include <ctime>
#include <iomanip>
int main () {
std::cout << boost::posix_time::to_simple_string (boost::posix_time::second_clock::local_time ()) << '\n';
std::chrono::system_clock::time_point p {std::chrono::system_clock::now ()};
std::time_t t {std::chrono::system_clock::to_time_t (p)};
std::tm lt; localtime_r (&t, <);
std::cout << std::put_time (<, "%Y-%b-%d %H:%M:%S\n");
return 0;
}
$ g++ test.cpp
$ ./a.out
2023-Aug-23 15:35:01
2023-Aug-23 15:35:01
517:デフォルトの名無しさん (テテンテンテン MM4b-0mpE)
23/08/23 16:21:15.95 mK4fJzJ6M.net
>>512
Win32使ってCでコーディングするなら、Win32以外のAPIを呼び出す必要がないな
518:デフォルトの名無しさん (ワッチョイ c101-YAjS)
23/08/23 19:26:23.68 De6qHSvf0.net
標準入出力関数を Win32APIだけで実装しなおすのはなかなか
車輪の再発明くさい案件になるな
519:デフォルトの名無しさん (オイコラミネオ MM1d-YAjS)
23/08/23 19:53:06.85 7GDemJR0M.net
残念ながらC標準ライブラリは古くて当たり前なんだ…
それを基準にして多くの人が回ってるから変えられないんだろう
でも人間の使える時間は限られてるので使えるものはうまく使ったほうがいい
メンテナンス性は知らないが
520:デフォルトの名無しさん (スップ Sdb3-jt3B)
23/08/23 19:55:44.31 6N7MylZZd.net
新しく作り直したのに使い物にならないのがWIN32APIの凄いところなんだよなw
521:デフォルトの名無しさん (オイコラミネオ MM1d-YAjS)
23/08/23 19:59:10.27 7GDemJR0M.net
win95ってほぼ30年前でしょ…
522:デフォルトの名無しさん (ワッチョイ 5910-oBFI)
23/08/23 20:09:03.11 dIB9DDlN0.net
>>515
Win32?今の話の流れと全然関係ないです
私はLinux上で開発してるけど、それも関係ない
いいからお名前教えて
523:デフォルトの名無しさん (ワッチョイ 5910-oBFI)
23/08/23 20:14:42.63 dIB9DDlN0.net
まあいいや。どうせ永遠に話通じないし、意味ないね、スレ汚しごめん> all
世界中のあらゆる人と意思疎通できる訳がない
524:デフォルトの名無しさん (ワッチョイ 5910-oBFI)
23/08/23 20:17:30.73 dIB9DDlN0.net
>>515
あなたもごめんね、信念に従ってそのまま生きて下さい
525:デフォルトの名無しさん (ブーイモ MMab-NzR0)
23/08/23 20:26:41.70 magUjDjkM.net
何でWinで開発する人って標準ライブラリを毛嫌いしてるんですか?
526:デフォルトの名無しさん (ワッチョイ 2b63-/QKx)
23/08/23 20:37:13.42 gVkUNQKt0.net
システムコールとか呼んでなかったか?
たしか、目標をセンターに入れてスイッチ、だった
527:デフォルトの名無しさん (テテンテンテン MM4b-0mpE)
23/08/23 23:51:05.54 Ed2C94gyM.net
Win32とかゲーム開発する時は必須だろ
デバッグ中はprintf使ったりするけど、最終的にはバイナリに標準ライブラリのコードは含めない
528:デフォルトの名無しさん (スップ Sdb3-jt3B)
23/08/23 23:56:23.25 6N7MylZZd.net
GNUみたいにそれなりの人たちがディスカッションして作ったものではなく
いかにもマイクロソフトのサラリーマンプログラマたちが適当に会議して作った仕様に見えるので信仰の対象にしてるのは気がしれんw
529:デフォルトの名無しさん (ワッチョイ 4102-DaUO)
23/08/24 00:03:34.65 7wZt4qen0.net
>>523
Win16でmallocなんか使ってたらころされてしまいますよ
530:デフォルトの名無しさん (ワッチョイ 2b63-/QKx)
23/08/24 00:24:02.15 0ALYOmXL0.net
そこでfar pointerです
531:デフォルトの名無しさん (スップ Sdb3-jt3B)
23/08/24 00:43:25.45 NfI5GYO1d.net
16ビットで十分なハンドル値をnearポインタにキャストするというのはいいアイデアだった
532:デフォルトの名無しさん (ワッチョイ 7101-vfxM)
23/08/24 00:56:52.45 hEI/Eij50.net
あぁなるほど!
16bitの頃のMSの貧弱な開発環境で育ったせいで
標準Cに対しては屈折した気持ちのままなのねw
533:デフォルトの名無しさん (ワッチョイ db79-wKkg)
23/08/24 01:06:43.62 W+JHQ2GG0.net
標準ライブラリは古いつーか実環境を考慮してないだけでbit数はあまり関係ない…
理解してないのに無理に話に入ってこんでもいいぞ
534:デフォルトの名無しさん (テテンテンテン MM4b-0mpE)
23/08/24 01:26:43.52 WP7jiBq4M.net
>>526
いや、初期のマイクロソフト知らないのかよw
闘うプログラマーとか読んでみろ
めちゃくちゃおもろいよ
そんなことも知らないとか、モグリも大概にしろ
535:デフォルトの名無しさん (テテンテンテン MM4b-0mpE)
23/08/24 01:40:06.60 WP7jiBq4M.net
macOS(iOS)のアプリ作る時は、OPENSTEP由来のFoundationフレームワークを使うだろ
こうなるとprintfも使わずにNSLogばっかりだなw
536:デフォルトの名無しさん (ワッチョイ 93ad-hPrW)
23/08/24 02:24:55.77 LAGetXxi0.net
そもそもC言語で新規開発すること自体がほとんどないので標準ライブラリ使うかどうかは今となってはどうでも良い。
537:デフォルトの名無しさん (スフッ Sdb3-G+yN)
23/08/24 07:36:25.07 6SD6OvDLd.net
macOS以前のmacのCはもっとひどかった黒歴史
538:デフォルトの名無しさん (スッププ Sdb3-jt3B)
23/08/24 12:16:23.79 50jyCEBUd.net
>>532
その手の本を本気にするなよ恥ずかしいw
小説だぞ
539:デフォルトの名無しさん (テテンテンテン MM4b-0mpE)
23/08/24 12:58:04.14 piehDxfAM.net
>>536
それで煽ってるつもりかよw
知らないなら黙ってろよ
540:デフォルトの名無しさん (テテンテンテン MM4b-0mpE)
23/08/24 13:05:10.53 piehDxfAM.net
闘うプログラマーをディスる奴が居るとはな
さすがモグリは違うw
541:デフォルトの名無しさん (スッププ Sdb3-jt3B)
23/08/24 16:07:54.33 s7pHw0+wd.net
お前の聖書を貶されて怒るのはわかるが
ただの宗教を他人におしつけるなw
542:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 893e-glFA)
23/08/24 17:35:21.45 575mCkoc0.net
「綺麗なのは使われてないものだけ」みたいな格言をどっかで見た。
543:デフォルトの名無しさん (オイコラミネオ MM1d-YAjS)
23/08/24 22:11:17.69 ypVJRmCUM.net
闘うプログラマー懐かしいな
随分と前に上下巻の頃に読んだ
うろ覚えで申し訳ないがwinodwsのAPIセットを考えるのにカトラーと幹部がクルーザーを1~2週間借りて
湖でクルージングしながらゆっくり考えたってところが印象的
クリエイターって感じで良かった
544:デフォルトの名無しさん (オイコラミネオ MM1d-YAjS)
23/08/24 22:22:10.52 ypVJRmCUM.net
残りの人生がどれだけあるか知らないけどそういう環境でそういう仕事してみたいなと思う
545:デフォルトの名無しさん (ワッチョイ 2b63-/QKx)
23/08/24 22:45:31.31 0ALYOmXL0.net
C言語の開発って、
ジャングルの中、誰からも支援を受けずに
自給自足で生き残って敵に勝つイメージがあるな
必要な道具は自分で作るみたいな
恵まれた環境で使うには難しい世の中になってきた
546:デフォルトの名無しさん (ワッチョイ 9302-e/Qn)
23/08/24 23:08:24.66 egx7h1gE0.net
闘うプログラマー読んだことないモグリだけど
カトラーがDECから来る前からWindows APIはあったよね?
547:デフォルトの名無しさん (オイコラミネオ MM1d-YAjS)
23/08/24 23:36:03.41 ypVJRmCUM.net
Windowsは1.0からあるからなあw
闘うプログラマーはNTの開発物語
カトラーが関与したのはWindowsNTのAPIセット
548:デフォルトの名無しさん (テテンテンテン MM4b-0mpE)
23/08/24 23:47:18.67 Nhyf7NRLM.net
カトラーが実装したのはカーネルレベルのAPIでしょ
Win32はその上にある
549:デフォルトの名無しさん (オイコラミネオ MM1d-YAjS)
23/08/25 00:02:25.25 fBea/yqOM.net
win32はもともとWindows NTの機能だよ
それにカーネルだけ実装してWindows NTを発売したとは思えないけど
3.1とかはwin16
ついでNTでwin32
そのあと95が出てくる
550:デフォルトの名無しさん (ワッチョイ 2b63-/QKx)
23/08/25 00:08:33.68 NrcyVyXF0.net
フリーセルはWIn32sで動いていたんだよな
551:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 893e-glFA)
23/08/25 00:18:17.29 EDIsU9Tc0.net
あの頃はネット接続も一般的ではなかったから Win32s は雑誌の付録とかの形でよく入ってたのを覚えてる。
俺はテックウィンの付録CDから入れたわ。
552:デフォルトの名無しさん (ワッチョイ a19a-SOGH)
23/08/25 07:12:39.12 Fur8du0o0.net
>>533
macOS(Mac OS X)になって、旧Mac OS由来のCarbon APIのサポートのため
Foundationの下にCoreFoundationというCの共通ライブラリが作られたよね
すなわちC言語が基礎と。おそらく今でも
Carbon亡き今、CoreFoundationを直接使う必要はほぼないけど
書式出力は文字列のクラス(NSString/CFString)に含まれるというべきかな
NSLogも書式出力を受け付けるが、元々ログ出力関数なので