C言語なら俺に聞け 153

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 5fba-LL4R)
垢版 |
2019/08/17(土) 23:02:42.00ID:tN5mSQYg0
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

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

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

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

JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/
-
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
※前スレ
C言語なら俺に聞け 152
https://mevius.5ch.net/test/read.cgi/tech/1560763630/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2019/11/15(金) 01:54:01.65ID:GhKndF/D0
funcが返す値を開放する責任がないなら問題ない
2019/11/15(金) 02:21:33.91ID:Re5Vtpoc0
>>183
これなにか使い道あるの?
2019/11/15(金) 05:47:36.56ID:Re5Vtpoc0
ああ空目してたわスマソ
2019/11/15(金) 09:12:52.77ID:uuXKcbIGd
>>181
慢心せず謙虚でいるのはいいことだが
やる気のなさの言い訳にするやつに
同調はしないってことさ
2019/11/15(金) 09:35:58.90ID:rGVJWIdvM
制御屋なら論理回路よりも伝達関数
2019/11/15(金) 10:29:58.55ID:kGxI2dsUM
>>183
func() の作り方次第

int x = 123;
return &x;

とかやってたらダメ
2019/11/15(金) 11:04:39.89ID:uuXKcbIGd
>>188
なぜ、よりもと択一選択するんだ?
2019/11/15(金) 11:25:31.01ID:rGVJWIdvM
極論すれば対象をモデル化して状態方程式をプログラムで逐次演算するアルゴリズムを実装するのが本来の制御系の組み込みソフト
論理回路のソフト処理への代替はコストダウンの一環で取り込むことはあってもあくまでオマケ
192デフォルトの名無しさん (アウアウウー Sa45-nhir)
垢版 |
2019/11/15(金) 11:37:39.91ID:qkK0C17la
>>178
抵抗って昔からカラーコードで抵抗値表してるのでは?今は変わったの?
2019/11/15(金) 11:43:07.73ID:bb6Q721I0
>>192
部品を小さくすると高速化できるので
チップ部品が増えたが、そこにはカラーコードは使われていないからでは。
194デフォルトの名無しさん (アウアウウー Sa45-nhir)
垢版 |
2019/11/15(金) 11:46:04.74ID:qkK0C17la
>>183
良いんだけどNULL返されたらおしまいなのでそのためにワンクッション入れるのが普通なのではないな。

実際 localtime() なんかはエラーの時にNULL返す事になってるしな。自分の所の変数にコピーする場合はまずポインタで受けてNULLでなければポインタの指してる先がコピーされるように書くよ。
2019/11/15(金) 14:01:09.16ID:d61354ir0
>>192
チップ抵抗器って見たことない?
196デフォルトの名無しさん (ワイーワ2 FFca-/nAh)
垢版 |
2019/11/15(金) 14:54:35.89ID:76R0IrhIF
>>180
典型的なアフィwebサイトと同じ造りなんだよな
一目でそっとじ
197デフォルトの名無しさん (アウアウウー Sa45-nhir)
垢版 |
2019/11/15(金) 15:03:20.79ID:qkK0C17la
>>193>>195
あの小さい四角いやつか。
電子工作何十年もやってなくて知らなかった。
ググって画像見た。
2019/11/15(金) 16:35:54.83ID:uuXKcbIGd
core-i7のパッケージ天面にも貼ってあるから電子工作してなくても見かけることはありそうだが
2019/11/15(金) 17:24:07.85ID:xeYG9inD0
見かけていてもアレが何なのか分からない、だろう
2019/11/15(金) 17:31:28.56ID:pd2oXw5yd
最小は0201かな
3216とかは巨大に見える
2019/11/15(金) 17:32:50.90ID:47DeWFED0
マイコン、ラズパイ、PLC, HDL, Rust

ニコ生では、HDLまで行ってるw
202デフォルトの名無しさん (ワッチョイ 8233-iGNt)
垢版 |
2019/11/15(金) 17:44:35.54ID:DqSPL00u0
https://ideone.com/y2Ogra
で0.3がFalseになるのはわかるのですが、0.2がTrueになるのはなぜですか?
2019/11/15(金) 17:49:31.04ID:pd2oXw5yd
一応環境依存

内部が2進数の浮動小数点なら
(普通の範囲なら)2倍は正確

0.3がfalseになるのがわかるなら
わかりそうなもんだけど
204デフォルトの名無しさん (ワッチョイ 8233-iGNt)
垢版 |
2019/11/15(金) 17:49:38.82ID:DqSPL00u0
精度の問題?
205デフォルトの名無しさん (ワッチョイ 8233-iGNt)
垢版 |
2019/11/15(金) 17:50:48.82ID:DqSPL00u0
>>203
ありがとうございました
206デフォルトの名無しさん (ワイーワ2 FFca-/nAh)
垢版 |
2019/11/15(金) 17:51:24.03ID:NLCWqdB7F
double
https://ideone.com/9COXkq
0.2 True
0.3 False
--------
float
https://ideone.com/wzvO20
0.2 True
0.3 True
2019/11/15(金) 17:51:44.04ID:pd2oXw5yd
これでわかったのかよ

多分わかってない
2019/11/15(金) 17:57:08.67ID:pd2oXw5yd
小数は無限個あるが
doubleやfloatで表現出来る値は有限個
だから正確に表す事が出来る小数はごく一部となる

ほとんどの環境では0.1を正確に表す事が出来ない
だから近似になる

0.1の近似を3個足したものの近似と
0.3の近似

これが同じ値になるかどうかは運しだい
2019/11/15(金) 18:11:10.06ID:pd2oXw5yd
多くの環境では

floatで24bit整数の範囲は正確に表現出来る
doubleで53bit整数の範囲は正確に表現出来る

floatでもdoubleでもlong doubleでも
元の値に対して2^nをかけても2^nで割っても
(それが普通に表現出来る範囲であれば)誤差はない

1/n は、nが2^mの形でない場合は必ず誤差が出る

このくらい覚えて置けばいい
2019/11/15(金) 18:18:26.55ID:NeivSIGq0
https://ideone.com/dkY9yU
211デフォルトの名無しさん (ワッチョイ 1102-coos)
垢版 |
2019/11/15(金) 18:24:08.60ID:uUFlvtLt0
趣味でC言語で遊んでるんだけど入門書読んで、
printf scanf if else switch等使ったプログラム作ったんだけど次に何をしたらいいかわからへんわ。
212デフォルトの名無しさん (ワッチョイ 1102-coos)
垢版 |
2019/11/15(金) 18:24:52.50ID:uUFlvtLt0
あんまりしっかりとポインタは勉強できてないんだけど、
ポインタっていつ使うの?って感じ。
組み込みやらんと基本的には使わない?
2019/11/15(金) 18:35:40.25ID:SL2qDcaa0
組み込みじゃなくてもある程度大きなプログラムになればガンガン使う
むしろ一番使う型になるレベルで使うのがポインタになることもあるくらいには使う
2019/11/15(金) 18:37:30.96ID:SL2qDcaa0
ていうかscanfでポインタ使ってるで
文字列出力したなたprintfでも使ってる
はじめは実感無いかもしれんが
215デフォルトの名無しさん (ワッチョイ 1102-coos)
垢版 |
2019/11/15(金) 18:43:16.92ID:uUFlvtLt0
全く実感ない
printfってどうやってできてんの
216デフォルトの名無しさん (ワッチョイ 1102-coos)
垢版 |
2019/11/15(金) 19:07:35.33ID:uUFlvtLt0
とりあえずポインタの勉強はやり直すわ。
次にArduinoでも触ってみるか
2019/11/15(金) 19:17:18.51ID:hD6OtsPU0
オレオレprintf を実装しようとすると、鼻血が出そうで vsptrintf に○投げしてから加工する方向にいってしまう
2019/11/15(金) 19:17:48.26ID:SL2qDcaa0
>>215
関数に値を渡すのはわかるよね?
printfって関数に出力して欲しい数値や文字を渡してる
この渡すときにCPUの動き的には複製されたものが渡される
数値なら複製しても対して問題ないけど文字列の場合なんかだと複製することで消費されるメモリが増えてしまう
だから文字列全部を複製なんかせずに文字列の先頭の場所だけ渡す
受け取ったprintf側ではその場所を元に文字列にアクセスする
この場所を指し示す仕組みがポインタと呼ばれるもの
10文字でも1000文字でも先頭の場所、つまりアドレスは4byteとかで表せるので情報の受け渡し効率が良い

正確には間違ってる部分もあるかもしれんがだいたいこんなイメージ
2019/11/15(金) 19:23:26.49ID:H7D23ViK0
>>217
そもそもvsprintfのある環境ならprintfあるでしょ。
組み込みとかなら低レベルの1文字出力は作らないといけないけど。
2019/11/15(金) 19:24:40.31ID:pd2oXw5yd
出力先が特殊なprintfじゃね?
2019/11/15(金) 19:30:11.03ID:hD6OtsPU0
>>220
そんな感じですです あと暗に頭にタイムスタンプ付加したりとか

VZエディタのASMソース見たときは、整数onlyでも結構複雑だった
222デフォルトの名無しさん (ワッチョイ 1102-coos)
垢版 |
2019/11/15(金) 19:32:48.14ID:uUFlvtLt0
産休。関数とポインタをもう一度やり直してくる
2019/11/15(金) 20:42:05.38ID:yJ+o3fPw0
>>211
welcome to https://mevius.5ch.net/test/read.cgi/tech/1564310397/
2019/11/16(土) 00:52:24.12ID:D8F8Ex6/0
ポインタを使わないならCを使わない方がいいという程度にはポインタはCの肝
ポインタを使わないなら素直に安全で高級な言語を使った方がいい
2019/11/16(土) 07:48:38.95ID:fjjXSMO90
エントリ関数を int main(int argc, char *argv[]) と書いた時点で
ポインタを使ってる、とも言えるんだよな。

int main(void) で始めてるかもしれんけど。
226デフォルトの名無しさん (ワッチョイ 1102-coos)
垢版 |
2019/11/16(土) 08:31:42.30ID:ptZ6lm890
int main()しか使ってないわ。どういう時に使うんだっけそれ
2019/11/16(土) 09:17:50.44ID:sxDPEgRe0
>>224
C言語を使う用途の多くは
組み込み、OS、ドライバ
だろ

簡単に言語を変えるとかいうなよ
2019/11/16(土) 09:48:51.08ID:+/ZlAd+w0
コマンドラインから情報を受け取って処理したいときに使う
関数の引数と同じ
2019/11/16(土) 09:56:15.61ID:fbhJUidB0
言語を変えるのではなく
職業を変えるべきだなw
2019/11/16(土) 10:15:36.12ID:sxDPEgRe0
ポインタの使い方を覚えるって言ってるんだから
それでいいじゃん
231デフォルトの名無しさん (アウアウウー Sa45-coos)
垢版 |
2019/11/16(土) 10:31:31.82ID:jtqy6mRLa
C言語でOS作ってみたいんだけどなぁ。入門レベルじゃきびしいな
2019/11/16(土) 10:50:41.32ID:sxDPEgRe0
アセンブラの経験が豊富ならなんとかなる
2019/11/16(土) 10:59:49.49ID:10CoeX0f0
>>231
簡単なRTOSでもまともに作るならCだけで書くのは不可能。
2019/11/16(土) 11:09:44.67ID:lV5RucvDd
Cだけで?
そりゃ無理だ
2019/11/16(土) 11:34:35.99ID:xKHzNgdA0
>>234
ほんの少しインチキをするだけで、全てC言語で書ける
2019/11/16(土) 12:06:40.29ID:lV5RucvDd
バイナリコード直接記述?
それはC言語で記述とは言わないような

インラインアセンブラも同じ
237デフォルトの名無しさん (ワッチョイ 82ad-6d/E)
垢版 |
2019/11/16(土) 22:07:42.30ID:gv6Xc8ej0
>>234
大半はCで行けそうな感じはするけどな。実際にUNIXやLinuxはそうだし。
厳密に完全に100%Cにするとなると最初からそれを考慮してCPU作らないとできないとは思うが、かといってその必要性はないな。研究目的ならわかるが。
238デフォルトの名無しさん (ワッチョイ 8202-y756)
垢版 |
2019/11/17(日) 00:21:50.66ID:CjHjsj5F0
>>237
こういう知ったかして無知晒すバカはどうにかならんのかいな
2019/11/17(日) 05:19:33.36ID:oJzZE04E0
痛いのが好きなんでしょう
鞭も旨い

おそまつさまでした
2019/11/17(日) 06:34:34.75ID:cZKVuoHK0
>>237
100%Cでどうやって特権命令出すの?
Cプログラムが動き出せる最低限の準備は何だか知ってる?
2019/11/17(日) 13:31:04.48ID:Mp5WsRX6d
大半は
100%

話がかみあってない
2019/11/17(日) 13:31:40.86ID:Mp5WsRX6d
動き出すだけなら100%C言語って今時珍しくも無い
2019/11/17(日) 14:11:44.51ID:0F7CIe0FM
スタートアップルーチンに頼らずにmain関数が自立起動するのか
2019/11/17(日) 14:12:07.45ID:SNu9npot0
>>241
「すべてC言語で書ける」に突っ込み入れられてるだけだろ

>>242
OSの話だよ?
2019/11/17(日) 14:26:46.20ID:Aepb3ANuM
> startup.s/head.s
明日から仕事来なくていいから。
2019/11/17(日) 14:29:44.06ID:AyzIbzU+0
>>243
スタートアップをC言語で書くって話でしょ
まあ気合いでなんとかなるさ
2019/11/17(日) 14:35:54.32ID:cZKVuoHK0
>>241
大半を100%とは言わないし、
100%CのUNIXやLinuxが大半でもない

話を逸らすな
2019/11/17(日) 14:59:34.01ID:Mp5WsRX6d
スタートアップコードなら100%Cで書けるマイコンは珍しくない

OS 100%は無理

>>240が話題を追加したの
2019/11/17(日) 15:17:17.70ID:cZKVuoHK0
231 CでOS作ってみたい
233 RTOSでさえ無理
234 Cだけで?そりゃ無理
237 100%Cは最初からそれを考慮したCPUならできる ←キ
238 237はシッタカ
240 特権命令は?Cプログラムが動き出せる準備は?
241 大半は100% ←キ
243 スタートアップ不要のmainとは?
244 OSの話だよ?
247 話を逸らすな
248 スタートアップだOSじゃない ←キ
2019/11/17(日) 15:58:49.57ID:AyzIbzU+0
>>248
>OS 100%は無理
そこも気合いでなんとかなりますぜ!

※気合いとは、次みたいなコードもCとみなしてしまう心意気を指す
int main=195;
2019/11/17(日) 16:08:09.90ID:Mp5WsRX6d
>>240
一行目は特権命令の話
二行目はスタートアップの話
に見える
2019/11/17(日) 16:20:24.24ID:cZKVuoHK0
>>251
違う
スタートアップの話なんざしてねえよ
おまえベアメタルの経験ゼロだな
2019/11/17(日) 16:31:19.54ID:Mp5WsRX6d
いや、
どっちかっていうと趣味みたいなもんで
いろんなCPUでやってるけど

ただ単に
Cプログラムが動き出せる最低限の条件
と書いてあるんだからOS起動ではないでしょ
2019/11/17(日) 16:47:01.78ID:cZKVuoHK0
話の発端からずっとOSの話で
シッタカを指摘されて悔しくて悔しくて仕方なくて
スタートアップの話に逸らそうとしているのが約1名いるが
2019/11/17(日) 16:58:35.66ID:Mp5WsRX6d
Cプログラムと書いてあるんだからCプログラムだろ
OSが起動出来る十分条件ではなく、必要条件の1個
特権命令もその一つ
もっとも特権命令が存在しないCPUや使わなくてもOSがつくれるCPUがあるので
必要条件ではないけど
2019/11/17(日) 17:01:55.70ID:Mp5WsRX6d
OS起動ならOS起動と書くだろう
2019/11/17(日) 17:02:57.82ID:0F7CIe0FM
ベアメタルであれば尚更main関数を呼び出す前に割込みベクターやスタックポインタの初期化などいろいろ準備が必要だろ
OSに頼れないので自分で準備しないとC
のプログラムは動き出せない
258デフォルトの名無しさん (アウアウウー Sa45-nhir)
垢版 |
2019/11/17(日) 17:04:33.98ID:8gWobnsKa
さて、次にどんな燃料を投下すれば炎上するか・・・
259デフォルトの名無しさん (アウアウウー Sa45-nhir)
垢版 |
2019/11/17(日) 17:06:07.28ID:8gWobnsKa
とりあえずCでOSでスレが活性化することはわかった。機会があったら他の掲示板でもやってみよう。
2019/11/17(日) 18:37:16.77ID:SNu9npot0
>>250
レギュレーション違反ですw

>>236
> バイナリコード直接記述?
> それはC言語で記述とは言わないような
2019/11/17(日) 18:42:52.80ID:SNu9npot0
>>257
最近のプロセッサはスタックポインタの初期値はリセット時に決められた番地から読み出すことが多いと思う
割り込みベクタはメモリーに書けばいいだけじゃね?
2019/11/17(日) 18:50:25.01ID:kPaO6TXK0
>>261
>スタックポインタの初期値はリセット時に決められた番地から読み出す
プログラムカウンタの方じゃないですか?
2019/11/17(日) 18:53:56.89ID:q2lewe9O0
そのメモリ、いやもっと言えばバスの初期化はいつ誰がやるのかと。
2019/11/18(月) 00:18:37.90ID:FmL1TMPdd
>>257
それってすなわちスタートアップコードですよね?
何度も書くけどスタートアップコードを全てCで書けるマイコンは今時珍しくないんですよ
2019/11/18(月) 00:21:29.64ID:FmL1TMPdd
>>263
>>264
2019/11/18(月) 03:24:34.33ID:7xBgQ7dd0
>>264
>>236の内容に加えてpragma疑似命令もC言語で記述とは言わないと思う
C言語の構文だけではスタートアップの記述は無理だろう
2019/11/18(月) 05:02:13.80ID:lwVIqPwD0
>>262
68KとかARM Cortex M
0x00000000~3 ⇒ SP
0x00000004~7 ⇒ PC
2019/11/18(月) 07:58:00.65ID:skAn5Z6md
Cだけで起動できるCPUって、まさかとは思うがPICじゃねえだろうなwww
2019/11/18(月) 08:51:34.79ID:G/ZMLQZPx
ROM/RAM内蔵のMCUとROM/RAM外付けのMPUのでは前提が違うので議論が噛み合わない。
>>257>>263は後者の話をしている。
2019/11/18(月) 08:57:47.13ID:skAn5Z6md
メモリの接続方法なんか全然関係ない
おまえアホか
2019/11/18(月) 09:02:39.86ID:skAn5Z6md
PICと言った意味も通じてねえな、こりゃw
まさかの更に下をくぐりやがった
2019/11/18(月) 09:05:45.96ID:tFTaAL8Z0
OSの無い組み込み環境なんて山ほど存在してて、その環境の中で全部Cのもで書いてるとこも存在してる
そもそもOS入れられるような環境とは言えないけど、こういうとこでCで書いてるものにOS的な動作をさせればそれはCのみで作ったOSと言えるのか?
おそらくどこからどこまでがOSの領域か?がずれてるから延々と罵り合いになるのでは?
2019/11/18(月) 09:24:05.89ID:skAn5Z6md
ほらな、やっぱりPICと言った意味が通じてないw
274デフォルトの名無しさん (ワッチョイ e9aa-coos)
垢版 |
2019/11/18(月) 09:59:14.55ID:FeTeb+YA0
私のために争わないで!
2019/11/18(月) 10:07:53.61ID:sZ0WVu3/d
最近PICを覚えたの?
2019/11/18(月) 10:13:12.39ID:sZ0WVu3/d
ARMとかRXとかSHとか...
スタートアップ含めCだけで書ける
(全ての環境でとは言わないけど)
2019/11/18(月) 10:27:02.98ID:7xBgQ7dd0
組み込み用の処理系についてはメーカ独自拡張の独壇場

コンパイラ本体は
__section
__bank
__interrupt
など独自拡張多し

プリプロセッサも
#pragma
で設定弄らないといけないので注意
2019/11/18(月) 10:37:04.01ID:7xBgQ7dd0
スタートアップファイルはC言語のような殆ど何か別言語に近い感覚
2019/11/18(月) 11:31:43.74ID:skAn5Z6md
>>276
そのスタートアップはどうやって起動するんだよ
280デフォルトの名無しさん (アウアウウー Sa45-nhir)
垢版 |
2019/11/18(月) 12:06:28.17ID:vV3s+CrDa
ピクピク
2019/11/18(月) 12:28:42.25ID:S9/8fJfLM
>>273
PIC8からPIC32まであるのにPICだけで話が通じると思ってるのはちょっと世間知らずすぎる
2019/11/18(月) 12:29:47.29ID:S9/8fJfLM
>>276
具体的な環境書いてみ
configでスタートアップルーチンを生成してるとかのオチじゃないよね?
2019/11/18(月) 12:31:32.89ID:fft3f69BM
いまなら、C言語だけで書いたOSをUEFI でロードして起動するとかできるだろ?
C言語で書けない操作は UEFI 側で設定したものをそのまま使う
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況