[表示 : 全て 最新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

202 名前:デフォルトの名無しさん mailto:sage [2020/10/25(日) 00:42:02.50 ID:LNYSWk6n0.net]
それだけじゃ参照してないしエラーなんてならなそうだけど
いつどんなエラーになるの?
参照した時?なら、5番地を読んでいい環境なの?
windowsやlinux等高級なOS上なら、絶対番地を勝手に読んじゃダメだよ

203 名前:デフォルトの名無しさん mailto:sage [2020/10/25(日) 00:46:43.39 ID:TZHfVi9W0.net]
(PBYTE)a は 変数ではなく、値になる

204 名前:デフォルトの名無しさん mailto:sage [2020/10/25(日) 00:51:22.10 ID:5nJTYzvV0.net]
>>200
コンパイルエラーになるんです。
エラー内容は"式は変更可能な左辺値である必要があります"です。
このコードはここに投稿するためのテストのために書いたコードなので、
参照関係の問題は理解しています。
*(PBYTE*)&a += 5;

(PBYTE)a += 5;
はやってることは同じと思うのですが、なぜエラーになるのかなと。
そういうものとして理解するしかないのでしょうかね

205 名前:デフォルトの名無しさん mailto:sage [2020/10/25(日) 00:57:14.44 ID:TZHfVi9W0.net]
*(PBYTE*)&a =

変数aの現在の値を&で取り出し、
それをポインタ値として扱い、
そのポインタ値が指し示すところに代入する
ということじゃないかな

206 名前:デフォルトの名無しさん mailto:sage [2020/10/25(日) 01:18:53.38 ID:TWzqhGL8M.net]
(PBYTE)a みたいにキャストすると、値の解釈の変更ということになり、
代入先(左辺値)にはできなくなる。

int i;
(float)i = 1.1;
って意味あると思う?

207 名前:デフォルトの名無しさん mailto:sage [2020/10/25(日) 01:33:16.78 ID:5nJTYzvV0.net]
あ〜〜 なるほど
floatなどの小数点以下を扱う型は以下のようにdが1になる特別な仕様があるから
そのためにエラーになるようになってるんですかね。
float c = 1.5f;
int d = (int)c;
int e = *(int*)&c;
この場合、dは1になるけど、eは1069547520になるから、
エラーになる現象はこれと近いのかな
この解釈であってるのだろうか

208 名前:デフォルトの名無しさん mailto:sage [2020/10/25(日) 01:35:55.99 ID:TWzqhGL8M.net]
それそれ。
それ追記しようとしてた。

209 名前:デフォルトの名無しさん mailto:sage [2020/10/25(日) 01:54:40.07 ID:5nJTYzvV0.net]
とはいえ
int i;
(float)i = 1.1;
これはiを一時的にfloatにキャストしてるだけだから、エラーにせずにiは1として動作させるとこはできなかったんだろうか

210 名前:デフォルトの名無しさん mailto:sage [2020/10/25(日) 02:21:39.27 ID:COZe3KfC0.net]
>>202
「なぜエラーになるのか」はエラーメッセージに出てる。
理解を深めたいなら、エラーメッセージのどこがわからないのか(どこまでわかってるのか)を言ってもらわないと。



211 名前:デフォルトの名無しさん mailto:sage [2020/10/25(日) 02:57:11.72 ID:5nJTYzvV0.net]
>>208
そもそもなぜコンパイラがこれをエラーと捉えるのかというのがわからないと言う意味で言っておりました。

212 名前:デフォルトの名無しさん mailto:sage [2020/10/25(日) 03:00:35.23 ID:COZe3KfC0.net]
>>209
kikakurui.com/x3/X3010-2003-01.html#71
> 制約 代入演算子の左オペランドは,変更可能な左辺値でなければならない。

213 名前:デフォルトの名無しさん mailto:sage [2020/10/25(日) 03:18:58.54 ID:COZe3KfC0.net]
>>207
ルールがこうなってる理由がわからないという話なら、それは
(float)i = 1.1 が i = 1 と同じになるようにルールを複雑化させてもそれに見合うほどうれしくないから、ね。

214 名前:デフォルトの名無しさん mailto:sage [2020/10/25(日) 03:28:10.91 ID:UGl+6vH40.net]
>>202
キャストの結果は常に右辺値
右辺値を代入してるから右辺値には代入出来ないというエラーが出る
ポインタのデリファレンスの結果は左辺値なので代入も問題ない

あとエスパーするにPBYTEってuint8_t (unsigned char)なんだろうけど(それ以外の場合はデリファレンスの結果が未定義),

> *(PBYTE*)&a += 5;

はint型の先頭バイトを書き換えたいという意図で,

> (PBYTE)a += 5;

こっちはメモリのどの位置を書き換えたいのか自明じゃないからやってること自体全く異なる

215 名前:デフォルトの名無しさん mailto:sage [2020/10/25(日) 08:17:29.39 ID:B8Qi0Gue0.net]
キャスト式の結果は左辺値ではない
間接演算式の結果は左辺値となる

これだけのことだろ

216 名前:はちみつ餃子 mailto:sage [2020/10/25(日) 09:56:54.64 ID:63196X630.net]
gcc3 の頃までは cast-as-lvalue が有ったけど 4 になるときに廃止された。
古いコードでこの機能をあてにしているものはあるかもね。

217 名前:デフォルトの名無しさん [2020/10/25(日) 13:18:04.05 ID:FzqccguI0.net]
>>197
(PBYTE)*a += 5;

218 名前:デフォルトの名無しさん [2020/10/25(日) 13:19:58.42 ID:FzqccguI0.net]
>>202
答えだけ言うとやってることが同じではない

219 名前:デフォルトの名無しさん mailto:sage [2020/10/25(日) 16:44:12.86 ID:5nJTYzvV0.net]
>>215
(PBYTE)*a += 5;
これはaのポインタが指す値に5を加算しているのではないでしょうか?
なので
*(PBYTE*)&a += 5;
と同じではないと思うのですが

220 名前:デフォルトの名無しさん [2020/10/25(日) 16:58:46.13 ID:FzqccguI0.net]
(PBYTE *) って (BYTE **) のことか
それなら同じじゃないな

っていうか「左辺値が変更出来ない型になってる」
これでこの話は終わり



221 名前:デフォルトの名無しさん mailto:sage [2020/10/25(日) 17:29:39.65 ID:0u/0rMBT0.net]
それなら「左辺値」ではなく「左辺」だろう

222 名前:はちみつ餃子 mailto:sage [2020/10/25(日) 18:23:36.88 ID:63196X630.net]
>>217
型とは独立して (一部関係もあるが) lvalue (左辺値) と rvalue (右辺値) という概念があるってのは理解できてる?
たとえば

int x=5;
x = 2;

と書いたら OK だけど

5 = 2;

と書いたらもちろん NG だというのはわかるよね。
変数は評価したら値が出てくるけどそれとは別に場所としての性質も持ってる。
場所と値としての性質を併せ持っているのが lvalue なんだ。

で、キャスト演算子を適用するというのは取り出した値に対して型変換することになるので、
型変換した結果は場所としての性質が失われてしまう。
つまり lvalue ではなく rvalue になってしまってこれは代入先としては有効ではない。

---- 余談 ----

実際には代入先は lvalue の中でも特に modifiable lvalue (変更可能な左辺値) である必要があって
そのあたりの詳細は 6.3.2.1 あたりに記述がある。
kikakurui.com/x3/X3010-2003-01.html#page38-div

223 名前:デフォルトの名無しさん [2020/10/26(月) 03:47:15.23 ID:zDyo5E1K0.net]
>>191
出力する端末が漢字を出すような端末で、尚且つその端末で漢字とされるコードを引き渡すのであれば出る。
しかしメジャーな文字コード体系で1バイトだけで漢字を表すようなものはなく、そういった端末も(おそらく自作しない限りは)ないだろうから putc() 1回だけで漢字が出ることはまずないと思う。

224 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 07:27:20.32 ID:ddH/1NYY0.net]
>>217
間接演算子は単項なので、代入演算子よりも先に結合する
よって意味的にはこうなっている
((PBYTE)(*a)) += 5;

225 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 09:07:00.12 ID:ePNtOm9AM.net]
>>215 >>222
恥ずかしいから出てくるな

226 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 09:39:14.29 ID:ddH/1NYY0.net]
>>223
ん? 俺は、おまえさんに恥をかかせたのか? そういう意図はなかったが

227 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 10:11:22.50 ID:ePNtOm9AM.net]
>>224
最初の質問が
*(PBYTE*)&a += 5;
(PBYTE)a += 5;
の違いなのに、
(PBYTE)*a += 5;
を解説するというトンチンカンで質問者を困らす回答見せられたら、
質問者に申し訳ないし同じ回答者としてこっちが恥ずかしくなるわ

228 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 11:15:20.28 ID:ddH/1NYY0.net]
俺は別に回答なんかしてねえよ

> ポインタが指す値に5を加算

これは間違いだよと指摘しただけだ
俺と217の対話に横レスしてきて勝手に恥ずかしいとか言ってる恥ずかしいやつに用はない

229 名前:デフォルトの名無しさん [2020/10/26(月) 15:09:18.69 ID:EltRWJ/HF.net]
int a = 123;
int *p = &a;
unsigned c = (unsigned long)p;
みたいにすると怒られるので
unsigned c = *(unsigned long *)&p;
みたいに参照すると ok だったりするけど
本来は参照するだけだったコードが
いつの間にか事情を知らない人によって
*(unsigned long *)&p += 5;
にすり替わったんじゃないかと最近思うようになった

230 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 15:20:36.35 ID:lJWYL04O0.net]
ポインタ(アドレス)の距離を求めるのに ポインタ値を整数化することはあるかもしれないしエラーにはならんね
unsigned long c1 = (unsigned long)p1;
unsigned long c2 = (unsigned long)p2;
c1 - c2 のような (p1 - p2 はあくまで要素数だしね)



231 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 15:49:43.24 ID:qF0DukLxF.net]
#include <iostream>
using namespace std;

class A{public: int a; A(int b):a(b){}};

int main() {
A a(123), b(456);
A *p = &a, *q = &b;
unsigned long r = (unsigned long)p, s = (unsigned long)q;
cout << s - r << endl;
cout << (unsigned long)q - (unsigned long)p << endl;
cout << (unsigned long)&b - (unsigned long)&a << endl;
cout << (unsigned long)&q - (unsigned long)&p << endl;
return 0;
}
特に問題無いか

232 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 20:55:35.80 ID:pV+9Vnjg0.net]
>>227 の p を unsigned として抜き出すのに
なんでわざわざ変数のポインタを取り直してるんだ?

int *p;
unsigned c = *(unsigned *)p; で十分なのに

233 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 20:56:38.86 ID:pV+9Vnjg0.net]
× p を
○ p の指し先を

234 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 21:41:34.62 ID:P78swXdWM.net]
*pじゃなくてpを取り出してるからだろ

235 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 21:55:26.21 ID:ZLlt5QiZ0.net]
pの指し先をunsignedとして抜き出しているわけではないよ
p(ポインタ)自体をunsignedに無理やり変換している

236 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 21:58:46.96 ID:rHcuqZcg0.net]
>>227
OKではない。
intとunsigned longは互換性のある型ではないし, アラインメントが異なる場合もあるから一般に未定義動作。

>>228-229
間違ってないけどそのための型としてintptr_tやuintptr_tがあるからそっち使ってくれると可読性がよくてすき

237 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 22:01:39.15 ID:pV+9Vnjg0.net]
ん? ポインタの整数値化 intptr_t な意図なの?

intptr_t c = *(intptr_t *)&p; がなおさら混乱するな

238 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 22:08:25.93 ID:rHcuqZcg0.net]
>>235
long a = 10;
uintptr_t addr_a = (uintptr)&a;

239 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 22:09:01.82 ID:rHcuqZcg0.net]
uintptr_t addr_a = (uintptr_t)&a;

_tが抜けた

240 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 22:12:25.39 ID:pV+9Vnjg0.net]
>>237
それはわかる

>>227 のコードが何を意図してそう書いたのかがワカランのよね



241 名前:デフォルトの名無しさん mailto:sage [2020/10/27(火) 12:22:27.85 ID:telUcSp60.net]
警告出るね
codepad.org/wCwz9aAV

242 名前:デフォルトの名無しさん mailto:sage [2020/10/29(木) 08:19:02.64 ID:HwPze+NQ0.net]
どーせ、プロセッサのプロテクトモードとかで、純粋にポインタの計算すると意図しないオーバーフローやアンダーフローするからじゃね?

243 名前:デフォルトの名無しさん mailto:sage [2020/11/01(日) 06:41:32.43 ID:TJdrJp6g0.net]
ポインタは符号付きなわけか

244 名前:デフォルトの名無しさん mailto:sage [2020/11/07(土) 11:29:01.04 ID:zMpN0fYG0.net]
ファミコンってC言語でもプログラミングできるんだねえ
すごいねえ

245 名前:デフォルトの名無しさん mailto:sage [2020/11/07(土) 15:37:28.16 ID:vm8bz31qM.net]
そんなのコンパイラ次第じゃないのか?
知らんけど

246 名前:デフォルトの名無しさん [2020/11/08(日) 15:22:32.44 ID:iVjroALJ0.net]
>>242
ファミコンのCPUは2A03(6502互換)だからかなり苦しい感じだと思うけどな。
スタックポインタが8bitしかないしな。つまりスタックは256バイト固定。もちろんメモリは最大64KB。
それでもCコンパイラはあったようなのでかなり工夫したんだろうと思う。

247 名前:デフォルトの名無しさん mailto:sage [2020/11/08(日) 16:57:10.35 ID:qvYN+WNM0.net]
今も昔もゲーム機の開発なんかはクロス環境だろ
ターゲット上で直接コンパイラ走らせているとは思えないのだが

248 名前:デフォルトの名無しさん mailto:sage [2020/11/08(日) 17:19:43.81 ID:fW7gwItS0.net]
任天堂から高価な開発機を借りるか買うかしてやるんじゃなかった?

249 名前:はちみつ餃子 mailto:sage [2020/11/08(日) 17:30:03.29 ID:jznHieWa0.net]
>>245
いやいや、ランタイムの保証が小さければ工夫がいることにはかわらんやろ。

250 名前:デフォルトの名無しさん mailto:sage [2020/11/09(月) 06:33:25.75 ID:ntGr9Bxw0.net]
「Cが使える」=「Cコンパイラを実行できる」と思ってしまうやつって
BASIC出身なんだろうな



251 名前:デフォルトの名無しさん mailto:sage [2020/11/09(月) 07:43:11.08 ID:RNMdHR5xd.net]
そりゃコンパイル後のバイナリは言語とは関係ないから「ある言語が使える」はそのプラットフォーム上でコンパイラなりインタプリタが動くことを意味するやろ

252 名前:デフォルトの名無しさん mailto:sage [2020/11/09(月) 08:25:46.31 ID:ntGr9Bxw0.net]
ドヤるようなことかよw

253 名前:デフォルトの名無しさん mailto:sage [2020/11/09(月) 09:08:37.31 ID:xqW72pM4M.net]
>>244とか>>249みたいな人もいるんだな

254 名前:デフォルトの名無しさん mailto:sage [2020/11/09(月) 11:06:53.99 ID:msclAy3m0.net]
FCの開発機は1千万円でメガドラ、PCエンジンは250万円という記事を昔みかけた。

そういやぁバッ活に「子育てごっこ」とかいうFC開発キットの広告出てたっけ。

255 名前:デフォルトの名無しさん mailto:sage [2020/11/09(月) 11:56:33.56 ID:ntGr9Bxw0.net]
あの頃のカスタムLSIは衝撃だったね

256 名前:137 mailto:sage [2020/11/09(月) 11:56:53.61 ID:SWW65sXCM.net]
>>248
FORTHユーザーじゃない?

257 名前:デフォルトの名無しさん mailto:sage [2020/11/09(月) 12:11:03.31 ID:ntGr9Bxw0.net]
( ゚∀゚) アハハハハノヽノヽノ \ / \ / \

258 名前:デフォルトの名無しさん mailto:sage [2020/11/09(月) 13:23:50.49 ID:YVG+/FyZ0.net]
もう諦めた
パンツはく

259 名前:デフォルトの名無しさん mailto:sage [2020/11/13(金) 12:27:52.99 ID:uyiuIcZiM.net]
goto 使うなと保健所や医者がうるさいの何なの。

260 名前:デフォルトの名無しさん mailto:sage [2020/11/13(金) 12:47:00.05 ID:6BGA2vQ70.net]
多重に囲い込まれているところからの脱出すら許さない教条主義
例外を認めるとあれもこれも際限がなくなるのでお役所作業



261 名前:デフォルトの名無しさん mailto:sage [2020/11/13(金) 13:29:41.79 ID:x2VHR/K20.net]
仕事丸投げで解決

262 名前:デフォルトの名無しさん mailto:sage [2020/11/13(金) 14:08:28.42 ID:5HXc1MIP0.net]
クリプトン星人に投げたくせに
クリプトン星人がgoto使うとゴチャゴチャぬかす
勝手な奴ら

263 名前:デフォルトの名無しさん mailto:sage [2020/11/13(金) 20:49:27.65 ID:0Q6l6RCm0.net]
gotoは有害であるとみなされると、昔の偉い人が言いました。

264 名前:デフォルトの名無しさん mailto:sage [2020/11/14(土) 14:04:47.82 ID:eZvyHs9U0.net]
gotoキャンペーン中止の可能性

265 名前: mailto:sage [2020/11/14(土) 14:17:05.27 ID:GkBooaQrH.net]
go to キャンペーンってそもそも名前が悪すぎるよね

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言語ならではルールなので注意






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

前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