X



C言語なら俺に聞け 154
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん (ワッチョイ bf63-lB9F)
垢版 |
2020/01/14(火) 19:32:30.16ID:SgRnb4BR0
!extend:checked:vvvvv:1000:512
(新スレ立ての際上記コマンドを2行書き込んでください)
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/

※前スレ
C言語なら俺に聞け 153
https://mevius.5ch.net/test/read.cgi/tech/1566050562/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
0003デフォルトの名無しさん (ワッチョイ 5f02-tgR8)
垢版 |
2020/01/14(火) 20:20:26.03ID:Ae/uveiQ0
前スレのこれに質問です。
32bitアプリだとmallocで確保していくと2GB近くでエラーになりませんか?
頑張って色々施しても4GB近くが32bitだと限界じゃないんですかね?
もし回避策があるなら教えてください。

999デフォルトの名無しさん (ワッチョイ 7f36-///2)2020/01/14(火) 19:45:37.22ID:MAaOflfD0
>>978
ちょっと待てや
おまえ単一仮想記憶を前提に話してるか?
今や多重仮想記憶が当たり前で単一仮想記憶はかなり特殊な存在だぞ
0009デフォルトの名無しさん (ワッチョイ 5f02-tgR8)
垢版 |
2020/01/14(火) 21:13:14.20ID:Ae/uveiQ0
しかし別プロセスにしようとどうしようと
結局データのアドレスは受けないといけないので
そのポインタ自体が32bitで管理されてる以上
その限界はどうしようもないような。
0013◆QZaw55cn4c (ワッチョイ 7f47-soYg)
垢版 |
2020/01/14(火) 21:32:43.12ID:m9Mcjsqu0
>>10-11
ではお聞きいたしますが、セグメントレジスタ16ビット+レジスタ32ビットのペアで指定した先は何ビット空間ですか?
IA-32 アーキであるかぎり、どうあがいても32bit 空間ではないでしょうか?PAE 搭載であってもユーザーからみえるのはやっぱり32ビットなのでは?
0015デフォルトの名無しさん (ワッチョイ 7f01-qx2z)
垢版 |
2020/01/14(火) 21:40:51.41ID:RxBpnTJ90
多重仮想記憶ってプロセス毎に同じアドレス空間を提供するだけの話
(逆に単一仮想記憶はプロセッサのアドレス空間を分割してプロセスに提供する)
http://yougo.ascii.jp/caltar/多重仮想記憶
前スレの質問はアプリの話だからあんまり関係ないよ
オーバープロセスとか言うオレオレ用語はよくわからんけど…
オーバーコミットの話じゃないよね?
0016◆QZaw55cn4c (ワッチョイ 7f47-soYg)
垢版 |
2020/01/14(火) 21:41:08.27ID:m9Mcjsqu0
>>14
私の質問に回答できないのですね…
IA-32 では、それが PAE を搭載していたとしても、ユーザーが一度に扱えるのは32ビットどまりですよ

>>10
>CPU的には可能だけど
CPU的にも不可能です
0018デフォルトの名無しさん (ワッチョイ df2d-G18V)
垢版 |
2020/01/14(火) 21:57:06.89ID:jSZPoIDP0
今、話題になっているのは32bitOSの場合であって、IA-32 どうこうは微妙に違う話にも思えるのは内緒。
ということで話を戻すと、例えば32bit版Windowsには、OS管理外メモリとして8Gだの16Gだの扱うことができるRAM-DISKアプリがあるわけで。
32bitアプリでも、セグメントレジスタに正しいセレクタ値をセットできるのであれば、4G超のメモリ空間を扱える、と言えなくもない予感がする。
0027◆QZaw55cn4c (ワッチョイ 7f47-soYg)
垢版 |
2020/01/14(火) 22:31:10.88ID:m9Mcjsqu0
>>19
80386 に関していえば、その記述「386の時代から仮想アドレス空間は64TB」はわりとデマ的に流布されていることは理解します。手元の本
https://www.あまぞん.co.jp/dp/4756101305/
にも載っていました、確かに紛らわしい記述だとは思います
セグメントレジスタが指す「セレクタ値」は8バイトごとである、という事実から、セレクタ値のアドレスを意味する部分を16-2=14ビットとして、これと一般レジスタ32ビットとの直積から
46ビット=64T 分のアドレス空間が取れる、という計算だとは思いますが、この記述は不正確であり実情からは程遠いと思います

80386 では、セグメントレジスタが指すセレクタ値にひも付けられているセグメントベースはやはり32ビット空間の中なんです。32ビット空間の外に出ることはありません。
0028デフォルトの名無しさん (ワッチョイ df73-AxFo)
垢版 |
2020/01/14(火) 22:34:42.75ID:vjAz2zAO0
Pentium Pro の時代から64GiB扱えるわけですが
Windows Server系は32bitでも64GiB使える(ものもある)わけですが
問題はフラグメントなのでアドレス空間が広がれば解決するわけですが
0030◆QZaw55cn4c (ワッチョイ 7f47-soYg)
垢版 |
2020/01/14(火) 22:55:14.31ID:m9Mcjsqu0
>>29
セグメントレジスタが指すグローバルディスクリプタテーブル(GDT)中の一つ一つのエントリー(セレクタ値)に含まれる情報の配置状況が 80386 から変わっておれば、あなたのおっしゃることは理解できます
pentium を例にそれを示せますか?
0032デフォルトの名無しさん (ワッチョイ e101-muX5)
垢版 |
2020/01/15(水) 00:13:17.27ID:SlSlX/cQ0
仮想86EMSが使われていた頃
0036デフォルトの名無しさん (ワッチョイ 02a6-pREH)
垢版 |
2020/01/15(水) 13:56:26.73ID:+l1Z2xEr0
大きいメモリをできるだけ上位のアドレスで割り当てる
普通のメモリ割り当てなら下位のアドレスになるから
使い分けで断片化の影響を減らせる

VirtualAllocの MEM_TOP_DOWN
0038デフォルトの名無しさん (ワッチョイ bd02-otum)
垢版 |
2020/01/16(木) 23:59:28.03ID:n2KajW3z0
2つスレッドがあってサブの方を使わない時は
こんな感じで待機してるんだけどやっぱマヌケかな?w
その都度作った方がやっぱいいの?
while(flag){ Sleep(1000); }
0039デフォルトの名無しさん (ワッチョイ 02ad-nP71)
垢版 |
2020/01/17(金) 00:38:20.87ID:VVaP2eJK0
間抜けというか、完全に寝かせてしまえばいいのでは?
0041デフォルトの名無しさん (ワッチョイ 412d-6zBS)
垢版 |
2020/01/17(金) 01:14:24.13ID:rOjn9SwA0
>>38
それは簡単のように見えて、実は奥深いプログラミングのテーマの1つかもだけど。
問題がないのであれば、そのコードはマヌケでもないし悪くもないので、そのままでいいと思うよ。
0042デフォルトの名無しさん (ワッチョイ bd02-otum)
垢版 |
2020/01/17(金) 01:18:32.17ID:e4Iv2ZR10
>>39-41
環境はWindowsです。
スレッドは二つだけでサブも結構使ってるので
flagで管理して動かしたい時だけTRUEにしてる感じです。
特に動作に問題はないのでこのままでいいんでしょうかね。
0046デフォルトの名無しさん (ワッチョイ b957-otum)
垢版 |
2020/01/17(金) 02:43:46.95ID:gAZZjojh0
呼んでから起きるまでのタイムロスはどうでもいいのか
0049デフォルトの名無しさん (ドコグロ MM09-mQF2)
垢版 |
2020/01/17(金) 07:22:16.67ID:C1DTJTUYM
>>38
すげーマヌケに見える
スレッド作成する時間も惜しいなら>>48が言うようにイベントとかを使うべきだし、そうでないなら自分で言ってる通りその都度作った方がいい
そもそもサブともうひとつのスレッドとのやり取りはないんか?
0053デフォルトの名無しさん (アウアウウー Sa05-SNGL)
垢版 |
2020/01/17(金) 21:01:33.00ID:IvE1mrxVa
POSIXスレッドなら cond wait みたいなの使うのがよさげ
0054デフォルトの名無しさん (オッペケ Srd1-s5Rz)
垢版 |
2020/01/17(金) 21:27:33.03ID:fcTBGFJ8r
int main()
{
int array[100][10];


array[0][0] = 61;

printf("%d\n", *(int*)array ) ;



}
これなんでIntポインターにキャストしないとだめなん?
arrayでもポインターだから*つければ配列の先頭参照できないとおかしくね?
例えば
char array[] ="unko king";
だとしたら
%s とarrayで文字列表示できるじゃん
*(char*)arrayなんてしないでしょ?
0060蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ f901-eWjF)
垢版 |
2020/01/17(金) 22:01:25.25ID:90cOo2870
配列はアドレス値を動かせない。
配列とポインタではsizeofの値が違うことがある。
多重ポインタと多次元配列はメモリレイアウトが異なる。

よって配列はポインタではない。
0061デフォルトの名無しさん (ワッチョイ 4135-TOPI)
垢版 |
2020/01/17(金) 22:35:45.81ID:EE408Bd70
2次元配列は各行の配列が配置されてるメモリ上のアドレスのリストですか?
その場合、そのリストの要素であるアドレス値はどうやって取り出せますか?
https://i.imgur.com/Ibk3T9G.png
0062デフォルトの名無しさん (ワッチョイ 4135-TOPI)
垢版 |
2020/01/17(金) 22:43:50.57ID:EE408Bd70
この場合で言う、データの列の10,20,30というようなアドレス値を取り出す方法はありますか?
0064蟻人間 ◆T6xkBnTXz7B0 (スフッ Sd22-eWjF)
垢版 |
2020/01/17(金) 22:44:41.28ID:j19gqc7sd
1つの配列は連続した1つのメモリブロックになっている。二次元配列も1つのメモリブロック。配列の中身は実体。
配列名のみを指定すると配列の先頭へのポインタと互換になる。
0066デフォルトの名無しさん (ワッチョイ 4135-TOPI)
垢版 |
2020/01/17(金) 22:57:35.09ID:EE408Bd70
int array[10][2]はint[10]が2個あるという意味ですか?
0068デフォルトの名無しさん (ワッチョイ 4135-TOPI)
垢版 |
2020/01/17(金) 23:01:31.63ID:EE408Bd70
ではそのint[10]というのを行と呼ぶとした時、なぜこの実行結果では行間のアドレス間隔が行数になるのでしょうか。
https://i.imgur.com/CIV0x2N.png
0071デフォルトの名無しさん (ワッチョイ 02ad-A78j)
垢版 |
2020/01/18(土) 04:54:51.45ID:GHIm2HIn0
>>66
それはint[2]が10個だ。
0072デフォルトの名無しさん (ワッチョイ 8236-HLSl)
垢版 |
2020/01/18(土) 07:37:38.87ID:cLOUBKze0
>>54
おまえさんが array[0][0] = 61; と書いているように、
int は array[0][0] だ、ここ大事だぞ
array[0] は int ではないことを絶対に忘れるな

知ってのとおり
printf("%p", array); は
printf("%p", &array[0]); と解釈される
つまり int でないもののアドレスとなる

だから
printf("%d", *array); と実体化すると
printf("%d", *&array[0]); のように int でないものとなる
0075デフォルトの名無しさん (ワッチョイ 42d2-Jw1z)
垢版 |
2020/01/18(土) 15:14:27.29ID:DLgVDe3/0
そうじゃない
int [3] [4]が二個
って考える
そのあとint[3][4]について考えると
int[4]が3個ってなる
0076デフォルトの名無しさん (ラクッペ MMe5-pplk)
垢版 |
2020/01/18(土) 15:19:38.07ID:TdnAkHteM
>>74はそう言ってるのでは?
0081デフォルトの名無しさん (ワッチョイ 42d2-Jw1z)
垢版 |
2020/01/18(土) 18:17:52.93ID:DLgVDe3/0
これをfixとかでやるとますますわからなくなる
0083デフォルトの名無しさん (ワッチョイ 4135-pplk)
垢版 |
2020/01/18(土) 18:25:53.64ID:qr7I8bae0
重要なのはreturnの部分だけだしな
0085デフォルトの名無しさん (ワッチョイ a9d2-co1w)
垢版 |
2020/01/18(土) 20:39:04.60ID:et7QELfi0
再帰のコードを書いていて不思議な気分になるのは
なんで今書いているものを呼び出せるんだろうとか思っちゃうからかな
0094デフォルトの名無しさん (アウアウクー MM91-0c/Z)
垢版 |
2020/01/19(日) 02:29:28.66ID:ec7Q1zSDM
迷路のルート検索に再帰で書いた事あるけど10000ぐらいでスタックオーバーするので再帰をループで書き直した思いで
0099デフォルトの名無しさん (ワッチョイ a17b-WxMz)
垢版 |
2020/01/19(日) 08:26:41.57ID:bqsJmSpA0
>>85
関数の最初に「返り値と関数名と仮引数リスト」を書くでしょ。
それだけの情報があれば関数を呼び出すには十分なのだ。

…と、構造体名の前方宣言みたいな説明でケムに巻いてみる。
0105デフォルトの名無しさん (ワッチョイ 82a5-36M6)
垢版 |
2020/01/19(日) 10:42:13.41ID:IjeRNxme0
今の科学力では本物の数学的な再帰なんて実現出来ない、
だから、擬似再帰に留まってる

あとは実数マシンと整数マシンで、現状は離散的な整数マシン
実数をそのまま扱えるマシンすら存在してない
0111デフォルトの名無しさん (ワッチョイ a17b-WxMz)
垢版 |
2020/01/19(日) 15:32:55.94ID:bqsJmSpA0
>>105
「アナログコンピュータ」ってのがあって、俺がいじったのは
その都度回路を組んで信号を送って電圧計の針の振れを観察するんだが、
あれは一応、物理の限界の精度で実数をそのまま扱うマシンだね。

このスレッドで扱う対象じゃないけど。
0113デフォルトの名無しさん (アウウィフ FF05-otum)
垢版 |
2020/01/19(日) 16:44:13.95ID:ehZNNwbSF
>>54
そんなキャストはしてはいけない
お前の使い方が間違ってる
敢えて括弧を付けるが正しいのはこの二つだけ
printf("%d\n", *(array[0]));
printf("%d\n", *(*array));
0117デフォルトの名無しさん (ブーイモ MMcd-lkYm)
垢版 |
2020/01/19(日) 20:13:42.23ID:AxsWVwh/M
丸括弧の次に優先順位が高い角括弧ってだけの話じゃん
識別子に最優先くっついてガツンと先に作用するて意味じゃわかりやすい関数等の丸括弧を除いて最強という。
0120デフォルトの名無しさん (ワッチョイ 5f44-ET0W)
垢版 |
2020/01/22(水) 18:42:43.98ID:fnLfByOj0
ウィキのバスエラーの所に出ているサンプルをVisual Studioでコンパイルしたんですが
デバッガで見てもゴミ値が入るだけで特に警告もエラーも出さないので
バスエラーになっているかいないか分かりません。バスエラーを体験するにはどうすればいいですか?
コンパイルオプションで対応出来ますか?

https://ja.wikipedia.org/wiki/%E3%83%90%E3%82%B9%E3%82%A8%E3%83%A9%E3%83%BC
0121デフォルトの名無しさん (ワッチョイ 27b3-oAbd)
垢版 |
2020/01/22(水) 18:48:19.32ID:0ayd3B3Q0
x86はアラインメント不整合でも正常に読み書き出来る

AVXレジスタで
アラインメントが整ってないと使えない命令があるから
それを使えば例外発生する

MOVAPS など
0124デフォルトの名無しさん (アウアウウー Sa4b-AenA)
垢版 |
2020/01/24(金) 17:55:51.18ID:zcPs/H1Xa
>>123
それセグメンテーションフォルトでは?バスエラーになるCPUあるの?
0126デフォルトの名無しさん (ワッチョイ c701-/WoK)
垢版 |
2020/01/24(金) 19:16:51.65ID:JBJjeU6+0
そもそもバスエラーとかセグメンテーションフォールトは、CPUの例外等をOS側で適当にマッピングして、そう呼ぶOSがあるというだけだからOS依存。

x86/x64のCPUで>>123のような適当なメモリアクセスを行うと、CPUで例外#GPや例外#PFが発生する。UNIXならそれを状況に応じてセグメンテーションフォールト(SIGSEGV)やバスエラー(SIGBUS)として扱い、WindowsだったらEXCEPTION_ACCESS_VIOLATIONとして扱う。

アライメントがずれている時は、発生した例外#ACをバスエラー(SIGBUS)やEXCEPTION_DATATYPE_MISALIGNMENTとして扱う。
0134デフォルトの名無しさん (ワッチョイ 877b-qY3Q)
垢版 |
2020/01/25(土) 05:21:20.46ID:g3vROROv0
>>129
ARMのCPUでアラインメントの整合を怠ったら
偶数番地/奇数番地か、その2倍のアドレス値だったか
データの半分しか書き込まれなくて…って事態を目撃したことがある。

素朴なビットマップグラフィックのプログラムだったので
画面がシマシマになるのが文字通り目で見えた。
同じソースをx86系で実行すると期待通りの結果になるんだよ。
0136デフォルトの名無しさん (アークセー Sx7b-lpLI)
垢版 |
2020/01/25(土) 23:01:02.31ID:5aeLZw2zx
>>135
130です
130のように書くとバスエラーがなければ ip を破壊する可能性が高いし、最適化でコードが生成されないためのケアもされていて思慮深いコードですね…

しかしGASのオベランドは逆に見えてしまって…
0145デフォルトの名無しさん (ワッチョイ 9e8c-Witc)
垢版 |
2020/01/29(水) 07:41:04.40ID:X/jeBiHu0
大きいプログラムだと差は小さい。
0147デフォルトの名無しさん (アウアウウー Sa21-lBRq)
垢版 |
2020/01/29(水) 09:55:20.60ID:Ji+gdkxYa
もっと口を尖らせて
0152デフォルトの名無しさん (スプッッ Sdea-W2hh)
垢版 |
2020/01/29(水) 13:00:56.99ID:jPsoIsZ7d
一般的には
パラメーターとローカル変数とコール位置
などの情報をスタックに積んでいく

機械的にやるならこれしかない
ほぼ再帰と同じ処理になる

機械的にやらないなら場合によっていろいろな方法がある
0153デフォルトの名無しさん (アウアウウー Sa21-G6DY)
垢版 |
2020/01/29(水) 13:01:50.34ID:i1SX986la
>>149
太い枝の意味が分からんが、処理の順序が変わってしまうような変更はダメじゃね?
元の再帰のコードが必ずしもその太い枝の順とは限らないし、そもそも木構造とは限らないだろう。
0156デフォルトの名無しさん (ワッチョイ 6aa5-OeZ9)
垢版 |
2020/01/29(水) 14:08:59.70ID:0fI82nWR0
本物の再帰を実現可能なマシンなんて存在しない
全部はスタックに還元するしか無いんだから
再帰だなんだと騒いでも結局現行のスタックやアドレスでどうにかなるじゃん

本当に再帰でしか書けなくなるのは本物の再帰を実行可能な再帰マシンが出来てからの話
0157デフォルトの名無しさん (ワッチョイ ea02-L01+)
垢版 |
2020/01/29(水) 14:21:03.67ID:drvY0wlA0
ここでvoidくんの見解を聞いてみよう
0165デフォルトの名無しさん (ワッチョイ 5d35-MzNC)
垢版 |
2020/01/29(水) 19:14:11.95ID:ZN4TcJna0
再起を賭けた戦いが始まる!
0171デフォルトの名無しさん (アウアウクー MM7d-T0fr)
垢版 |
2020/01/30(木) 00:35:40.44ID:v1tZ7RqBM
puts("無限ループやん");
0174デフォルトの名無しさん (ワッチョイ b501-0Ybi)
垢版 |
2020/01/30(木) 07:15:03.02ID:Z7o7STkD0
mainを再帰させるべき。
0180デフォルトの名無しさん (ワッチョイ ea02-L01+)
垢版 |
2020/01/30(木) 20:50:43.10ID:XBwSjSkj0
何言ってんだこの馬鹿
0181デフォルトの名無しさん (ブーイモ MM8e-BGKF)
垢版 |
2020/01/30(木) 21:25:54.78ID:N4FezhNTM
俺はCPUの気持ちになってるよ。
「ちょ、おま、いまのとこほっといて、またそっち行くわけ?」
「え、戻れるように退避してる?ならいいけど……」
みたいな。
0183デフォルトの名無しさん (ワッチョイ 9e8c-Witc)
垢版 |
2020/01/31(金) 08:16:18.27ID:Kenfb4Kv0
AIは兵士をメカで作らない。たぶん生物兵器であろう。
ターミネータは嘘っぽい。エイリアンの方が本当っぽい。
0189デフォルトの名無しさん (アウアウウー Sa21-lBRq)
垢版 |
2020/01/31(金) 19:41:28.40ID:K802DmBra
ないんじゃないかな?
0193デフォルトの名無しさん (ワッチョイ 6a36-i7CI)
垢版 |
2020/01/31(金) 21:29:06.27ID:aVH6lH010
4GLとか使って「COBOLの範疇」で書いたつもりになってるやつらが
縁の下の力持ちを知らないのか無視しているのかどっちでもいいが
悪いが鼻で笑わせてもらってたね

俺が見てた事例ではCじゃなくアセンブラだったが
0195デフォルトの名無しさん (ワッチョイ eaad-Yjow)
垢版 |
2020/02/01(土) 06:47:44.88ID:PlRScEsI0
いや、まあ、CでCOBOLコンパイラ作る事は可能だろうけどね。
0196デフォルトの名無しさん (ワッチョイ 2a63-unxX)
垢版 |
2020/02/01(土) 11:17:42.72ID:yTeildyw0
何十年か前、GCCをベースにシステムを作った金融サイトがあることはある
GPLに触れないようライブラリは全部自前で用意してた
端末、サバクラのやり取り、サーバー間のデータ交換、全部Cで作ってた
0200>>187 (ワッチョイ 1163-+5rw)
垢版 |
2020/02/02(日) 01:07:46.29ID:8cBiUpXt0
みなさんありがとうございます
(googleもみると)あるにはありそうな気もするけど
やっぱあまりよくないのかな。強烈に速度がほしい。
0201デフォルトの名無しさん (ワッチョイ 1163-+5rw)
垢版 |
2020/02/02(日) 01:09:27.11ID:8cBiUpXt0
一方でIoTや組込的な決済プログラムは結構あるそうな。
C言語は安心して使えるから好きなんだよね。
0202デフォルトの名無しさん (ワッチョイ 2a63-unxX)
垢版 |
2020/02/02(日) 01:19:26.11ID:lNG3EL+m0
業務アプリケーションまで持って行くのが割と大変だと思う
例えばお金の計算させるにしても、概算で良いなんてことは普通無いし
そのライブラリ作っても、信頼性の検証もしないと行けなくなる
預金システムなら、安全堅牢なファイルシステムも工夫しないといけない
趣味や学習として作る分にはとても興味深いものがあるけれど
実用するには、それを得意とするミドルを利用する方が無難だと思う
0203デフォルトの名無しさん (ワッチョイ 1163-+5rw)
垢版 |
2020/02/02(日) 02:59:35.06ID:8cBiUpXt0
むむぅ
0204◆QZaw55cn4c (ワッチョイ 4a47-NwnA)
垢版 |
2020/02/02(日) 07:10:56.28ID:9jRHEnns0
>>202
>お金の計算させるにしても、概算で良いなんてことは普通無いし
今は uint64_t があって、ほとんどカバーできますよ
0215◆QZaw55cn4c (ワッチョイ 0aaa-NwnA)
垢版 |
2020/02/02(日) 09:51:31.13ID:Rn0kkYyt0
一銭二銭、あるいはそれ未満を扱うのなら、uint64_t を固定小数点で使えばいいだけでしょうね

>>205
>足し算引き算しかしないと思ってるの?
お金の計算なんて 9 割が加減乗除で済むのでは?
お金の計算で特に必要で特別な計算ってなにかありますか?
0218デフォルトの名無しさん (ワッチョイ 4a52-G6DY)
垢版 |
2020/02/02(日) 10:02:09.62ID:0Gqmr5420
>>215
例えば複利計算とかなら小数の計算の精度を厳密に規定しないと問題になるはず。専門外だから詳しくは知らないが、法律か金融機関ごとにでも決められているんだろう。
お前みたいにお金の計算はお小遣い帳をつけるくらいにしか使わないなら整数だけで問題ないだろうけど。
0220◆QZaw55cn4c (ワッチョイ 0aaa-NwnA)
垢版 |
2020/02/02(日) 10:37:05.52ID:Rn0kkYyt0
>>218
小数点以下の丸めでは、例えば「五捨五入」のもあるみたいですし
でも「厳密に規定」とかいうほどの難しい方法はないとおもいますよ、普通に固定小数点の整数で問題ないのでは?

>>219
10進演算、って普通の整数の加減乗除とどう違うのですか?
0222デフォルトの名無しさん (ワッチョイ e5f9-/fp1)
垢版 |
2020/02/02(日) 10:56:35.17ID:/IWX5gyF0
計算機ができる前は人が筆算してたんだよ、勿論10進で
それと合わなきゃならないの
だからBCDとかやるの

精度が確保されてればより正確なんだけど、「本当はこっちの方がより正確です」はダメなんだわ
それまでと変わっちゃダメなの
0224◆QZaw55cn4c (ワッチョイ 0aaa-NwnA)
垢版 |
2020/02/02(日) 11:00:28.10ID:Rn0kkYyt0
>>221
はい、8086 AAA, AAD, AAM, AAS 等の10進補正命令は知っていますが、今から考えても何故にアンパック形式10進なる形式を作ったのか、普通に2進整数+固定小数点では何故だめだったのか、納得できる理由をずっと探しているのです
0225◆QZaw55cn4c (ワッチョイ 0aaa-NwnA)
垢版 |
2020/02/02(日) 11:04:52.03ID:Rn0kkYyt0
>>222
つまり「人の作業との突合せ・検算のために10進演算や BCD があった」ということですか?
でも、そうであっても普通に 2 進整数+固定小数点の演算で問題ないと思うのですが

>>223
BCD で出来る、ということを知りたいのではなく(なぜならばそれはすでに知っているから)、なぜ BCD が必要だったのか、という理由が知りたいのです
0226デフォルトの名無しさん (ワッチョイ a902-vKSH)
垢版 |
2020/02/02(日) 11:23:45.02ID:85W5AYJA0
金融業界の習わしの発端について知りたいなら、それ関係のスレで聞けばいいんじゃね?
金融関係システムが10進で計算してるのは常識なんだし要求要件なんだから
それに疑問挟んでごねるプログラマーにはシステム開発発注したくねぇなぁ
0230デフォルトの名無しさん (ワッチョイ 39d2-fhCF)
垢版 |
2020/02/02(日) 12:37:44.03ID:w7N5c9rM0
そもそもお金に0.1円とかないから四捨五入は必要ない
0231デフォルトの名無しさん (ワッチョイ a612-i7CI)
垢版 |
2020/02/02(日) 12:43:11.07ID:SWo7Ruqh0
固定か浮動かって問題じゃない
10進の0.1が2進では0.00011001100110011001100110011...という循環小数になり
金の話では出てこないはずの誤差が出るって話だ

最小単位が1円のときは10銭、10銭のときは1銭が2進演算では正しく扱えない
最小単位をいくらにしても同じことというのをキリがないと言ったんだ
0235デフォルトの名無しさん (ワッチョイ 39d2-fhCF)
垢版 |
2020/02/02(日) 12:51:06.34ID:w7N5c9rM0
誤差がでてもそれよりすごく大きい数で四捨五入するんだから同じだろ
0239デフォルトの名無しさん (ワッチョイ 39d2-fhCF)
垢版 |
2020/02/02(日) 13:00:47.13ID:w7N5c9rM0
10進数で手動で計算するときと同じ誤差のでかたじゃないと駄目なんじゃないか?
0240デフォルトの名無しさん (ワッチョイ 39d2-fhCF)
垢版 |
2020/02/02(日) 13:04:59.05ID:w7N5c9rM0
問題なのは四捨五入じゃなくて
2進数だと0.1が表示できないってことじゃないのか?
10進数なら0.1から0.9まで全部表示できるけど
0242デフォルトの名無しさん (ワッチョイ 89b3-x67y)
垢版 |
2020/02/02(日) 13:32:17.04ID:D8WvcGqJ0
結果の型とか四則演算方法とか単純な話じゃなくて
金融系の計算て数学やコンピュータの世界の常識とは違う計算をするんだよ
式自体からしておかしくて詐欺っぽいのもある

>>226の言うとおり
0245◆QZaw55cn4c (ワッチョイ 0aaa-NwnA)
垢版 |
2020/02/02(日) 13:39:53.93ID:Rn0kkYyt0
>>226
>金融関係システムが10進で計算してるのは常識なんだし要求要件なんだから
金融関係の業務でシステム内部表現まで10進表現(BCD等)にせよ、とする理由は、あなたはどのように推測しているのですか?
私は、金融関係であっても多桁長演算+固定小数点で顧客の要望は十分に満たされると考えますが。
金融系発注側も単に「double は使わないで」くらいの意味でしかないのでは?そして現実の実装も多桁長演算+固定小数点だったりするのでは?

あなたの >>226 の記述には合理性を感じることができません
0246◆QZaw55cn4c (ワッチョイ 0aaa-NwnA)
垢版 |
2020/02/02(日) 13:43:24.73ID:Rn0kkYyt0
>>227
その場合、小数点以下N桁目、あるいは余裕をみて N+4桁目くらいを考えて
10^(N+4) 倍して整数1 と内部表現 10^(N+4) を一対一対応とすれば整合性はとれるのでは?(これを固定小数点といいます)
0247◆QZaw55cn4c (ワッチョイ 0aaa-NwnA)
垢版 |
2020/02/02(日) 13:45:56.70ID:Rn0kkYyt0
>>231
10進の1 の内部表現を 10, 10進の2 の内部表現を 20, 10進の3 の内部表現を 30 …、10進の0.1 の内部表現を 1
という固定小数点にすれば、 お金の計算のような演算では十分なのでは?
0249デフォルトの名無しさん (スッップ Sd0a-x67y)
垢版 |
2020/02/02(日) 13:56:18.00ID:gkoi3ncld
値を保持するだけなら何でも良いよ
保持出来るだけの精度が有れば
固定小数点だろうが整数部と小数部だろうが
10進浮動小数点だろうが
BCD整数だろうが

計算の方法、式、丸め方が特殊で
途中の型も特殊だったりする
これに多くの評価が必要

だから
結果の型だけを語るのはトンチンカン
0251デフォルトの名無しさん (スッップ Sd0a-x67y)
垢版 |
2020/02/02(日) 14:06:26.86ID:gkoi3ncld
手間とか効率とかの問題じゃなくて
値の一貫性の問題

最終的に得る値が整数だとしても
途中の計算精度や丸め方によって誤差が微妙に異なり
結果1円の誤差になりました
じゃダメなの
0253デフォルトの名無しさん (スッップ Sd0a-x67y)
垢版 |
2020/02/02(日) 14:12:15.30ID:gkoi3ncld
途中の計算精度があれば良いってわけじゃない
100桁精度でも無限精度でもダメ

決まってるロジック通りの結果を返さなきゃダメ
数値計算と思わない方が良いかも
0256デフォルトの名無しさん (ワッチョイ 39d2-fhCF)
垢版 |
2020/02/02(日) 14:17:57.04ID:w7N5c9rM0
わかったぞ
十進数だと0.5円になるときには四捨五入すると1円になるけど
2進数の時0.4999999999円みたいになった時0円になっちゃうってこと?
0257デフォルトの名無しさん (ワッチョイ 39d2-fhCF)
垢版 |
2020/02/02(日) 14:20:40.80ID:w7N5c9rM0
0.1円の誤差をなくすために0.1円以上掛けたら意味なくない?
0261デフォルトの名無しさん (ワッチョイ 7dda-unxX)
垢版 |
2020/02/02(日) 14:32:20.39ID:Wawdq7250
つまり
10進で計算するのは,10進で計算せよというロジックがあるからであって,循環小数を避けるためではない
ということか
そういうことなら誰も文句ないんじゃね?
0262デフォルトの名無しさん (ワッチョイ b501-0Ybi)
垢版 |
2020/02/02(日) 14:37:37.76ID:mzCY/+E00
https://ideone.com/HdUvEa
こういうことでは。
0263デフォルトの名無しさん (ワッチョイ ea2c-KoMo)
垢版 |
2020/02/02(日) 14:44:42.42ID:ceem9FS20
>>256
0.5 は、2進数の1/2 だから、割り切れる。
0.25 は、2進数の1/4 だから、割り切れる

だから、0.5 + 0.25 = 0.75 も、2進数で割り切れる

でも、0.1 は循環小数になるから、
0.1 * 5 != 0.5
これは不一致!

情報処理の初級資格の内容w
これを勉強していない人は、プロじゃない!

つまり、お金の計算では、誤差のある浮動小数点演算は使えない!
Decimal を使う
0264デフォルトの名無しさん (ワッチョイ b501-0Ybi)
垢版 |
2020/02/02(日) 14:48:07.68ID:mzCY/+E00
もういいわ。
おまえ等のプログラムじゃ金の計算できないわ。
エクセル使う。
0266デフォルトの名無しさん (ワッチョイ b501-0Ybi)
垢版 |
2020/02/02(日) 15:07:37.05ID:mzCY/+E00
一番上のお姉ちゃんがプリン食べれないやつか。
0267◆QZaw55cn4c (ワッチョイ 0aaa-NwnA)
垢版 |
2020/02/02(日) 15:08:31.39ID:Rn0kkYyt0
>>250
>一回計算する毎にいちいち2進に戻すのにそんな手間かけるより10進演算器用意する方が効率的ということ

いいえ、値の保持と計算はずっと 2 進+固定小数点のままで行い、人間に値を見せるときにはじめて 2 進→ 10 進変換を実施します

>途中の計算精度や丸め方によって誤差が微妙に異なり

お金の計算における丸め方法の規則は、四捨五入にしても五捨五入にしても 10 進法整数に親和的なのだから、多桁長表現+固定小数点で表現すればかなり厳密に扱えるとおもいますよ
0268◆QZaw55cn4c (ワッチョイ 0aaa-NwnA)
垢版 |
2020/02/02(日) 15:11:06.99ID:Rn0kkYyt0
>>263
>Decimal を使う
Decimal の内部表現方法に興味がありますね、まさか、今でも BCD だとは思えませんが(x86_AMD64 でも関連ニーモニックは消えました)、もしかして?!
0270デフォルトの名無しさん (ワッチョイ b501-0Ybi)
垢版 |
2020/02/02(日) 15:22:25.38ID:mzCY/+E00
>>269
どうやるんだよ。
0272デフォルトの名無しさん (ワッチョイ 39d2-fhCF)
垢版 |
2020/02/02(日) 15:30:01.89ID:w7N5c9rM0
>>270
0.1は1番目に点がある1だから1と1で表せる
0273デフォルトの名無しさん (ワッチョイ 39d2-fhCF)
垢版 |
2020/02/02(日) 15:36:23.54ID:w7N5c9rM0
少数点以下の整数と小数点以上の整数でも表せる
0275デフォルトの名無しさん (ワッチョイ 39d2-fhCF)
垢版 |
2020/02/02(日) 15:40:29.20ID:w7N5c9rM0
Cのライブラリーにいっぺんに計算されるやつがある
0277◆QZaw55cn4c (ワッチョイ 0aaa-NwnA)
垢版 |
2020/02/02(日) 15:45:20.77ID:Rn0kkYyt0
>>267
>>いいえ、値の保持と計算はずっと 2 進+固定小数点のままで行い、人間に値を見せるときにはじめて 2 進→ 10 進変換を実施します

>>271
>丸めは計算ごとに適用されるんだよ、馬鹿。

そうか、確かに私にも落ち度がありました、2進整数+固定小数点ならば、丸める桁まで 10 で割り続けて余りを求める必要がありますね、これはほとんど2進→10進変換といっていいですね
しかし、全桁を 2進→10進する必要はなく、丸める桁までで 2 進→ 10 進するだけでいい

x86-AMD64 では 8086 時代の BCD 補正命令は全部なくなってしまったことから考えても、「Decimal」型は整数+小数点位置なんじゃないかな…
0280デフォルトの名無しさん (ワッチョイ 39d2-fhCF)
垢版 |
2020/02/02(日) 16:27:09.95ID:w7N5c9rM0
>>279
標準ライブラリーだからポータブル
0288デフォルトの名無しさん (ワッチョイ 6aa5-OeZ9)
垢版 |
2020/02/02(日) 19:18:27.60ID:825maVGz0
>>219
そりゃーC言語よりも古いCOBOLがあるもん
銀行案件は全部そっち任せだろ

だからそういうライブラリを発達させる必要が無かった

COBOL最盛期がいつかは知らんがきっとIBM最高益の時代あたりだろ
0291デフォルトの名無しさん (ワッチョイ a612-i7CI)
垢版 |
2020/02/02(日) 20:55:57.98ID:SWo7Ruqh0
>>285
まあそういうことだ
おまえさんにとっての関心事に関係するかどうかは知らん

さっき言ったとおり、俺は保育士じゃないんで他人ん家の坊ちゃん嬢ちゃんは扱えない
プラレールだかリカちゃんだかの相手はしてられない
0293デフォルトの名無しさん (スッップ Sd0a-x67y)
垢版 |
2020/02/02(日) 23:53:32.36ID:gkoi3ncld
タンジェントもべき乗も遅いけど
使う頻度的には割り算より圧倒的に少ないし
見るからに遅そうだから気を付けるだろう

割り算や余りは手軽に使いがちで遅い
例えばSkylakeでは加減乗算の100倍くらいかかる

割り算と余り両方使うなら
以下のように書いた方が良い

c=a/b;
d=a-c*b;

除算命令を2回呼ぶことはなくなるし
bが定数なら乗算に置き換えてくれる
ライブラリだとbが定数でも除算命令を使ってしまうと思う
0294デフォルトの名無しさん (ワッチョイ ea79-/fp1)
垢版 |
2020/02/03(月) 07:43:30.26ID:0n0692Cx0
除算が遅いってのは常識だな
浮動小数点数演算の話だが2回以上同じ数で割るなら逆数を取っておいてそれを掛けろと習ったわ
そもそも浮動小数点数演算が圧倒的に遅いから可能な限り整数型で済ませろとも
0296デフォルトの名無しさん (ワッチョイ 89b3-x67y)
垢版 |
2020/02/03(月) 08:20:37.59ID:e9E2NTEb0
浮動小数点が圧倒的に遅いかどうかはCPU次第
PCなら速いし
CPUに命令がなければソフトウェア実装になるので遅い
この場合、当然floatよりdoubleの方が遅い
(floatもdoubleも32bitの環境もあるけど)

浮動小数点の割り算は
定数であれば1個でも逆数をかける方が良い
x / [定数] と x * (1.0/[定数])
で値が異なることがあるため、最適化してくれない場合がある
0298デフォルトの名無しさん (ワッチョイ 89b3-x67y)
垢版 |
2020/02/03(月) 08:27:41.12ID:e9E2NTEb0
浮動小数点が圧倒的に遅いといっても
使い所では使った方が良い
速度が関係ない所では
無理やり整数演算に直すデメリットの方が多い

>>297
除算が圧倒的に遅いから>>293でもほぼ同じ
定数であることまで考えると>>293の方が良い
0300デフォルトの名無しさん (ブーイモ MMc9-BGKF)
垢版 |
2020/02/03(月) 09:47:15.11ID:x3IhE4UHM
浮動小数点の除算はニュートン法使うからそれほど遅くない。乗算の数倍程度。
整数の除算は基本的に高速化できないのでだいぶ遅い。
整数でも定数で除算すると逆数の乗算プラス補正で実装されるので速い。
アセンブリ出させて見てみるべし。
0302デフォルトの名無しさん (スッップ Sd0a-x67y)
垢版 |
2020/02/03(月) 12:43:23.75ID:jOrmfTQLd
instlatx64でSkylakeの64bit命令の
スループットを見ると

IDIVはフルビットで95クロック
ADDは0.33, IMULは1クロック
AVX命令だと乗算や積和も0.5クロック

遅くて使われなくなったFSINが130クロックだから
遅さがわかると思う

コンパイラはなるべくこの命令を使わないで済むように
また使う回数をなるべく減らすよう工夫するんだけど
標準ライブラリの場合はIDIVを無条件で使ってしまう
0303デフォルトの名無しさん (スッップ Sd0a-x67y)
垢版 |
2020/02/03(月) 12:49:05.54ID:jOrmfTQLd
浮動小数点だと差はちょっと縮まる

加減乗算と積和は0.5クロック
除算は倍精度スカラーで4クロック、ベクタで8クロック

倍精度浮動小数点の積和演算が4個同時に出来る命令が
毎クロック2個ずつ実行出来るのに
ただの整数除算1個が95クロックもかかる

遅さがわかるでしょ?
0305デフォルトの名無しさん (アウウィフ FF21-0Ybi)
垢版 |
2020/02/03(月) 13:50:54.22ID:62FLJlSTF
パイプラインですね判りますω
0308デフォルトの名無しさん (ワッチョイ 5d35-MzNC)
垢版 |
2020/02/04(火) 01:59:00.38ID:SgzhJHen0
今どき役に立つ場面は少ないけどこういうの楽しいな
0309デフォルトの名無しさん (ワッチョイ 7d01-0Ybi)
垢版 |
2020/02/04(火) 06:57:32.95ID:j6eziqdx0
以下のプログラムのb_testにはなぜ0x3322ではなく、0x4433が代入されるのでしょうか?

#include <stdio.h>

typedef struct
{
unsigned char a;
unsigned short b;
} TEST_2;

int main(void)
{
unsigned char bytes[] = { 0x11, 0x22, 0x33, 0x44 };
TEST_2* pMemoryDevice = (TEST_2*)bytes;
unsigned char a_test = pMemoryDevice->a;
unsigned short b_test = pMemoryDevice->b;

printf("0x%X\n", b_test);

return 0;
}
0310デフォルトの名無しさん (ワッチョイ 151a-unxX)
垢版 |
2020/02/04(火) 07:04:32.35ID:/MaewKoE0
>>309
aliasing rule 違反やアライメント違反の可能性などにより未定義動作なので 0x4433 になるとも限りません。
対象の環境を限定して何が起こっているか知りたいならアセンブリを出力してみるのがいいと思います。
0311デフォルトの名無しさん (ワッチョイ 7d01-0Ybi)
垢版 |
2020/02/04(火) 07:14:24.84ID:j6eziqdx0
>>310
アセンブリ出力してみてみたんですが、そもそもなぜそのようになるのかが疑問です。
この場合、"0x11"がBYTE, "0x22, 0x33"がWORDのバイト配列を構造体で表したい場合どうすればいいのでしょうか?
0315デフォルトの名無しさん (ワッチョイ 7d01-0Ybi)
垢版 |
2020/02/04(火) 08:03:48.58ID:j6eziqdx0
#pragma pack(1)を使うことによって解決しました!
ありがとうございます。
今まで結構バイト配列を構造体に割り当てるってことをしてきましたが、気づきませんでした、、
0319デフォルトの名無しさん (アウアウウー Sa21-lBRq)
垢版 |
2020/02/04(火) 15:53:52.78ID:MHG3R7Tga
ネットワークやファイルから読んだバイナリの塊を構造体に当て嵌めて解析を楽にするなんてことは、よくやる。

まあ、本当だったらバイナリから読んで構造体側にコピーするような関数を作った方が良いんだろうけどね。(またはPerlのunpackみたいなやつ)。
0320デフォルトの名無しさん (アウアウウー Sa21-lBRq)
垢版 |
2020/02/04(火) 16:00:02.30ID:MHG3R7Tga
そういえばsscanf()と似たような感じでバイナリとフォーマットと可変引数で代入先ポインタ並べて渡すとバイナリ側から読んで値入れてくれるようなPerlのunpack風な関数も作ろうと思えば作れるね。
0327デフォルトの名無しさん (アークセー Sxbd-nHCh)
垢版 |
2020/02/04(火) 22:02:12.09ID:xaJSTMSvx
僕のはリトルエンディアン
0332デフォルトの名無しさん (アウウィフ FF9b-VM48)
垢版 |
2020/02/05(水) 19:45:58.28ID:2rKdW1EcF
>>317 みたいなのも居る訳で
0335デフォルトの名無しさん (ワッチョイ d735-oJhu)
垢版 |
2020/02/05(水) 23:49:56.70ID:V2ceD5vC0
どんだけかまって欲しいの。
0337デフォルトの名無しさん (ワッチョイ b7b3-pfqa)
垢版 |
2020/02/06(木) 07:27:32.13ID:/W9iMVJD0
問題なくアクセス可能
例外発生
ズレてアクセス

性能以外の振舞いこのくらいは経験がある
他にあるかな?

ズレてアクセスされるCPUは
問題が分かりにくく厄介
0342デフォルトの名無しさん (ワッチョイ d735-oJhu)
垢版 |
2020/02/06(木) 19:36:45.30ID:OKCzzxK90
>>334
アライメントは何?
0343デフォルトの名無しさん (ブーイモ MM1b-2t1T)
垢版 |
2020/02/06(木) 21:11:00.88ID:yuUE1QQrM
定義しただけじゃ構造体のアライメントを算出してくれないコンパイラがあるんだなー
union { ;static{ al,ah;ググってて遭遇ちょっと新鮮な驚き
実体を作らず、ポインタキャストでのみ利用してっとグチャゲチャなアドレスを引っ張ってくるみたいな
0344デフォルトの名無しさん (ラクッペ MMcb-oJhu)
垢版 |
2020/02/07(金) 17:54:26.07ID:flffdOy2M
AAと出力されて欲しいのですがなぜ4バイトになるのでしょうか
https://ideone.com/0v6mPr
0345デフォルトの名無しさん (ブーイモ MM1b-CFeS)
垢版 |
2020/02/07(金) 18:46:29.60ID:ZbQSjjsiM
charを引数として渡すとintに格上げされる。
charがこの環境ではsigned charらしいので、0xAAはマイナス扱いされる。
intに格上げするときに符号拡張されて上位24ビットが1で埋められる。
0346デフォルトの名無しさん (ラクッペ MMcb-oJhu)
垢版 |
2020/02/07(金) 19:07:15.66ID:OIss2gZ6M
>>345
ありがとうございます
そもそもunsignedつけ忘れてました
0348デフォルトの名無しさん (ワッチョイ d735-oJhu)
垢版 |
2020/02/07(金) 19:54:01.80ID:loJf6Qnv0
なんもわかってなくて草
0349デフォルトの名無しさん (ワッチョイ 571d-uqPE)
垢版 |
2020/02/07(金) 22:52:47.29ID:GxNDg+Fe0
実務経験1年で月収80万稼げるエンジニアになった理由
https://www.youtube.com/watch?v=DrbbyGsHQic
意識が低いエンジニアこそフリーランスになれ
https://www.youtube.com/watch?v=nSEaAJlgjbQ
フリーランスエンジニアの週3労働ってどんな感じ?
https://www.youtube.com/watch?v=8yjoDCdbzMc
ぼくがスキルのない社畜ならこうやって脱する
https://www.youtube.com/watch?v=aae8xxbUlMM
初めて人を雇ったらもう二度とサラリーマンをやりたくないと思った話
https://www.youtube.com/watch?v=U0OCGRVLFsM
プログラミングは文系でも余裕で出来ます!理由を現役プログラマーが解説
https://www.youtube.com/watch?v=iBOeiSKBIW8
貧乏人こそ社会不適合者
https://www.youtube.com/watch?v=O3BT72BIBJI
元ド貧乏が教える】貧乏を抜け出すための2つの考え方
https://www.youtube.com/watch?v=IRrCgTy3ckc
より良いオファー貰ってるのに転職しないとか何考えてるの?
https://www.youtube.com/watch?v=i0J6uRhlj7o
0351デフォルトの名無しさん (ワッチョイ ff8f-mb93)
垢版 |
2020/02/10(月) 02:19:19.98ID:VQtOVB2v0
質問させてください。

ある.dllを作成するCのプロジェクトがあるのですが、開発環境をeclipseからvisualstudioへ移行しました。
このdllを使用する別のCのプロジェクトがあるのですが、eclipseでビルドしたdllは使用できていたのですが、visualstudioでビルドしたdllを使用しようとすると未解決エラーでビルドできなくなってしまいました。
作成した.libファイルをdumpbinで確認すると、eclipseでビルドしたものには関数名にいろいろ装飾(@とかcdeclとか引数とか)がついているのですが、visualstudioでビルドしたものには装飾がついていませんでした。
この違いが原因だとは思うのですが、visualstudioでも関数名に装飾がついたlibファイルを作成するにはどうすればよいのでしょうか?
0352デフォルトの名無しさん (ワッチョイ ff8f-mb93)
垢版 |
2020/02/10(月) 03:14:01.48ID:VQtOVB2v0
>>351ですが、dllを使用する側のプログラムに「c++コードとしてコンパイル」を設定していたせいで読み込めなくなっていることがわかりました。
質問内容についても、CとC++の違いについて調べていけば良さそうとわかったので、自力で調べてみようと思います。
ありがとうございました。
0353デフォルトの名無しさん (ワイーワ2 FFdf-VM48)
垢版 |
2020/02/10(月) 16:25:12.95ID:TGcYvj29F
回答しようと思ったけど自己レスが付いていたので控えます。
自分で調べて下さい。良い心がけです。
0354デフォルトの名無しさん (ラクッペ MMcb-oJhu)
垢版 |
2020/02/10(月) 17:30:05.64ID:sdl18RcGM
ゴミレスすんな
0355デフォルトの名無しさん (ワッチョイ ff8f-mb93)
垢版 |
2020/02/11(火) 03:20:33.73ID:ShQqPfw10
>>352ですが解決しました。

c++ではマングリングが行われるためソースコード上の関数名とコンパイル後の関数名が異なる
一方cコードとしてコンパイルしたライブラリはソースコード上の関数名がそのままコンパイル後の関数名になる
この違いが原因で、c++コードとしてコンパイルされた呼び出し側プログラムではライブラリの関数を参照できなくなってしまっていました
解決策はc++側の関数宣言にextern "c"をつけること。もちろんヘッダーファイルなのでinclude文をextern "c"で囲んでしまうことでした。

たまに見かけるextern "c"ってこういうことだったんですね。お騒がせいたしました。
0358デフォルトの名無しさん (アウアウウー Sac3-Oc5d)
垢版 |
2020/02/14(金) 20:51:49.51ID:OVlsC64Va
うまいよね
0363デフォルトの名無しさん (ワッチョイ 12ad-ESCD)
垢版 |
2020/02/16(日) 16:37:12.41ID:e+hZCGM40
そしてフラグが立つと
0365デフォルトの名無しさん (ワッチョイ ffc5-IdAT)
垢版 |
2020/02/19(水) 12:02:30.63ID:/eqfvSaW0
C言語関係ないんだけど、並行処理と並列処理ってさ
論理的にシミュレートするのが並行処理で、物理的にパソコンを二台並べるのが並列処理だよね?
並行と並列と混合してる記事がネットに多くてもやもやするんだけど
0366デフォルトの名無しさん (ワイーワ2 FFdf-IPX/)
垢版 |
2020/02/19(水) 12:03:31.56ID:cGULNOoWF
違う
0382デフォルトの名無しさん (ワッチョイ 6f8c-L8iH)
垢版 |
2020/02/19(水) 20:59:46.46ID:AEvYKzFT0
クラウドとクラスタ?
0383デフォルトの名無しさん (ワッチョイ e31d-CqDg)
垢版 |
2020/02/19(水) 21:35:58.84ID:HsCXonKI0
【収益報告】実働月10hでも大金稼ぐ方法を解説【年収6,000万】
https://www.youtube.com/watch?v=o2ISWP-VZsw
年収3000万円以上になってはじめて理解すること【拝金からの脱却】
https://www.youtube.com/watch?v=nLEfFj2jL3A&;t=182s
貧乏人に発言権とかないからwww
https://www.youtube.com/watch?v=BLGxunoO7X0&;t=32s
【日常】実働20hで700万円稼ぐインフルエンサーの生活を公開
https://www.youtube.com/watch?v=YhX6Quus6lY&;t=232s
皆正しいと思ってるけど実は間違ってる上司のクソ発言5選
https://www.youtube.com/watch?v=-M0BICeFSFg
月収700万円の僕が大学生のうちに身につけておきたかったスキル4選
https://www.youtube.com/watch?v=PZ2YYhCryAQ
0385デフォルトの名無しさん (ワッチョイ cf8f-zycr)
垢版 |
2020/02/19(水) 23:45:11.13ID:i+U4mRBo0
とりあえずこういう時は日本語で考えるのやめようぜ。並列も並行も海外で生まれた概念を翻訳しただけなのでそのまま考えると帰って混乱する。

concurrentは同時。これは時間的な概念。
parallelは並存。これは物理的な概念。

つまり同時に処理するものはなんでもconcurrentな処理と言っていいわけだけど、その中でも処理するcpuも別れてるものがparallelな処理。
0386デフォルトの名無しさん (ワッチョイ 83f9-IdAT)
垢版 |
2020/02/20(木) 10:12:07.92ID:znahik0W0
>>385
TSSはconcurrentだけどparallelじゃない(ミクロにみればconcurrentでもない)
デュアルコアはparallelだしconcurrentでもある
でいい?

「TSSは並行、デュアルコアは並列」の使い分けを肯定しないってことでいいのかな
0387デフォルトの名無しさん (ワッチョイ 7353-Nz9x)
垢版 |
2020/02/20(木) 10:53:44.93ID:yQ1/Uz2n0
TSS? 全然関係ないぞ
ユニプロセッサの場合CPUは並行処理で動くが
端末やチャネルは並列だ
マルチプロセッサでもTCASにCPUアフィニティがかかっている場合まであるしな
0388デフォルトの名無しさん (スップ Sd1f-frFT)
垢版 |
2020/02/20(木) 11:39:06.77ID:qJHTNx44d
ここで定義をまとめても会話する人全員が共有しないと意味がない

誤解の可能性があるなら
「平行」「並列」なんて言葉に頼らず
具体的に語らないと
0395デフォルトの名無しさん (ワッチョイ 2335-wHG4)
垢版 |
2020/02/20(木) 19:00:52.93ID:Pb7WanUc0
何だこの煽りカス
0396デフォルトの名無しさん (ワッチョイ 83f9-IdAT)
垢版 |
2020/02/20(木) 20:47:43.91ID:znahik0W0
TSSは関係無いの?
>369の
>ユニプロセッサでプリエンプティブは並行処理
ってTSSのことじゃないの?

並行/並列、concurrent/parallelはどっちでもいいよ
単語を置き換えてるだけだ

>365は"「TSSは並行、デュアルコアは並列」と使い分けるもんだ"と言ってるように見える
>368,369はそれを肯定してる
それ本当かなぁどの程度浸透してるのかなぁ、って興味があるだけ
0402デフォルトの名無しさん (ワッチョイ 7353-Nz9x)
垢版 |
2020/02/21(金) 07:42:26.05ID:ZYgKzVvr0
>>396
マルチプロセッサでプリエンプティブはどっちだと思う?
当たり前だがTCASはユニでもマルチでも動くんだが
それでもTSSは並列なのか並行なのかって気になるのか?
どっちでもいいって主張には賛成しかねるな

>>398
「複数のユーザー」、「複数の利用者」と至る所に書いてあるね
ダム端末は確かに昔のことだが並行か並列かという話には関係ない

「頭がおかしい」、「老害」、「知ったか」
どうも前スレあたりから変なのが常駐してるようだな
うっかり構わないように気をつけなきゃ
0403デフォルトの名無しさん (アウアウクー MM07-Z4Um)
垢版 |
2020/02/21(金) 08:05:59.84ID:UH7lBBhFM
パンじゃないご飯だ
0405デフォルトの名無しさん (アウアウウー Sae7-6k5J)
垢版 |
2020/02/21(金) 11:37:48.20ID:TKnLlA6xa
頭がおかしい知ったかのクルクルパーの老害ですが、呼びましたか?
0406デフォルトの名無しさん (ドコグロ MM87-P13C)
垢版 |
2020/02/21(金) 12:23:48.46ID:GK8/JCh9M
>>402
> ダム端末は確かに昔のことだが並行か並列かという話には関係ない
だからその定義だと関係ないとしても、TSSの定義はそれだけじゃないでしょ
話の流れから見てダム端末とかチャネルとか言い出す方が狭すぎって話な

> どうも前スレあたりから変なのが常駐してるようだな
自己紹介乙w
0408デフォルトの名無しさん (アウアウウー Sae7-6k5J)
垢版 |
2020/02/21(金) 18:13:41.02ID:TKnLlA6xa
С言語
0410デフォルトの名無しさん (アウアウウー Sae7-6k5J)
垢版 |
2020/02/21(金) 19:15:01.45ID:TKnLlA6xa
クルクルパーもよろしく
0412デフォルトの名無しさん (ドコグロ MM87-P13C)
垢版 |
2020/02/21(金) 19:34:44.69ID:GK8/JCh9M
>>404
> 「頭がおかしい」、「老害」、「知ったか」
> どうでも良いが、これを連呼したい奴が常住しているようだ

>>409
> C言語は 「頭がおかしい」、「老害」、「知ったか」 な人が使う言語
> であってますか?

わざわざ自己紹介ですか?
0418デフォルトの名無しさん (ワッチョイ d9ca-8l36)
垢版 |
2020/03/24(火) 03:27:56.26ID:1SA4Lz1I0
こんなマクロ M1 M2 を作りたい。
int a[] = M1( test1, M2(a), M2(b), M2(c));
 ↓
int a[] = { sizeof(test1), offsetof(test1, a), offsetof(test1, b), offsetof(test1, c), -1 };

とりあえずこう定義したけどやっぱりだめだった。M2 の st が展開されない。
#define M1(st, ...) { sizeof(st), __VA_ARGS__, -1 }
#define M2(f) offsetof(st, f)

うまい方法があったら教えてください。
コンパイラは gcc です。
M1 に構造体名を与えたら M2 でもその構造体名を展開したいというのが要点です。
0420デフォルトの名無しさん (ワッチョイ 368c-m3pd)
垢版 |
2020/03/28(土) 14:30:29.95ID:xRZxfw9h0
int ***A;
の意味は何ですか。
0425デフォルトの名無しさん (ワッチョイ a9ca-Emx9)
垢版 |
2020/03/28(土) 19:48:29.31ID:dAv8M8Ft0
言語仕様的には何個でもいいんじゃね。
でもただ * を並べるだけじゃなく、const や volatile なんかと組み合わせるとここに居る連中でも頭を悩ませることになりそうだ。
0427デフォルトの名無しさん (ワッチョイ 12a5-EdqZ)
垢版 |
2020/03/28(土) 20:38:40.13ID:VlzrtlZa0
前に見かけたこの記事がある
たった4000個ほどしか付けられないらしい

printfに4285個アスタリスクをつけるとclang++が死ぬ - Qiita
ttps://qiita.com/kaityo256/items/84d8ba352009e3a0fe42
0430デフォルトの名無しさん (ワッチョイ a9ca-Emx9)
垢版 |
2020/03/28(土) 22:27:31.37ID:dAv8M8Ft0
(***printf) ないし (*printf) ってどういう意味になるのかな?
関数ポインタに * を付けても同じ型で同じ値の関数ポインタになるということ?
少なくとも値は * を何個付けても変わらないみたいだけど。
0431デフォルトの名無しさん (ワッチョイ a9ca-Emx9)
垢版 |
2020/03/28(土) 22:37:27.60ID:dAv8M8Ft0
ちなみに &printf も同じ値だね。
ちなみに関数ポインタ変数 p を使った場合、&p は変数p 自体のアドレスになったけど、p も *p も関数自体のアドレスで同じ値になる。
ちょっとややこしいかも。
0432デフォルトの名無しさん (ワッチョイ 368c-bMls)
垢版 |
2020/03/29(日) 04:08:50.01ID:qP8s4jbH0
メモリを[アドレス](データ)で表すと
int ***A;は
[Aアドレス](アドレス1) -> [アドレス1](アドレス2) -> [アドレス2](アドレス3)
-> [アドレス3](int データ)
を指していることかな。
0433デフォルトの名無しさん (ワッチョイ 697b-scJV)
垢版 |
2020/03/29(日) 06:29:54.31ID:MtcIJfqw0
int (*fp)(void); /* fp: 引数なし, intを返す関数を指すポインタ */
と定義された関数ポインタ fp を経由して関数を呼び出す際に、
fp() でも (*fp)() でも同じ意味だよ、と規格で決めた結果として、
ならば (**fp) も (***fp) も…同じだよね、てことになったのかな。

アドレス演算子の方も
fp = some_func;
fp = &some_func;
どちらの書き方でも fp 経由で同じ関数を呼び出せる、という点で合理的か。
他の解釈をしても意味ないし。

おかげで
fp = &**&***&some_func;
などと書くこともできる。これは無意味で過剰な一般化の類にも思えるけど。
fp = &&some_func;
とは書けない模様。
この辺の挙動はコンパイラによって違うのかも。
0435デフォルトの名無しさん (ワイーワ2 FF1a-nBi6)
垢版 |
2020/03/29(日) 16:07:52.64ID:7B/pleQ/F
int a = (*&*&*&*&*&*&*&f)();
こんなんもありか?
0438437 (ワッチョイ 697b-scJV)
垢版 |
2020/03/30(月) 07:50:54.17ID:VZ0aGjef0
誤: 最右の--で増やされた値
正: 最右の--で減らされた値

増減を間違えたわ。
0439デフォルトの名無しさん (ワッチョイ 1b8c-xyAh)
垢版 |
2020/04/01(水) 21:03:42.40ID:HmSenNAk0
そろそろ変数名、関数名にUTF-8を使えるようにしてもいいと思う。
多分楽しくなるよ。
0447デフォルトの名無しさん (ワッチョイ e5ca-Otsn)
垢版 |
2020/04/02(木) 12:29:05.08ID:72QlOXRc0
FARポインタって値としてはリニアアドレスで、メモリアクセス時に内部的にセグメントとオフセットに分けてるだけじゃなかっけ?
ポインタを ++ しながらメモリアクセスして 64KB 越えても問題無いんじゃね?
memcpy みたいのが内部的に rep 使った lods や stos を使ってるなら、ライブラリとして 64KB 単位に区切ってるんじゃないのかな。
0452デフォルトの名無しさん (ワッチョイ 653d-5QI3)
垢版 |
2020/04/02(木) 14:07:43.96ID:yWN/hb600
>>446
連続アクセスはポインタを ++ でインクリメントしながらループするレベルで言っています
Hugeポインタというものもあったんですね、知りませんでした
これを使うとポインタを ++ する度にセグメントレジスタを更新するので遅いが64KB以上のアクセスができるって事ですよね

farポインタはポインタを ++ してもセグメントレジスタは更新されず、早いけど64KB以上のアクセスはできないって事でしょうか?
あれ、もしそうなら例えば0x0EFFF0を指すfarポインタで ++ しながらメモリアクセスした場合
16バイト以上は0xE0000に戻ってしまい0x0F0000以降のメモリにアクセスできないって事ですか?
0453デフォルトの名無しさん (ワッチョイ 657b-M08V)
垢版 |
2020/04/02(木) 17:09:56.05ID:0sikvQpW0
「正規化マクロ」なんてのもあった記憶がある。
オフセット部の上位ビットをセグメント部に移して、
オフセット部の値を 0-15 に制限する。

適当なタイミングで「正規化」することで
64KBを越える範囲を連続的にアクセスできるようになる。
いわゆる「透過的」ではないけれど。
0454デフォルトの名無しさん (エムゾネ FF43-8H9x)
垢版 |
2020/04/02(木) 18:29:53.16ID:4X8ewqwSF
>>442
90年代前半?
0455デフォルトの名無しさん (エムゾネ FF43-8H9x)
垢版 |
2020/04/02(木) 18:32:26.76ID:4X8ewqwSF
>>452
もちろんそのセグメントで扱えるブロックの範囲の先頭に戻る
そういうときはセグメントレジスタの方の値を増やさないと無理
0456デフォルトの名無しさん (エムゾネ FF43-8H9x)
垢版 |
2020/04/02(木) 18:35:21.60ID:4X8ewqwSF
>>452
誤解されそうなので補足だけど
>0x0EFFF0を指すfarポインタで ++ しながらメモリアクセスした場合
セグメントレジスタ 0x0EFFF
ポインタ 0x000F
なら 0x0EFFFF にアクセス出来るし
セグメントレジスタ 0x0EFFF
ポインタ 0x0010
なら 0x0F0000 にアクセス出来る
0457デフォルトの名無しさん (ワッチョイ 253d-5QI3)
垢版 |
2020/04/02(木) 18:58:03.66ID:SCUy7Ffk0
>>456 >>453
ああなるほど、セグメントレジスタは16倍してオフセットに加算されるんですね
勘違いして認識していました、ありがとうございます
そうなるとfarポインタでも基本的には64KBまでならそのままアクセス可能そうですね
0459◆QZaw55cn4c (ワッチョイ e3aa-5LkK)
垢版 |
2020/04/02(木) 21:33:11.59ID:F2YXKB2C0
>>447
オフセットがあふれてもセグメント部分はインクリメントしない、したがって 64 KB を超えて連続アクセスはできない
0463デフォルトの名無しさん (ワッチョイ b501-j0VC)
垢版 |
2020/04/03(金) 01:16:56.77ID:rS9EMaRY0
>>457
16ビットと一言で言ってるけど、x86の場合リアルモードとプロテクトモードでセグメントの扱いは全く異なるから注意
16倍して足すだけなのは前者のとき(DOSとか)
Windows3.1は後者
0468デフォルトの名無しさん (ワッチョイ e5ca-Otsn)
垢版 |
2020/04/03(金) 20:59:00.91ID:15ER3YJX0
>>464
条件が成立してるはずなのにどうしても走らないコードがあり、コンパイラの最適化のバグで処理が消えたと思い最適化のスイッチをいろいろいじり、
それでもだめでコンパイラ自体のバグを疑い吐かせたアセンブラソースに処理コードが吐かれてないことを確認して、
ほれ見たことかコンパイラが悪い!と報告を上げた後でコメントの */ が抜けてることを発見した俺には敵うまい。
0469デフォルトの名無しさん (ワッチョイ 6db3-ii8Z)
垢版 |
2020/04/04(土) 00:47:19.29ID:qMa2xGJ10
私はいくつかコンパイラのバグを見つけたけどね
見つけた時は発生する最小形にしてから報告

コンパイラのバグだとさわぐヤツの99%は自分のバグ
ってのは同意
0472デフォルトの名無しさん (ワッチョイ 230e-bVUD)
垢版 |
2020/04/04(土) 08:44:49.54ID:glhU6EPt0
99%もそんなアホいるのか?
コンパイラのバグを疑った場合まず最小の再現コード作るだろ
で、バグレポに条件と現象を書くわけだが
自分が悪い場合はそこで必ず気付くことになる
0473デフォルトの名無しさん (ワッチョイ 4bd2-bVUD)
垢版 |
2020/04/04(土) 09:28:47.06ID:oeIO06yp0
>コンパイラのバグだとさわぐ
× こういう風に書いたのですがxxのコンパイラなら問題ないのにxxxの方だと誤作が(ry
〇 xxxつかったら動かねぇ!!ソースに間違いは無い!!クソコンパイラ!!謝罪と賠(ry
0476デフォルトの名無しさん (ワッチョイ 23ad-Ujw5)
垢版 |
2020/04/04(土) 13:15:20.63ID:SI4lxjMM0
>>468
負けた。君に勝ちを譲ろう。
0478デフォルトの名無しさん (ドコグロ MM43-5poS)
垢版 |
2020/04/04(土) 13:29:50.17ID:3Wwr2fKwM
10年くらい前でもマクロのネストが多いとかでInternalエラー吐く処理系はあったよ
本来ちゃんとエラーチェックして適切なエラーメッセージ出すべきなんだろうけどほとんどありえないような状況にどこまで対応すべきかって話はなかなか難しいものがある
まあそれと処理系のバグとは別の話だが
0484デフォルトの名無しさん (ブーイモ MM6b-eRVI)
垢版 |
2020/04/05(日) 00:53:15.82ID:8lfN7LOTM
cでコンパイラがゲロる複雑に成るって三項演算子をネストするくらいだろ
c++はテンプレートでわりあい簡単に混乱を引き出せるけどCのメタ構築機能はゴミみたいなもんだし
0486デフォルトの名無しさん (ワッチョイ 6db3-ii8Z)
垢版 |
2020/04/05(日) 07:26:24.26ID:c+nOX//s0
人間にとっての複雑とコンパイラにとっての複雑化はまったく違う

演算子のネストなんて3項じゃなきゃ普通にやってることで
コンパイラにとっては普通のこと

3項演算子の結合は特殊なので
人間にとっては複雑なのは間違いないけど
0490デフォルトの名無しさん (JP 0H93-3bw/)
垢版 |
2020/04/05(日) 11:43:40.11ID:pjXS/HuIH
4Dエンジン
ttp://x0000.net/topic.aspx?id=3677-0

ある強力なFor関数
ttp://x0000.net/topic.aspx?id=3630-0

SQLライブラリ
ttp://x0000.net/topic.aspx?id=3675-0

matrixのライブラリ
ttp://x0000.net/topic.aspx?id=3711-0
0493デフォルトの名無しさん (ワイーワ2 FF93-8H9x)
垢版 |
2020/04/05(日) 14:56:50.54ID:P07lI1PFF
A ? B : C;
A ? B ? D : E : C ? F : G;
(A ? B ? D : E : C) ? F : G;
A ? B ? D : E : (C ? F : G);
0495デフォルトの名無しさん (ワッチョイ e5ca-Otsn)
垢版 |
2020/04/05(日) 15:03:37.61ID:bk3bMB+g0
コンパイラにとって複雑というのは、構文木が深くなる、とどのつまり項の多い長い文なんじゃない?
昔のコンピュータはメモリが足りなかったから深い木は扱えなかったってことでしょ。
0496デフォルトの名無しさん (ワイーワ2 FF93-8H9x)
垢版 |
2020/04/05(日) 15:58:31.05ID:PRah2HwrF
>>494
人間には右につなげる方が見やすいのかも知れないが
コンパイラ的にあいまいさが無いのは左(内側?)に入れていく方だと思う

Pythonのはさらに結合の優先度が判りにくい気がする(慣れてないだけかも知れない)
0500デフォルトの名無しさん (ワッチョイ 6db3-ii8Z)
垢版 |
2020/04/07(火) 07:11:26.19ID:Aukj6IXD0
? を if と同じように改行 & インデントすればいい

A ?
&nbsp;&nbsp;&nbsp;&nbsp;B ? D : E :
&nbsp;&nbsp;&nbsp;&nbsp;C ? F : G;

A
&nbsp;&nbsp;&nbsp;&nbsp;? B ? D : E
&nbsp;&nbsp;&nbsp;&nbsp;: C ? F : G;
0506デフォルトの名無しさん (ワッチョイ 23ad-Ujw5)
垢版 |
2020/04/07(火) 12:46:52.50ID:rrWnJIGn0
この世には括弧というものがあってだな・・・
0509デフォルトの名無しさん (ワッチョイ 23ad-Ujw5)
垢版 |
2020/04/07(火) 23:16:28.11ID:rrWnJIGn0
Kotlinは思い切って三項演算子なくした代わりにifを式にしちゃったよ。
他の言語からのパクリだとは思うが、val a = if (x == y) b else c のような書き方ができる。
0512デフォルトの名無しさん (ワッチョイ 8252-b+QY)
垢版 |
2020/04/08(水) 03:26:20.58ID:5a3Kp3Hv0
>>511
ダメと言われている三項演算子を使ってません!と言えることかなw

一つあるとしたら、ネストさせたときに if ... else if ... else if ... else とできることか。
式の中に文のような表現が入る気持ち悪さがあるから、三項演算子の方がまだましな気もするが。
0514デフォルトの名無しさん (ワッチョイ 8252-b+QY)
垢版 |
2020/04/08(水) 09:37:01.78ID:5a3Kp3Hv0
>>513
どこかのコーディング規約や一部の教条主義者の間で言われてるみたいだよ。(>>512前段はそれを揶揄したつもり。)
俺自身は三項演算子は分かりやすさを損なわない範囲で使うのは大好きだし、>>502の前者の書き方はよく使う。
0522デフォルトの名無しさん (ワッチョイ ebb3-aNAp)
垢版 |
2020/04/08(水) 18:06:51.24ID:VV8vD69L0
関数仕様(プロトタイプ)を変えたくないとか
関数をたすさん経由するので変更が多いとか
少しでもパフォーマンスをあげたいとか
少しでもリソースをけちりたいとか

理由はいろいろとある
綺麗さよりもそういった事が重要であれば使うこともある
0525デフォルトの名無しさん (ワッチョイ d7ca-BKMK)
垢版 |
2020/04/08(水) 20:24:48.12ID:zy2o7H5P0
>>520
別に構造体にする必要は無いじゃん。
しいて言えば、引数でたらい回しにするときこそ構造体が便利で、そういうやり方になるとシングルトンというより this を明示的にやり取りする普通のオブジェクトみたいなもんじゃね。
グローバル変数でシングルトン的に実装するなら、グローバル変数を全部 static にしてソース内にスコープを絞る感じじゃね。
0526デフォルトの名無しさん (ワッチョイ d7ca-BKMK)
垢版 |
2020/04/08(水) 20:33:22.56ID:zy2o7H5P0
>>523
キャッシュにヒットしやすい配置に並べやすいとか、
引数渡しでは必要なスタックに引数を積み上げるコストを節約できるとか、
戻り値を複数貰いたい場合に余計なポインタや構造体を使う必要が無いとか、
「どの程度」はともかくいろいろありそうだけど。
0528デフォルトの名無しさん (ワッチョイ 67da-RYyP)
垢版 |
2020/04/09(木) 02:17:55.56ID:qzPRDrss0
ICEのメモリダンプでリアルタイムに状態の変化を追跡するのに変数のアドレスがスタックを動き回られては確認しづらいので
グローバル変数で寿命を永続化してアドレスマップを固定アドレス化することはよくある
0530デフォルトの名無しさん (ワッチョイ a2c5-KRXG)
垢版 |
2020/04/09(木) 11:01:14.49ID:/KG6GbYC0
C言語10年ぐらいやってるけどいまだにエラー機構の正解が見えない
errno使おうかと思ってた時期もあるけど、けっきょく構造体使ってエラーハンドリングしちゃう
0538デフォルトの名無しさん (ワッチョイ e201-Y19k)
垢版 |
2020/04/10(金) 09:24:51.46ID:sn6MPl7m0
全てのケースで例外は階層化しないといけないって言う病気にでも罹患してるのか?
最終手段としてトップレベルに抜けるだけにしか使わないとか普通にやると思うけど
0540デフォルトの名無しさん (ワッチョイ d7ca-BKMK)
垢版 |
2020/04/10(金) 11:09:12.87ID:bV/hR7tO0
例外があったらプロセス終了ってw
別にライブラリが呼び出し元に戻る直前の手段として longjmp する場合、jmp_buf はライブラリのソース内の static なグローバル変数でもいいわけで。
グローバルにするかローカルにするかなんてその時の作りに応じて選べばいいだけで、グローバルじゃダメなんて何のルールだよって話なだけだろ。
0543デフォルトの名無しさん (ドコグロ MM2b-Y19k)
垢版 |
2020/04/10(金) 13:17:24.64ID:doBqOulyM
>>539
随分低レベルな考え方だなw
通常のエラー処理は戻り値とかでやるけどロジックエラー等の回復不可能なエラーはlongjmpでトップレベルまで戻ってログ吐いて止まるなりリスタートなりするとかだよ

>>541
> 飛ばされては困る処理はない方がレアケースで
階層化の話はどうしたんだよw
0544デフォルトの名無しさん (ワッチョイ 6740-MOmQ)
垢版 |
2020/04/10(金) 13:35:44.69ID:OARfLwlq0
long long a;
int b;
a >>= 8 * b;
‾‾‾‾‾演算のオーバーフロー
4バイトの値に演算子*を使用し、結果を8バイトの値にキャストしています。
オーバーフローを避けるため、演算子*を呼び出す前に値を幅の広い型にキャストしてください。

シフト演算でも右辺値は左辺値の型にキャストされるのですか?
0545デフォルトの名無しさん (ワッチョイ 620e-AglQ)
垢版 |
2020/04/10(金) 15:49:55.13ID:1zuF7RzQ0
>>543
例外はむしろ回復可能なエラーへの対策が主要な用途だぞ
ゲロって止まるって、おまえエラーとバグを混同してるか?

俺は別に階層化の話から逸脱はしてねえぞ
そう思いたいのか?
0546デフォルトの名無しさん (ワッチョイ e201-Y19k)
垢版 |
2020/04/10(金) 16:27:16.96ID:sn6MPl7m0
>>545
> 例外はむしろ回復可能なエラーへの対策が主要な用途だぞ
お前の流儀が主要とか言われても困る

> ゲロって止まるって、おまえエラーとバグを混同してるか?
文章理解力なさすぎだろw
>> 通常のエラー処理は戻り値とかでやるけど

> 俺は別に階層化の話から逸脱はしてねえぞ
飛ばされて困る処理が常に階層化されてると言うのか?

> そう思いたいのか?
お前が(あえてかどうかは知らんけど)書いてないから指摘しただけ
0548デフォルトの名無しさん (ワッチョイ 620e-AglQ)
垢版 |
2020/04/10(金) 17:53:11.95ID:1zuF7RzQ0
>>546
俺個人の流儀ではない

エラー処理には返却値を使う方法と例外を使う方法がある
この点はおまえ完全に間違って憶えているようだな

飛ばされて困る処理を確実に実行させるために
階層化とリスローをするんだよ

おまえ何もわかっちゃいねえな
買いかぶってた
0549デフォルトの名無しさん (ワッチョイ d7ca-BKMK)
垢版 |
2020/04/10(金) 18:07:17.86ID:bV/hR7tO0
ごちゃごちゃ言ってるのを読む気にもならんが、結局グローバルでもいいんだろ?
階層組みたきゃそれができるように実装すりゃいいだけだよな?
的はずれなこと書くと無駄に長くなるってことが分かったな。
はいおしまい
0551デフォルトの名無しさん (ドコグロ MM02-Y19k)
垢版 |
2020/04/10(金) 18:31:37.60ID:IOulq41rM
>>548
> エラー処理には返却値を使う方法と例外を使う方法がある
> この点はおまえ完全に間違って憶えているようだな
この点がどの点なのか知らんけど、主要とか言ってたのにやけにトーンダウンしたなw

> 飛ばされて困る処理を確実に実行させるために
> 階層化とリスローをするんだよ
だからそういう流儀もあるというだけの話だろ
で、お前それちゃんとやってるか?
C++みたいに例外発生時にデストラクタが呼ばれる機能がないからちゃんとやろうとするとほとんどの階層毎にsetjmpするはめになること理解してる?

> おまえ何もわかっちゃいねえな
そのまま返すよ

> 買いかぶってた
そりゃどうも、ってかお前に買いかぶられてもなw
0554◆QZaw55cn4c (ワッチョイ c2aa-zNgl)
垢版 |
2020/04/10(金) 19:49:12.02ID:GS5sAu5k0
>>548
>飛ばされて困る処理を確実に実行させるために
>階層化とリスローをするんだよ

例外のリスローってよくわからないんですよね
例外を食ってしまわないかぎり飛ばされることはないんだから、リスローって意味がないのでは?
それとも皆んな、例外を食い潰しまくっているのかな?
0560◆QZaw55cn4c (ワッチョイ c2aa-zNgl)
垢版 |
2020/04/10(金) 21:10:30.64ID:GS5sAu5k0
>>559
1bit の CPU が存在するのなら作りますが、現実には存在しないのでは?
>>558 はプログラムカウンタを持っていない以上、CPU とは言いがたいですね
0563デフォルトの名無しさん (ワッチョイ d7ca-BKMK)
垢版 |
2020/04/10(金) 21:38:00.03ID:bV/hR7tO0
>>561
setjmp と同じかより深いスコープまたはスタックフレームから戻ってくるだけだから、
setjmp の呼び出し時点で存在しているスコープであればローカルだろうとグローバルだろうと構わないよ。
0564デフォルトの名無しさん (ワッチョイ d7ca-BKMK)
垢版 |
2020/04/10(金) 21:49:38.93ID:bV/hR7tO0
補足すると、ローカル変数に置いた jmp_buf を呼び出し先の関数から直接参照することはできないから、引数かなにかでポインタを引き回さないといけない。
これ嫌ならグローバル使う感じじゃね。
0568デフォルトの名無しさん (ドコグロ MM7a-Y19k)
垢版 |
2020/04/10(金) 22:26:36.48ID:jlvstp5nM
>>562
> ああ、ちゃんとやってるよ
そりゃすげーな

> おまえやってないんだろ?
うん、性能も悪いしバカみたいだもんw

> C++の動きもわかってねえな
具体的に指摘しなよ
まあ出来ないから悪態しかつけないんだろうけど
0571デフォルトの名無しさん (ワッチョイ d7ca-BKMK)
垢版 |
2020/04/10(金) 22:56:16.19ID:bV/hR7tO0
>>569
いや、盛大な理解不足をしてそうだな。
そもそもとして setjmp をしたスコープから上位に出てしまったら longjmp はできないぞ?
setjmp をした時点のスタックが壊れていないことが条件だから。
0572デフォルトの名無しさん (ワッチョイ 7b19-/9S9)
垢版 |
2020/04/11(土) 08:18:46.47ID:ESZwWJDK0
時間をトリガーとした実装について質問したいです。2つあります。

1
何時何分という絶対値をトリガーとしてスレッドを起動orコールバック関数の実行をしたいです。
どのような実装したらよいでしょうか。。

2
相対値、例えば何秒後というトリガーで1と同じ制限の処理をしたいときにはどうしたらよいでしょうか。

いずれも、任意個の処理とトリガーをつくりたいです。
POSIXの範囲でできるのが好ましいですが、不可能であればLinuxに依存してもOKです。

よろしくおねげーします。
0574デフォルトの名無しさん (ワッチョイ 7b19-/9S9)
垢版 |
2020/04/11(土) 09:27:13.95ID:ESZwWJDK0
>>573
一つのプロセスの中でやりたいんですよ。決してシステム管理の一貫ではないです。
0576デフォルトの名無しさん (ワッチョイ d7ca-BKMK)
垢版 |
2020/04/11(土) 10:30:52.73ID:BTIsFQoK0
>>572
sleepしながら時刻を確認するタイマースレッドでも作れば?
直近の時刻まで時間があるなら大まかにループして、イベント時刻に近づいたら細かくループすればそこそこの分解能と低CPU時間を両立できるんじゃね。
新しいタイマーをリストに加えたらタイマースレッドに signal 投げれば sleep からすぐ戻るから再計算もできるでしょ。
0578デフォルトの名無しさん (ワッチョイ d7ca-BKMK)
垢版 |
2020/04/11(土) 11:11:32.64ID:BTIsFQoK0
>>577
それでもいいんだろうけど、sleep に比べてこれといったメリットあるかな?
いや、ケチを付ける意図も無けりゃ sleep を推したいわけでもないんだけど、この場合の pthread_cond_timedwait は時間待ちをするだけの目的で使うんだよね?
0586デフォルトの名無しさん (ワッチョイ d7ca-BKMK)
垢版 |
2020/04/11(土) 21:29:37.03ID:BTIsFQoK0
例外処理っぽいことをやること自体が目的になってる感はあるな。
ある程度のところへ longjmp したら後は return でいいんじゃねーの?みたいな。
goto 使ってもいいしな。
0592デフォルトの名無しさん (ドコグロ MM2b-Y19k)
垢版 |
2020/04/12(日) 08:34:51.02ID:3HJi1EoTM
>>591
これまた意味不明なことを言い出したな

> longjmpが性能悪いわけねえだろ
はどうしたんだよw

あと前の話に噛み付くなら
>> C++の動きもわかってねえな
> 具体的に指摘しなよ
にもちゃんとレスしろよな
0607デフォルトの名無しさん (ワッチョイ ffd2-Ho7r)
垢版 |
2020/04/16(木) 09:06:42.33ID:kHN+0sn+0
インラインアセンブラで1バイト相対ジャンプ命令使ったとき、
128バイト以上離れても警告されなくて何度もバグったわ。
当時はデバッガー使ってなかったし。
0611デフォルトの名無しさん (ワッチョイ 9f0e-Ho7r)
垢版 |
2020/04/16(木) 12:44:21.19ID:zHaHU1HF0
ショートブランチの射程距離ぎりぎりを使うときはうっかりミスなどあり得ない
通常はそんなことになるまでにロングブランチに切り替えるが
それをあえてショートで責める理由があるときは細心の注意を払う
0612デフォルトの名無しさん (ワッチョイ 37b3-3r4m)
垢版 |
2020/04/16(木) 12:52:02.41ID:dbvXh7HJ0
インラインアセンブラを使うのはせいぜい数行
それより多かったり分岐を含むのは
インラインじゃない普通のアセンブラ
intrinsicで済むのはintrinsicで

ていう考え
0620デフォルトの名無しさん (ワッチョイ 57ca-1VFb)
垢版 |
2020/04/16(木) 14:19:30.03ID:CVnBB3Bm0
>>614
今時のCPUは最適化のためのルールが複雑で人の手に負えないからコンパイラ任せの方が大抵いいけど、昔はそうでもなかった。
まあそこまでキリキリにチューニングしたいならインラインアセンブラなんかじゃなくアセンブラで書く方がいいと思うけどね。

最適化以外だと、地味にローテートを多用するアルゴリズムだとアセンブラでやりたくなるよね。
他には、alloca とか longjmp とか効率のいい排他処理みたいな類いのアセンブラじゃないと書けない処理もあるし。
0622デフォルトの名無しさん (ワイーワ2 FFdf-TqHL)
垢版 |
2020/04/16(木) 14:41:22.11ID:rX5xM8bmF
このスレのみなさんは逆汗したら判るんですか
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
0626デフォルトの名無しさん (ワッチョイ b732-xa8R)
垢版 |
2020/04/16(木) 15:51:36.77ID:gk/+OIqE0
cの関数の場合関数内でintを生成してそれに数値を代入してreturnして
戻った先で戻り値を使うことができる。そのままでdeleteする必要はない。
同じようにストラクチャでもできるの?
typedef strudt{ char x,y;] XY;
XY func(){
XY a;
a.x =1; a.y = 2;
return a;
}
void main(){
XY xy = func();
}
0627デフォルトの名無しさん (ワッチョイ b732-xa8R)
垢版 |
2020/04/16(木) 15:57:13.19ID:gk/+OIqE0
int bitcount(int32 val){
 ct = 0;
 for(int i = 0; i < 32; ++ i){
   if( val>>1)++ct;
 }
 return ct;
}
0628デフォルトの名無しさん (ワッチョイ b732-xa8R)
垢版 |
2020/04/16(木) 15:59:17.39ID:gk/+OIqE0
(val>>=1) & 1 の間違い
0629デフォルトの名無しさん (ワッチョイ b732-xa8R)
垢版 |
2020/04/16(木) 16:03:06.35ID:gk/+OIqE0
int bitcount(int32 val){
 ct = 0;
 for(int i = 0; i < 32; ++ i){
   if( val & 1) ++ct;
   val >>=1;
 }
 return ct;
}
0630デフォルトの名無しさん (ワッチョイ 57ca-V882)
垢版 |
2020/04/16(木) 16:12:48.22ID:CVnBB3Bm0
>>622
先頭の pop ax で何が入ってくるのか分からなくて挫折したw

でもテキストな実行ファイルなら前にこんなの作ったよ。
https://dotup.org/uploda/dotup.org2114206.zip パスワード C
MSDOS用で 64bit windows上じゃ動かせないけど、DOSBOX とかで試せる。
C と関係無いしダウンロードしてまで見るのは面倒だと思うけど、見てもらえればちょっとは面白いかも。
0632デフォルトの名無しさん (ワッチョイ 9fb6-xa8R)
垢版 |
2020/04/16(木) 17:44:50.58ID:ZrTWKD3l0
>>626
できるよ。
正確には関数が持ってた構造体(funcのa)を戻り先の構造体(mainのxy)へ代入している感じ。
構造体はコンパイル時にサイズが決まるのでintとかの値と同じようにコピーができる。

https://wandbox.org/permlink/AIZ0DCmCSZJpFhE1
0636デフォルトの名無しさん (ワッチョイ b732-xa8R)
垢版 |
2020/04/16(木) 21:47:10.87ID:gk/+OIqE0
>>633
ポインタで返さないなら、つまり関数内でメモリ確保したストラクチャでも値そのものを返すのであれば、受け取った側でdeleteしなくてもいいの?
typedef strudt{ char x[10000], y[10000];] XY;
XY func(){
XY a;
a.x =1; a.y = 2;
return a;
}
void main(){
XY xy = func();
}
0638デフォルトの名無しさん (ワッチョイ 57ca-1VFb)
垢版 |
2020/04/16(木) 22:21:38.07ID:CVnBB3Bm0
>>636
その a のためのメモリはスタックフレーム上に確保されてて、関数から return すると黙ってても消えて無くなる領域だから、
new とか malloc なんかでヒープ上に確保するメモリと違って delete とか free とかはいらない。
関数 func を呼び出してる間、xy の領域と a の領域は同時に存在し、return するときに a の内容を xy にコピーして、a は func のスタックフレームと共に消滅する。
0642デフォルトの名無しさん (ワッチョイ b732-xa8R)
垢版 |
2020/04/17(金) 07:11:17.78ID:AqgoekXO0
>>638
なるほど!!よくわかりました。
関数はreturn値を呼び出し側にコピーして実行完了となりstackを開放する。
local 変数はstack上に作るので実行完了まではlocal変数の内容は保持される
が実行完了で自動的に消滅する。
ということですね。
0643デフォルトの名無しさん (ブーイモ MMbb-fsvn)
垢版 |
2020/04/17(金) 11:34:39.45ID:0SFvwi0RM
常識過ぎてデフォルトコピーコンストラクタみたいな盲腸がC++に埋め込まれてしまったんだよ
あくまでC言語の中でコーダーが工夫し不便を乗り越えてた常識なのにね
0644デフォルトの名無しさん (ワッチョイ 9f63-Ho7r)
垢版 |
2020/04/17(金) 12:08:02.28ID:uZ4GpX9X0
>人間の虫垂は、親知らずや体毛と同じように、かつては必要とされていたが今は
>なくても問題なくやっていける器官と考えられいた。

>しかし、虫垂がかつて何をしていたのか、また実際にいま用無しなのかについては、
>これまで明確になっていなかった。そんななか、米ミッドウェスタン大学の研究者が
>主体となった研究が発表され、この問題にひとつの答えが提示された。虫垂は、
>免疫細胞の反応を促し、有益な腸内細菌(善玉菌)が減少するとこれを増やすという
>二次的な免疫機能を担っているという。この役割は限定的な形ながら、いまも人間
>の体内で継続して機能している。

https://www.kagaku-kentei.jp/news_detail/data/355

むだなものなんて一つもない
0647デフォルトの名無しさん (ワイーワ2 FFdf-xa8R)
垢版 |
2020/04/17(金) 14:09:42.57ID:3B9MCfUYF
虫垂炎で虫垂取っちゃった人はコロチャンに弱いってことかな
0649デフォルトの名無しさん (ワイーワ2 FFdf-xa8R)
垢版 |
2020/04/17(金) 15:10:48.97ID:3B9MCfUYF
0651デフォルトの名無しさん (ワッチョイ 9fad-Ho7r)
垢版 |
2020/04/18(土) 13:49:13.30ID:VYQrLT4k0
>>645
環境が変化した場合に再度必要になるかも知れないのでなんとも言えない。
地球の自然環境は変化し続けるしね。
0652デフォルトの名無しさん (ワッチョイ 9fad-Ho7r)
垢版 |
2020/04/18(土) 14:51:32.00ID:VYQrLT4k0
>>646
この世界全体が無駄と言えば無駄だな。

まあしかし人間は自分の欲望を満たすものに対して無駄がないと感じるだけのことなので、
欲望がなくなればそれもなり全てはあってもなくても良いどうでも良いものになる。
0654デフォルトの名無しさん (アウアウエー Sadf-xa8R)
垢版 |
2020/04/21(火) 11:05:50.29ID:dT9nwdnwa
石田晴久ってまだ生きてんの?
0660デフォルトの名無しさん (アウアウエー Sa6a-0GGu)
垢版 |
2020/04/22(水) 10:11:23.93ID:O/jaLKmba
サイボウズのCGIってCで描かれてるんだっけ
0662デフォルトの名無しさん (ワッチョイ ae85-R0M4)
垢版 |
2020/04/23(木) 23:53:15.47ID:wF6p0RUq0
英小文字の出現回数を出現した文字だけ数えたいのですがうまくいきません
ご指導お願いします


#include <stdio.h>

int main(void) {
char ch;
int cc[26] = {0};
int i;

for(;(ch=getchar())!=EOF;){
if((ch>='a')&&(ch<='z')){
cc[ch-'a']++;
}
}




for (i='a'; i<'z'; i++) printf("%c:%d\n", i, cc[i+'a']);

return 0;
}
0668デフォルトの名無しさん (ワッチョイ 1caf-808h)
垢版 |
2020/04/24(金) 01:12:46.99ID:onlsKD/x0
https://paiza.io/projects/z-ohjvsIhSR6X_lC8q7MKA
コンパイルが通りません。
どこが悪いか教えてもらえないでしょうか。
-Iと-Lの使い方や、regexのコンパイル?(.a)の指定方法等を調べてみたのですがわかりません。
C:\clang>gcc -I "C:\Program Files\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\opt\include" -L "C:\Program Files\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\opt\lib" filename.c
C:\Users\maru\AppData\Local\Temp\ccgTVd7X.o:filename.c:(.text+0x75): undefined reference to `regcomp'
C:\Users\maru\AppData\Local\Temp\ccgTVd7X.o:filename.c:(.text+0xf0): undefined reference to `regexec'
C:\Users\maru\AppData\Local\Temp\ccgTVd7X.o:filename.c:(.text+0x19a): undefined reference to `regfree'
collect2.exe: error: ld returned 1 exit status
libregex.aとregex.hは上記pathに存在します。
環境:
windows10 64bit
gcc version 8.1.0 (x86_64-posix-seh-rev0, Built by MinGW-W64 project)
mingw-w64-install.exeで64bit版をインストールしました。
0669662 (ワッチョイ ae85-R0M4)
垢版 |
2020/04/24(金) 01:29:37.91ID:zB+8iNgr0
>>666
ありがとうございます!
あと、入力されてない文字を出力したくないんですが
もう一つご教授願います!
0673デフォルトの名無しさん (ワッチョイ 1caf-808h)
垢版 |
2020/04/24(金) 10:36:16.91ID:onlsKD/x0
>>671
C:\clang>gcc -I "C:\Program Files\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\opt\include" -L "C:\Program Files\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\opt\lib" filename.c -lregex
コンパイルと実行ができました。
c言語の勉強を始めて間がないので、かなり困っていました。
先へ進めることができます、ありがとう。
0680デフォルトの名無しさん (ワッチョイ e2ad-1Gce)
垢版 |
2020/04/27(月) 22:31:53.92ID:0bO6Thr30
( ´_ゝ`)フーン
0681デフォルトの名無しさん (ワッチョイ 731e-RQtm)
垢版 |
2020/04/28(火) 14:09:05.23ID:wJiWpF7n0
くっそ初歩的な質問なんですが、コンパイラ入れてパスも通したのにハローワールドさえ実行できなくなりました
何がいけないのかな?

https://dotup.org/uploda/dotup.org2128201.jpg
0684デフォルトの名無しさん (ワンミングク MM3e-RQtm)
垢版 |
2020/04/28(火) 14:40:19.14ID:xVP5Xe0nM
>>681
見ての通り指定の場所にちゃんとあるし名前も合ってるんだがなぁ
>>683
半角にするとcannot excute 'as':って謎のエラーと「ファイルが見つかりません」ってエラーとでふたつでてきました
0688デフォルトの名無しさん (ワンミングク MM3e-RQtm)
垢版 |
2020/04/28(火) 16:01:15.79ID:xVP5Xe0nM
>>687
a.exeの実行で無事出来ました!
ありがとうございます助かりました
0689デフォルトの名無しさん (ワンミングク MM3e-RQtm)
垢版 |
2020/04/28(火) 16:01:29.54ID:xVP5Xe0nM
他の皆さんもお力添え感謝です
0690デフォルトの名無しさん (ワッチョイ ac63-w7gE)
垢版 |
2020/04/28(火) 16:28:06.87ID:LE+4zw960
何が原因だったのか解明できていないのは非常にもやもやする
まぁ初心者の頃はそんなのに付き合わずとりあえずいろいろやれ、っていうのもあるけどやっぱもやもやする
0698デフォルトの名無しさん (ワッチョイ baa5-WHvH)
垢版 |
2020/04/28(火) 20:05:39.72ID:8JlwwrXC0
普通のハイフンに見える別文字だろう

どっかのサイトでコードとコマンドを丸々コピペ、
そのコピペしたコマンドに何故かノンブレーキングハイフンとかが含まれていた、あたり
0699デフォルトの名無しさん (ワッチョイ bf1f-h83k)
垢版 |
2020/04/29(水) 04:32:11.62ID:5pVwrDle0
プリミティブ型が解放されるタイミングはいつですか?
例えば
int a = 0;
a = 1;
のコードでaのメモリは上書きされるのか別の場所に確保されるのか
それらは参照が切れるまでかまたはプログラムの終了かまで解放されないのか?

また、
for(int i = 0; 10 > i; i++)
だとiは10回確保されるのかもしくは1週ごとに上書きされて制御を抜けると解放されるのか?
お願いします
0700◆QZaw55cn4c (CA 0Hcb-8vus)
垢版 |
2020/04/29(水) 04:40:50.47ID:WYuVLDSoH
>>699
>プリミティブ型が解放されるタイミングはいつですか?
>例えば
>int a = 0;
>a = 1;
>のコードでaのメモリは上書きされるのか別の場所に確保されるのか

プリミティブ型・構造体・共用体にかかわらず、static, extern をつけない auto 変数は、
その変数が定義されたスコープ { } から抜けると「解放される」ことになります
auto 変数はスタックに確保されるのが普通です、この場合は解放という言葉はちょっと意味が違ってきます

>for(int i = 0; 10 > i; i++)
>だとiは10回確保されるのかもしくは1週ごとに上書きされて制御を抜けると解放されるのか?

for() 文から抜けると i はスタックから外れます
0702デフォルトの名無しさん (ワッチョイ e77b-kZrw)
垢版 |
2020/04/29(水) 06:35:41.63ID:8simRhZl0
for (int i = 0; 10 > i; i++) {
 /* i==0 から i==9 まで i はずっと同じ i */

 int n = 0; /* 「i==0 のときの n」と「i==1 のときの n」は別物 */
 ...
 /* n は「}の直前」で消滅 */
}
/* i は「}の直後」に消滅 */

こんな感じだったかね。
確保・解放と言うより、名前の同一性かも知れんけど。
0703デフォルトの名無しさん (ワッチョイ df0e-ts7H)
垢版 |
2020/04/29(水) 07:34:06.20ID:kGpdE2MD0
今どきのコンパイラだとregister指定がないauto変数でもレジスタになってることがよくあるから
メモリを確保・解放しているとは限らないけど、そんな下らないことは考えなくても
変数の存在期間がスコープに合わせて階層的になっていることは
スタックを使って実現しているであろうと想像するのが最も無理がない

昔のメインフレームみたいな、ひねくれた実装で考えたいやつは勝手にしろってやつ
0708デフォルトの名無しさん (ワッチョイ df60-ts7H)
垢版 |
2020/04/29(水) 09:54:13.18ID:U7o9KgzC0
>>706
ISO C 規格より引用。
> ... There are four kinds of scopes: function, file, block, and function prototype. ...
同じく:
> A block allows a set of declarations and statements to be grouped into one syntactic unit.

少なくともCではそんな区別は無いね。
0711デフォルトの名無しさん (ワッチョイ e7ca-Rrpt)
垢版 |
2020/04/29(水) 15:52:26.64ID:p4QkWxoM0
アセンブラをちょっとやるとそこら辺の迷いも無くなるしポインタが何なのかってこともよく分かるんだが、
いかんせん最近のPCは規模が大きすぎてアセンブラでちょっと何かやるのには適さないからなぁ
0718デフォルトの名無しさん (ワッチョイ df60-ts7H)
垢版 |
2020/04/29(水) 18:55:17.87ID:U7o9KgzC0
>>717
引用足しとくね。
> A compound statement is a block.
...
> A selection statement is a block whose scope is a strict subset of the scope of its enclosing block. ...
...
> An iteration statement is a block whose scope is a strict subset of the scope of its enclosing block. ...

こんな感じで、ソースコード上の文に対応する概念でスコープ(静的・ソースコード上のこと)を
成すものの一種であるから、これが「動的・実行時のこと」というようなことはありえない。
0720デフォルトの名無しさん (ワッチョイ a7f9-h83k)
垢版 |
2020/04/29(水) 21:14:04.28ID:skx4o1Ma0
>>718
足してくれても情報量増えてないね
ブロックがスコープの一種であることはわかった(ってかそれを否定してない)けど、
それ以上のことは言ってない

「自動変数の寿命はスコープ(=関数、ファイル、ブロック、関数宣言)を抜けたら尽きる」
より
「自動変数の寿命はブロックを抜けたら尽きる」
でよくないか?

>>719
ID:U7o9KgzC0さんはそのキリないことをしてくれてるみたいだし
お前もしようとしてるんじゃないの??
0721蟻人間 ◆T6xkBnTXz7B0 (スフッ Sdff-wyJ8)
垢版 |
2020/04/29(水) 21:22:07.90ID:EqfxCPAQd
自動変数はレジスタ割り当てにより記憶領域が再利用されることかある訳だし、最適化で変数自体が消える可能性もあり得る。
0722デフォルトの名無しさん (ワッチョイ df52-dhD/)
垢版 |
2020/04/29(水) 23:20:52.24ID:EKyVvulT0
>>720
スコープという概念が初心者にとって馴染みがなく伝わりにくいから構文の要素として目に見えて理解しやすいブロックと言い換えて説明する、というなら理解できる。
しかし、発端の>>706で言っているスコープは静的・ソース上のこと、動的・実行時にはブロックという理解は頓珍漢だと思うぞ。
0723デフォルトの名無しさん (ワッチョイ df60-ts7H)
垢版 |
2020/04/29(水) 23:25:04.77ID:U7o9KgzC0
>>720
>706 で言ってるような違いは無くてどっちでも同じ意味になると理解してくれたらないいんだけど、
その言い換えを改めて推してくるとなると何か誤解がありそうな気がする。

ブロックに言い換えることで何がよくなるのか、あるいはスコープだと何がよくないのか、言える?
0725720 (ワッチョイ a7f9-h83k)
垢版 |
2020/04/30(木) 00:42:18.37ID:hNg1W2hQ0
「スコープは名前の有効範囲で静的・ソースコード上のこと」は正しいと認めてもらえたと思っていいのかな
それを「自動変数の寿命」という動的・実行時のことに使うのが気に入らない
ファイルスコープという関係無いことも含んじゃうじゃないか
0726デフォルトの名無しさん (ワッチョイ df60-ts7H)
垢版 |
2020/04/30(木) 01:17:57.08ID:WifEy9Hu0
>>725
> 「スコープは名前の有効範囲で静的・ソースコード上のこと」は正しいと認めてもらえたと思っていいのかな

それはそう。そしてその点についてブロックも変わらないと言っている。

自動変数の寿命に関する規格の言い回しはこんな感じ。
> ... its lifetime extends from ... until execution of that block ends in any way. ...
...
> ... its lifetime extends from ... until execution of the program leaves the scope of the declaration. ...

「ブロックの実行が終わったら」「プログラムの実行がスコープを出たら」などと定めている。
特に誤解の余地も無いかと。
0727デフォルトの名無しさん (ドコグロ MM9f-kuXe)
垢版 |
2020/04/30(木) 08:18:03.97ID:1K8TO0XxM
>>725
> 「スコープは名前の有効範囲で静的・ソースコード上のこと」は正しいと認めてもらえたと思っていいのかな
それに反対して奴なんていないだろ

> 動的・実行時のことなら「ブロック」というべきじゃないかな
が頓珍漢だって言われてるだけ
0728デフォルトの名無しさん (ワッチョイ df52-dhD/)
垢版 |
2020/04/30(木) 08:50:53.47ID:WdGtAJJk0
>>725
局所変数(自動変数とstatic局所変数)のスコープは関数とブロックなのだから、ファイルスコープが入るからおかしいという理屈は的はずれだろう。
で、局所変数である自動変数とstatic局所変数の違いが、スコープから出たときに生存期間が終わるかどうかということなのだから、自動変換の生存期間としてスコープを出たらというのはごく自然なことだと思うぞ。
0736デフォルトの名無しさん (アウアウエー Sa9f-ur4w)
垢版 |
2020/05/01(金) 09:05:45.71ID:k2YlXFh6a
面倒なのは同じ用語でも言語によって定義とか意味が違うことだな
0745デフォルトの名無しさん (ワッチョイ df0e-ts7H)
垢版 |
2020/05/01(金) 21:36:47.12ID:9yUywlA00
>>744
ここCスレだよ?
ISO/IEC9899に学歴制限書いてあるように見えたの?
それともアホなの? バカなの? 不細工馬鹿童貞なの?
中学生は生えたかどうか、高校生は剥けたかどうか、大学生はヤッたかどうかが下ネタだけど
3連敗してて、ねえ今どんな気持ち?
0753デフォルトの名無しさん (ワッチョイ df1e-UKGB)
垢版 |
2020/05/02(土) 08:39:17.16ID:jX0/TiVk0
これ、どう思う?
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13224055453

何を検証したいのかをなぜ誰も問わないのか。
そして、何を検証したいのだとしても自分で memcpy を書く必要は無いと思うのだが。
0756デフォルトの名無しさん (ワッチョイ dfad-G4G7)
垢版 |
2020/05/02(土) 13:48:44.85ID:HrddHHvE0
>>753
何とも思わない。
0759デフォルトの名無しさん (JP 0H9f-r+sk)
垢版 |
2020/05/02(土) 14:28:28.96ID:WcFHKfxWH
simulationライブラリで純粋な関数式プログラミングをする
ttp://x0000.net/topic.aspx?id=3631-0

UIライブラリ (C#, 2D) を作ったよ
ttp://x0000.net/topic.aspx?id=3688-0

連続と離散を統一した!
ttp://x0000.net/topic.aspx?id=3709-0

4Dエンジン
ttp://x0000.net/topic.aspx?id=3677-0

matrixのライブラリ
ttp://x0000.net/topic.aspx?id=3711-0

ある強力なFor関数
ttp://x0000.net/topic.aspx?id=3630-0

SQLライブラリ
ttp://x0000.net/topic.aspx?id=3675-0
0761デフォルトの名無しさん (ワッチョイ df1e-UKGB)
垢版 |
2020/05/02(土) 17:42:33.39ID:jX0/TiVk0
解りにくかったのなら申し訳ない。
ログ出力をしてから memcpy を呼ぶんじゃだめなのかなってことなんだけど。
当人はログ出力によって何かを検証するのが目的なわけで
動作が変わってしまうかもしれないというリスクを冒してまで
memcpy を書きたいようには見えない。
もちろん、書きたければ書けばいいが、それは当人に聞いてみなきゃ判らない。
そういう確認もなく、なぜ回答が memcpy を書く方向なのかなと。
まあ、自分で回答する気はないんだけどね。
0764デフォルトの名無しさん (ドコグロ MMff-4Orb)
垢版 |
2020/05/02(土) 19:41:25.20ID:UokhlAwkM
>>761
> もちろん、書きたければ書けばいいが、それは当人に聞いてみなきゃ判らない。
当人が「ライブラリ関数memcpyを自作の関数に変更したいと考えています。」って書いてるのに何を言ってるんだよ
恥の上塗りしすぎw
0766デフォルトの名無しさん (アウアウエー Sa9f-kSwD)
垢版 |
2020/05/02(土) 20:30:45.84ID:SkwzP24ja
マクロで置き換えちゃう?
0770デフォルトの名無しさん (ワッチョイ bf8c-Sf3c)
垢版 |
2020/05/03(日) 06:15:32.58ID:IR/jNgkc0
GNUライセンシーを回避しようとしても下層のライブラリ呼び出しでバレてしまう。
0771デフォルトの名無しさん (ワッチョイ dfc5-h83k)
垢版 |
2020/05/03(日) 15:03:38.89ID:TPvygFvF0
関数の引数を構造体で抽象化してるんですが、速度的に問題になる場合ってあるのでしょうか?
抽象化というのは↓のような構造体を

struct args {
int a; // func1の引数
int b; // func2の引数
};

複数の関数に渡します

void func1(struct args *args) { args->a += 1; }
void func2(struct args *args) { args->b += 1; }

呼び出す時は一時オブジェクトで渡します

func1(&(struct args){ .a = 1 });
func2(&(struct args){ .b = 2 });

構造体のメンバが増えると一時オブジェクトの作成に時間がかかるようになって、
func1やfunc2などの関数が沢山呼ばれた場合に重くなるんじゃないかと心配してます
0773デフォルトの名無しさん (ワッチョイ e701-h83k)
垢版 |
2020/05/03(日) 15:38:01.56ID:9RS4MG9F0
どうしても気になるんなら union にしときゃいい

union args {
struct { int a,b,c, … } forA;
struct { double A,B,C, … } forB;
 …
struct { int a,b,c, … } forZ;
};

void func1(union args *args) { args->forA.a += 1; }
void func2(union args *args) { args->forB.A += 1; }
0778デフォルトの名無しさん (ブーイモ MMcf-oXVp)
垢版 |
2020/05/03(日) 22:27:02.54ID:oqZmrKinM
逆にC++では出来なかったりするのだ
0780デフォルトの名無しさん (ワッチョイ a7f9-h83k)
垢版 |
2020/05/04(月) 03:57:58.15ID:aRLx0l420
>>779
うん、どっちでも同じように使える
Win32APIのインターフェースはCで、C++はかなり上位互換なので
だからC++じゃないCでやる意味はあまりないよ

そこだいぶ古いなぁと思ったら、新しいところに移行してるじゃん
http://www.wisdomsoft.jp/
でもやっぱり古いね

猫でもの方がまだちょっと新しい分マシかも
http://www.kumei.ne.jp/c_lang/
0782デフォルトの名無しさん (ワッチョイ dfc5-h83k)
垢版 |
2020/05/04(月) 06:41:41.63ID:89CdWSZ70
>>775
一時オブジェクトではなくて引数の構造体を使いまわした場合は構造体のほうが早いのでしょうか?

struct args args = { .a=0, .b=1, .c=2 };
func1(&args);
func2(&args);

func1(0, 1, 2);
func2(3, 4, 5);
0789デフォルトの名無しさん (アウアウエー Sa9f-ur4w)
垢版 |
2020/05/04(月) 11:12:33.82ID:mShckTAJa
C も C++ も経験ないからどっちが良いかって聴かれて
C が良いって言っただけなのに

なんでお前がやる気を無くす必要があるんだ?
0796デフォルトの名無しさん (JP 0H9f-r+sk)
垢版 |
2020/05/04(月) 16:02:52.28ID:VPxf0TWkH
simulationライブラリで純粋な関数式プログラミングをする
ttp://x0000.net/topic.aspx?id=3631-0

UIライブラリ (C#, 2D) を作ったよ
ttp://x0000.net/topic.aspx?id=3688-0

連続と離散を統一した!
ttp://x0000.net/topic.aspx?id=3709-0

4Dエンジン
ttp://x0000.net/topic.aspx?id=3677-0

matrixのライブラリ
ttp://x0000.net/topic.aspx?id=3711-0

ある強力なFor関数
ttp://x0000.net/topic.aspx?id=3630-0

SQLライブラリ
ttp://x0000.net/topic.aspx?id=3675-0
0797デフォルトの名無しさん (ワッチョイ e7ca-Rrpt)
垢版 |
2020/05/04(月) 16:41:52.22ID:7/M++IMa0
>>782
一時オブジェクトかどうかじゃなく、関数の引数の型によって内部的な関数の呼び出し方(というか引数の渡し方)が変わる。
int の値のなんかだとスタックに詰まずレジスタで渡す高速な呼び出し方になったりするが、
構造体ポインタ渡しだとポインタそのももはレジスタで渡されても実際の値はポインタ経由のメモリアクセスにならざるを得ないから、理屈の上では遅くなる。
0802デフォルトの名無しさん (ワッチョイ 07b3-wl64)
垢版 |
2020/05/04(月) 19:26:17.85ID:nMCshN110
差が大きいか小さいかなんて中身によるだろ

ほとんど何もしない関数で
関数として実装されて
ループの中にあれば
差が大きいこともある

構造体の方が速い事もあるし
直接の方が速い事もある

とりあえずはきれいなコードで作っておいて
パフォーマンスが問題だとわかった時点で対策すれば良い
おそらく今回の部分は99.99%気にしなくて良い
0804デフォルトの名無しさん (ワッチョイ 07b3-wl64)
垢版 |
2020/05/04(月) 19:34:24.84ID:nMCshN110
同じコードでも周りのコードによって時間が大幅に変わる事があるので注意

例えば関数がインライン展開されてたものが
全然関係ない所からのコールが追加されただけで
関数コールに変わったりする

また、
結果を使わないただの時間測定コードだと
関数コール自体消される事も良くある
0805デフォルトの名無しさん (ワッチョイ e7ca-Rrpt)
垢版 |
2020/05/04(月) 21:14:13.28ID:7/M++IMa0
最適化しててもアセンブラソース吐かせて比べてみると勉強になると思う。
いやむしろ最適化してる時こそアセンブラソース吐かせて確認するのがいいかも。
勝手にインラインになってたり処理が省略されたりするしね。
0806デフォルトの名無しさん (スフッ Sdff-h83k)
垢版 |
2020/05/04(月) 21:45:58.62ID:GSMTfSohd
最適化なしでリリースすることはあり得ないのだから
当然測定もチューニングも最適化オプション込みででやるべきだし
O0オプションで吐いたアセンブラなんて見ても無意味
0808デフォルトの名無しさん (ワッチョイ e7ca-Rrpt)
垢版 |
2020/05/04(月) 22:11:38.30ID:7/M++IMa0
あぁ、呼出規約についての勉強のつもりだったから最適化無しを想定したけど、
ベンチマークみたいなコード書いてるんだろうからそもそも処理が残ってるかの確認とかの意味で最適化時のを見た方がいいと書いた。
0809デフォルトの名無しさん (ワッチョイ e7ca-Rrpt)
垢版 |
2020/05/04(月) 22:11:58.28ID:7/M++IMa0
あぁ、呼出規約についての勉強のつもりだったから最適化無しを想定したけど、
ベンチマークみたいなコード書いてるんだろうからそもそも処理が残ってるかの確認とかの意味で最適化時のを見た方がいいと書いた。
0814デフォルトの名無しさん (ワッチョイ 5fbd-NlPP)
垢版 |
2020/05/04(月) 22:55:41.14ID:nUxpSn1T0
初心者です。
ポインタの理解を深めるために、visual studioのデバッグで、変数の値をウォッチしています。

例えば、
FILE *src;
  fopen(〜10byteのファイルを開く〜)
fseek(fp, 0L, SEEK_END);
printf("%s は %ld byteです.\n",filename, ftell(fp));

こんな感じの命令をやった時に、*fpとかfpとか&fpの変数を観察してみたのですが、
値がピクリとも変化していないのに、ftell(fp)を使うとちゃんと10byteと表示されるのです。
fsekkの時点でfpは変化していると思いますが、どのようにウォッチすれば良いのでしょうか?
ftellはfpのなんの変数を見ているんでしょう…。。
0815814 (ワッチョイ 5fbd-NlPP)
垢版 |
2020/05/04(月) 23:00:16.50ID:nUxpSn1T0
>>814
× FILE *src;
○ FILE *fp;
だめですね。ごめんなさい。
0816◆QZaw55cn4c (NZ 0H9f-4Tsz)
垢版 |
2020/05/04(月) 23:15:21.86ID:7QD1dgDVH
>>814
FILE *fp はポインタですから、fp の指す位置は変化しません
fseek() で変化するのは、fp が指した先の領域(struct FILE 構造体)の中にあるパラメーターであって、fp 自体は変化せず同じ位置を指したままでいます。
0818デフォルトの名無しさん (ワッチョイ df47-ts7H)
垢版 |
2020/05/04(月) 23:20:08.53ID:Fiop0J3e0
>>814
FILE構造体が直接情報を持っているとは限らず、さらにポインタを多段に経由したり
OS管理のファイルハンドル・ファイルディスクリプタなどの先に情報がある可能性もある。

そもそも構造体メンバが規定されていないのでウォッチで何も見えなくても不思議は無いよ。
0820デフォルトの名無しさん (ワッチョイ 5fbd-NlPP)
垢版 |
2020/05/04(月) 23:26:28.97ID:nUxpSn1T0
>>816
ありがとうございます。fp自体は変化してなかったのですね。
FILE構造体の中に現在値を示す変数があるのだと思い、fp.posみたいなことを試してみたのですが、
よくわかりませんでした。(_Placeholderとかいうのしかなさそうでした。)

struct FILE構造体の中身の値の変化を、ウォッチ機能で観察することは可能なんでしょうか?
0821◆QZaw55cn4c (NZ 0H9f-4Tsz)
垢版 |
2020/05/04(月) 23:35:10.05ID:7QD1dgDVH
>>818
OS 側ファイルディスクリプタが FILE に記されることはあっても、
シーク位置を OS とで共有するのは難しいのではないでしょうか?
0822デフォルトの名無しさん (ワッチョイ 5fbd-NlPP)
垢版 |
2020/05/04(月) 23:35:26.33ID:nUxpSn1T0
>>818
ありがとうございます。
もっと上位(OSレベル)でやり取りされてる情報であるから、下位(自作プログラムレベル)からでは観察できないってことですか…

>>819
ありがとうございます。
FILE構造体の中に、_ptr(現在値)や_base(先頭アドレス)があると聞きました。
なので、fp._ptrとかを試しましたが、何も見れませんでしたね。

自分で定義した構造体の中の変数は観察することができるのに、なんでFILE構造体の変数は観察できないんだって、
不思議に思ってました…。
0823デフォルトの名無しさん (アウアウウー Saab-dhD/)
垢版 |
2020/05/04(月) 23:50:07.56ID:29dvD9qia
>>817
俺は以下のようなことを繰り返して段階的に複雑なケースを理解していったよ。
まずは入門書で基本的な概念を理解する。
実際にコードを書いて、様々な型の変数、配列、構造体やその要素に対して&演算子を適用してアドレス値を取り出して、対応する型のポインタに入れる。
ポインタが格納している値、ポインタが指している先に格納されている値をprintfで表示して確認する。
ポインタをインクリメント、デクリメントしたりしてポインタ自体の値の変化やポインタが指す先の値が何なのかを確認する。
一段階のポインタが理解できてきたらポインタのポインタなど多段階の間接参照を試してみる。ここでもまたポインタの演算を様々に試す。
値が予想とは異なるものだったり、型が違うとコンパイラに指摘されたりしたら、やはり絵を描いてどこがどう違っていたかを考えてみる。
何かを理解したら、更にここをこうしたらどうなるのかという疑問が色々沸いてくるのでそれらも逐一コードを書いて試していく。
慣れてくれば多次元だったりconstや関数ポインタなども含めて複雑にネストした宣言もシンプルなルールが再帰的に組み合わせただけのものというのが腑に落ちて理解できてくると思う。
0824デフォルトの名無しさん (ワッチョイ e763-ts7H)
垢版 |
2020/05/04(月) 23:51:26.90ID:GsKQPEDp0
FILE構造体でアクセスした場合は、直接ファイルを操作するというよりも
バッファリングしたデータへのアクセスと考えた方が良いかも知れません

実際のファイルはファイルディスクリプタというOSの仕組みの中で操作してます
0826デフォルトの名無しさん (ワッチョイ df52-dhD/)
垢版 |
2020/05/05(火) 00:00:45.59ID:J1ERvQ2q0
>>822
FILE構造体の内容は仕様で規定されていないから、使用するライブラリ等の実装で決められていてユーザ側が知ることはできないし知る必要もない物だよ。_ptrとかがあるという話も、とある実装ではそうなっているということ。
そもそものポインタの理解を深めるという目的なら、FILE構造体の中身はこれ以上深入りする必要はないね。
FILE構造体は初心者が真っ先に触れるものの一つだけどちょっと特殊な存在だね。
0827デフォルトの名無しさん (ワッチョイ 7f61-IRNk)
垢版 |
2020/05/05(火) 00:06:58.87ID:NEWGqmtJ0
FILE構造体の中身は標準ライブラリの実装によって違うんだから深追いしても無駄なだけ
FILE *fp;はそもそもfopenで帰ってきたものを他のファイル操作関数に渡すだけの使い方しかしないんだからポインタを理解する教材に向いてない
0829デフォルトの名無しさん (ワッチョイ e77b-kZrw)
垢版 |
2020/05/05(火) 05:40:45.15ID:ifa9JNiv0
構造体 FILE は普通はポインタの形でしか使わないから
ユーザーが見るヘッダではopaqueかも知れないしね正ちゃん。

>>817
「ポインタ変数には“変数のアドレス”が記録される」っていう
素朴な理解でしばらく進められないかな。
&a は「変数aのアドレスを得る」
*p は「ポインタ変数pが指しているアドレスから内容を取り出す」
0830デフォルトの名無しさん (ワッチョイ bf8c-Sf3c)
垢版 |
2020/05/05(火) 06:30:19.59ID:nQMNje/J0
初心者は最初にシェルスクリプトでプログラムを固めた方がいいよ。
0832デフォルトの名無しさん (ワッチョイ c7e3-4AVG)
垢版 |
2020/05/05(火) 07:45:39.83ID:q3hMRGAJ0
コメント失礼します
年収200万、一年ごとに5%上がりさらに10万円あがる20年後の給料は?と言う問題と、2時間格闘したのですが全くわかりません。
whileを使って何度やってもエラーが出ます
0835デフォルトの名無しさん (ワッチョイ c7e3-NlPP)
垢版 |
2020/05/05(火) 08:38:22.00ID:q3hMRGAJ0
>>832
(repl):3: syntax error, unexpected '=', expecting end-of-input
x*1.05=+100000
こんなのが出ます
0845デフォルトの名無しさん (ワッチョイ c7e3-NlPP)
垢版 |
2020/05/05(火) 13:25:50.40ID:q3hMRGAJ0
>>843
わざわざ丁寧にありがとうございます!
0846デフォルトの名無しさん (ワッチョイ dfa5-fzHW)
垢版 |
2020/05/05(火) 13:36:18.22ID:JDagEH9a0
FILEは紙テープ時代の仕様を引き摺ってるからね
しょうがないね
0853デフォルトの名無しさん (ワッチョイ 5fbd-NlPP)
垢版 |
2020/05/05(火) 18:12:23.92ID:ekADkGWO0
なぜ、fopenは"fp"でポインタ受け取り、fopen_sは"&fp"でポインタを受け取るのか分かりません。
定義?を見て、見極める方法はありますか?

fopen_sの定義に、引数として"FILE** pFile"を指定されているとこに、"&fp"が入るのは何故ですか?
他の命令でも*fp、fp、&fpのどれを入れるのか判断がつきません…。

<プログラム例>
FILE *fp
fp=fopen("aiueo.txt","rb");
fopen_s(&fp,"aiueo.txt","rb") …★

<fopenの定義>
errno_t fopen_s(
 FILE** pFile,
 const char *filename,
 *mode
);

語彙力が乏しいのでわかりにくくて大変申し訳ございません。
0857デフォルトの名無しさん (ワッチョイ 5fbd-NlPP)
垢版 |
2020/05/05(火) 18:42:13.15ID:ekADkGWO0
>>854-855
ありがとうございます。
以下の理解でよろしいのでしょうか?

(1)変数FILE* fpの場合
・"*fp"(FILE型?)
・"fp"(FILE*型)
・"&fp"(FILE**型)

(2)変数FILE**fpの場合
・"**fp"(FILE型?)
・"*fp"(FILE*型)
・"fp"(FILE**型)
・"&fp"(FILE***型)

変数に付ける"*"の数を増やすと、逆に型の"*"が減るのはなんか気持ち悪いんですね…
0859デフォルトの名無しさん (ワッチョイ 5fbd-NlPP)
垢版 |
2020/05/05(火) 20:26:30.94ID:ekADkGWO0
>>858
ありがとうございます。

型側と変数側で"*"を奪い合ってるイメージをすると覚えやすいかなと感じました。
int型:値そのものを入れるイメージ
int*型:値が格納されているアドレスを入れるイメージ(ポインタ)

int * p;
*p = 1; (1つしかない"*"を変数側に付けてしまったので、int型となり"*p"には値が入る。)
p=&hensu; (変数側に"*"を付けてないので、int*型となり、"p"にはアドレス番号が入る)
0860デフォルトの名無しさん (ワッチョイ df52-dhD/)
垢版 |
2020/05/05(火) 20:48:34.53ID:J1ERvQ2q0
>>859
覚え方は色々あると思うけど、俺は以下の方法がオススメ。

int i; → iがint型の値になる。iはint型の変数。
int *p; → *pがint型の値になる。
つまりpは*を付けてint型の値になる、すなわちp自信はint型を指すポインタ (=pはint*型の変数。)
0861デフォルトの名無しさん (ワッチョイ 2701-tcyL)
垢版 |
2020/05/05(火) 21:32:51.06ID:FuU+hT+R0
俺の覚え方はこうだな

&:メモリの位置(アドレス)を取り出す操作
*:メモリの位置に記録されている値を取り出す操作
型:値が格納されているメモリの幅を示す
  ※例えばint型は4バイトなのであるint型のポインターが0x0000を指していたら
   メモリの0x0000〜0x0031に格納されている値が対象となるデータ
   int型ポインターでなくchar型ポインターだとしたら
   メモリの0x0000〜0x0001に格納されている値が対象となるデータ
0863デフォルトの名無しさん (ワッチョイ 2701-tcyL)
垢版 |
2020/05/05(火) 21:43:41.89ID:FuU+hT+R0
>>861
*については2つ意味があるとして覚えているわ(この認識が合ってるのかは分からん)

変数宣言時の*の意味:宣言した変数がポインターであることを示す
それ以外の*:メモリの位置に記録されている値を取り出す操作

ポインター:メモリの位置を保存するための変数
ダブルポインター:(ポインターの)メモリの位置を保存するための変数
トリプルポインター:(ダブルポインターの)メモリの位置を保存するための変数
・・・・以下略
0864デフォルトの名無しさん (アウアウエー Sa9f-kSwD)
垢版 |
2020/05/05(火) 21:43:43.86ID:fevQ7qkha
fopen_s では、*fp を引数として参照渡ししてるからだよね、関数側で書き換えてもらうために
int i; を &i で参照で渡して、i を書き換えてもらうように、ポインタを渡して fopen_s で内容を書き換えてもらっている
0865デフォルトの名無しさん (ワッチョイ e7ca-Rrpt)
垢版 |
2020/05/05(火) 22:05:47.08ID:ZggaRwfV0
ポインタの覚え方もさることながら、型の修飾もどうだったかすぐ忘れるw
値を指し示す const ポインタなのか、const な値を指し示すポインタなのか、その両方なのか、それらの書き分けするのに毎回 google に聞いてる。
多重ポインタとか関数ポインタとか volatile なんかも組み合わされてくると、書けはしてももはや読める自信が無いw
0870デフォルトの名無しさん (ワッチョイ 6aad-48kr)
垢版 |
2020/05/06(水) 00:52:01.23ID:izcxg96Z0
>>822
FILE型についてはわざと中身を隠蔽していると思って良い。

オブジェクト指向の言語ならクラス変数が全てprivateになってるのと同じようなもの。で、そういう変数の読み書きは専用のメソッドを通して行う。
何故そうしているのかというと、外部から勝手に書き換えられたくないからだ。書き換えられると正常な動作を保証できなくなるということでもある。
0878デフォルトの名無しさん (ワッチョイ 268c-Ds/W)
垢版 |
2020/05/06(水) 08:39:08.38ID:yZWcrGyp0
>>859
C言語で2次元配列を動的に割り当てる4つの方法
もお薦め
0880デフォルトの名無しさん (アウアウエー Sae2-jgrQ)
垢版 |
2020/05/06(水) 11:10:31.35ID:q6Rk1GB6a
本来Cでは「二次元配列」と呼ばれないものまで
二次元配列の4種類!(キリっ)とか紹介するのは非常にまずいと思う
0881デフォルトの名無しさん (ドコグロ MM22-6mzC)
垢版 |
2020/05/06(水) 15:21:29.55ID:+SMDQMnPM
>>875
strcmp的とかよくわからんし、
>>779がCではなくC++を憶えないと理解できないコードがあるのか例示してくれ
と言われてもそんなものがあるなんて誰も言ってないから「ないけど、それが何か?」で終わる話なんだけどw
0882デフォルトの名無しさん (ワッチョイ ea0e-oySJ)
垢版 |
2020/05/06(水) 16:17:32.30ID:Ye566tnt0
>>881
では何故俺が792で「猫でもわかる」はCだと言ったことに対して
拡張子がcppだなどと絡んできた?

779 Win32APIを学ぶにはCとC++どっちを学ぶべき?
780 Win32APIはCだ(猫でものリンクを貼る)
786 むしろC++を知らないほうがいい、Cからやれ
795 「猫でもわかる」はCだ
796 C++のクラスを使ってない、拡張子はcppだ

この流れで「猫でもわかる」がC++だと主張してないとぬかすなら
アホは黙ってろ
0884デフォルトの名無しさん (ドコグロ MM8a-6mzC)
垢版 |
2020/05/06(水) 18:37:10.19ID:UHy6F9xlM
>>882-883
> C++のクラスとかを使ってないだけ
> そもそもサンプルコードのファイル名はsample01.cppとかだからC++としてビルドしてるし
と言う「事実」を書いてるだけだよw
C/C++の両方でビルドできるコードの存在を知らんのか?
0890デフォルトの名無しさん (ワッチョイ ea0e-oySJ)
垢版 |
2020/05/07(木) 08:31:41.78ID:Xvq6sZ7Q0
何も意図せずに「猫でもわかる」は拡張子がcppだと譫言をぬかすのは
ガキが何のボタンかわからんものを押しちまうのと同じ
自分が何をしでかしたか理解してない
0896デフォルトの名無しさん (ワッチョイ bb69-7oqX)
垢版 |
2020/05/07(木) 10:24:21.75ID:khGNNtcv0
f(x)=任意の数値 となる x を数値演算で探せ
g(x) = f(x) - 任意の数値 として g(x) = 0 となる x を数値演算で探す
※ 任意の数値が変数 x でも差しさわりはない f(x)-x = 0 となる x を探索する話に帰着

あとは >>894 の通り
ニュートン・ラプソン法なり 2分法なりで
0901デフォルトの名無しさん (ドコグロ MMcf-6mzC)
垢版 |
2020/05/07(木) 10:55:03.14ID:jSOdmY17M
>>898
指摘内容すら理解できてないのかよ…
流石に恥ずかしくね?w

> クラスを使ってないだけか?
> テンプレートや無名共同体は使ってるか?

> クラス「とか」な

> ここに書いてある内容のどこに
> >>779がCではなくC++を憶えないと
> 理解できないコードがあるのか例示してくれ

> と言われてもそんなものがあるなんて誰も言ってないから「ないけど、それが何か?」で終わる話なんだけどw

> この流れで「猫でもわかる」がC++だと主張してないとぬかすなら

> C/C++の両方でビルドできるコードの存在を知らんのか?
0906デフォルトの名無しさん (ワッチョイ ea0e-oySJ)
垢版 |
2020/05/07(木) 11:54:32.43ID:Xvq6sZ7Q0
>>905
で、おまえ792を嘘つき呼ばわりできるのか?
「猫でもわかる」はCだと言った792にイチャモンつけてきたのおまえだぞ
嘘つきなのか否か挙証責任を果たせないなら撤回か逃亡しかねえぞ
0908デフォルトの名無しさん (ワッチョイ 0bda-e0rh)
垢版 |
2020/05/07(木) 12:43:05.75ID:mY1dxeUW0
どうでもいいけど>>792のサイト内で

>この時ファイル名は「*.c」でも「*.cpp」でもかまいません。

と書かれてるくらいだから少なくともサイトの作者はC++は必須としてないように思えるけどなぁ
0910デフォルトの名無しさん (アウアウエー Sae2-jgrQ)
垢版 |
2020/05/07(木) 12:55:44.12ID:iKRewGMta
>>897
ルンゲクッタですねω判りますωω
0914デフォルトの名無しさん (アウアウクー MM73-jIkB)
垢版 |
2020/05/07(木) 14:41:31.91ID:itkoAyTSM
win32APIはCででもC++でもいいけどこのスレはc言語ならスレだから答えはcでいやん

それとどうでもいいけど拡張子は.cc派
0915◆QZaw55cn4c (ワッチョイ e798-EltK)
垢版 |
2020/05/07(木) 14:47:08.49ID:VS6AE9q50
>>914
>win32APIはCででもC++でもいいけど
コールバック関数はマングリングしていてはだめなので、最低コールバックだけは extern "C" が必要だと思いますから C++ オンリーというわけにはいかないでしょう
extern "C" を含んでの C++ 、というのなら理解しますが
0916デフォルトの名無しさん (ワッチョイ 8a52-ouS7)
垢版 |
2020/05/07(木) 14:52:09.99ID:NfUWzWTo0
>>912
自分に対する指摘は(ただの事実の指摘であっても)否定的な意味を持つ攻撃ととらえる残念な精神構造の人なんだと思う。最初の思い込みは後からどうやっても訂正しない(出来ない)タイプだろうから、これ以上突っつくのはやめてくれないかな?
理性のある側が引かないと、このどうでもいいレスバトルが終わらないから、頼むよ。
0924デフォルトの名無しさん (ワッチョイ ea0e-oySJ)
垢版 |
2020/05/07(木) 16:36:52.52ID:Xvq6sZ7Q0
>>923
俺にレスアンカーつけといて
そんな言い逃れは通らんぜ

自らの言葉に責任を持てない社会のクズにアホとか言われても
全く響かねえぜ、どうせその言葉にも責任持たないだろうからな
0925デフォルトの名無しさん (ワッチョイ ea0e-oySJ)
垢版 |
2020/05/07(木) 16:39:41.92ID:Xvq6sZ7Q0
こっちは弱点晒してんだぜ?
「猫でもわかる」のサンプルにC++の知識が必要な例を示されたら負けだ
こんだけノーガードしてやってんのに、そこを攻められない無能なやつw
0926デフォルトの名無しさん (アウアウエー Sae2-jgrQ)
垢版 |
2020/05/07(木) 16:49:50.98ID:8jv+kISLa
ID真っ赤な人をNGすればいいのかな?ω
0928デフォルトの名無しさん (ワッチョイ bb69-7oqX)
垢版 |
2020/05/07(木) 17:20:50.97ID:khGNNtcv0
>>915
スタックの使い方等の呼び出し規約に準じた関数へのポインタさえ渡ってれば
シンボル名が割当たってなくてもコールバックは為されるんじゃない?

シンボル名で呼び出す必要が出てきたときにマングリングがというのはあるだろうけど・・・ COM?
0929デフォルトの名無しさん (ドコグロ MM22-6mzC)
垢版 |
2020/05/07(木) 18:27:53.38ID:WyDD2uB5M
>>924
アンカーはお前のレスを参照してるんだからつけるのは当たり前
だからと言ってお前だけに言ってるわけじゃない
掲示板の使い方もわからんのかよ…

>>925
> 「猫でもわかる」のサンプルにC++の知識が必要な例を示されたら負けだ
だれもC++の知識が必要だとか言ってないのに何を言ってるんだよ
しかも勝ち負けとか
>>916が言う様に引っ込みつかなくなってるんだろうなw
0934デフォルトの名無しさん (ドコグロ MMcf-6mzC)
垢版 |
2020/05/07(木) 21:43:44.11ID:mj5cVlGOM
>>932
> 俺に言ってるだろ
お前に「も」言ってるよ
理解できるかどうか知らん
別に理解できなくてもいいよ、そういうアホもいるだろうしw

> 「猫でもわかる」はCなのかC++なのかShow your flatg!
なんでわざわざ頭悪い事を示すかなぁ

>>933
低能らしいレス乙
0936デフォルトの名無しさん (ワッチョイ fb7b-mW5x)
垢版 |
2020/05/08(金) 06:23:43.52ID:Br/73fC20
『猫でもわかる』のサイトで紹介されてるソースが
Cの範囲で書かれてるかC++特有の機能も使ってるか検証せよ、って
実際やってみるだけの価値のない口論な気がするけどなぁ。

そりゃ「俺の言ったことは正しい」「一片の反論も許さない」って
ご当人にはスレッド埋め立てるほど重要な件かも知れないけど。
それとも俺以外の皆さんはこの議論の決着を手に汗握って見守ってるのかな。
0938デフォルトの名無しさん (ドコグロ MM22-6mzC)
垢版 |
2020/05/08(金) 09:15:09.55ID:dq2lIdE/M
>> 「猫でもわかる」のサンプルにC++の知識が必要な例を示されたら負けだ
> だれもC++の知識が必要だとか言ってないのに何を言ってるんだよ
> しかも勝ち負けとか
> >>916が言う様に引っ込みつかなくなってるんだろうなw

確かにFAだなw
0939デフォルトの名無しさん (アウアウエー Sae2-jgrQ)
垢版 |
2020/05/08(金) 10:57:20.51ID:oIDbptWLa
>>935
文字通り隔離入院が必要だな
触らなければ感染しない
0941デフォルトの名無しさん (ワッチョイ 6aad-48kr)
垢版 |
2020/05/08(金) 11:08:34.04ID:VEr63gxN0
>>926
いや、もうこのスレ読まなくて良いと思う。見るのは次スレからで良いんじゃないかな。
0945デフォルトの名無しさん (ワッチョイ ea0e-oySJ)
垢版 |
2020/05/08(金) 14:03:29.86ID:FYQVpLgs0
まあ正直、あのサイトから
丸のまんまDLなんかしたことないから
拡張子なんか気にしてなかったな
petzoldとの説明の仕方の違いを読んでただけで

まさか、あれをC++だと言い張るやつがいるとは思わなくて面食らった
言い張ってねえととぼけているようだが
Cだと言う発言に同調しない以上BASICやCOBOLなわけもなく答えは1つだ
自分の発言のしょーもなさに気付いて言い訳しまくってももう遅い
0946デフォルトの名無しさん (JP 0Ha2-BedC)
垢版 |
2020/05/08(金) 14:17:14.69ID:UwSV314GH
simulationライブラリで純粋な関数式プログラミングをする
ttp://x0000.net/topic.aspx?id=3631-0

UIライブラリ (C#, 2D) を作ったよ
ttp://x0000.net/topic.aspx?id=3688-0

連続と離散を統一した!
ttp://x0000.net/topic.aspx?id=3709-0

4Dエンジン
ttp://x0000.net/topic.aspx?id=3677-0

matrixのライブラリ
ttp://x0000.net/topic.aspx?id=3711-0

ある強力なFor関数
ttp://x0000.net/topic.aspx?id=3630-0

SQLライブラリ
ttp://x0000.net/topic.aspx?id=3675-0

学術の巨大掲示板群 - アルファ・ラボ
ttp://x0000.net

数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など

PS 連続と離散を統一した!
ttp://x0000.net/topic.aspx?id=3709-0
0947デフォルトの名無しさん (ドコグロ MMcf-6mzC)
垢版 |
2020/05/08(金) 14:27:02.39ID:CIh1Y7kYM
>>945
> Cだと言う発言に同調しない以上BASICやCOBOLなわけもなく答えは1つだ
またその話かよ、チャンスどころかノーガードじゃねーかw
まあ毎回玉砕してるのに無視してるんだから無敵だわな

> この流れで「猫でもわかる」がC++だと主張してないとぬかすなら

> C/C++の両方でビルドできるコードの存在を知らんのか?
0948デフォルトの名無しさん (ワッチョイ ea0e-oySJ)
垢版 |
2020/05/08(金) 14:48:39.11ID:FYQVpLgs0
>>947
ノーガードは>>925で言っただろ
こっちが引き下がる条件をはっきり書いてやってんのに
おまえそれができねえだろうが

で、何が玉砕だ? 弾切れのくせに勝利宣言してんなよw
https://dotup.org/uploda/dotup.org2139674.png
こんな状況で先手が投了したなんて言っても誰も信じねえのと同じだ
0951デフォルトの名無しさん (ドコグロ MM43-6mzC)
垢版 |
2020/05/08(金) 15:13:10.54ID:tdVddCdpM
>>948
既に
>> 「猫でもわかる」のサンプルにC++の知識が必要な例を示されたら負けだ
> だれもC++の知識が必要だとか言ってないのに何を言ってるんだよ
> しかも勝ち負けとか
> >>916が言う様に引っ込みつかなくなってるんだろうなw
…で、玉砕してるのに何度も繰り返すのは低能によくある行動

>>950
ボコられてる事すら理解できてないんだろうな…
理解力に致命的な欠陥があるんだろう
0952デフォルトの名無しさん (ワッチョイ ea0e-oySJ)
垢版 |
2020/05/08(金) 15:20:29.91ID:FYQVpLgs0
ああ、そうか
「玉砕」という日本語の意味を間違えて憶えてしまっているのか

俺があのサイトはCだと言っていることに文句つけようとして
その目的が全く果たせないようなことを玉砕って言うんだぜ

俺: C++だと主張したな?
屑: 主張してません
俺: じゃあ何の用だ
屑: 他の人に言ってます

宣戦布告(または先制攻撃)しといて歯が立たないと見るや
そんなことしてません、だっておバンバン
0954デフォルトの名無しさん (ドコグロ MM43-6mzC)
垢版 |
2020/05/08(金) 16:42:52.62ID:6VnAph/sM
>>952
> 俺: C++だと主張したな?
> 屑: 主張してません
> 俺: じゃあ何の用だ
> 屑: 他の人に言ってます

チンピラ: なにガンつけてるんだ?
一般人: いや、見てませんけど
チンピラ: じゃあ何の用だ
一般人: 他の人を見てます

なるほど、チンピラの思考回路が良く分かるw
0955デフォルトの名無しさん (アウアウエー Sae2-jgrQ)
垢版 |
2020/05/08(金) 17:15:10.30ID:iOEjZYuSa
今日は夕方出勤かおまいら
ちゃんと夜には寝ろ
0958デフォルトの名無しさん (アウアウエー Sae2-jgrQ)
垢版 |
2020/05/08(金) 18:10:54.26ID:iOEjZYuSa
だれでも良かった
スカっとしたかった
今は反省している

みなさんそうおっしゃいます
0963デフォルトの名無しさん (アウアウクー MM73-jIkB)
垢版 |
2020/05/09(土) 03:41:35.63ID:RyAo9srtM
猫でもわかる
ガン
チンピラ

NGはここらへんでいいですか
なんなんだコノスレは
0964デフォルトの名無しさん (ワッチョイ 8a52-ouS7)
垢版 |
2020/05/09(土) 06:56:42.64ID:qZuZMPTr0
>>963
それ以外にも汚い罵詈雑言は一通りNGしとくと良いかも。そんな言葉が入っているレスはほとんどの場合は当人たちにしか意味のないものだから。
あんだけ自己主張激しくて承認欲求強いんだから、コテハン付けてくれると助かるんだけどね。
0965デフォルトの名無しさん (ワッチョイ 2301-kk50)
垢版 |
2020/05/09(土) 07:31:37.38ID:djQF9o2a0
競技プログラミング系の動画だったと思うんだが
登壇者がプログラミング覚えたての頃(中学生ぐらい?)に
猫でもわかるを読んでみたけど分からなくて
「あれは猫でもわかるじゃなくて猫しかわからないだ」
みたいな話をしていた動画があった気がする
0968デフォルトの名無しさん (ワッチョイ dabd-Geaw)
垢版 |
2020/05/09(土) 12:13:47.04ID:GitA8I250
fopen_sでのファイル作成について教えてください。

現在は、↓で"test.txt"を作成しています。
fopen_s(&file, "test.txt", "w");

これを変数iの値と組み合わせたファイル名を作りたいときはどうすればいいですか?
例えば、i=5 で”5_test.txt”というファイルを作りたい場合です。
printfでしたら、printf("%d_test.txt",i);で表示自体はできると思います。

fopens_sではどのように記述すればできるでしょうか?
よろしくお願いいたします。
0969デフォルトの名無しさん (アウアウエー Sae2-jgrQ)
垢版 |
2020/05/09(土) 12:16:37.23ID:3rxWY8lSa
sprintf
0972デフォルトの名無しさん (ワッチョイ eaa5-NK3V)
垢版 |
2020/05/09(土) 12:35:40.00ID:qYhHAGHH0
>>968
#define LEN 1024


char fn[LEN];

int i = 5;
sprintf_s(fn, LEN, "%d_test.txt", i);

fopen_s(&file, fn, "w");
0973デフォルトの名無しさん (アウアウエー Sae2-jgrQ)
垢版 |
2020/05/09(土) 12:40:25.81ID:3rxWY8lSa
#define LEN 1024
char fn[LEN] = "0_test.txt";
int i = 5;
fn[0] += i;
fopen_s(&file, fn, "w");
0976デフォルトの名無しさん (ワッチョイ dabd-Geaw)
垢版 |
2020/05/09(土) 13:43:10.35ID:GitA8I250
>>969-972
解決できました!こんなコマンドがあったのですね。
例も記載頂き、ご丁寧にありがとうございました。

>>973
その発想はありませんでした…。
値を追ってみたところ、バイナリ値で "0"=0x30、"5"=0x35なので、30+5ってことなのですね。
確かに配列で1文字ずつ管理しているのだから、指定して直接文字を変えてしまえばいいんですね…
0977デフォルトの名無しさん (JP 0Ha2-BedC)
垢版 |
2020/05/09(土) 14:41:14.53ID:kMGTFWTFH
学術の巨大掲示板群 - アルファ・ラボ
ttp://x0000.net

数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など

PS 連続と離散を統一した!
ttp://x0000.net/topic.aspx?id=3709-0
0978デフォルトの名無しさん (ワッチョイ 2301-lxbn)
垢版 |
2020/05/10(日) 01:10:39.43ID:ES5yl2P70
ポインタ宣言

int * a;

intの部分、なんでいるのかわからん?

だって、型宣言に、サイズだけが必要なら、ポインタ型(intへのポインタ型、ではなく)
っていう、情報だけで、いいはずじゃん?

コンパイラの理解が必要なのかね?
0982デフォルトの名無しさん (ワッチョイ 9f02-5fG7)
垢版 |
2020/05/10(日) 02:41:19.19ID:D0AaY1h70
int *a; ← intのポインター

*a = 1; ← ポインターaが示すメモリーにint型として1を格納

void *b; ← 型のないポインター

*b = 2; ← ポインターbが示すメモリーにどんな型で2を格納したらいいかわからないからコンパイル時にエラー
0987デフォルトの名無しさん (ワッチョイ bbca-BAqB)
垢版 |
2020/05/10(日) 08:22:42.64ID:L8gH+HH40
>>984
なんでそんな言語仕様になったのかって話と捉えるべきでしょ。

単純にCは型を意識する言語であって、その領域のサイズや代入や演算時の暗黙のキャストの仕方を決定するために *a が何なのか判明してる必要があるからだろ。
その領域が 8byte ということしか分からなければ、ポインタなのか long long なのか double なのか構造体なのかも分からず、(*a)++ すらどんなマシンコードを吐けばいいのか分からん。
0990デフォルトの名無しさん (アウアウエー Sae2-jgrQ)
垢版 |
2020/05/10(日) 12:57:55.79ID:hDQHciega
python
0993デフォルトの名無しさん (ワッチョイ 6aad-48kr)
垢版 |
2020/05/10(日) 21:41:25.92ID:D+x5WbLs0
GNUCはvoid*計算時はchar*計算した時と同じになるな。
GNUだけの特別仕様のようだが。
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
SLOT Results
🎰🎰🎰 Excellent!! 0
🎴🎴🎴 Gratz!! 0
🌸🌸🌸 OPPAI Ban!! 0
💣💣💣 Backingum!! 0
Win!! 1
Points 4 pts.

life time: 117日 6時間 21分 13秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。

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