X



C言語なら俺に聞け 152

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (アウアウウー Sa4f-7DQ/)
垢版 |
2019/06/17(月) 18:27:10.41ID:3L1/L9kLa
!extend:checked:vvvvv:1000:512
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言語なら俺に聞け 151
https://mevius.5ch.net/test/read.cgi/tech/1554171817/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2019/06/24(月) 18:37:48.29ID:Ih+U6NjR0
>>85
どこに俺の信条があるんだよw
じゃあ何が問題なのか具体的に言ってみろよ
2019/06/24(月) 18:39:33.96ID:BrGul7Md0
>>86
俺「どうすれば実現すればいいのかわからない」
お前「そんなものは必要ない」

話になってない
2019/06/24(月) 18:40:08.00ID:BrGul7Md0
「どう実現すればいいのかわからない」だった
2019/06/24(月) 18:40:45.27ID:Ih+U6NjR0
>>87
何を実現したいのよ
2019/06/24(月) 18:42:33.59ID:BrGul7Md0
>>89
計算の中で無理数を無理数として処理したい

最後に数値化したいならそのときの誤差だけは許容する
2019/06/24(月) 18:43:40.86ID:Ih+U6NjR0
>>90
じゃあ数式処理でいいじゃんw
2019/06/24(月) 18:46:56.46ID:BrGul7Md0
>>91
その数式処理をどうやるのか知らないって話なんだが
2019/06/24(月) 18:48:23.44ID:Ih+U6NjR0
>>92
>>75が言ってるじゃん
Mathmaticaでも使えば?
2019/06/24(月) 18:50:18.95ID:DSBJ/2Do0
Mathmatica 的に数式処理したいならそういうパーサーを書いてだな…
解析解が求まるといいですね (lol
2019/06/24(月) 18:50:43.29ID:oK/rIQPyd
C++ 数式処理ライブラリ
で検索。
2019/06/24(月) 18:51:36.46ID:BrGul7Md0
>>93
Mathmaticaいくらすると思ってんだよ…
2019/06/24(月) 18:53:18.44ID:BrGul7Md0
そもそもどう処理してるのか興味があるだけなんだがな
OSS漁ればあるかな
2019/06/24(月) 18:53:43.02ID:Ih+U6NjR0
>>96
じゃあお前が書けw
お前ならできる
99デフォルトの名無しさん (ワッチョイ d9d2-NSwX)
垢版 |
2019/06/24(月) 19:07:01.18ID:KYWI3ygZ0
「数式処理ソフト」と紙に書けばいいんじゃないのか?
2019/06/24(月) 19:23:05.36ID:T0z2fm5aa
>>80
やっぱり議論が噛み合ってなかったね。
俺は厳密解の話してたわ。
無理数が有限メモリで表現できないからの数式処理なら表せられるの流れだったのでまさか数値解の話で止まってるとは思わなかった。
2019/06/24(月) 19:26:15.32ID:6eeWUnLH0
「計算のステップごとに増えてく誤差の蓄積」と、
「最後に(それまで記号的に扱うことで保留していた)
無理数や無限小数を実際の数値に直す際の誤差」と、
話がゴッチャになってるでしょ。
2019/06/24(月) 19:27:51.25ID:Ih+U6NjR0
>>100
数式で表現できるのは当たり前だし
そんな当たり前の話されてもって感じだったわ
2019/06/24(月) 19:29:37.69ID:3Q+jRQuy0
ここはC言語のスレですよ
数式処理スレじゃないです
2019/06/24(月) 19:33:07.57ID:T0z2fm5aa
>>102
なら最初からそう書けばいいのに、何で数値解にこだわったの?俺は最初からこだわらなければと書いてるけど?
2019/06/24(月) 19:35:48.83ID:3Q+jRQuy0
C言語で扱えるのは数値解でしょ
それ以外はスレ違いのテーマ
2019/06/24(月) 19:38:12.07ID:Ih+U6NjR0
>>104
こだわりなんてないけどね
πは数式でπと表現するなんて当たり前だから
当然、無理数の数値表現の話だと思っただけだよ
2019/06/24(月) 19:40:21.01ID:Ih+U6NjR0
>>105
その通りだね
2019/06/24(月) 19:44:36.26ID:rEOVCAEx0
>>106
無理数を有限の有理数表現するなんて、議論するまでもないじゃんw

>>105
そだね、俺はMahmaticaのような数値処理をC言語で実装すれば無理数も有限メモリで扱えるよ、と言いたかったんだが、議論がスレチになったのでもうやめます。
2019/06/24(月) 19:47:11.95ID:Ih+U6NjR0
>>108
その当たり前を分かってないからこうなってるじゃんw
2019/06/24(月) 19:49:56.29ID:SbfV+wvC0
>>51
lint 前提のコードは、変てこなキャストとかが多用されているので、私は好きくない
(void)fclose(fp);
とか
2019/06/24(月) 19:54:09.43ID:SbfV+wvC0
多桁長演算は、私もすごく欲しくて遂には C++ で書いてみました
これさえあれば、有理数ライブラリもすぐに書けるでしょう
https://mevius.5ch.net/test/read.cgi/tech/1434079972/51

無理数は無理ですが
2019/06/24(月) 19:56:21.02ID:rEOVCAEx0
>>109
ま、ここではよくあるコミニュケーションエラーだったね。
建設的な議論になりそうにないので、もうやめとこ。

俺は数式処理にMathmaticaしか使ったことないけど、オープンソースでMaximaってソフトあるね。
どういう実装になってるのか今度見てみよう。
2019/06/24(月) 19:58:51.26ID:zV4JNsEga
数式処理はコンパイラ書くのと同じですよ。
記号操作なんだから、ある意味コンピュータの仕事の本質です。数値よりも。
2019/06/24(月) 20:00:22.77ID:zV4JNsEga
あと、mathematicaは任意桁の誤差なしの数値計算もできるけど、そっちはGNUのライブラリ使ってたのではないかと。
2019/06/24(月) 20:07:45.26ID:Ih+U6NjR0
Axiomってのもソース読めるな
探せば色々でてくる

パーサ書くなら昔はlexとyaccが定番だったけど今は何使ってるのかね
2019/06/24(月) 20:09:05.85ID:zxVE+D4VM
>>109
いや、わかってないのはお前
そもそも数式処理って最後に数値なんか出さないし
大学で(一般教養としての)数学やってないの?
2019/06/24(月) 20:12:05.34ID:Ih+U6NjR0
>>116
ああ、わかったわかったw
後出し多くて疲れるわw
2019/06/24(月) 20:14:52.08ID:rEOVCAEx0
>>115
俺はむしろ数式処理はPrologのようなパターンマッチングやってると勝手に思ってる。
知らんけど。
2019/06/24(月) 21:54:22.85ID:f0ou4boT0
>>117
えっ、後出し?
マジで>>66の言ってることを理解できてなかったのかよ…
もしかして入試問題が「直径1cmの円の面積を求めよ、ただしπは3と仮定する」みたいな学校にしか入れなかったのか?w
2019/06/25(火) 01:19:55.45ID:eaNcyZwN0
πの定義って本当は難しいではないかと考えるようになりました…
2019/06/25(火) 01:28:22.57ID:uTzXwYL5M
定義そのものは単純
円の直径と円周の長さの比
2019/06/25(火) 01:34:45.27ID:eaNcyZwN0
>>121
円周の長さって曲線ですよね
曲線の長さ…んー、曲がっているのに長さ?
「円周の長さが存在すると仮定したら」円の直径と円周の長さの比である、なら理解できなくもないのですけれども
2019/06/25(火) 01:51:31.50ID:9pz2xub80
え?
2019/06/25(火) 02:12:37.49ID:F7MMtx7f0
>>122
もうC言語に関係のない話題なんだから黙ってろよ
125デフォルトの名無しさん (ワッチョイ db02-WXYe)
垢版 |
2019/06/25(火) 03:38:38.87ID:t3KmtNcy0
えーと、>>19から延々と話が続いてんのかな?
2019/06/25(火) 03:58:09.25ID:XPL9ybbga
引数にvoidを指定したときから続いてる
2019/06/25(火) 06:03:41.53ID:JYAeHTmF0
>>64
いや可能だよ
おまえさんがそう発言しているのは
有限のメモリを使って表示されている電子教材に厳密な定義が書いてあるからだ
それはおそらく自然言語で書かれたものだろうがCに翻訳するのはおまえさんの仕事だ
2019/06/25(火) 15:14:34.88ID:9pz2xub80
ホラーだなw
129デフォルトの名無しさん (ワッチョイ d9d2-NSwX)
垢版 |
2019/06/25(火) 16:03:33.62ID:AVCUyi6k0
いま気づいたんだけどgccの拡張使えばC++のテンプレート的なことできるな
130デフォルトの名無しさん (アウアウウー Sac5-5X+l)
垢版 |
2019/06/25(火) 16:10:30.14ID:AwR7wU0da
素直にg++を使えばいいような・・・
2019/06/25(火) 16:24:43.72ID:Z38gwzpf0
>>129
させねーよ・・・
132デフォルトの名無しさん (ワッチョイ d9d2-NSwX)
垢版 |
2019/06/25(火) 16:35:26.91ID:AVCUyi6k0
>>131
どいうこと?
133デフォルトの名無しさん (ワッチョイ 9384-F2Fz)
垢版 |
2019/06/26(水) 02:05:22.90ID:alD8Bem60
このMSの新コンソールのデモビデオ
https://youtu.be/8gw0rXPMMPE

編集してるのは C のソースのように見えるけど
"<=" を "≦" に変えたり、"==" を "=" にしたりとか何の冗談だろう
それとも本当に こういう文字も OK になるのか?
オレが知らないだけで すでに OK なのか?
2019/06/26(水) 02:17:04.58ID:dK4c3UqUM
お前が知らないだけ
2019/06/26(水) 02:19:08.09ID:dK4c3UqUM
リガチャでググれ
2019/06/26(水) 02:38:59.73ID:alD8Bem60
>>134-135
ググった。どうも
Unicode のリガチャ? とすると見かけだけではなくて、ファイルに格納したときの文字コードも
変わるってこと?
ていうか最近の C コンパイラはそれを認識するのか?
2019/06/26(水) 03:00:34.30ID:alD8Bem60
>>136
自己れす
考えるに、やはり見かけだけのことだな
CSS のスタイル指定と同じことをやってると
138デフォルトの名無しさん (ワッチョイ d9d2-NSwX)
垢版 |
2019/06/26(水) 05:32:18.41ID:vCLnuco30
fira codeっていうのがあってな
emacsでもつかえる
2019/06/26(水) 11:01:02.69ID:kpnHwXwW0
行書体フォントは合字で見映えを変えてるだけだな

嵯峨本フォント公開 - Togetter
https://togetter.com/li/691328
2019/06/27(木) 18:52:32.86ID:tbUThdPVa
>>64

3.1415926535897... ≒ 3.14

これだけの話
2019/06/27(木) 19:26:18.86ID:fhoZJ8gK0
>>96
raspberry piからなら無料で使える
raspberry pi 4も3日くらいまえに発売された
142デフォルトの名無しさん (アウアウウー Sa11-jhwL)
垢版 |
2019/06/27(木) 21:23:07.41ID:tw9eT+4Xa
およそ3
143デフォルトの名無しさん (ワッチョイ b982-bYGp)
垢版 |
2019/06/27(木) 22:09:24.03ID:E9QSvqb40
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と等価とは扱われないのですか?
2019/06/27(木) 22:17:33.62ID:xVmqmc55a
C11とは
2019/06/27(木) 22:18:44.31ID:xOvGlzCg0
>>143
私の手元で実行するとループを抜けています
https://ideone.com/1uEulv
2019/06/27(木) 22:22:52.82ID:E9QSvqb40
>>145
そうですか・・・
TrueSTUDIO for STM32のコンパイラはgccじゃないかと思うのですが、
何か違うのかもしれません
2019/06/27(木) 22:23:58.00ID:PK9sLC9K0
あまり一般的じゃないコンパイラだね。バグか。
2019/06/27(木) 22:36:05.09ID:xVmqmc55a
!!!hageとかすると動くんでしょうね
2019/06/28(金) 09:20:40.61ID:aeC7bTCc0
>>144
まさか知らんのか?
ISO/IEC9899:2011のことだよ
ISO/IEC9899:2018が現行規格で、
それの1個前の旧規格だ

・・・またおかしいことになってるな
ISO/IEC9899:1990がC89なのと同様
ISO/IEC9899:2018がC17だ
2019/06/28(金) 09:29:32.78ID:1Q6Ak4jma
>>149
C11を使ってます、で意味が通じたということ?
あと引数にvoidがあるけど、大丈夫だった?
2019/06/28(金) 09:46:32.88ID:apo2D6tyx
>>143
何か変な最適化されてるのかな?
逆アセンブラ見てみたいね。
2019/06/28(金) 11:05:29.15ID:BZSAOrWQ0
hoge は不変とみなしてループ外に追い出すような類推が働いてしまうコードっぽくないのに
true との比較ではなく !hoge だから間違いもおこさない形式だし
2019/06/28(金) 12:18:07.65ID:T5ABk70zM
そもそもこのループは最適化で1行も生成されてないと推測。
んで何かの勘違いで抜けてないと思ってしまったと予想。
2019/06/28(金) 12:24:53.76ID:xv7yRtbc0
gccの -std=c11 -O0 でやったら終了した
2019/06/28(金) 12:52:11.88ID:aeC7bTCc0
>>148

 
                 ノ
          彡 ノ
        ノ
     ノノ   ミ
   〆⌒ ヽ彡     
   (´・ω・`) 
2019/06/28(金) 12:54:28.02ID:6cUEPi280
if文の中を hoge == true とタイプミスしているとか
2019/06/28(金) 13:12:10.56ID:aeC7bTCc0
>>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
問題なさそうだが、本当に抜けなくなったのか?
2019/06/28(金) 13:22:10.14ID:j6O/VBH7M
そのコードはx86 じゃないの?
STM32用の開発ツールらしいしARMのコードを吐くコンパイラだろ
2019/06/28(金) 16:31:54.35ID:aeC7bTCc0
おまえさん、x86のレジスタ名は知ってるか?
2019/06/28(金) 16:42:37.66ID:BZSAOrWQ0
疑いだしたらきりがないけど
>このような感じのコード
と言ってるあたり、このコードが100%再現する最小コードではない可能性もあるということだろうか?

擬似的に if( cnt++ >= 10) hoge = true; と書いてるけど
実情は割り込みや別スレッドかなんかで hoge を書き換えてたりとかさ
2019/06/28(金) 17:40:23.39ID:F+VtS9/i0
へんな動きしたらデカい配列作ってスタック破壊してないか疑う。
アセンブラ使てたらショートジャンプで128バイト以上離れてるラベル指定してないかとかも。
16/32bit時代のことですが。
2019/06/28(金) 18:37:17.90ID:tgbP+JHV0
スタック破壊は高確率でリターンアドレス壊して暴走(coreダンプとか例外とか)が発生するので発生しちゃえば案外すぐに分かる。
163デフォルトの名無しさん (ワッチョイ 4ab9-a57L)
垢版 |
2019/06/28(金) 19:29:54.68ID:k4pW0x/X0
ポインタは値と参照どちらですか?
f(&v);みたいにポインタを渡す事を参照渡しと呼ぶのは妥当ですか?

ポインタをインクリメントしたりアドレス計算に使う場合があるから
値っぽい気もしますよね
164デフォルトの名無しさん (ワッチョイ 4ab9-a57L)
垢版 |
2019/06/28(金) 19:32:57.11ID:k4pW0x/X0
「C言語は数値でアドレス指定してデータにアクセスする能力を持つ言語だ」
と捉えて、ポインタ渡しはあくまで値渡しと捉えるのも妥当そうじゃないですか?
2019/06/28(金) 19:41:54.17ID:gZBVzR2k0
そういう認識ができてるなら十分だな
その値から指し先が示す実体を引っ張ってこれるってだけで
関数のインターフェースとしては値を渡してる

C言語ではできないが
int a = 0;
foo(a);
呼び出した結果 a の値が書き換わって戻ってくる
っていう渡り方があって、そっちを参照渡しって呼ぶし
2019/06/28(金) 20:38:41.57ID:TwLtdi9D0
「C言語に参照渡しは無い」という理解でよくね?
2019/06/28(金) 20:56:34.47ID:tgbP+JHV0
そういう意味では全ての言語は参照または値を表記の違いこそあれ何かの値を渡してるわな。
「参照のための値(アドレス)を渡している」という意味において、C言語もまた参照渡しのある言語になるんじゃない?
2019/06/28(金) 21:07:11.36ID:1Q6Ak4jma
違います。
169デフォルトの名無しさん (アウアウウー Sa11-jhwL)
垢版 |
2019/06/28(金) 21:13:05.54ID:ASw3jrNxa
Cに参照はないが、ポインタ経由のアクセスを参照だと脳内定義するなら参照ということにはなる。
ただC++は参照もポインタ経由のアクセスも両方使えるようになってるので後でC++やろうとすると混乱するかもね。
2019/06/28(金) 21:16:07.88ID:lanM6mt5d
先輩「〜〜」
新人「なるほど、つまり参照渡しですね」
先輩「違います」
新人「オオ…オ……オ……」

そして新人はIT業界を去ったのであった
2019/06/28(金) 21:38:39.85ID:TwLtdi9D0
ポインタを特別扱いする必要とか無いがな
2019/06/28(金) 21:38:47.78ID:DEsb2BLF0
C言語の場合は素直にアドレス渡しで良いと思う
紛らわしい用語使うとかえって混乱するだけ
2019/06/28(金) 22:56:11.75ID:K80D90id0
先輩「〜〜」
新人「なるほど、つまり参照渡しですね」
先輩「まあそうだね」
新人「なるほど理解しました」

優しい世界
2019/06/28(金) 23:31:41.66ID:TwLtdi9D0
そして姑息な優しさによりC++の参照で混乱する
2019/06/29(土) 00:30:28.54ID:kzB3RaMy0
C++なんてクソ言語は回避すればいい
2019/06/29(土) 00:57:44.40ID:CfES0TXk0
姑息じゃない先輩「〜〜」
新人「なるほど、つまり参照渡しですね」
姑息じゃない先輩「まあそうだね」
新人「なるほど理解しました」
姑息じゃない先輩「でもC++の時は注意が必要だよ。その時にまた質問してね。」

素晴らしい先輩
177デフォルトの名無しさん (ワッチョイ 3e02-bYGp)
垢版 |
2019/06/29(土) 01:04:38.27ID:k/WM/TXw0
Java は参照の筈なのにある日 NullPointerException を見て愕然とする。
2019/06/29(土) 07:27:30.85ID:HFXZY0WT0
NullPointerException を見て愕然

「ぬるぽ」を見ると「ガッ!」と返されることの由来。
2019/06/29(土) 17:54:21.19ID:8z7l0ZZs0
ポインタ?BASICのPEEK、POKE、CALL、DEF FN使ったことあるなら(ry
2019/06/29(土) 18:15:02.25ID:Ec0dmaS10
>>179
DEF FNが全てのBASICにあると思うなよ。
2019/06/29(土) 18:24:39.84ID:0fRKmc/o0
I/Oの何十ページもあるダンプリスト打ち込んでたなあ・・・
2019/06/29(土) 18:28:11.52ID:QwBwV953M
かつて皆一度は通ってきた道
183デフォルトの名無しさん (ワッチョイ 4ab9-a57L)
垢版 |
2019/06/29(土) 18:58:28.75ID:SkCg/0zJ0
デバドラを作った事がないんだけど
C言語で作ったとして、
CPUやOSの違いに対してクロスプラットフォームなソースコードを作れるものなの?
2019/06/29(土) 19:11:10.87ID:KCwWGOZi0
>>179
それを言うならDEF USRだな
富士通のやつ
CALLつーと早川電機か?
2019/06/29(土) 19:12:21.23ID:VF6wNxfU0
クロスプラットフォームなデバイスドライバなんて見たことが無いんだけど存在するの?
デバイスにもよるんだろうけどインストーラが分けてあるイメージある
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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