19/06/24 20:12:05.34 Ih+U6NjR0.net
>>116
ああ、わかったわかったw
後出し多くて疲れるわw
118:デフォルトの名無しさん
19/06/24 20:14:52.08 rEOVCAEx0.net
>>115
俺はむしろ数式処理はPrologのようなパターンマッチングやってると勝手に思ってる。
知らんけど。
119:デフォルトの名無しさん
19/06/24 21:54:22.85 f0ou4boT0.net
>>117
えっ、後出し?
マジで>>66の言ってることを理解できてなかったのかよ…
もしかして入試問題が「直径1cmの円の面積を求めよ、ただしπは3と仮定する」みたいな学校にしか入れなかったのか?w
120:
19/06/25 01:19:55.45 eaNcyZwN0.net
πの定義って本当は難しいではないかと考えるようになりました…
121:デフォルトの名無しさん
19/06/25 01:28:22.57 uTzXwYL5M.net
定義そのものは単純
円の直径と円周の長さの比
122:
19/06/25 01:34:45.27 eaNcyZwN0.net
>>121
円周の長さって曲線ですよね
曲線の長さ…んー、曲がっているのに長さ?
「円周の長さが存在すると仮定したら」円の直径と円周の長さの比である、なら理解できなくもないのですけれども
123:デフォルトの名無しさん
19/06/25 01:51:31.50 9pz2xub80.net
え?
124:デフォルトの名無しさん
19/06/25 02:12:37.49 F7MMtx7f0.net
>>122
もうC言語に関係のない話題なんだから黙ってろよ
125:デフォルトの名無しさん
19/06/25 03:38:38.87 t3KmtNcy0.net
えーと、>>19から延々と話が続いてんのかな?
126:デフォルトの名無しさん
19/06/25 03:58:09.25 XPL9ybbga.net
引数にvoidを指定したときから続いてる
127:デフォルトの名無しさん
19/06/25 06:03:41.53 JYAeHTmF0.net
>>64
いや可能だよ
おまえさんがそう発言しているのは
有限のメモリを使って表示されている電子教材に厳密な定義が書いてあるからだ
それはおそらく自然言語で書かれたものだろうがCに翻訳するのはおまえさんの仕事だ
128:デフォルトの名無しさん
19/06/25 15:14:34.88 9pz2xub80.net
ホラーだなw
129:デフォルトの名無しさん
19/06/25 16:03:33.62 AVCUyi6k0.net
いま気づいたんだけどgccの拡張使えばC++のテンプレート的なことできるな
130:デフォルトの名無しさん
19/06/25 16:10:30.14 AwR7wU0da.net
素直にg++を使えばいいような・・・
131:デフォルトの名無しさん
19/06/25 16:24:43.72 Z38gwzpf0.net
>>129
させねーよ・・・
132:デフォルトの名無しさん
19/06/25 16:35:26.91 AVCUyi6k0.net
>>131
どいうこと?
133:デフォルトの名無しさん
19/06/26 02:05:22.90 alD8Bem60.net
このMSの新コンソールのデモビデオ
URLリンク(youtu.be)
編集してるのは C のソースのように見えるけど
"<=" を "≦" に変えたり、"==" を "=" にしたりとか何の冗談だろう
それとも本当に こういう文字も OK になるのか?
オレが知らないだけで すでに OK なのか?
134:デフォルトの名無しさん
19/06/26 02:17:04.58 dK4c3UqUM.net
お前が知らないだけ
135:デフォルトの名無しさん
19/06/26 02:19:08.09 dK4c3UqUM.net
リガチャでググれ
136:デフォルトの名無しさん
19/06/26 02:38:59.73 alD8Bem60.net
>>134-135
ググった。どうも
Unicode のリガチャ? とすると見かけだけではなくて、ファイルに格納したときの文字コードも
変わるってこと?
ていうか最近の C コンパイラはそれを認識するのか?
137:デフォルトの名無しさん
19/06/26 03:00:34.30 alD8Bem60.net
>>136
自己れす
考えるに、やはり見かけだけのことだな
CSS のスタイル指定と同じことをやってると
138:デフォルトの名無しさん
19/06/26 05:32:18.41 vCLnuco30.net
fira codeっていうのがあってな
emacsでもつかえる
139:デフォルトの名無しさん
19/06/26 11:01:02.69 kpnHwXwW0.net
行書体フォントは合字で見映えを変えてるだけだな
嵯峨本フォント公開 - Togetter
URLリンク(togetter.com)
140:デフォルトの名無しさん
19/06/27 18:52:32.86 tbUThdPVa.net
>>64
3.1415926535897... ≒ 3.14
これだけの話
141:デフォルトの名無しさん
19/06/27 19:26:18.86 fhoZJ8gK0.net
>>96
raspberry piからなら無料で使える
raspberry pi 4も3日くらいまえに発売された
142:デフォルトの名無しさん
19/06/27 21:23:07.41 tw9eT+4Xa.net
およそ3
143:デフォルトの名無しさん
19/06/27 22:09:24.03 E9QSvqb40.net
C11を使っています。
#include <stdbool.h>
void main( void)
{
int cnt = 0;
bool hoge = false;
while( !hoge){
if( cnt++ >= 10) hoge = true;
}
このような感じのコードを実行したところ、ループから抜けません。
stdbool.hにはtrueが1と定義されているので、10回ループを回ると
while(!1)と同じ状態になると思います。
これはfalseと等価とは扱われないのですか?
144:デフォルトの名無しさん
19/06/27 22:17:33.62 xVmqmc55a.net
C11とは
145:
19/06/27 22:18:44.31 xOvGlzCg0.net
>>143
私の手元で実行するとループを抜けています
URLリンク(ideone.com)
146:143
19/06/27 22:22:52.82 E9QSvqb40.net
>>145
そうですか・・・
TrueSTUDIO for STM32のコンパイラはgccじゃないかと思うのですが、
何か違うのかもしれません
147:蟻人間
19/06/27 22:23:58.00 PK9sLC9K0.net
あまり一般的じゃないコンパイラだね。バグか。
148:デフォルトの名無しさん
19/06/27 22:36:05.09 xVmqmc55a.net
!!!hageとかすると動くんでしょうね
149:デフォルトの名無しさん
19/06/28 09:20:40.61 aeC7bTCc0.net
>>144
まさか知らんのか?
ISO/IEC9899:2011のことだよ
ISO/IEC9899:2018が現行規格で、
それの1個前の旧規格だ
・・・またおかしいことになってるな
ISO/IEC9899:1990がC89なのと同様
ISO/IEC9899:2018がC17だ
150:デフォルトの名無しさん
19/06/28 09:29:32.78 1Q6Ak4jma.net
>>149
C11を使ってます、で意味が通じたということ?
あと引数にvoidがあるけど、大丈夫だった?
151:デフォルトの名無しさん
19/06/28 09:46:32.88 apo2D6tyx.net
>>143
何か変な最適化されてるのかな?
逆アセンブラ見てみたいね。
152:デフォルトの名無しさん
19/06/28 11:05:29.15 BZSAOrWQ0.net
hoge は不変とみなしてループ外に追い出すような類推が働いてしまうコードっぽくないのに
true との比較ではなく !hoge だから間違いもおこさない形式だし
153:デフォルトの名無しさん
19/06/28 12:18:07.65 T5ABk70zM.net
そもそもこのループは最適化で1行も生成されてないと推測。
んで何かの勘違いで抜けてないと思ってしまったと予想。
154:デフォルトの名無しさん
19/06/28 12:24:53.76 xv7yRtbc0.net
gccの -std=c11 -O0 でやったら終了した
155:デフォルトの名無しさん
19/06/28 12:52:11.88 aeC7bTCc0.net
>>148
ノ
彡 ノ
ノ
ノノ ミ
〆⌒ ヽ彡
(´・ω・`)
156:デフォルトの名無しさん
19/06/28 12:54:28.02 6cUEPi280.net
if文の中を hoge == true とタイプミスしているとか
157:デフォルトの名無しさん
19/06/28 13:12:10.56 aeC7bTCc0.net
>>143
str fp, [sp, #-4]!
add fp, sp, #0
sub sp, sp, #12
mov r3, #0
str r3, [fp, #-8]
mov r3, #0
strb r3, [fp, #-9]
b .L2
.L3:
ldr r3, [fp, #-8]
add r2, r3, #1
str r2, [fp, #-8]
cmp r3, #9
ble .L2
mov r3, #1
strb r3, [fp, #-9]
.L2:
ldrb r3, [fp, #-9]
eor r3, r3, #1
and r3, r3, #255
cmp r3, #0
bne .L3
nop
add sp, fp, #0
@ sp needed
ldr fp, [sp], #4
bx lr
問題なさそうだが、本当に抜けなくなったのか?
158:デフォルトの名無しさん
19/06/28 13:22:10.14 j6O/VBH7M.net
そのコードはx86 じゃないの?
STM32用の開発ツールらしいしARMのコードを吐くコンパイラだろ
159:デフォルトの名無しさん
19/06/28 16:31:54.35 aeC7bTCc0.net
おまえさん、x86のレジスタ名は知ってるか?
160:デフォルトの名無しさん
19/06/28 16:42:37.66 BZSAOrWQ0.net
疑いだしたらきりがないけど
>このような感じのコード
と言ってるあたり、このコードが100%再現する最小コードではない可能性もあるということだろうか?
擬似的に if( cnt++ >= 10) hoge = true; と書いてるけど
実情は割り込みや別スレッドかなんかで hoge を書き換えてたりとかさ
161:デフォルトの名無しさん
19/06/28 17:40:23.39 F+VtS9/i0.net
へんな動きしたらデカい配列作ってスタック破壊してないか疑う。
アセンブラ使てたらショートジャンプで128バイト以上離れてるラベル指定してないかとかも。
16/32bit時代のことですが。
162:デフォルトの名無しさん
19/06/28 18:37:17.90 tgbP+JHV0.net
スタック破壊は高確率でリターンアドレス壊して暴走(coreダンプとか例外とか)が発生するので発生しちゃえば案外すぐに分かる。
163:デフォルトの名無しさん
19/06/28 19:29:54.68 k4pW0x/X0.net
ポインタは値と参照どちらですか?
f(&v);みたいにポインタを渡す事を参照渡しと呼ぶのは妥当ですか?
ポインタをインクリメントしたりアドレス計算に使う場合があるから
値っぽい気もしますよね
164:デフォルトの名無しさん
19/06/28 19:32:57.11 k4pW0x/X0.net
「C言語は数値でアドレス指定してデータにアクセスする能力を持つ言語だ」
と捉えて、ポインタ渡しはあくまで値渡しと捉えるのも妥当そうじゃないですか?
165:デフォルトの名無しさん
19/06/28 19:41:54.17 gZBVzR2k0.net
そういう認識ができてるなら十分だな
その値から指し先が示す実体を引っ張ってこれるってだけで
関数のインターフェースとしては値を渡してる
C言語ではできないが
int a = 0;
foo(a);
呼び出した結果 a の値が書き換わって戻ってくる
っていう渡り方があって、そっちを参照渡しって呼ぶし
166:デフォルトの名無しさん
19/06/28 20:38:41.57 TwLtdi9D0.net
「C言語に参照渡しは無い」という理解でよくね?
167:デフォルトの名無しさん
19/06/28 20:56:34.47 tgbP+JHV0.net
そういう意味では全ての言語は参照または値を表記の違いこそあれ何かの値を渡してるわな。
「参照のための値(アドレス)を渡している」という意味において、C言語もまた参照渡しのある言語になるんじゃない?
168:デフォルトの名無しさん
19/06/28 21:07:11.36 1Q6Ak4jma.net
違います。
169:デフォルトの名無しさん
19/06/28 21:13:05.54 ASw3jrNxa.net
Cに参照はないが、ポインタ経由のアクセスを参照だと脳内定義するなら参照ということにはなる。
ただC++は参照もポインタ経由のアクセスも両方使えるようになってるので後でC++やろうとすると混乱するかもね。
170:デフォルトの名無しさん
19/06/28 21:16:07.88 lanM6mt5d.net
先輩「~~」
新人「なるほど、つまり参照渡しですね」
先輩「違います」
新人「オオ…オ……オ……」
そして新人はIT業界を去ったのであった
171:デフォルトの名無しさん
19/06/28 21:38:39.85 TwLtdi9D0.net
ポインタを特別扱いする必要とか無いがな
172:デフォルトの名無しさん
19/06/28 21:38:47.78 DEsb2BLF0.net
C言語の場合は素直にアドレス渡しで良いと思う
紛らわしい用語使うとかえって混乱するだけ
173:デフォルトの名無しさん
19/06/28 22:56:11.75 K80D90id0.net
先輩「~~」
新人「なるほど、つまり参照渡しですね」
先輩「まあそうだね」
新人「なるほど理解しました」
優しい世界
174:デフォルトの名無しさん
19/06/28 23:31:41.66 TwLtdi9D0.net
そして姑息な優しさによりC++の参照で混乱する
175:デフォルトの名無しさん
19/06/29 00:30:28.54 kzB3RaMy0.net
C++なんてクソ言語は回避すればいい
176:デフォルトの名無しさん
19/06/29 00:57:44.40 CfES0TXk0.net
姑息じゃない先輩「~~」
新人「なるほど、つまり参照渡しですね」
姑息じゃない先輩「まあそうだね」
新人「なるほど理解しました」
姑息じゃない先輩「でもC++の時は注意が必要だよ。その時にまた質問してね。」
素晴らしい先輩
177:デフォルトの名無しさん
19/06/29 01:04:38.27 k/WM/TXw0.net
Java は参照の筈なのにある日 NullPointerException を見て愕然とする。
178:デフォルトの名無しさん
19/06/29 07:27:30.85 HFXZY0WT0.net
NullPointerException を見て愕然
「ぬるぽ」を見ると「ガッ!」と返されることの由来。
179:デフォルトの名無しさん
19/06/29 17:54:21.19 8z7l0ZZs0.net
ポインタ?BASICのPEEK、POKE、CALL、DEF FN使ったことあるなら(ry
180:デフォルトの名無しさん
19/06/29 18:15:02.25 Ec0dmaS10.net
>>179
DEF FNが全てのBASICにあると思うなよ。
181:デフォルトの名無しさん
19/06/29 18:24:39.84 0fRKmc/o0.net
I/Oの何十ページもあるダンプリスト打ち込んでたなあ・・・
182:デフォルトの名無しさん
19/06/29 18:28:11.52 QwBwV953M.net
かつて皆一度は通ってきた道
183:デフォルトの名無しさん
19/06/29 18:58:28.75 SkCg/0zJ0.net
デバドラを作った事がないんだけど
C言語で作ったとして、
CPUやOSの違いに対してクロスプラットフォームなソースコードを作れるものなの?
184:デフォルトの名無しさん
19/06/29 19:11:10.87 KCwWGOZi0.net
>>179
それを言うならDEF USRだな
富士通のやつ
CALLつーと早川電機か?
185:デフォルトの名無しさん
19/06/29 19:12:21.23 VF6wNxfU0.net
クロスプラットフォームなデバイスドライバなんて見たことが無いんだけど存在するの?
デバイスにもよるんだろうけどインストーラが分けてあるイメージある
186:デフォルトの名無しさん
19/06/29 19:15:54.19 jvYtCUwd0.net
この話題に付いてこれるのは50代より上
187:デフォルトの名無しさん
19/06/29 19:24:10.90 SkCg/0zJ0.net
実行ファイルは環境毎でも
ソースコードは共通化されてるかもしれない
188:デフォルトの名無しさん
19/06/29 19:45:16.95 0fRKmc/o0.net
早川電機ってw
何歳なんだよw
189:デフォルトの名無しさん
19/06/29 19:46:57.93 Ec0dmaS10.net
>>183
そりゃ無理だ。
デバドラはデバドラでOS毎にお作法がちがう。
>>184
早川電機じゃオッサンでも分からんだろ(笑)
シャープと言えや。
確かにS-BASICにCALLはあったけども。
190:デフォルトの名無しさん
19/06/29 19:57:31.13 dqvciFo5a.net
同じデバイスに対しては同じ様なプログラムになると思うぞ。
191:デフォルトの名無しさん
19/06/29 20:13:31.33 SkCg/0zJ0.net
>>189
CPUの違いだけならクロスプラットフォームにできる?
192:デフォルトの名無しさん
19/06/29 20:17:37.78 VF6wNxfU0.net
クロスプラットフォームの意味履き違えてない?
193:デフォルトの名無しさん
19/06/29 20:26:03.44 jvYtCUwd0.net
東京通信工業なんて会社、知らないだろうな
194:デフォルトの名無しさん
19/06/29 20:33:24.22 SkCg/0zJ0.net
間違えてはいないが単にその言葉が曖昧だ。
ifdef等を使わずにCPUの違いに対処できるCコードは書けるか?
195:デフォルトの名無しさん
19/06/29 20:51:37.84 Ec0dmaS10.net
>>191
デバドラの種類によるかな?
ユーザモードドライバだけで済むような環境だとCPUが違ってもソースコードを共用できる可能性が高い。
196:デフォルトの名無しさん
19/06/29 20:51:42.07 dqvciFo5a.net
>>194
プラットフォームの差を吸収するレイヤがありゃできるだろう。
普通のプログラムだってリンク時に解決してる部分がかなり大きいんだから。
Cで書いてる時点でそれなりに抽象度が高いと思うよ。
197:デフォルトの名無しさん
19/06/29 21:58:02.57 k/WM/TXw0.net
>>195
Linux は結構共通になってない?ものにもよるか。
198:デフォルトの名無しさん
19/06/30 21:20:05.21 28buo1qB0.net
PC-98、TWONS、AT互換機でDOSのファンクションコールしか使わないなら同じexeファイルが使えたと思った。
199:デフォルトの名無しさん
19/07/01 00:10:17.16 cUStBYS8a.net
MSX-DOSとかCP/Mのプログラム動いたぜ。
Z80だし当たり前なんだけど驚いた。
200:デフォルトの名無しさん
19/07/04 18:46:50.22 RufwSseDM.net
hoge.hというヘッダーファイルがシステムで使用可能ならインクルードして、ないならローカルに用意したものをインクルードしたい時はどうすればいいですか?
イメージはこんな感じです
if (exists("hoge.h")):
#include<hoge.h>
else:
#include"./src/hoge.h"
201:デフォルトの名無しさん
19/07/04 18:59:45.02 ead2oXvp0.net
>>200
#if EXISTS_HOGE
#include <hoge.h>
#else
#include "./src/hoge.h"
#endif
コンパイラオプションで-DEXISTS_HOGE=1を指定するとシステムのヘッダをインクルードできる
これの欠点は手動で指定する必要があること
自動でやりたいならautotoolとかcmakeを使うしかない
202:デフォルトの名無しさん
19/07/04 19:38:05.76 j+BKfkH80.net
>>200
includeパスの優先順位を利用するのじゃダメなの?
203:デフォルトの名無しさん
19/07/04 19:40:09.58 CiYpNsgja.net
自分の hage.h を用意しとけば。名前何でもいいけど。
で、本物のhageのインクルードガードのマクロ定義をチェックすればいい。マクロがあればの話だけど。
204:デフォルトの名無しさん
19/07/04 20:01:31.43 DFmBoT0+d.net
こっそり__has_include使えたりしないの?
205:デフォルトの名無しさん
19/07/04 22:38:29.59 YXLsgD0T0.net
cmake便利だよな。これを覚えたせいで仕事を簡単に家に持って帰れるようになってしまったよ……
206:デフォルトの名無しさん
19/07/04 23:09:00.36 Dgm46w9S0.net
社畜w
207:デフォルトの名無しさん
19/07/05 07:37:58.54 gYSYJWLY0.net
ハッカータイプの人はそれが普通なんだよ
パンピーには解らないし解ってもらいたいとも思わない
208:デフォルトの名無しさん
19/07/05 07:39:43.05 RJCpPwwqa.net
いわゆる暇プロタイプの人だな。
209:デフォルトの名無しさん
19/07/05 10:42:30.79 /9SntML6a.net
タクシー運転手の趣味がドライブみたいなものだな。
210:デフォルトの名無しさん
19/07/05 10:48:27.91 V1OP8/TU0.net
会社でマルウェア製造していたのか
211:デフォルトの名無しさん
19/07/05 12:21:58.01 /9SntML6a.net
四角くてもマルウェア
212:デフォルトの名無しさん
19/07/05 19:35:27.70 cg54bwGhM.net
山田く~ん
213:デフォルトの名無しさん
19/07/07 01:12:52.69 ibboI0jYa.net
マ板化してる・・・
214:デフォルトの名無しさん
19/07/07 12:35:21.67 L+nDH+YyF.net
>>163 >>167
ポインタと配列の違いを説明してみ
215:デフォルトの名無しさん
19/07/07 13:52:06.12 rNUlAIMGM.net
*p[]
(*p) []
**p
*(*p)
216:デフォルトの名無しさん
19/07/07 16:31:13.26 hqXlVeni0.net
>>214
ポインタは変数で4バイトのメモリ領域で、
配列は連続したメモリ領域?
int arr1[] = {1,2};
int arr2[] = {3,4};
arr1 = arr2;
がエラーになるから配列はポインタ変数とは明確に区別されてるみたいだが
217:蟻人間
19/07/07 16:40:40.99 0lH1eUtNd.net
16-bitのMS-DOSの時代だと2バイトのポインタがあったし、64ビットのCPUなら、8バイトもあり得る。
218:デフォルトの名無しさん
19/07/07 16:45:42.38 YcHC3knN0.net
また値渡し、ポインタ渡し、参照渡しは~ってやるのか?
219:デフォルトの名無しさん
19/07/07 16:52:42.60 21BbIGV/0.net
> *(*p)
ああ、こいつ解ってないな
220:デフォルトの名無しさん
19/07/07 18:03:14.45 XjejoYnQ0.net
>>219
それ顔文字っぽいよね。
221:デフォルトの名無しさん
19/07/07 18:04:40.15 XjejoYnQ0.net
>>216
うちのポインタは8バイトだ。
222:デフォルトの名無しさん
19/07/07 19:09:15.76 bN7H9WWH0.net
配列はポインタのシンタックスシュガーでしかない
ポインタは何でも許されるが配列は操作が簡略化と同時に制限されてる
223:
19/07/07 19:31:01.29 wvjux2100.net
>>222
配列名は定数扱いのポインタですね
しかし、配列だけに許される簡素化ってなんですか?
224:デフォルトの名無しさん
19/07/07 19:32:54.23 bN7H9WWH0.net
>>223
配列は宣言した瞬間に領域が確保されてるだろ
225:デフォルトの名無しさん
19/07/07 19:33:00.70 SGQz+b0c0.net
>>222
x[-1]、これも許されるんだよな
226:デフォルトの名無しさん
19/07/07 20:07:07.70 OUCQisjNM.net
int a[1];
と
int *a;
a=(int *)malloc(sizeof(int));
の違いって何?
227:蟻人間
19/07/07 20:12:27.77 0lH1eUtNd.net
>>226
前者はスタックか静的領域に確保される。後者はヒープに確保される。前者はスコープを抜けると自動で解放。後者は解放しないとメモリーリークする。
228:デフォルトの名無しさん
19/07/07 20:15:53.10 OUCQisjNM.net
>>227
ということは配列ってメモリのことよく分からない初心者プログラマ以外には無用の長物なん?
解放漏れの考慮以外でわざわざ配列使うメリットってあるの?
229:デフォルトの名無しさん
19/07/07 20:17:35.62 bN7H9WWH0.net
>>228
寧ろ配列で済むのにポインタを使う意味がないぞ
230:蟻人間
19/07/07 20:18:55.18 JhpdhjN90.net
>>228
繰り返し(iteration)の処理で連続データを処理・制御するときに配列がないと困る。
231:デフォルトの名無しさん
19/07/07 20:29:34.92 OUCQisjNM.net
>>229-230
int a[3];
for(int i=0;i<3;i++) a[i] = 0;
int *a;
a=(int *)malloc(sizeof(int * 3));
for(int i=0;i<3;i++) *(a+i) = 0;
これとこれだと違うの?
ポインタだとchar型の時とか文字列代入出来るし
上位互換な気がするんだけど。
232:蟻人間
19/07/07 20:32:06.26 JhpdhjN90.net
>>231
sizeof(int) * 3の間違い。
ヒープだと可能なかぎり自由に実行時にサイズを決められる。
233:蟻人間
19/07/07 20:34:52.90 JhpdhjN90.net
配列のサイズが決まるのはコンパイル時だ。
234:デフォルトの名無しさん
19/07/07 20:36:22.20 bN7H9WWH0.net
>>231
前者の方が簡潔だし
書かなくていい確保・開放処理は避けるものだ
パフォーマンスも配列の方が上
235:デフォルトの名無しさん
19/07/07 20:36:48.46 HZba7DSz0.net
>>228
自分で書いたんだから分かると思うけど、言語構造の話でも>>226の場合は記述量で配列の方が楽だし、読む側もひと目でわかるじゃん。
236:デフォルトの名無しさん
19/07/07 20:37:18.16 HZba7DSz0.net
かぶった
237:デフォルトの名無しさん
19/07/07 20:50:54.62 OUCQisjNM.net
じゃあ配列は、ポインタの一部機能を制限して使いやすさの向上を図ったものという認識でいいの?
それとも生まれも育ちも全く別の概念?
何か、今やってるcの教材が、まず最初に配列を使ってプログラム書いて、
次の章でポインタ出てきて、今まで配列使って書いた奴をポインタで書き変えろみたいな例題ばっかりだから
だったら最初から配列いらなくない?と思ってしまいました。
238:蟻人間
19/07/07 20:52:43.83 JhpdhjN90.net
実用的なプログラム書いてたら、そのうちわかる。心配要らない。
239:デフォルトの名無しさん
19/07/07 21:00:11.30 OUCQisjNM.net
分かりました。unionもわざわざこんなの使わずstruct使えばよくねって思うけどそういうもんだと今は思っときます。
240:デフォルトの名無しさん
19/07/07 22:02:44.50 o4vR1s03a.net
>>237
むしろ、何故ポインタが不要だと思わんのか謎だわ
241:デフォルトの名無しさん
19/07/07 22:15:20.04 2f8BNWqD0.net
なぜopenとfopenの二つのファイルアクセス手段が用意されているのか。
242:
19/07/07 22:18:01.98 wvjux2100.net
>>241
open() は OS が提供するシステムコールそのもの
fopen() はライブラリ関数であり open() をラップして「使いやすくした」(本当か?)もの
243:デフォルトの名無しさん
19/07/07 23:10:44.83 XjejoYnQ0.net
>>242
バッファっリングしてくれるとか、fprintf()もあったりしてテキストをフォーマットして出力するのも楽というのがある。
244:デフォルトの名無しさん
19/07/07 23:15:22.66 o4vR1s03a.net
Cライブラリとしてはfopenしかないわけだけど、正直あんまり便利じゃないよな。
245:
19/07/07 23:16:29.46 wvjux2100.net
>>243
バッファリングはね…バッファリングは今は大部分 OS が抱いているものなんじゃないかな…アプリケーションが各々のユーザーランドに抱いていてメリットがあるのかな…
246:デフォルトの名無しさん
19/07/07 23:34:13.80 XjejoYnQ0.net
>>245
ま、そうだけどね。Cってそういう今時のちゃんとしたOSのないところや完全にOSなし環境用のプログラム作るのにも使われるし、ああいうライブラリはあってもいいと思う。
まあしかしちょっと古くなった感はあるのでリニューアルしても良いんじゃないかとは思うけどね。てか、最低でも標準ライブラリなのにセキュリティーホール作ってしまうようなのは廃止した方が良いよな。
247:デフォルトの名無しさん
19/07/07 23:42:46.95 sq3gNEgUd.net
システムコール自体相当重いから、OS呼び出す回数減らすためのバッファリングだろ
248:デフォルトの名無しさん
19/07/07 23:47:08.94 YcHC3knN0.net
入出力バッファリングしてくれるファイルシステムなんてあるか?
ジャーナリングと勘違いしてるんだろ
249:デフォルトの名無しさん
19/07/07 23:54:40.74 sq3gNEgUd.net
しない方が珍しくね?
writeしたらディスク書き込み完了するまで次がブロックするとか?
250:デフォルトの名無しさん
19/07/07 23:59:57.04 YcHC3knN0.net
それジャーナル制御の話だろ
251:デフォルトの名無しさん
19/07/08 00:13:01.27 cSAl/tEC0.net
バッファリングとキャッシュの区別が…。
252:デフォルトの名無しさん
19/07/08 00:15:59.34 +tWapxmU0.net
>>248は>>245へのレスな
バッファリングはアプリの仕事
253:デフォルトの名無しさん
19/07/08 00:21:05.88 G56xs+BGM.net
>>240
char *str;
str = "abc\n";
が許されるから。
配列に文字列を代入出来ないのが不便
>>241
それ言うならfopenとfopen_sの方が意味分からんね
VS使ってたら書き換えろと警告出してくるわ、書き換えたら引数の取り方違うとかいうクソ仕様だし
254:デフォルトの名無しさん
19/07/08 00:29:20.86 EniIIYRYa.net
>>253
そりゃ、現実としてそういう建て付けになってんだから使うよ。
でも文字列だったら最初からもうちょっと抽象的な操作の方がいいわ。ポインタ使いたかったら&つけてもいいんだし。
255:デフォルトの名無しさん
19/07/08 00:44:01.80 YBWHLZTU0.net
>>253
一応初期化の時だけ char s[] = "..."; って書き方できるけどね。これは初期化だけの特別な書き方だな。
256:デフォルトの名無しさん
19/07/08 01:20:48.92 6nQUGxHg0.net
OSによっては遅延書き込みってしているだろう
257:デフォルトの名無しさん
19/07/08 02:05:54.23 YBWHLZTU0.net
やってるな。外付けのHDD付けた時なんかはするかしないか設定できたりして。
258:デフォルトの名無しさん
19/07/08 08:34:21.82 IKtCR6xL0.net
DOS時代、ディスクキャッシュはドライバーが必要だったな。
259:デフォルトの名無しさん
19/07/08 08:57:53.53 YymrlAAVd.net
str[9]="おはよう"
str[9]={'お','は','よ','う'}
こうやってまとめて配列に日本語を入れるのは出来るんだけど「お」、「は」、「よ」、「う」と一文字ずつ入れることって出来ますか?
英語ならstr[0]=…、str[1]=…って済むけど
260:デフォルトの名無しさん
19/07/08 09:43:06.34 tzeJFuHla.net
>>259
> こうやってまとめて配列に日本語を入れるのは出来るんだけど
え?できる?
>「お」、「は」、「よ」、「う」と一文字ずつ入れることって出来ますか?
wchar_t 型を使ってL付けたらできないか?
261:デフォルトの名無しさん
19/07/08 09:53:54.58 jiAfHW5M0.net
要素数を明示してるので、文中の代入ではなく、初期化のときの話だろうとは予測できるが
「入れる」というのは、代入を連想させるので、うまい言い回しではないかもね
262:デフォルトの名無しさん
19/07/08 11:00:59.71 sWBK4Oik0.net
>>253
関係ないけどconst違反だね
そのケースだけ特別に見逃すことになってるけど
>>255
その書き方はK&Rでは静的記憶域期間にのみ許されていた
なぜだかわかるか?
263:デフォルトの名無しさん
19/07/08 11:23:23.17 tzeJFuHla.net
>>262
そうだったっけ?そうだったような気もするが。
なかったのは自動変数だと毎回コピーすることになって無駄だからかな?
264:デフォルトの名無しさん
19/07/08 11:25:22.35 Y+Xu67y40.net
>>262
初回のみ限定警告100%オフ! 送料無料! だからね
いちおう違反ではないことになってる
265:デフォルトの名無しさん
19/07/08 11:45:28.78 IKtCR6xL0.net
>259
>str[9]={'お','は','よ','う'}
マルチバイト文字をこう書く時はエンディアンにも気をつけないとね。
266:デフォルトの名無しさん
19/07/08 12:17:44.27 tzeJFuHla.net
>>265
てか、それできる?
267:デフォルトの名無しさん
19/07/08 12:23:54.16 sWBK4Oik0.net
>>263
memcpyみたいのは言語自体に組み入れるべき機能ではないという判断だ
俺は今でもそう思っている
268:デフォルトの名無しさん
19/07/08 12:29:40.10 SgFxP6hn0.net
思ってるって……
じゃK&Rにはwhyは書いてないってこと?
なんでお前の脳みその中身を当てこしなきゃいけねーんだ
バカかこいつ?
269:デフォルトの名無しさん
19/07/08 12:30:19.48 sWBK4Oik0.net
>>265
エンディアンが同じでも解釈が違うことがあるぞ
printf("%x %x", 'あ', L'あ');
bcc32: a082 3042
cl: 82a0 3042
gcc: error
270:デフォルトの名無しさん
19/07/08 12:31:09.46 sWBK4Oik0.net
>>267
じゃあ言い直そう
- 思っている
+ 賛成している
271:デフォルトの名無しさん
19/07/08 12:31:47.98 sWBK4Oik0.net
くそ、安価ミスとは俺としたことが
- >>267
+ >>268
272:デフォルトの名無しさん
19/07/08 13:00:33.95 tzeJFuHla.net
>>267
なるほど。
273:デフォルトの名無しさん
19/07/08 13:43:50.72 IKtCR6xL0.net
>266
どのあたりに疑念を持ってるの?
274:デフォルトの名無しさん
19/07/08 13:58:51.22 tzeJFuHla.net
>>273
'あ' みたいなのは char じゃないから少なくとも警告出そうな感じするんだが。
275:デフォルトの名無しさん
19/07/08 14:09:16.87 IKtCR6xL0.net
int Code='ABCD';
なんて書き方できるから文字列はOK。(Code=0x41424344; と解釈)
全角文字の解釈はコンパイラ次第。unicodeやutf-8対応なら問題ないと思う。
S-JISはよく"\"が含まれる文字で誤作動起こすけど。
276:デフォルトの名無しさん
19/07/08 14:54:14.01 jiAfHW5M0.net
C99 6.4.4.4 Character constants で
character-constant:
'c-char-sequence'
L'c-char-sequence'
c-char-sequence:
c-char
c-char-sequence c-char
こうなってて文法的には 'ABCDEF' は許されるんだな ちょっと意外
277:デフォルトの名無しさん
19/07/08 15:31:05.17 sWBK4Oik0.net
>>275
printf("%x", Code);
bcc32: 44434241
cl: 41424344
gcc: 41424344
278:デフォルトの名無しさん
19/07/08 15:37:58.06 u+KjwOdz0.net
処理系定義の動作だから移植性は落ちるよね
279:デフォルトの名無しさん
19/07/08 20:12:45.44 84rxMJ1M0.net
文字定数は
Cではint型
C++ではchar型
280:デフォルトの名無しさん
19/07/08 20:54:00.78 ibRWBgM50.net
int *ptr;
↑なんですが、「int型のポインタ変数ptr」、それとも「int *型のポインタ変数ptr」のどちらでしょうか?
281:デフォルトの名無しさん
19/07/08 20:55:50.12 Fr0SEB8b0.net
int*型の変数
282:デフォルトの名無しさん
19/07/08 21:09:00.76 ibRWBgM50.net
>>281
読み方としては
int (イント) * (ポインタ) 型の変数
でしょうか
「ポインタ変数」と言った場合は「* (ポインタ)変数」という捉え方でいいのでしょうか?
「ポインタ」と言った場合に「*」を指すのは普通ですか?
283:
19/07/08 21:12:57.52 qs7HTSo50.net
>>282
好きなように把握すればよい、しかし int * の使われ方は決まっているのだから、それがすんなりできるかどうかが問題
284:デフォルトの名無しさん
19/07/08 21:24:04.62 /2nq94DTa.net
pointer to int
285:デフォルトの名無しさん
19/07/08 21:42:19.26 prK3AyGza.net
>>280
Cの場合は変数に*がくっついた形で宣言されていると考えた方が良い。というのは int *a, b; と書いた場合に a は int * 型だが b は int 型になるからだ。
286:デフォルトの名無しさん
19/07/08 22:54:53.21 ibRWBgM50.net
なんとなくわかりました
ありがとうございました
287:280
19/07/09 00:31:35.20 L+Vy/ftS0.net
規格書には
pointer to a character type
pointers to structure types
という文が頻繁に出てきますね
日本語で言ったら「char型へのポインタ」のほうが「charのポインタ型」より正しい気がします
>>284さんのpointer to intは日本語なら「int型へのポインタ」ですね
と思ったんですが規格書には
pointer type
も出てくるので、どっちでもいいということでしょうか
つまり「char型へのポインタ」=「charのポインタ型」ということになりますが
288:デフォルトの名無しさん
19/07/09 02:08:12.29 Mm2yqLXca.net
変数の宣言と型の宣言が同じ形というCの事情もありそうだが、そこは曖昧だと思うね。
アップキャストしたら単にポインタだし、ポインタ型と言う場面もあるだろう。
これいいね
URLリンク(cdecl.org)
289:デフォルトの名無しさん
19/07/09 09:14:08.91 gdYXIa6pa.net
typedef char *pchar; とすると pchar 型は「charのポインタ型」というとにはなる。
290:280
19/07/09 11:14:54.62 L+Vy/ftS0.net
ということはどっちでもいいんですね
291:デフォルトの名無しさん
19/07/09 11:27:52.60 knKJba5J0.net
気にしたことが無いくらいどうでもいい話。
292:デフォルトの名無しさん
19/07/09 12:21:07.04 J4x6YR7aa.net
引数のvoidが一体なんなのか考える方が有意義
293:デフォルトの名無しさん
19/07/09 12:41:16.87 jbK1WB2u0.net
引数なしの関数を書くときはvoidと書く
以上
294:デフォルトの名無しさん
19/07/09 12:59:36.67 PyDbCO5q0.net
voidって引数じゃないの?
295:デフォルトの名無しさん
19/07/09 15:08:36.62 jbK1WB2u0.net
引数に予約語使えるの?
296:デフォルトの名無しさん
19/07/09 15:44:50.86 +qcz+46H0.net
some_type foo() と戻りがあるのに、その戻りを捨てる意図で
(void)foo(); と呼び出すコードを見たことがあるような気がするが C++ かもしれん
最適化の際にうまいことしてくれるのを期待してるのかしら
297:デフォルトの名無しさん
19/07/09 15:55:38.40 td6qAd7k0.net
>>296
コンパイラかコードチェッカーのwarning抑止のためじゃないかな
298:デフォルトの名無しさん
19/07/09 16:02:30.30 +dEKq4+ba.net
Cでも使える。
一度も使ってない引数変数があるとか、関数の戻り値を使っとらんとかで警告が出る場合にくっつけるのが主だと思う。
299:デフォルトの名無しさん
19/07/09 16:03:09.93 NP6oYl9g0.net
> 引数なしの関数を書くときはvoidと書く
プロトタイプじゃなかったっけ
300:デフォルトの名無しさん
19/07/09 16:07:01.41 gdYXIa6pa.net
>>299
プロトタイプと違ったらエラーになる。
301:デフォルトの名無しさん
19/07/09 16:20:41.31 +qcz+46H0.net
>>297-298
なるほど、警告避けかー
引数に対してのは
callback 関数として、引数の型&数は限定されてるけど
実装時には一部の引数を使わずに実装できちゃうときに発生しそうね
void foo(int arg1, int arg2)
{
/* 色々書くけど arg2 は使わない: callback 関数の都合で引数の型と数は変えられん */
(void)arg2;
}
302:デフォルトの名無しさん
19/07/09 17:10:50.55 NP6oYl9g0.net
>>299
これ OKでしょ
int func(void);
int func()
{
return 0;
}
303:デフォルトの名無しさん
19/07/09 17:12:50.99 NP6oYl9g0.net
アンカミスった >>300
304:デフォルトの名無しさん
19/07/09 17:17:21.63 +qcz+46H0.net
>>302 のは 非ANSI の K&Rフォームで警告されるんじゃ
引数有りの記述では
int func(int);
int func(a)
int a;
{ return 0; }
と等価
305:デフォルトの名無しさん
19/07/09 17:26:13.08 jbK1WB2u0.net
>>302
これアウトでしょ
int func(void);
int func()
{
return 0;
}
func(hoge);
306:デフォルトの名無しさん
19/07/09 17:28:26.22 PyDbCO5q0.net
>>302
VCだと
> warning C4255: 'func' : 関数プロトタイプがありません : '()' を '(void)' に変換します。
って警告出て、関数部分の引数を変えてしまってる
307:デフォルトの名無しさん
19/07/09 17:41:06.68 3UBru1uA0.net
>>302
おまえさん、自分のところで動作確認してるか? でたらめこくな
308:デフォルトの名無しさん
19/07/09 17:43:09.00 8Y9GhXx/M.net
char *p;
p = "str1";
p = "str2";
こんな風に文字列リテラルのポインタを付け替える時に前の文字列リテラルのメモリ領域を解放するにはどうすればいいの?
309:デフォルトの名無しさん
19/07/09 17:49:15.98 PyDbCO5q0.net
>>308
静的領域に確保しているから解放は無理
310:デフォルトの名無しさん
19/07/09 17:59:43.14 3UBru1uA0.net
exit関数を呼び出せば解放できるね
311:デフォルトの名無しさん
19/07/09 18:21:06.36 NP6oYl9g0.net
X 3010:2003 では
6.7.5.3 関数宣言子(関数原型を含む)
「並びの中の唯一の項目が void 型で名前のない仮引数であるという特別な場合,関数が仮引数をもたないことを指定する。」
6.9.1 関数定義
typedef int F(void);
F f, g;
int f(void) { /*... */ } // 正
int g() { /*... */ } // 正
という訳で
int func(void); /* prototype */
int func() /* definition */
{
return 0;
}
どこかまちがっているか
312:デフォルトの名無しさん
19/07/09 18:28:37.94 8Y9GhXx/M.net
>>309
まじですか。じゃあこのような書き方してたらいずれクラッシュするってことですか?
char *p;
while(1) {
//何かの処理
p = "hoge";
}
313:デフォルトの名無しさん
19/07/09 18:36:42.49 lRtOoeh80.net
それは同じ"hoge"のアドレスがロードされるだけ
文字列リテラルのポインタ扱うならconst char *使いなされ
314:デフォルトの名無しさん
19/07/09 18:43:38.45 gdYXIa6pa.net
>>312
文字列の定数は静的な領域に作られるだけで実行時に動的に作られたりしないのでそれは問題なし。
315:デフォルトの名無しさん
19/07/09 18:46:20.39 gdYXIa6pa.net
あ、でも、定数でなくても同じか。単にポインタ代入してるだけだもんな。
316:デフォルトの名無しさん
19/07/09 18:47:53.66 jbK1WB2u0.net
>>311
プロトタイプと同じだからOKだよね
>>302は何を言いたいのか分からんな
317:デフォルトの名無しさん
19/07/09 19:48:16.54 YXbnrG+I0.net
>>301
その場合は↓で良いはず
void foo(int arg1, int)
{
}
318:デフォルトの名無しさん
19/07/09 20:34:43.07 3UBru1uA0.net
>>311
おまえさんは「関数原型を含む」を、「関数原型についてのみ」と脳内変換しているのか?
> int func() /* definition */
これのどこに、void型で名前のない仮引数があるんだ?
319:
19/07/09 21:57:18.11 Rbs4mLR80.net
>>296
それは lint 対策ですよ
320:デフォルトの名無しさん
19/07/09 22:42:13.74 pf5t+DpRa.net
最近C言語学び始めた者ですが練習がてらトランプのブラック・ジャック的なものを作っています
そこで11以上がでた時10とするという単純なプログラムを書きたいのですがつまづいています。
ご教授頂ければありがたいです
321:デフォルトの名無しさん
19/07/09 23:16:49.68 PyDbCO5q0.net
>>320
パッと思いつくのは、要素数13の配列用意して
対応する番号の所に希望する数を入れておく
322:デフォルトの名無しさん
19/07/09 23:46:17.89 pf5t+DpRa.net
>>321
一応rand関数というのをつかって1~13までの数をランダムで出すようには組めたのですがそのランダムで出た数が11以上だった時10として扱うというのが組めません
やはり13個全部配列組む方が確実なのでしょうか
323:デフォルトの名無しさん
19/07/09 23:52:36.31 khnvGGZh0.net
ブラックジャックのルール全部適用させようとすると初心者には結構ハードル高いような気がする。
324:デフォルトの名無しさん
19/07/09 23:54:18.16 PyDbCO5q0.net
>>322
式でやりたいなら、
i>10? 10: i
325:デフォルトの名無しさん
19/07/09 23:59:20.27 pf5t+DpRa.net
>>324
ありがとうございます!早速試して見ます!
326:デフォルトの名無しさん
19/07/10 00:04:27.37 YFbFPCAXa.net
>>323
あんまり細かいことはさすがに手が出ないのでとりあえず
・11以上は10として扱う
・21超えたら負け
・1がでたら1か11好きな方を選べる
この3つだけできればとりあえずブラック・ジャックとしてゲームは成り立つかなと考えてます
327:デフォルトの名無しさん
19/07/10 00:04:44.92 q0FoS2hTa.net
カード52枚作るのがいいと思いますよ。
シャッフルもしがいがある。
配列の要素は見た目(ハートのJとか)を表す構造体。なんだったら実際の値も入れる。Aが微妙ですが。
328:デフォルトの名無しさん
19/07/10 00:14:34.49 YFbFPCAXa.net
>>327
作り始めた時52枚全部定義すれば本格的になるかなと思ったのですが、ご教授お願いしている身で申し訳ないんですけど少し面倒だなと思ってしまいましてorz
やっぱりちゃんとしたブラック・ジャックを作りたいなら52枚全部定義した方がいいですよね
329:デフォルトの名無しさん
19/07/10 02:58:29.54 Jh4oErcv0.net
そうしないと確率が変わってしまうのではないかな。
330:デフォルトの名無しさん
19/07/10 07:53:06.60 c5IU7AfX0.net
某ゲーム内のブラックジャックは同じカードが自分と相手に出てきた。
カジノのブラックジャックだとトランプを何セットも混ぜてやってるらしいね。
331:デフォルトの名無しさん
19/07/10 08:45:30.08 FsJSBTR40.net
絵札の数が決まっていると残りの絵札を数えれば勝てるらしい。
332:デフォルトの名無しさん
19/07/10 08:48:48.34 q0FoS2hTa.net
実際は6セットとか使うわけです。
有限なのでカウンティングができる。
過去の結果に依存するってことはサイコロ使うような無記憶な試行ではないってことだね。
333:デフォルトの名無しさん
19/07/10 09:15:26.99 1T4zvF6/x.net
カウンティングだけで勝つのは驚異的な記憶力がないとなかなか難しいと聞く。
小説「マルドゥックスクランブル」でのBJシーンは有名だけど、読んででも半分も理解できなかった記憶があるわ。
334:デフォルトの名無しさん
19/07/10 09:18:07.74 8OTK1K8V0.net
麻雀よりは簡単
335:デフォルトの名無しさん
19/07/10 09:20:35.29 8OTK1K8V0.net
麻雀の方が簡単か
すまん
336:デフォルトの名無しさん
19/07/10 09:37:28.19 z7915HRG0.net
BJのカードカウンティング、結構な種類があるんだね
URLリンク(vegasdocs.com)
337:デフォルトの名無しさん
19/07/10 17:29:16.11 6YiGFI5ep.net
麻雀の役判定、得点計算できるライブラリってある?
338:デフォルトの名無しさん
19/07/10 18:23:48.87 Tg8SA/BfM.net
>>337
ググれ
339:デフォルトの名無しさん
19/07/10 18:44:07.65 rAQ8nA0Y0.net
>麻雀の役判定、得点計算
あると思う
判定も計算も難しくはないし
無くても自製可能なレベル
340:デフォルトの名無しさん
19/07/10 19:16:43.40 iZJC1PSD0.net
ものすごく基礎的な質問で申し訳ないんだけどテトリスのようなゲームを作るとき、実行中のプログラムとは別にn秒ごとにあるプログラムを実行するようなのってどうすればいいの?
キーボードからの入力待ちの状態と並行して時間の計測とブロックを落下させるみたいなの
341:デフォルトの名無しさん
19/07/10 19:21:28.73 rAQ8nA0Y0.net
OSによって違いがあるけれど、
指定した時間間隔でイベントを発生させ
そのイベント通知を受けて処理を行うようにする
342:デフォルトの名無しさん
19/07/10 19:24:28.60 c5IU7AfX0.net
DOSならVSYNC割り込みとかタイマ割り込みっていうのがある。
343:デフォルトの名無しさん
19/07/10 19:37:55.05 b2TgwlJAa.net
入力待ちしてるはずなのになんでブロックは落ちてるんだ
344:デフォルトの名無しさん
19/07/10 19:48:07.07 wGS7rpFP0.net
待ってないから。
345:デフォルトの名無しさん
19/07/10 19:48:36.59 YAEkGiKl0.net
ブロッキング/ノンブロッキング
同期/非同期
346:デフォルトの名無しさん
19/07/10 19:59:01.20 iZJC1PSD0.net
うーん…前提から間違ってるのか?
ブロックを生成した後、キーボードからの入力を待ちながら一定時間毎に落下させるのかと思ってたけど、一定時間毎に落下させる中でキーボードからの入力があればそちらを実行する感じ?
347:デフォルトの名無しさん
19/07/10 20:00:37.82 b4vpo7xg0.net
非同期処理
348:デフォルトの名無しさん
19/07/10 20:08:27.28 iZJC1PSD0.net
なるほど
同期処理、非同期処理を使えば割り込ませたりすることができるのか
まだほとんど理解できてないけどある程度方向性は見えてきた気がする
サンクス
349:デフォルトの名無しさん
19/07/10 20:10:55.04 rAQ8nA0Y0.net
>>346
マルチスレッドって分かるかな?
同時に複数の処理を行うんだけど
多分イメージしているプログラムは
それを利用する事で出来ると思う
ただし、OSが何かによって実装方法が変わってくる
350:デフォルトの名無しさん
19/07/10 20:23:29.74 nUGO9xykM.net
>>346
そうだよ。古典的なゲームは、1秒間に30回または60回、入力の取得と状態の更新と画面の更新を行う。
ギャラクシアンもといタスクシステムでぐぐれ
351:デフォルトの名無しさん
19/07/10 20:48:50.43 lDiVjXP/a.net
テトリス程度の(コンピュータからしたらゆっくりな動きの)ゲームならマルチタスクやマルチスレッドにしなくても順番に処理すればできそうだけどな。
キー入力については何も押されてなかったらすぐに処理を抜けるようにしとけば良い。
で、画面書き換えたりする処理して、またキー入力されてるかを見て、という感じで繰り返す。
キー入力されてたらそれによって変化するパラメータ(テトリスならブロックの向き等)を変更する。
352:デフォルトの名無しさん
19/07/10 21:05:28.75 gc55JO0Da.net
マルチスレッドだって順番だろう
昔はコアが一つしかなかったんじゃよ
353:デフォルトの名無しさん
19/07/10 23:25:08.72 QCGATMsz0.net
ソフトタイマ ポーリング 状態シーケンス制御
354:デフォルトの名無しさん
19/07/11 01:13:09.90 9IeQUu2b0.net
>>352
順番って、時分割で切り替わるって意味?
しかしそれは普通はOSレベルでやってるので切り替え部分までユーザが考える必要はないね。
そこまで自分で作らねばならないようなOSなし環境や昔の 8 bit CPU みたいなのだと別だが。
355:デフォルトの名無しさん
19/07/11 02:10:12.63 j5kiUrVb0.net
>>351
それってキー入力取り逃したりしないの?
356:デフォルトの名無しさん
19/07/11 06:43:27.53 bnplrtu80.net
>>352
マルチスレッドじゃなくて単なるループだと思うが
357:デフォルトの名無しさん
19/07/11 07:08:26.92 l57S3jiM0.net
ハードウェア割り込みとマルチタスクOSがごっちゃになってるんだろ
358:デフォルトの名無しさん
19/07/11 08:25:52.40 Osy0Da+v0.net
>>355
処理のサイクル(1/30秒 や 1/60秒)の間に off->on->off とパルス状に入力されると取りこぼすよ
359:デフォルトの名無しさん
19/07/11 09:26:29.26 42U1oSKOa.net
高橋名人の16連射でもコンピュータからすれば物凄く遅いスピードだから問題ない。40年ぐらい前のクロック4MHzで動く 8 bit CPU でも余裕だ。
それにゲームなら一回や二回入力が失敗しても文句を言うやつはまずいない。
360:デフォルトの名無しさん
19/07/11 10:34:43.73 nMYI1ORia.net
>>356
まあユーザースレッドなんて言葉もあるけども
昔のCPUだとぶんまわすしかなかったけど、ある意味わかりやすい気がするわ。
リッチな環境でアクションゲームってどうやって作るの?条件変数とか使うのかね?
361:デフォルトの名無しさん
19/07/11 11:38:42.52 KgOJMZpN0.net
>>358
炎のコマの解説は嘘だったんだよな
あれ以来、人間を信用しなくなった
362:デフォルトの名無しさん
19/07/11 12:18:10.67 xCkJ5LaR0.net
組み込みでは、0.1~1秒など、長時間に渡って、
何回もキーを押しているかどうか確認してから、機械を動かす
そうやって、ボタンを確実に押しているかどうかを判断する
1回で判断すると、ボタンの接触不良で、
モーターのon/off が繰り返されてしまうから、短時間で判断できない
この判断を、ハードウェア回路で行うのと、ソフトウェアで行うのと、2つの方法がある
詳しくは、組み込み(エンベッド)情報処理資格の教科書を参照
363:デフォルトの名無しさん
19/07/11 12:23:27.06 ZSl7eG940.net
一々教科書を読まなくても「組み込み チャタリング」などで調べれば分かるのでは
364:デフォルトの名無しさん
19/07/11 15:03:35.76 vYMpRAzp0.net
Windows初期はVsync待ちとかウェイトかけずに処理してて、CPU速度が上がったら実機より速くなって(60fps以上)ゲームにならんのもあったわ。
365:デフォルトの名無しさん
19/07/11 21:07:12.90 W9yQmyPFa.net
エイリアンの動きが速すぎて穴を掘ってる暇がないと
366:デフォルトの名無しさん
19/07/11 21:08:10.26 +FsFkp9e0.net
それ何ていう平安京エイリアン?
367:デフォルトの名無しさん
19/07/11 21:47:38.69 BSTUJEPb0.net
space panic
368:デフォルトの名無しさん
19/07/11 21:55:53.90 pe38QhTW0.net
Linuxってconio.h使えないのかよ
getcheもkbhitも駄目とか面倒臭いな
369:蟻人間
19/07/11 21:57:23.76 JEmOAlRld.net
コンソールで色を付けるならpdcurse使え。ncursesは古い
370:蟻人間
19/07/11 21:57:56.88 JEmOAlRld.net
pdcurses
371:デフォルトの名無しさん
19/07/11 22:15:03.30 BSTUJEPb0.net
ioctl
372:デフォルトの名無しさん
19/07/12 04:02:10.72 30ixxYg+0.net
pdcursesってcursesのWindows実装なんだけどな
373:デフォルトの名無しさん
19/07/12 12:58:51.21 4AR7dspsa.net
>>368
ncursesとかを使ってそういうラッパー関数作れば良いのではないかな。
374:デフォルトの名無しさん
19/07/12 18:40:44.71 q8HbeEfz0.net
Cで面白いワンライナーとかない?ICCCMとかにも案外ワンライナーという分類はないんだよね。
375:デフォルトの名無しさん
19/07/12 19:20:34.57 rA9WmwUa0.net
1行と言うのは難しそうだが、7行で良ければ
URLリンク(uguisu.skr.jp)
376:デフォルトの名無しさん
19/07/12 19:24:01.49 Vt6HtS1w0.net
BASIC時代に1画面プログラムってのがあったな。
377:デフォルトの名無しさん
19/07/12 19:40:11.46 aSZPouska.net
1行の定義って何?
378:デフォルトの名無しさん
19/07/12 19:56:09.02 pYBNura/0.net
>>373
既に世界中で書かれて公開されている予感
379:デフォルトの名無しさん
19/07/12 19:56:09.31 zAF1v8/n0.net
\n
380:デフォルトの名無しさん
19/07/13 01:22:11.42 +XrRzYc00.net
>>378
結婚して///
381:デフォルトの名無しさん
19/07/13 06:35:45.40 GFbMPvry0.net
#defineを-Dでやれば1行にできるかも
URLリンク(www.ioccc.org)
382:デフォルトの名無しさん
19/07/13 07:12:15.59 THUdwCLa0.net
そもそも改行しないでプログラム書けば一行
383:デフォルトの名無しさん
19/07/13 13:07:12.18 BfevEbDR0.net
cppディレクティブは1個1行
384:デフォルトの名無しさん
19/07/14 22:19:01.35 uXqqdpfBM.net
int i = 0;
int s[2];
s[i] = i++ + 1;
printf("%d", s[1]);
これの出力が1になります。これは理解できません。
事実、3行目は以下のようにすると出力は0になります。
s[i++] = 1;
また、3行目は以下のようにすると出力は0になります。
s[i] = i++;
385:デフォルトの名無しさん
19/07/14 22:22:40.77 /MgLlV8v0.net
>>384
URLリンク(www.kouno.jp)
386:蟻人間
19/07/14 22:30:43.07 uXkiDi0Ud.net
「式の評価」という言葉はわかるか?
1+1という式を評価すると2になる。
C/C++の後置演算子では、全ての評価が終わった後で変数を書き換える。
i++は、++がiの後ろについているから、後置だ。i++を評価すると、評価した瞬間の値はiであり、そして式全体の評価が終わると、iはプラスいちになる。
後置の反対は前置演算子であり、式全体の評価の前に変数を+1もしくは-1する。
387:デフォルトの名無しさん
19/07/14 22:48:05.04 uXqqdpfBM.net
演算規則に従い、インクリメント後置なので、元の3行目の式は
s[i(==0)] = i(==0) + 1
i = i + 1
の順に行われて結果、
s[0]に0が代入されてs[1]の値は初期値0だと思うのですが。
事実、3行目がs[i] = i++;なら上の通りの順で実行されます。
演算規則が無視されて結果がコンパイラ依存になる理由は何ですか?
388:デフォルトの名無しさん
19/07/14 22:48:51.03 uXqqdpfBM.net
私は間違えました、s[0]に1が代入されます。
389:デフォルトの名無しさん
19/07/14 22:52:20.27 uXqqdpfBM.net
また、3行目を以下の通りにすると演算規則通りに結果2が得られます。
s[i] = ++i + 1;
390:デフォルトの名無しさん
19/07/14 22:53:42.53 uXqqdpfBM.net
順番はこの通りです、
i = i + 1
s[i(==1)] = i(==1) + 1
391:蟻人間
19/07/14 23:13:20.84 uXkiDi0Ud.net
>>387
主な原因は順序が決められないことと最適化のためらしい。詳しくは知らん
392:デフォルトの名無しさん
19/07/14 23:15:43.21 uXqqdpfBM.net
i = i++;
これの結果が未定義なのは直感的に理解できます。
代入とインクリメント増分の関係が不明だからです。
s[i] = i++;
これの結果が未定義なのは直感的に理解できません。
演算規則に従えば、iはインデックスとしての間接参照でしかないからです。
393:デフォルトの名無しさん
19/07/14 23:18:12.85 XOVWGW1L0.net
>>387
左辺と右辺の評価順序は未定義だからだ
gccとclとか違う環境で試してみれば分かる
394:デフォルトの名無しさん
19/07/14 23:28:34.66 uXqqdpfBM.net
int x = 2*i + i++;
それでは、これの結果もまた未定義ですか?
395:デフォルトの名無しさん
19/07/14 23:55:54.94 XOVWGW1L0.net
iの評価は何回だ?
評価が複数回入る式は書くなということだ
仕事でそんなコード書いたらどやされるぞ
396:デフォルトの名無しさん
19/07/15 00:20:47.65 wok43DsHM.net
私は勉強のためにコードを書いています。
コードがどのような動きをするか興味があります。
int a = 1;
int x = (a = a) + a;
それでは、この式ではxは定義されますか?
左辺と右辺の評価順序に関わらず、答えは同じです。
397:デフォルトの名無しさん
19/07/15 00:33:43.29 mPPf+F39a.net
されます
398:デフォルトの名無しさん
19/07/15 00:46:03.12 E9YINa1F0.net
そんな無意味なコードから何を学ぼうとしているのか分からんわ
399:デフォルトの名無しさん
19/07/15 00:55:35.98 wne2EA+X0.net
優先順位や式の評価順が曖昧かもって考えるソース、
書いてて気持ち悪くなりませんか?私はなりますよ。
400:デフォルトの名無しさん
19/07/15 01:14:29.35 Voexy70f0.net
>>394
副作用完了点でググってこい
401:デフォルトの名無しさん
19/07/15 02:04:55.42 wok43DsHM.net
while((s[i++] = t[j++]) != '\0') ;
元々気になったのは、tをsにコピーするこのコードです。
これを見て、他にインクリメントで簡略化出来そうなコードを考えています。
402:デフォルトの名無しさん
19/07/15 02:10:16.53 wok43DsHM.net
for(;t[j] != '\0'; j++){
s[i] = t[j];
i++;
}
s[i] = t[j];
従来の私なら、このようにコードを書いていました。
新しいコードの記述なら1行で書けます。
403:デフォルトの名無しさん
19/07/15 02:19:48.51 wok43DsHM.net
while((s[i++] = t[i + 1]) != '\0') ;
そこでtをsに1つずらしてコピーするコードをこのように書けないか考えていたら、未定義の問題が生じました。
私は演算規則から考えてこのコードは上手く働くと思いました。
404:デフォルトの名無しさん
19/07/15 03:09:03.53 mPPf+F39a.net
俺はmemcpy使う
性能は知らん
405:デフォルトの名無しさん
19/07/15 07:21:57.18 ex33LrHm0.net
せっかくC-FAQのリンク書いたのに…
バカって人の言う事聞かないからバカのままなんだな…
406:デフォルトの名無しさん
19/07/15 07:41:01.06 Voexy70f0.net
>>401
「簡略化」とは、何を目指しているんだ?
行数が少ない方がいいとか考えているならバカな考えだからやめとけ。
コンパイラの最適化で同じコードになるような範囲の変形で行数を減らしたところで、可読性を下げてるだけで何のメリットもないぞ。
407:デフォルトの名無しさん
19/07/15 08:20:49.21 wok43DsHM.net
私は行数の少なさというよりはむしろ見た目の単純さで読みやすいと感じます。
C-FAQのリンクは事実が書かれているのみで演算規則が無視される理由が理解できませんでした。
408:デフォルトの名無しさん
19/07/15 08:32:41.44 Voexy70f0.net
>>407
演算規則って何のことだ?
構文解析や演算子の結合の優先順序と副作用の発生するタイミングはまた別の話だぞ。
409:デフォルトの名無しさん
19/07/15 09:10:34.41 ex33LrHm0.net
どうせちゃんと読んでないか理解する能力がないんだろうな…
410:デフォルトの名無しさん
19/07/15 09:22:44.79 IpJNQ16e0.net
>>389
それはおかしいだろう
算術プラスの第1オペランドと第2オペランドの評価順序は未規定だぞ
411:デフォルトの名無しさん
19/07/15 10:07:24.78 Voexy70f0.net
>>410
未規定の動作がたまたま自分の期待する動作と同じになったということが理解できてないんだろうね。人の話を聞かない相手に何を言ってもダメそうだね。
412:デフォルトの名無しさん
19/07/15 10:40:21.72 r5uSGSCiM.net
愛繆私は未定義な理由について理解できません。
なぜなら、演算規則に従い前置インクリメントを代入の評価より先に行えば、389の結果は一つと決まるからです。
しかし、評価順序が未定義となりコンパイラに依存となる理由は何ですか?
この式を定義することによる問題の例を理解したいです。
413:デフォルトの名無しさん
19/07/15 10:44:14.06 mPPf+F39a.net
左辺は
414:デフォルトの名無しさん
19/07/15 10:45:20.28 r5uSGSCiM.net
つまり、私は未定義と規定されている理由を知りたいです。
定義することで発生する問題の例などです。
415:デフォルトの名無しさん
19/07/15 10:49:35.01 6m2OA1zn0.net
この人の言ってる「演算規則」って何なんだろうね。
「C言語 "演算規則"」でググっても、それらしきものは出てこないし。
416:デフォルトの名無しさん
19/07/15 10:57:10.32 r5uSGSCiM.net
int i = 0, j = 0;
int x = i++;
int y = ++j;
これです。xでは代入の後に後置インクリメントされます。(x = 0)
yでは代入の前に前置インクリメントされます。(y = 1)
s[i] = ++i + 1;
つまりこの式では代入の前に前置インクリメントされます。(次と等価です、)
i = i +1;
s[i(==1)] = i(==1) + 1;
417:デフォルトの名無しさん
19/07/15 10:59:07.47 mPPf+F39a.net
>>414
だから、左辺は
418:デフォルトの名無しさん
19/07/15 10:59:28.08 r5uSGSCiM.net
これは、未定義と規定されていますが、理由が理解できません。
私が示した通り、定義することによる問題の例は何ですか?
419:デフォルトの名無しさん
19/07/15 11:01:03.87 r5uSGSCiM.net
389の中では、左辺はs[1]です。
なぜなら、代入より前にiが前置インクリメントされます。
420:デフォルトの名無しさん
19/07/15 11:01:37.73 r7SsHRFS0.net
i++のポストインクリメントとi+1の評価順が不定だから
421:デフォルトの名無しさん
19/07/15 11:02:04.90 E9YINa1F0.net
これ読んで分からないなら諦めろ
未規定の動作とは、複数考えられる動作のうち、どれが実行されるかの要求が課されない動作のこと。
未規定の動作への依存で移植性が低下します。
未規定の動作
・部分式が評価される順序、及び副作用が発生する順序。
ただし関数呼出しの()、&&, ||, ?:, カンマ演算子は除く。(6.5)
・代入演算子のオペランドが評価される順序。(6.5.16)
未規定の動作
URLリンク(www.c-lang.org)
未定義の動作
URLリンク(www.c-lang.org)
422:デフォルトの名無しさん
19/07/15 11:04:11.05 r5uSGSCiM.net
i++のポストインクリメントとi+1の評価順が不定な理由は何ですか?
423:デフォルトの名無しさん
19/07/15 11:07:31.48 r5uSGSCiM.net
i = i++;
これが未定義なのは理解できます。
しかし、389の中で私が示した通り、の定義をすると発生する問題の例は何ですか?
424:デフォルトの名無しさん
19/07/15 11:09:44.83 ex33LrHm0.net
未定義な理由?
言語作った奴がそう決めたから
要するに「仕様だから」
そう決めた理由は想像になるけど最適化しやすい(と言うかそうしないと最適化の妨げになる)と考えたんだろうと思うよ
425:デフォルトの名無しさん
19/07/15 11:12:06.88 mPPf+F39a.net
>>419
なんで?
その添字いつ評価されんの?
演算子[]の中身だよ
カッコだけどvoid書いちゃだめだよ
426:デフォルトの名無しさん
19/07/15 11:12:37.37 3cpTbRIL0.net
インクリメントは式全体の前か後に実行されるからだろ
式の途中で実行されるとかあるの?
427:デフォルトの名無しさん
19/07/15 11:19:52.48 r5uSGSCiM.net
定義すると最適化の妨げになるという理由は、私には反論する知識は全くないので了承します。私は理解しました。
428:デフォルトの名無しさん
19/07/15 11:22:41.60 r5uSGSCiM.net
425の中で、書かれているように、実際には、演算規則でsのインデックスは0でした。
私は[]の優先を見落としていましたが、私が述べたかったことは、演算規則の優先で順番は決定できると思うことでした。
429:デフォルトの名無しさん
19/07/15 11:23:12.12 3cpTbRIL0.net
最適化の妨げにはならないだろ
コンパイラー簡単に作れるとかじゃないの
430:デフォルトの名無しさん
19/07/15 11:25:19.08 b7u0RgVG0.net
現行のCの仕様に文句があるなら、ANSI?ISO?の仕様策定に参加でもすればいいんじゃね?
431:デフォルトの名無しさん
19/07/15 11:29:05.40 IpJNQ16e0.net
>>411
すまん
俺はとんでもない失言をしていて
突っ込まれるの覚悟しておとなしく待ってたんだが
432:デフォルトの名無しさん
19/07/15 11:36:42.62 ZvCggxzR0.net
一通り勉強しましたが、次に何をやったらいいのか分かりません!
何も作れません!
どうしたらいい?
433:デフォルトの名無しさん
19/07/15 11:38:20.09 mPPf+F39a.net
>>428
そりゃ決定するための規則を作れば決定するけど、めんどくさいじゃん
434:デフォルトの名無しさん
19/07/15 11:39:31.38 E9YINa1F0.net
>>432
作りたいものが無いなら無理に作らんでもいいじゃん
435:デフォルトの名無しさん
19/07/15 11:40:09.15 3cpTbRIL0.net
>>432
散歩したり 景色を見たり…
昼寝したり 何もしない
そのうちに急に書きたくなるんだよ
436:デフォルトの名無しさん
19/07/15 12:05:05.25 ex33LrHm0.net
>>426, >>429
> インクリメントは式全体の前か後に実行されるからだろ
> 式の途中で実行されるとかあるの?
どのように実装してもいい
並列に処理することすら可能
と言うような最適化を妨げないための仕様
437:デフォルトの名無しさん
19/07/15 12:24:44.13 E9YINa1F0.net
要するに++,--は混ぜるな危険ってこと
438:デフォルトの名無しさん
19/07/15 12:36:46.00 IpJNQ16e0.net
能なしど低脳
439:デフォルトの名無しさん
19/07/15 12:47:17.16 0wrdUuzC0.net
>>403
>while((s[i++] = t[i + 1]) != '\0') ;
for(;(s[i] = t[i + 1]) != '\0';++i) ;
これじゃ駄目な理由ってなんだろう
440:デフォルトの名無しさん
19/07/15 12:55:44.11 wne2EA+X0.net
評価順序以前にループ条件が直感的に分かりにくい様なコードは書くべきでない
441:デフォルトの名無しさん
19/07/15 12:56:34.33 14ut6KBx0.net
for(①;②;③)
この123が全部必要だと思ってるんじゃね
442:デフォルトの名無しさん
19/07/15 13:04:03.21 Voexy70f0.net
>>431
こちらこそすまん。>>411は>>410宛ではなく>>409宛だった。
443:デフォルトの名無しさん
19/07/15 14:30:35.03 y88H95dP0.net
MISRA-C 2004 の100ルールを守っていないソースコードは、読むに値しないw
まず、コーディングルールを5年勉強しろ!w
444:デフォルトの名無しさん
19/07/15 14:33:44.55 Voexy70f0.net
>>443
その特徴的な書き方はいつものRuby大好きマンか?
バカなこと言ってないで巣に帰れ。
445:
19/07/15 15:05:29.64 Nn+acajv0.net
>>443
MISRA なんて鎖や束縛を作りたがる「管理職」の思考法でしょう?なんでそんなものに従わなければならないのでしょうかね
446:デフォルトの名無しさん
19/07/15 15:14:40.80 mPPf+F39a.net
ルールはあってもいいけど、MISRAはあれアホだよね。
考えたやつお前はCを使うなよっていう。
447:デフォルトの名無しさん
19/07/15 15:25:22.82 ex33LrHm0.net
>>446
どこがアホなのか詳しく書いてみ
448:デフォルトの名無しさん
19/07/15 15:26:34.84 mPPf+F39a.net
>>447
rubyが嫌になったってことですか?
449:
19/07/15 15:28:03.17 Nn+acajv0.net
>>446
あの阿呆なMISRAを制定した人間の種族はなにか、どんな属性か?得意な思考方法、苦手な思考方法は?信条・信念は?
というところには興味があります、そのためだけに MISRA を読んでいたりします
450:デフォルトの名無しさん
19/07/15 16:02:12.44 3UWFYY1V0.net
>>432
自分が作りたいものを作れ。
作る技術がまだ足りないならそれについて学習したり研究したりしろ。
一つ間違えてはいけないことは、自分の作りたいものを今の自分が持っている技術力で出来る範囲内に無理に収めないようにすることだ。
収めれば実現はたやすいが飛躍はできず本当にやりたかったことには届かない。
451:デフォルトの名無しさん
19/07/15 16:06:07.03 QcIx6aGf0.net
MISRAは実際の不具合を分析して作られたいわばバットノウハウ集だけど、言い換えると最低限のバカ避け。
バカがバカな不具合出すもんだからその他の人が迷惑を被る。
ま、バカはプログラム作るなって事だ。
452:443
19/07/15 16:14:22.25 y88H95dP0.net
組込み開発者におくるMISRA‐C:2004―C言語利用の高信頼化ガイド、MISRA‐C研究会、2006
この研究会は、トヨタなど大企業から、数十人のベテが集まって、
欧州人に聞きながら、完成された本w
未だに、コーディングルールのバイブルだろがw
元々は、Andrew Koenig の本
C Traps and Pitfalls, 1988, c1989
Cプログラミングの落とし穴
453:デフォルトの名無しさん
19/07/15 16:20:24.64 3cpTbRIL0.net
自分が馬鹿だとしっている賢い人はMISRAを使うということか
454:デフォルトの名無しさん
19/07/15 16:26:07.09 IpJNQ16e0.net
ブランドにすがるだけで自分の頭で考えないやつは相手にならん
あれ読んでて異論を持つことが全くないやつはその疑いが強い
455:デフォルトの名無しさん
19/07/15 16:34:38.99 ex33LrHm0.net
>>454
だからどこに異論持ってるのか書けよ
もしかしてグダグダ言うだけ君なの?w
456:デフォルトの名無しさん
19/07/15 16:42:13.17 IpJNQ16e0.net
命令すんな
そもそも自分が書かねえくせに
457:
19/07/15 16:43:21.75 Nn+acajv0.net
>>452
>この研究会は、トヨタなど大企業から、数十人のベテが集まって、
トヨタってコーディングを製造と言い切っちゃう人たちの集まりでしょう?そんな人たちの考え方って信じていいのでしょうかね…
458:デフォルトの名無しさん
19/07/15 16:48:48.65 ex33LrHm0.net
>>456
どうせ書けないんだろ、無理すんなよw
459:デフォルトの名無しさん
19/07/15 16:49:33.71 ex33LrHm0.net
>>457
信じるのはダメだと思うよ
内容見て判断しなきゃ
460:デフォルトの名無しさん
19/07/15 16:51:54.40 Voexy70f0.net
>>452
お前さんはいつも、有名な誰それがこう言った!とか、なんとかの本にこう書かれていた!とか、他人の発言を字面だけなぞって記憶するだけだから、中身の本質も適用すべき場面も長所短所も理解せずに垂れ流して害悪にしかならないから、もういい加減消えてくれないか?
461:デフォルトの名無しさん
19/07/15 17:02:08.44 14ut6KBx0.net
多分MISRAはΣ計画とセットだったんじゃねえの
とするとゾンビだよ
462:443
19/07/15 17:25:49.24 y88H95dP0.net
>>457
日本の研究会の考え方・思想は、ほとんどない!
MISRA-C は、Andrew Koenig の本を参考にして、欧州人が作ったから
日本の研究会は、各ルールの例題を作って、誰でもわかるように解説した。
各ルールは、こういう事を言ってます、という解説書
江添 亮の「C++11/14 コア言語」のみたいな本。
無数の例題を並べて、各ルールを解説した本
だから、この2冊は、神の書と言える!
463:デフォルトの名無しさん
19/07/15 17:32:05.00 dKUxLoi20.net
ルールとかくそどうでもよくね
動いて読めればそれでいい
464:デフォルトの名無しさん
19/07/15 17:32:21.62 IpJNQ16e0.net
>>458
ブーメラン乙
465:デフォルトの名無しさん
19/07/15 17:43:32.93 ex33LrHm0.net
>>464
バカなのか?
俺は別に異論があるとは言ってない
異論があるなら書けよって言ってるだけ
俺に何を書けって言ってるんだよw
466:デフォルトの名無しさん
19/07/15 17:46:56.60 IpJNQ16e0.net
>>465
またブーメランかよ、ワンパターンなやつだな
俺はさっき相手にならんと言ったはず
467:デフォルトの名無しさん
19/07/15 17:47:07.64 biXPcN21d.net
落ちものゲーム作れたと思ったけど落下処理の度に今表示中のものが上にズレて処理後のが新しく表示される仕組みのせいで目が死んだ
これダメな奴だ
468:デフォルトの名無しさん
19/07/15 18:01:17.82 ex33LrHm0.net
>>466
ハイハイ、結局具体的には何も言えないグダグダ君だったなw
469:デフォルトの名無しさん
19/07/15 18:41:39.94 IpJNQ16e0.net
煽っても情報は得られない
インタビューの下手な人だな
470:デフォルトの名無しさん
19/07/15 19:25:33.92 ex33LrHm0.net
情報持ってない奴からなにか得ようとしてるってか?
心配するなよ、お前に期待なんてしてないからw
471:デフォルトの名無しさん
19/07/15 20:06:52.59 14ut6KBx0.net
githubに存在するMISRA適合のソースコードとかどんだけあるんだよ
472:443
19/07/15 20:23:31.95 y88H95dP0.net
そのルールを守らないという、逸脱手続きをすれば、OK
トヨタでも、MISRA-C で採点したら、5/100点(ルール)しか取れなかったとかw
70~80点は、欲しい
473:デフォルトの名無しさん
19/07/15 20:27:21.89 QcIx6aGf0.net
>>472
それはそうなんだけど、逸脱したらレビューと品質記録が必須になるので逸脱しない方向へのバイアスが強くなる。
結果、強制されてるのと同じになっちゃう。
474:デフォルトの名無しさん
19/07/15 20:28:56.79 dKUxLoi20.net
ちなMISRAってどんなの?
pdfのリンクはってれ
475:443
19/07/15 20:31:45.40 y88H95dP0.net
例えば、Linux では、関数の冒頭部分に、return がよくある。
冒頭部分で、処理しないものをはじいてしまう
でも、MISRA-C では、関数内で、return は、最後に1つしか使えない。
複数箇所に、出口があってはならない
そのルールを守らないなら、逸脱手続きをすればよい。
その代わりに、点数が下がっていく
476:デフォルトの名無しさん
19/07/15 20:32:43.56 ex33LrHm0.net
>>471
ほとんどないんじゃね
>>451が言う通りバカ避けだから
>> 関数は、その最後に1つだけの出口を持たなけらばならない
みたいに適合させようとすると人によってはちょっと書き辛いルールもあったりするし
477:デフォルトの名無しさん
19/07/15 20:33:46.38 ex33LrHm0.net
あっ、被ったわ
みんな結構このルールに抵抗あるんだなw
478:443
19/07/15 20:35:21.08 y88H95dP0.net
>>474
「misra-c 2004」「misra-c 2012」で検索して!
479:443
19/07/15 20:37:59.21 y88H95dP0.net
他にも、MISRA-C では、2重ループ内から、一気に脱出できないから、フラグを持ちまわる事になる
このルールも嫌われる
480:443
19/07/15 20:48:48.44 y88H95dP0.net
組み込みとか医療用では、バグると簡単に人が死ぬから、
MISRA-C を勉強していない香具師が、コーディングするとヤバイ!
だから、コーディングできる資格を作るべきだっていう話も聞く
481:デフォルトの名無しさん
19/07/15 20:50:33.69 dKUxLoi20.net
なんでルールブックが有料やねんあほか勝手にやってろ
482:デフォルトの名無しさん
19/07/15 21:07:10.69 IpJNQ16e0.net
>>476
語るに落ちたな
ブランドvsブランドの対戦成績を
自分の頭で考えないブランド志向なやつに出せるわけがない
483:デフォルトの名無しさん
19/07/15 21:19:39.89 pdudwpaZ0.net
>>481
検索したら出てきた
URLリンク(www.c-lang.org)
484:デフォルトの名無しさん
19/07/15 21:36:18.18 r7SsHRFS0.net
4.12 必要 動的なメモリ割り当てを使用してはならない
って酷くね
485:デフォルトの名無しさん
19/07/15 21:47:13.82 Xch0qlQL0.net
俺以外は絶対守れよって思うルールも多々ある
486:デフォルトの名無しさん
19/07/15 21:57:44.30 ex33LrHm0.net
>>482
何を言ってるのか自分でもわかってないだろww
ブランドとかバカじゃね
487:デフォルトの名無しさん
19/07/15 21:58:24.78 QcIx6aGf0.net
関数の中盤以降からreturnするならともかく、早期returnまでも認めないのはナンセンスだよな。
杓子定規すぎるわ。
488:デフォルトの名無しさん
19/07/15 22:00:39.84 ex33LrHm0.net
>>484
組込みだと実行時間が読めなくなるのとフラグメンテーションで総容量足りててもエラーになることがあるからしょうがない
489:デフォルトの名無しさん
19/07/15 22:06:28.61 IpJNQ16e0.net
>>486
おまえがすがっているのはブランド以外の何物でもない
とぼけたら誤魔化せると思っているならおめでたいやつだ
490:デフォルトの名無しさん
19/07/15 22:43:50.22 ex33LrHm0.net
MISRAをブランドとか言うアホがいるんだ…
まあ具体的な内容には突っ込めないグダグダ君だしなぁww
491:デフォルトの名無しさん
19/07/15 22:45:14.79 ex33LrHm0.net
そもそもうちはMISRAは参考にしてるけど全面適用なんてしてないし
492:デフォルトの名無しさん
19/07/16 00:24:39.33 UHx9kM+ca.net
>>491
いや、しろよ
493:デフォルトの名無しさん
19/07/16 00:48:27.21 /MIJx2vXM.net
プログラムは書く人によって千差万別
書く物によっては複雑な物を書かなきゃならない
そしてその上でのバグ千差万別
ルールブックなんてプログラム書かない管理者がこれを守れば大丈夫(キリッ
ってするものだろう
494:デフォルトの名無しさん
19/07/16 01:07:51.42 EySzsoWc0.net
普通は大勢で開発するときに必要な取り決めだけどな
そういう規模で仕事しないなら,何しても良いけど
495:デフォルトの名無しさん
19/07/16 01:37:13.82 UHx9kM+ca.net
>>494
MISRAは明らかに小規模なプログラムのための規約だと思うよ
496:デフォルトの名無しさん
19/07/16 02:37:59.80 EySzsoWc0.net
大規模なプロジェクトのコーディング規約を決める人がここにいるとは思わないからね
小規模だと思うなら,そのルールでやれば良いんじゃない?
497:デフォルトの名無しさん
19/07/16 03:09:26.20 FvAVzBqbM.net
大規模とか小規模とかじゃなく実際にプログラムを書いてると必要になったりとかあるって話で
プログラムを書いた事内物が大規模ではとかいってるのか
498:デフォルトの名無しさん
19/07/16 03:18:03.55 UHx9kM+ca.net
そうそう、MISRAはクソ
499:デフォルトの名無しさん
19/07/16 03:29:07.35 UHx9kM+ca.net
MISRAを尊重するひとって、returnを書く位置によって返る先が変わると思ってるんだよ
500:デフォルトの名無しさん
19/07/16 07:29:02.49 UAKGOqEv0.net
間違ったことばかり書いてあるわけじゃないけどね
現場にそぐわないスキル不足なやつを庇うところには同意しかねるわけよ
> ルール 8.14 必要 restrict型修飾子を使用してはならない
規格票が読めないようなアホの相手はやってらんね
C++が混ざるところでも対策は簡単だし
501:デフォルトの名無しさん
19/07/16 07:43:27.01 1j77iOOZ0.net
トヨタのやってることは一つのミスでも人が死ぬということだよ
もしrestrictを使って人が死んだら責任とれるの?
502:デフォルトの名無しさん
19/07/16 07:45:28.75 /V8NdDl/M.net
それなら、人が死なないプロジェクトではMISRAは守る必要がないですね。
503:デフォルトの名無しさん
19/07/16 07:58:46.16 UAKGOqEv0.net
>>501
規格票を確認しないやつにミスがどうたら言われたかねえぜ
504:デフォルトの名無しさん
19/07/16 08:02:25.27 UAKGOqEv0.net
○○を使って人が死んだら責任とれるの?
○○に何でも突っ込めるウルトラクソ論法
ポインタ、共用体、仮定義、数学関数、それから?