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/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 側で設定したものをそのまま使う
2019/11/18(月) 12:39:27.00ID:1LpBylKv0
PC-88/98のFDブートはFDの最初のセクタから256バイト読み込んで実行するんだっけ?
そのプログラム書くのに適したCコンパイラってあるの?
285デフォルトの名無しさん (アウウィフ FF45-/Df3)
垢版 |
2019/11/18(月) 12:59:12.61ID:ahZzeXy3F
CP/MにはBDSCが定番だった
2019/11/18(月) 13:14:35.59ID:IDpLc7eed
>>279
人に聞かないで自分で調べて
2019/11/18(月) 13:15:54.90ID:skAn5Z6md
>>282
俺もそんなことだろうと見ているw
2019/11/18(月) 13:23:20.40ID:IDpLc7eed
本気で知りたいならそれ相応の態度で
289デフォルトの名無しさん (ワッチョイ d11d-7HT4)
垢版 |
2019/11/18(月) 14:18:07.35ID:+ljooU2/0
ビジネスで優秀な人材育成する上司は何を教えているのか?
https://www.youtube.com/watch?v=apxtSqxjw08&;t=13s
マクドナルド伝説の店長が教える、最強店長になるために必要なこと
https://www.youtube.com/watch?v=0wMbR7JIeeQ&;t=3154s
「最強の働き方」長時間労働やノウハウよりも大切なこと
https://www.youtube.com/watch?v=JnMHbI1-e3E&;t=3606s
美容師の楽しさ再発見!やる気スイッチが入る働き方セミナー
https://www.youtube.com/watch?v=DGzXQT799oY
視覚障がいを乗り越えた活法家
https://www.youtube.com/watch?v=6IuY_K3uFdo&;t=805s
2019/11/18(月) 20:40:54.63ID:oSLwFt1+0
ヒヨッ子が物を知らねえのは別にいいんだよ、当たり前
シッタカこくのと指摘されてからの逆ギレが攻撃対象になるんだ
2019/11/18(月) 20:50:41.53ID:Zo9NWI12M
>>283
gccの場合は自動的にcrt0-efi-x86_64.Sをリンクするようだが
292デフォルトの名無しさん (アウアウウー Sa45-coos)
垢版 |
2019/11/18(月) 20:54:33.04ID:Ufz4tuHsa
ものづくりC言語熟ってサイトいいじゃん!
2019/11/18(月) 21:03:14.01ID:UWPzTs1l0
ものづくりC言語熟おいしい!一番好きなバーガーです!! って言ってほしいのか?
294デフォルトの名無しさん (アウアウウー Sa45-coos)
垢版 |
2019/11/18(月) 21:06:39.12ID:Ufz4tuHsa
>>293
もしかしてキ○ガイ?
295デフォルトの名無しさん (ワッチョイ 1102-coos)
垢版 |
2019/11/18(月) 21:29:13.55ID:9xSA7Xxe0
ものづくりC言語塾のポインタの説明わけわからん
296デフォルトの名無しさん (ワッチョイ 2905-n3bN)
垢版 |
2019/11/18(月) 22:06:08.02ID:WvhlQmiy0
C言語のポインタはCPU機械語における間接アドレシングの抽象化だろ?
それ以上でも以下でも無い
2019/11/18(月) 22:11:27.28ID:Vzii0sJA0
>>284
ないです。
余りにもバイト数が少なすぎるので手書きです。
手書きでもバイト数に気をつけて書く必要があります。
2019/11/19(火) 00:13:05.05ID:SDEP65Ha0
それ以上もそれ以下もそれを含む
299デフォルトの名無しさん (ワイーワ2 FFca-/nAh)
垢版 |
2019/11/19(火) 12:48:33.17ID:8naC8O/UF
>>296
インクリメントは良く出来てるな

あとポインタのポインタと配列へのポインタの文法を混乱して覚えてる人が居て
そいつらのせいで劣化コピーが出回ってるのがさらなる混乱の原因

正しく理解して正しく使えばCのポインタは何も難しくない
2019/11/19(火) 13:21:56.35ID:lt+0x6jod
>>299
劣化コピーの具体例をよろしく
この文章だけだと何が問題なのかさっぱりわからん
2019/11/19(火) 13:26:52.18ID:O502C4IMd
二次元配列は二重ポインタで扱うという自分の勘違いを正当化したくて
mallocでポインタの配列を作るやり方を唯一正統と強弁するアホが
fjで暴れてたな、そういえば
2019/11/19(火) 13:59:41.39ID:9idMfLVKM
ポインタのポインタ **p
配列へのポインタ (*p)[]
ポインタの配列 *p[]
303デフォルトの名無しさん (ワイーワ2 FFca-/nAh)
垢版 |
2019/11/19(火) 14:08:13.34ID:8naC8O/UF
>>300 みたいなのを炙り出せたのであれば
レスに意味があったと言えよう
2019/11/19(火) 19:58:13.32ID:r9zE5eVQM
>>301
めんどいだけでポインタのポインタでも2次元配列かけるでしょ?
勘違いってどういうとこ?
2019/11/19(火) 20:13:13.80ID:O502C4IMd
>>304
本人か?
char a[2][2],**b=a;
これが勘違いでないとまだぬかすか?
頭がバカなのか、それともトンマなのか、どっちだ?
2019/11/19(火) 20:14:48.63ID:r9zE5eVQM
>>305
そんなん知らんわ
予想の斜め上だ
307デフォルトの名無しさん (アウアウウー Sa45-nhir)
垢版 |
2019/11/19(火) 20:16:56.03ID:c65LTQ+sa
>>299
アセンブラやったことのない人は中々正しく理解できないようで、それでポインタの事だけ書いてある本が沢山出ちゃうんだろうな。
308デフォルトの名無しさん (アークセー Sx11-9KXC)
垢版 |
2019/11/19(火) 21:33:52.66ID:pHwegslWx
何年も書かないと忘れるな〜

ポインタのポインタは、ポインタの値を参照渡しするときくらいしか思いつかん

char *p;
foo(&p);

void foo(char **p) {…}

みたいな、
305のような書き方はピンとこないわ
2019/11/19(火) 21:36:01.90ID:+Tz70BZqM
>>304
書けるかどうかじゃなくて
> 唯一正統と強弁するアホが
いたって話でしょ
2019/11/19(火) 21:49:57.72ID:3qWxJKAv0
int a=0;
int *pa=&a;
int **ppa =&pa;
int ***pppa = &ppa;
2019/11/19(火) 22:00:51.47ID:JHNr41O80
でもこういう関数だとポインタだけでやりたくなる

mul(double** x, double** y, int n, int m){

mul(double x[][20], double y[][20], int n, int m){
2019/11/19(火) 22:37:16.16ID:SDEP65Ha0
const 付けない系?
2019/11/19(火) 22:47:26.54ID:8ta2T3rG0
また関係ないことを・・・
2019/11/20(水) 05:59:16.05ID:6t1gUx2GM
関数の引数に限って言えば
func(**p)
func(*p[])
func(p[][])
func(p[][10])
どれでも同じ
引数として配列を引き渡す方法はない
どれも先頭要素へのポインタが値渡しされる
関数側で引数がポインタへのポインタ(いわゆる二重ポインタ)なのか、ポインタの配列なのか、配列の配列(いわゆる二次元配列) なのか区別する手段はない
引数に配列として要素数を渡してもエラーにはならないだけで無視される
2019/11/20(水) 06:42:28.35ID:06vL+ArYd
どこから突っ込んでいいやら・・・
出鱈目にも程があるぜ
2019/11/20(水) 07:18:49.43ID:CxWhIUNe0
関数の宣言文で説明だけなので変数型を省略してるだけだろ
配列の変数名がpならば呼び出しは
func(p)
でもいける
結局は先頭アドレスさえ渡せれば何でもいい
2019/11/20(水) 07:45:40.36ID:uVU8YbeSF
[][]なんて構文あるかヴォケ
318デフォルトの名無しさん (アウアウウー Sa45-nhir)
垢版 |
2019/11/20(水) 09:49:56.67ID:gQNT2Wxfa
>>314
プロトタイプ宣言しておけばC言語としては違う状態になるよ。
2019/11/20(水) 10:34:34.94ID:CxWhIUNe0
プロトタイプ宣言では状態を区別はしない

プロトタイプ宣言
void func(char *p[]);

関数定義
void func(char **p) {}


https://i.imgur.com/mMQGNga.png
320デフォルトの名無しさん (ワイーワ2 FFca-/nAh)
垢版 |
2019/11/20(水) 12:01:08.83ID:grCkJCm3F
>>308
あほか
>>305 は間違いの例だから
ピンと来なくて当然
321デフォルトの名無しさん (ワイーワ2 FFca-/nAh)
垢版 |
2019/11/20(水) 12:06:59.82ID:grCkJCm3F
>>311
何を目的に書いてるのか知らんが

A: mul(double** x, double** y, int n, int m){

B: mul(double x[][20], double y[][20], int n, int m){

C: mul(double (*x)[20], double (*y)[20], int n, int m){

AとBは等価じゃないぞ
2019/11/20(水) 13:41:25.47ID:CxWhIUNe0
変数としてのxは
A:double型のポインタを指すポインタ
B:double型の配列を要素とする配列の先頭要素を指すポインタ
C:double型の配列を指すポインタ

関数の引数としてのxは
A,B,Cすべてdouble型の参照オブジェクト(何でもいい)を指すポインタ
2019/11/20(水) 15:18:17.42ID:7Jz+3SpEa
>>322
>>321のxのことを言ってるのなら、基礎からやり直せ。
2019/11/20(水) 15:27:36.91ID:CxWhIUNe0
まあ実際C:のような例は見たことはないけど、少なくともA:とB:は関数の引数としては同じと解釈される
中身は受け取った関数側でプログラマが処理する事案であってdouble型の何かを指すポインタという以上の意味はない
2019/11/20(水) 15:59:50.97ID:jGIPXiJ00
分かりきった固定要素数の配列を渡すのはいっかい struct で包んじゃうわ

struct foo {
double array[20];
};

mul(struct foo* x, struct foo* y, ...)
326デフォルトの名無しさん (アウウィフ FF45-/Df3)
垢版 |
2019/11/20(水) 16:26:53.96ID:ACUpjjQJF
>>311 しね
>>324 お前は黙ってろ
2019/11/20(水) 16:40:06.35ID:6t1gUx2GM
>>323,326
ただの罵倒ではなくてもう少し有益なレスしろよ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。