[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 12/03 12:10 / Filesize : 265 KB / Number-of Response : 1010
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C言語なら俺に聞け 156



1 名前:デフォルトの名無しさん [2020/09/28(月) 14:41:30.00 ID:QxfbhGyV0.net]
!extend:checked:vvvvv:1000:512
(新スレ立ての際上記コマンドを2行書き込んでください)
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
codepad.org/

C11
www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf

C99
www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
kikakurui.com/x3/X3010-2003-01.html

C FAQ 日本語訳
www.kouno.jp/home/c_faq/

JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/

※前スレ
C言語なら俺に聞け 155
https://mevius.5ch.net/test/read.cgi/tech/1589120427/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured

266 名前:デフォルトの名無しさん mailto:sage [2020/11/14(土) 15:29:53.89 ID:QvOqIpVLM.net]
basic風にgosubキャンペーンではどうだろう。

267 名前:デフォルトの名無しさん mailto:sage [2020/11/14(土) 15:46:33.79 ID:kNYsw/sP0.net]
gotoトラブル

268 名前:デフォルトの名無しさん mailto:sage [2020/11/14(土) 16:57:36.06 ID:t12i3dhb0.net]
Go To LOVEる

269 名前:デフォルトの名無しさん mailto:sage [2020/11/14(土) 17:20:09.80 ID:XuOfn3YC0.net]
ここはアニメ板ですね

270 名前:デフォルトの名無しさん mailto:sage [2020/11/14(土) 18:05:11.28 ID:b41n/hcI0.net]
プログラマの大凡半数はオタクだからな(´・ω・`)

271 名前:デフォルトの名無しさん mailto:sage [2020/11/14(土) 18:16:19.79 ID:3sCpnJ2t0.net]
しかし例外トラベルはなんかいやだ。

272 名前: mailto:sage [2020/11/14(土) 18:33:34.30 ID:ovQs8svhH.net]
>>267
アニメならば、2020 年地上波アニメで一番よかったのは a.i.c.o incarnation だったと私は考えています

273 名前:デフォルトの名無しさん [2020/11/14(土) 22:05:45.83 ID:XJ24TZhC0.net]
そうか?
TRUEは歌がうまいし
白石晴香の声も好きだけど
設定が科学的なフリしてる割に中途半端だし
ツッコミどころ多くてなんだかなと思いながら観てた

274 名前:デフォルトの名無しさん [2020/11/15(日) 16:01:45.41 ID:ZF6xjL9s0.net]
webサイトぐらいしか作った事無いド素人なのですが
cheatengineのようなツールはどうやって作るのですか?



275 名前:デフォルトの名無しさん [2020/11/15(日) 16:31:52.95 ID:U+/Dwi3J0.net]
マルチしちゃったね

276 名前:デフォルトの名無しさん mailto:sage [2020/11/15(日) 16:46:32.42 ID:BV2MAPDR0.net]
許すw

277 名前:デフォルトの名無しさん mailto:sage [2020/11/18(水) 02:01:14.39 ID:7/2eOuWRa.net]
int suti[]={1,2,3};ってやったらsuti[3]は存在しないんだよね?for文で存在しなくなるまで〜ってやりたいんだけどどうすればいい?要素数が変わってもいいようにしたいからi != 3はやりたくないんだよね

278 名前:デフォルトの名無しさん mailto:sage [2020/11/18(水) 02:06:30.67 ID:7/2eOuWRa.net]
>>275
自レス
出来れば要素数を取得するっていう方法も避けたい!

279 名前:デフォルトの名無しさん mailto:sage [2020/11/18(水) 02:16:10.62 ID:D7KcGGQQ0.net]
条件式をi<3;ってするのが定番かな。

280 名前:デフォルトの名無しさん mailto:sage [2020/11/18(水) 02:16:23.70 ID:xY74VPsT0.net]
配列名ってメモリー上に付けられたラベルみたいなものだから、
添え字の範囲が想定を逸脱しててもアクセス出来るからな
エラーになるかは別にして

281 名前:デフォルトの名無しさん mailto:sage [2020/11/18(水) 02:17:27.84 ID:xY74VPsT0.net]
わりと真面目にやりたいなら、

#define Numof(n) (sizeof(n) / sizeof(n[0]))
for (i = 0; i < Numof(suti); i++)

282 名前:デフォルトの名無しさん mailto:sage [2020/11/18(水) 08:19:22.94 ID:xva9VBXaa.net]
>>276
どういう理由で要素数の取得を回避したいのだろう?

実現可能なら標準関数も採用してると思う
あるのは終端記号でうちきり式

283 名前:デフォルトの名無しさん [2020/11/18(水) 11:15:05.78 ID:2WQ1ruJZ0.net]
宗教的理由でsizeofを使いたくないなら
あとはセンチネルの-1を置くくらいしかない
int suti[]={1,2,3,-1};

……何がコイツの教義のお眼鏡に適うかどうか分からんからこれも否定されるかも知れんな

「存在」に関する用語の用法なら、やっぱり宗教的事案で、
「存在しているかどうかをチェックしたい」となるから宗教的思考が背後に控えていると思われる
配列の個数じゃなくて配列の存在だ

存在してるかどうかに強く拘ってんならやっぱり宗教事案なんだろう
だから理由なんて無いな
宗教的な事由で「要素数はイヤ」なんだろう

284 名前:デフォルトの名無しさん mailto:sage [2020/11/18(水) 11:49:11.86 ID:kf1ewZiT0.net]
BASIC時代の 文字数+文字データ 構造思い出した。



285 名前:はちみつ餃子 mailto:sage [2020/11/18(水) 12:01:00.59 ID:0x2GmUxc0.net]
>>275-276
こういうトリックが使えなくもない

#include <stdio.h>

int main(void) {
int suti[]={1,2,3};
for(int *p=suti; p< *(&suti+1); ++p) printf("%d \n", *p);

return 0;
}

286 名前:デフォルトの名無しさん [2020/11/18(水) 12:09:28.92 ID:2WQ1ruJZ0.net]
【更新あり】PC-9801のプログラム(ソースコード無し)をリバースエンジニアリングしてくれ!→変態技術の塊なことが判明しました - Togetter
ttps://togetter.com/li/1185437

これによるとBASICはかなり先見性があるらしいが

287 名前:デフォルトの名無しさん mailto:sage [2020/11/18(水) 12:59:08.65 ID:8knHjFQ7M.net]
>>281
それ、センチネルやのうて、ただの終端マークや

288 名前:デフォルトの名無しさん mailto:sage [2020/11/18(水) 15:03:37.53 ID:kf1ewZiT0.net]
BASIC自体が使い物にならないとは思わないけど、
命令セットが貧弱すぎてマシン語と組み合わせないと高度なことができなかった。

289 名前:デフォルトの名無しさん mailto:sage [2020/11/18(水) 16:20:02.97 ID:2ppIm+8A0.net]
言語自体で作れる機能がないのはCだってそうだ
BASICでそれをやると遅いからマシン語の出番があったってこと
USRやEXECじゃなく新コマンドを作ろうとすると結局BASICインタプリタのサブルーチンをJSRしまくることになる

290 名前:デフォルトの名無しさん mailto:sage [2020/11/18(水) 17:09:25.17 ID:xY74VPsT0.net]
BASICにはCALLと言う無敵の・・・いやなんでもない

291 名前:デフォルトの名無しさん mailto:sage [2020/11/18(水) 20:16:59.09 ID:2DtKbiiK0.net]
>>275
c++みたいな範囲for文ってCの構文に入らんのかの?
int suti[]={1,2,3};
for(int x: suti) do_some(x);
みたいなやつ。使いどころが極めて限定されるから意味ないかのう。

あとは変態マクロをコネコネするしか思いつかん。

292 名前:デフォルトの名無しさん mailto:sage [2020/11/18(水) 20:22:04.53 ID:2ppIm+8A0.net]
原理主義的な美意識ならC++いくしかねえだろ
Cは実を取るポリシーだかんあ

293 名前:はちみつ餃子 mailto:sage [2020/11/18(水) 23:10:46.92 ID:0x2GmUxc0.net]
>>282
C/C++ の世界でも BSTR というものがあってな……。

294 名前:デフォルトの名無しさん mailto:sage [2020/11/19(木) 01:25:26.46 ID:k2ADczLrH.net]
MacにもPSTRというのがあったなあ。パスカル由来だっけ。
確か紅蓮華の人のような名前のコンピュータが...



295 名前:デフォルトの名無しさん mailto:sage [2020/11/23(月) 22:01:17.13 ID:9aSCyeCwa.net]
if (a()) {} else if (b()) {}
のとき呼ばれる関数の順は必ずa(), b()の順ですよね?
if (a()) {} else {if (b()) {}}
文法的には↑こういうわけだから間違いないですよね?

296 名前:デフォルトの名無しさん mailto:sage [2020/11/23(月) 22:52:02.39 ID:O1GHu8Kp0.net]
>293
a()の返り値が0以外(True)ならb()は実行されないんじゃないの?

297 名前:デフォルトの名無しさん mailto:sage [2020/11/24(火) 00:18:54.48 ID:JYMaFV+Pa.net]
そうじゃないと aで nullチェックからの bみたいのできなくなりそう

298 名前:デフォルトの名無しさん mailto:sage [2020/11/24(火) 00:25:40.58 ID:stGCUtDe0.net]
NULLの時はそのまま後続処理続けるんでしょうか

299 名前:デフォルトの名無しさん [2020/11/24(火) 00:29:07.26 ID:JYMaFV+Pa.net]
nullのときは b を通過しないようにするかと
質問の趣旨とちょっと違ったかもしれませんね
ゴメンなさい

300 名前:デフォルトの名無しさん mailto:sage [2020/11/24(火) 00:30:13.18 ID:JYMaFV+Pa.net]
ダメレスの上書きだな…
重ね重ね申し訳ない

301 名前:デフォルトの名無しさん mailto:sage [2020/11/24(火) 00:35:37.30 ID:PK3X1vMU0.net]
>if (a()) {} else if (b()) {}
書き直して
if ( a()!=0 ) { 処理1 } else if ( b(0)!=0 ) { 処理2 }


a()の返り値がTrue(0以外)ならば 処理1 を実行して次の行へ
a()の返り値がFalse(0)ならば b() を呼び出して、b(0)の返り値が True(0以外)ならば 処理2 を実行。

302 名前:デフォルトの名無しさん mailto:sage [2020/11/24(火) 09:15:59.48 ID:ZWk4Vaeta.net]
if (stateA) else if (stateB) {} はまだ直感的だけど

if (a() && b()) { ... } で a() が偽の時 b() は実行されない
if (a() || b()) { ... } で a() が真の時 b() は実行されない
のはC言語ならではルールなので注意

303 名前:デフォルトの名無しさん mailto:sage [2020/11/24(火) 09:34:54.23 ID:HgpldYdAM.net]
>>300
今時のたいがいの言語で同じルールだ。

304 名前:デフォルトの名無しさん mailto:sage [2020/11/24(火) 11:48:49.75 ID:8CcwCAVK0.net]
デバッガーでトレースするとか
printf()出力で確認するとかしないのかな?


8bit CPUのアセンブラ時代なんてバグでハングして(ry



305 名前:135 mailto:sage [2020/11/24(火) 12:19:31.97 ID:TYQ0nicua.net]
実装がそうなっているだけか規格で保証されているかは全く別問題だから, 「やってみたらそうなった」に加えて規格を確認するのは重要

306 名前:デフォルトの名無しさん mailto:sage [2020/11/24(火) 12:22:00.11 ID:vTVthpTQd.net]
>>301
そう思ってると痛い目にあう

307 名前:デフォルトの名無しさん mailto:sage [2020/11/24(火) 13:36:23.71 ID:CAtJf7/qH.net]
>>304
だから、たいがいっつってるだろ
phpとかのろくにcsを学ばずに作った一部のアホ言語まで面倒見きれん

ともかくC言語ならではなどではない

308 名前:デフォルトの名無しさん mailto:sage [2020/11/24(火) 13:53:18.36 ID:g7Dt5dEuM.net]
要するに短絡評価と非短絡評価
https://ja.wikipedia.org/wiki/%E7%9F%AD%E7%B5%A1%E8%A9%95%E4%BE%A1

309 名前:デフォルトの名無しさん mailto:sage [2020/11/24(火) 17:29:31.98 ID:stGCUtDe0.net]
そこまで掘り下げなくても、単に if else 使う時の順序と関数呼出の有無

310 名前:293 mailto:sage [2020/11/24(火) 17:57:03.44 ID:ufG8nYHfa.net]
みなさん色々ありがとうございます

>>294
この場合はもちろん、a()が0を返した場合のことについてです

>>295
そうですよね
そうじゃないと色々困りすぎますよね

冷静になってみればアホな質問でしたすみませんでした

311 名前:デフォルトの名無しさん mailto:sage [2020/11/25(水) 17:50:07.30 ID:h9isg/D4d.net]
>>305
C言語スレで今時の言語を語る
C言語時代の言語はたいがいの言語でCとは違うルール

312 名前:デフォルトの名無しさん mailto:sage [2020/11/25(水) 17:58:01.33 ID:rJINVE9t0.net]
if else 辺りは、そんなに違いは無いと思うが

313 名前:デフォルトの名無しさん mailto:sage [2020/11/25(水) 19:36:32.00 ID:DcZYUINF0.net]
if else 辺りは、PascalとCの違いが分かるところの一つなのな

314 名前:デフォルトの名無しさん mailto:sage [2020/11/25(水) 21:51:34.65 ID:vhvyuere0.net]
> C言語時代の言語はたいがいの言語でCとは違うルール

日本語でおk



315 名前:デフォルトの名無しさん [2020/11/26(木) 01:30:04.21 ID:R1TSJRT3M.net]
入れ子になって構文解析に保証回数の記述が必要なC
たぶん大抵は数珠繋ぎになって解析器はお気楽ご気楽シゴトなelseif装備言語

316 名前:デフォルトの名無しさん mailto:sage [2020/11/26(木) 08:07:50.73 ID:EOjdKX+aM.net]
1passでコードが吐けるんじゃない限り
どこかに構文木を蓄積する必要があるんだから
何らかの上限は必ず存在する。

317 名前:デフォルトの名無しさん [2020/12/09(水) 14:46:15.05 ID:lKZrYGPu0.net]
ある構造体があるメンバーを持ってるか持ってないかで場合わけってできるの?

318 名前:デフォルトの名無しさん mailto:sage [2020/12/09(水) 15:20:51.88 ID:dBVX1XEl0.net]
C言語の話で良いのか?
マクロレベルならできるだろうが
実行時は無理だろうな

319 名前:デフォルトの名無しさん mailto:sage [2020/12/09(水) 16:23:12.63 ID:W1Z3cSFoM.net]
>>315
C++のtemplateなら……

320 名前:デフォルトの名無しさん mailto:sage [2020/12/09(水) 23:18:41.68 ID:X6ku5mk00.net]
テンプレートを使わないマクロで実現する方法思いつかなかったから調べてみたけど, BOOST_DECLARE_HAS_MEMBERもSFINAEで実装されてた
標準Cの規格の範囲でポータブルな実装は無理そうに思えてきた

321 名前:デフォルトの名無しさん [2020/12/10(木) 08:18:36.14 ID:yWf2E74j0.net]
C言語にテンプレート機能だけつける方法ないの?

322 名前:デフォルトの名無しさん mailto:sage [2020/12/10(木) 08:33:48.40 ID:1ebLrqpT0.net]
#include <tgmath.h>みたいの?

323 名前:はちみつ餃子 mailto:sage [2020/12/10(木) 11:36:21.24 ID:p57PMoZs0.net]
>>320
学術的な分類はよく知らないけどそれはアドホック多相に分類されるものじゃないの?
テンプレートはパラメトリック多相的なものなので多相を実現するものという意味では近いけど、
使い勝手としてはそんなに近くない。

>>319
「だけ」っていっても C++ のテンプレートは C++ の型システムやなんやかんやと一体のものなので、
テンプレートだけ抜き出して C に入れるみたいなことは出来ないでしょ。
C 独自のテンプレートみたいなのを考えるくらいなら C++ を使えやって話になるだろうし。

>>315
マクロ展開は文法の解釈に先立って実行されるので、
マクロ展開時にプログラムの内容を見て分岐することは出来ない。

構造体を元にして真偽値を生成するような「展開形」を思いつけば実行時に分岐することは
出来るのかもしれないけど思いつかないなぁ。

324 名前:デフォルトの名無しさん mailto:sage [2020/12/10(木) 13:40:39.75 ID:Rt1ylxrY0.net]
開発環境の都合で Cしかないので困ってるとすれば
C++ 食って C 吐き出す中間のコンパイラがあればいい ってことに



325 名前:デフォルトの名無しさん mailto:sage [2020/12/10(木) 15:08:30.04 ID:cFFVV66u0.net]
>>315
構造体に手を入れられるなら、ユニークなIDを割り当てて
そのID見て、処理を切り替えて行く

326 名前:デフォルトの名無しさん mailto:sage [2020/12/10(木) 20:09:21.68 ID:CcbWokCZ0.net]
>>317
あれ、C++も結局メンバーがなければコンパイル時に死亡するだけじゃ?
ランタイムでどうこうするわけにはいかないんじゃ...

327 名前:デフォルトの名無しさん mailto:sage [2020/12/10(木) 21:28:27.30 ID:hyB2wVsLM.net]
>>324
sfinaeがあるので死ぬ代わりにfalseを返す関数みたいなのが作れる
ランタイムでどうこうしたければtype_info -> boolな関数を作ればいいが、型を追加するたびに変更が入ることになってtemplateほどの便利さはない

328 名前:デフォルトの名無しさん mailto:sage [2020/12/11(金) 04:23:01.20 ID:p1x0IGcK0.net]
C++をベターCとして使う、でいいんでねい?

329 名前:はちみつ餃子 mailto:sage [2020/12/11(金) 11:11:25.01 ID:NpU6prgS0.net]
>>324
(たぶん公式な用語ではないけど) ハードエラーとソフトエラーという区分がある。
テンプレートの展開に失敗してコンパイルの失敗になってしまうハードエラーと、
テンプレートの次の候補を試すソフトエラー。
で、そのソフトエラーを上手いこと利用して分岐するのが SFINAE ってわけ。

C++20 からはコンセプトが入ったのでそれもかなり楽に出来るようになった。

330 名前:デフォルトの名無しさん mailto:sage [2020/12/11(金) 13:56:53.94 ID:VMKMxeJn0.net]
ここはC言語スレではなくC++勧誘スレになったのか

331 名前:はちみつ餃子 mailto:sage [2020/12/11(金) 14:34:30.55 ID:NpU6prgS0.net]
無理やりでも C で出来るならいいんだけど、出来ないんだもの……。 しゃーない。

332 名前:デフォルトの名無しさん mailto:sage [2020/12/11(金) 14:45:28.79 ID:VMKMxeJn0.net]
〜ならこうやれるって
一種の荒らしだからね

333 名前:デフォルトの名無しさん mailto:sage [2020/12/11(金) 16:54:58.94 ID:p1x0IGcK0.net]
void func();
void func(int);
void func(double);
void func(void*);
auto func(int) -> enable_if_t<false, int>;
みたいな多重定義があるときに
func(1);
と呼び出されたときに、候補1つずつ
呼び出すとしたら何が起きるのかをリストアップして
void func(); //error
void func(int); //exact
void func(double);//conversion
void func(void*);//error
auto func(int) -> enable_if_t<false, void>; //error
そこからerrorになったのを外すってだけだかんな

334 名前:デフォルトの名無しさん mailto:sage [2020/12/11(金) 17:55:15.27 ID:o4C6fSAI0.net]
C言語でどうやって多重定義を実装するのかな?
可変長引数をこねくり回せば出来るかもしれないが



335 名前:はちみつ餃子 mailto:sage [2020/12/11(金) 18:02:13.48 ID:NpU6prgS0.net]
>>332
C11 から _Generic という機能で型によって自動で呼び分けることは出来る。

336 名前:デフォルトの名無しさん mailto:sage [2020/12/11(金) 18:20:43.38 ID:o4C6fSAI0.net]
新しい機能を使うのではなく、もうちょっと工夫してみて

337 名前:デフォルトの名無しさん mailto:sage [2020/12/11(金) 18:44:44.22 ID:7UnfkYH50.net]
何その上から目線

338 名前:デフォルトの名無しさん mailto:sage [2020/12/11(金) 18:47:44.91 ID:o4C6fSAI0.net]
それがC言語の醍醐味

339 名前:デフォルトの名無しさん mailto:sage [2020/12/11(金) 18:56:25.10 ID:o4C6fSAI0.net]
サバイバルナイフ一本でジャングルで暮らしていく位の気概がないとC言語は使えない

340 名前:はちみつ餃子 mailto:sage [2020/12/11(金) 18:56:28.63 ID:NpU6prgS0.net]
>>334
新しいって言ってもなぁ。
今年は 2020 年なんだぞ。

341 名前:デフォルトの名無しさん mailto:sage [2020/12/11(金) 18:57:16.38 ID:o4C6fSAI0.net]
C11スレでも立ててそこでやったら?

342 名前:デフォルトの名無しさん [2020/12/11(金) 19:36:39.77 ID:Z3aKNSgT0.net]
Cならポインタを積極的に使う。

343 名前:デフォルトの名無しさん mailto:sage [2020/12/11(金) 19:42:20.97 ID:s+Xx8Zn+0.net]
C11の話題でわざわざ新スレとかこいつ頭おかしいの?w

344 名前:デフォルトの名無しさん mailto:sage [2020/12/11(金) 19:48:16.88 ID:o4C6fSAI0.net]
ならば、このスレの話題は、汎用的なC言語で良いでしょう
新しい規格を話題にしたいなら、それ用のスレを立ててすれば良い



345 名前:デフォルトの名無しさん mailto:sage [2020/12/11(金) 19:53:34.25 ID:nEgtG7R60.net]
>>342
むしろ古い規格のみを話題にしたいお前が他所に行けば円満解決だろう

346 名前:デフォルトの名無しさん mailto:sage [2020/12/11(金) 20:09:21.63 ID:o4C6fSAI0.net]
ここは初代のC言語スレ

347 名前:デフォルトの名無しさん mailto:sage [2020/12/11(金) 20:10:26.40 ID:o4C6fSAI0.net]
新しい規格は新しい器でどうぞ

348 名前:デフォルトの名無しさん mailto:sage [2020/12/11(金) 21:31:36.15 ID:7UnfkYH50.net]
>>343
賛成

349 名前:デフォルトの名無しさん mailto:sage [2020/12/11(金) 23:01:06.49 ID:u7x51CWk0.net]
>>344
アホ、>>1を見てこい

> C11
> www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf

350 名前:はちみつ餃子 mailto:sage [2020/12/12(土) 09:10:37.90 ID:UUApGKPR0.net]
C21 は 2021 年に予定されてるけど、正式発効はいつものように遅くなるかなぁ。
次スレには間に合わなさそう。

細かいところで C++ に追従しているのがありがたい。

351 名前:デフォルトの名無しさん mailto:sage [2020/12/12(土) 20:24:51.48 ID:+E0Q9Nw10.net]
テンプレ直さなきゃな
現行規格はC11ではなくC18だ

352 名前:デフォルトの名無しさん [2020/12/13(日) 02:41:25.02 ID:3BYpAKtx0.net]
1スレの1だけど、みんな元気だなw

353 名前:デフォルトの名無しさん mailto:sage [2020/12/13(日) 02:52:26.43 ID:dBxf4Vg90.net]
わー、凄いですねー(棒

354 名前:デフォルトの名無しさん mailto:sage [2020/12/17(木) 09:46:05.20 ID:4VSV+Zch0.net]
https://text.baldanders.info/remark/2016/06/code-by-hardware-engineer/
ニヤニヤ笑ってしまった



355 名前:デフォルトの名無しさん mailto:sage [2020/12/17(木) 13:31:23.27 ID:AFn1O2bR0.net]
おれのハード屋の父親もre2cが吐いたようなコードを書いてた記憶がある

356 名前:デフォルトの名無しさん [2020/12/25(金) 09:10:24.53 ID:9Fso0P460.net]
int a[6];

int *a = malloc(6 * sizeof(int));
の違いは何ですか?

357 名前:デフォルトの名無しさん mailto:sage [2020/12/25(金) 11:15:33.22 ID:4TR/yfFq0.net]
>>354
記憶域期間 storage duration が違う
void func()
{
int a[6];
} //ここで自動開放 automatic storage duration
int a[6]; //最後まで解放されない static storage duration

mallocは当たり前だがfreeで手動開放
C++にはdynamic storage durationというのがあるが
Cでは言語自体にそのような概念はなく
malloc/freeというアプリが提供する機能ということになっている

358 名前:はちみつ餃子 mailto:sage [2020/12/25(金) 11:18:10.08 ID:My/Ukrd40.net]
>>354
違うものを持ち出して何が違うかと問われても困るんやが……。 <

359 名前:br> 背景を全部説明するとだいぶん長くなるので。

とりあえず結果的に出来る配列オブジェクトを比較するならオブジェクトの生存期間 (lifetime) が違う。
前者は自動記憶域期間、後者は割り付け記憶域期間という分類になる。

変数 a の違いという意味では前者の型は int[6] で後者は int* ということになる。
ただし配列は暗黙の型変換でそれの先頭要素を指すポインタになるので、
かなり共通した記法で扱える。
[]
[ここ壊れてます]

360 名前:デフォルトの名無しさん mailto:sage [2020/12/25(金) 11:29:13.76 ID:4TR/yfFq0.net]
字が違うことくらい言わんでも解っとるやろ

int a[6]; は sizeof a / sizeof a[0] でサイズを取得できるが
mallocで割り付けたメモリはサイズを聞けず自分で管理せねばならない

361 名前:デフォルトの名無しさん mailto:sage [2020/12/25(金) 12:31:04.53 ID:0FtKncKUM.net]
目から鱗どころか、天が落ちるぐらい面白い説明ができないのか。
無芸な奴らだ。

362 名前:デフォルトの名無しさん mailto:sage [2020/12/25(金) 12:39:14.80 ID:3NwCUk3p0.net]
ポインタ int *p; はインクリメント可能で p++ は合法
配列 int a[6]; はインクリメント不可能で a++ はエラーになる

363 名前:デフォルトの名無しさん mailto:sage [2020/12/25(金) 12:51:59.76 ID:D8aGfpPud.net]
>>358に期待

364 名前:デフォルトの名無しさん [2020/12/25(金) 13:23:43.17 ID:9Fso0P460.net]
>>354
メモリ配置の連続性はどちらも保障されていることで良いですか?



365 名前:デフォルトの名無しさん mailto:sage [2020/12/25(金) 14:43:22.97 ID:3NwCUk3p0.net]
配列は先頭から確保された領域の次のところを指せるまでは連続性が保障されてるんじゃなかったかな
規格あたるのはまかせた

(malloc の戻りは… 配列に準じるように実装されてそうではある)

366 名前:デフォルトの名無しさん mailto:sage [2020/12/25(金) 14:54:43.85 ID:qJluI3Ne0.net]
>>361
プログラムからの見た目はどちらも連続。
物理的に連続させたいならdma メモリ 確保とかでググる






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<265KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef