C言語なら俺に聞け 151

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001デフォルトの名無しさん (ワッチョイ cf8f-fy95)
垢版 |
2019/04/02(火) 11:23:37.62ID:SQXqRaAc0
!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
0811デフォルトの名無しさん (ワッチョイ a101-0JeU)
垢版 |
2019/06/07(金) 22:23:25.13ID:e6zybBXY0
正常というのは1つの状態しかないが
異常には色々な種類があるのでそれを区別するためにコードとして返したい

というのと

2値しかない真偽をどう値に配分するか

というのを同列に並べるとパニック。 C言語では別のものとして割り切る


なぜC言語では偽を0に割り当てたのか?という問いの答えを求めているのならば…
俺は知らない
0813デフォルトの名無しさん (ワッチョイ cdab-BGv3)
垢版 |
2019/06/07(金) 22:30:40.09ID:51aJPRpO0
ソフト会社に長年いて開発者からこの質問は初
OSインストールできませんなんてすごく高度なんだなって思った

コマンドのテストでコマンドの戻り値ってあるんですがなんですか?
0820デフォルトの名無しさん (ワッチョイ 417b-sn8J)
垢版 |
2019/06/08(土) 11:21:36.15ID:5iouJYEP0
返り値0でエラーなしはUNIXのコマンド終了ステータス以来の慣習かな。
「正常終了」は状態が1種類しかないけど、失敗は「どう失敗したか」で
複数の状態があるから、正常で0、他の値はエラーコードってのは便利でしょ。

論理演算子の結果で true false の1と0は、論理学の数値表現を
プログラム言語にそのまま写しこんだからじゃないかと。

関数は一般にエラー状態を返り値で返す、と思っていれば
正常 == 返り値0 == false は違和感ないかと。
このルールから外れてるのは「失敗時にNULLを返す」タイプの関数で、
結構たくさん存在するのが困ったところだけど。
0821デフォルトの名無しさん (ワッチョイ c379-uQfi)
垢版 |
2019/06/08(土) 11:32:28.80ID:7CBKOF2N0
Cでは同一のもとして動かせてしまうが
そもそもエラーコードとboolを同一視してる時点で論外なんだが
0822デフォルトの名無しさん (ワッチョイ 77f2-to8s)
垢版 |
2019/06/08(土) 11:38:57.76ID:WG7jlf5q0
論理型を別に設けずに整数型で代用してしまおうというアイデアはBやCの言語仕様をコンパクトに
抑えるのに役立ったが、今となってはプリプロセッサマクロと同じくらいの悪しき遺産だなぁ。
0826デフォルトの名無しさん (ブーイモ MM5b-XTNn)
垢版 |
2019/06/08(土) 15:41:57.08ID:bm2ApAetM
正常時1で異常時0を返す関数が混ざってたり
正常時ポインタで異常時ヌルポ返す関数があったり
それらの関数の返り値を全部 if でチェックしててカオスだったことがあります
0828デフォルトの名無しさん (ワッチョイ 77f2-to8s)
垢版 |
2019/06/08(土) 16:38:04.87ID:WG7jlf5q0
ワインバーグの本にあったなあ。ドル紙幣はみんな同じ色、同じサイズで見分けがつきにくいけど、
それが常識だと思っている人は、一定の確率で間違えてしまうことも世界の法則で仕方のない
ことだと思っているとか。
0831デフォルトの名無しさん (ワッチョイ 9bd2-9700)
垢版 |
2019/06/08(土) 18:53:36.19ID:jXs/KV+s0
戻り地がboolのときはtrueが成功
intのときは0が成功なんだよ
0835デフォルトの名無しさん (アウアウウー Sa1d-I703)
垢版 |
2019/06/08(土) 21:28:56.66ID:gCLo3iIIa
>>830
それのせいでPrelではシステムコールと同名の関数の返り値がいまいち統一取れてなかったりして、結局マニュアル見ながら個別に覚えざるを得なかったりする。
Perlはだいたいは1が成功でundefが失敗なんだけどね。(undefはCでのNULLみたいなもの。未定義を意味する。定義されてて値が0の時とは違うが、書き方によっては同じように扱えることもある)。
0837デフォルトの名無しさん (ワッチョイ c38c-LJAA)
垢版 |
2019/06/09(日) 11:06:53.62ID:42ARNGRn0
インクルードをURLで引っ張ってこれたら面白いのに。
0839デフォルトの名無しさん (ワッチョイ ebb6-fbqF)
垢版 |
2019/06/09(日) 11:59:40.15ID:W83DJxDE0
コスパ最強の副業「動画編集」で稼ぐ方法【生ハム登場】
https://www.youtube.com/watch?v=0ogHVUKoa8k
【最強の副業】動画編集で稼ぎ続ける人の条件【未来予想】
https://www.youtube.com/watch?v=e-IA4ePHzOs
【おすすめ副業・在宅ワーク】「動画編集」は初心者でも時給1,500円狙えます。
https://www.youtube.com/watch?v=8gYAqdSsI98&;t=168s
【与沢翼】動画編集素人でも本気でやれば個人で月収1000万も夢ではないですよ。
実は動画ってすぐプロと同じクオリティで作れちゃうし月収20万はすぐですよ
https://www.youtube.com/watch?v=ws55W45OLbE
センスのいい映像を短時間で編集する方法
https://www.youtube.com/watch?v=k0TT4Tbf_Ec
0840デフォルトの名無しさん (ワッチョイ 5b02-EF/o)
垢版 |
2019/06/09(日) 14:38:56.62ID:zgQq0a060
>>837
/use/include ディレクトリをNFS マウントでもしとけ。
0841デフォルトの名無しさん (スプッッ Sddb-EU19)
垢版 |
2019/06/11(火) 14:18:29.61ID:suKt4vmPd
すみません、質問があります。

環境はlinuxです。
ある共有ライブラリlibA.soをロードするプログラムbがあります。
このプログラムbをlibA.so抜きでgccでビルドすることはできるでしょうか?
もちろん実行時にはlibA.soは用意します。
0842デフォルトの名無しさん (アウアウウー Sa1d-I703)
垢版 |
2019/06/11(火) 15:09:21.38ID:UmxJxqMia
>>841
リンクされる関数やグローバル変数が全て揃ってれば誤魔化し効くのではないかな。
0845デフォルトの名無しさん (アウアウウー Sa1d-I703)
垢版 |
2019/06/11(火) 20:38:50.54ID:UmxJxqMia
そ、そうか?
0850デフォルトの名無しさん (アウアウウー Sa1d-I703)
垢版 |
2019/06/12(水) 09:25:53.48ID:apqCeTcNa
DLL? Windowsだとそうなの?
0851デフォルトの名無しさん (ワッチョイ d769-0JeU)
垢版 |
2019/06/12(水) 10:40:58.95ID:QpFBULjO0
a) dll import キーワードつきのヘッダでコンパイル
 DLLを読み込みシンボル解決する .lib をリンク
 実行時には dll 読み込みをやってくれる (無いと文句言う)

b) 自前で DLL読み込んで GetProcAddress で関ポにセットして、
その関ポを呼び出すラップ関数を用意
  自前ロードしてるので、実行時に無い時別の処理の記述が可能になるん
0854デフォルトの名無しさん (ワッチョイ 03dc-9ye8)
垢版 |
2019/06/13(木) 19:07:04.64ID:mXxRrk+K0
現実世界にポインタと同じものを説明する概念がないから簡単な説明のしようがないんだよなぁ。住所録とか余計こんがらがるし。
素直に本を沢山読んでプログラムを組んで慣れるしか無い
0856デフォルトの名無しさん (ワッチョイ 677d-58Oz)
垢版 |
2019/06/13(木) 20:56:34.51ID:8abVSTNa0
アドレスは&つけてprintfした時に出てくるやつでしょ?
箱のラベルみたいなのだとかなんとか言われた気がする
メモリは単純に容量?

別関数で計算した値をmain関数に持ってくる時にポインタを使えばreturnがいらないだとかコピーじゃなくて直接数値を変えるから処理が楽だとか書いてあるけど結局普通に代入するのに比べて利点がよくわからない
0864蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ 8b01-1i7F)
垢版 |
2019/06/13(木) 22:14:30.76ID:wtG0GGqp0
1ビットが0か1かの二通りを表せる情報量。
1バイトは0〜255までの256通り(2の8乗)を表せる情報量で8ビットに等しい。
1バイトを複数並べたのがメモリーで、各バイトの位置がアドレス。
0866蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ 8b01-1i7F)
垢版 |
2019/06/13(木) 22:22:12.70ID:wtG0GGqp0
アドレスに型情報を加えて、先頭アドレスを起点として配列のようにアクセス可能にしたものがポインタ。
しかし、配列は実体を要求するが、ポインタは実体を要求しない。ヌルポインタは、何も指し示さないポインタ。
0869デフォルトの名無しさん (ワッチョイ a37b-RuXw)
垢版 |
2019/06/14(金) 06:12:05.65ID:hJXFGwRg0
“メモリ”って言葉がフラッシュメモリのような、
ストレージデバイスのイメージになってるのも
説明を難しくしてる要因かもしれないね。

メモリは記憶単位ごとに数字で番地が振られていて…と言っても、
「メモリってディレクトリ構造中のファイルとして記憶するんじゃないの?」
みたいな感じに、互いの言葉の意味がチグハグで。
0875デフォルトの名無しさん (ワッチョイ 9712-LWbF)
垢版 |
2019/06/14(金) 09:02:07.63ID:vN7LRDhO0
>>856
ポインタ=君と感覚を共有してる全く同性能の影分身だ。
君の価値が100万なら、影分身は1円で作れる。

ポインタのメリットは会社が君を働かせたい時、君を直接雇うと100万円かかるが、影分身を雇うと1円で済むわけだ。
影分身が働いてる間、君は家でエロゲでもしてればいい。

気をつけないといけないのは、仕事中、影分身の腕が切断されたら、エロゲやってる君の腕も切断されるし
影分身が死んだら君も死ぬ。


これ以上わかりやすい説明はないと思うが、どうよ?w
0877デフォルトの名無しさん (アウアウウー Sac7-7DQ/)
垢版 |
2019/06/14(金) 10:03:42.87ID:+nXqXsIga
>>875
分身と言ってしまうとそっくりな実体がもう一つあるかのように思ってしまうのではないか?
やはり実体を指し示すものを連想させる何かにした方が良いのではないか?道標とか。
0878デフォルトの名無しさん (ワッチョイ 03dc-9ye8)
垢版 |
2019/06/14(金) 10:26:13.82ID:6se/aPBa0
このように、どうわかりやすく書こうとしてもどっかに不都合が生じるのがポインタの説明
素直にコンピュータの仕組みを勉強するしかないんや・・・
0882蟻人間 ◆T6xkBnTXz7B0 (スフッ Sdba-1i7F)
垢版 |
2019/06/14(金) 12:32:55.71ID:lQGpZUNAd
キャッシュは次回のアクセスを高速化するためにデータを一時的に保存しておくこと。
バッファはデータを受け止めるために、保存場所を確保するためのメモリー領域。
0886デフォルトの名無しさん (ワッチョイ 8b01-2qry)
垢版 |
2019/06/14(金) 17:45:59.79ID:zWOLB0k60
ポインタがよくわからないんだけど、普通にメモリアドレス==ポインタって認識なの?

int i;
int *p=&i;
の時に変数iのポインタであるpっていういい方は正しいですか
0890デフォルトの名無しさん (ワッチョイ 8b01-2qry)
垢版 |
2019/06/14(金) 18:23:47.92ID:zWOLB0k60
なるほど、なんとなくわかったありがとう。混乱の原因はポインタっていう言葉がいろんな使われ方してるからだった。
0891デフォルトの名無しさん (アウアウウー Sac7-6CEg)
垢版 |
2019/06/14(金) 18:25:31.19ID:Kaq8zorwa
こう書くとまた荒れそうだが、ポインターとはアドレスが入った変数である、というのは正しい。
NULLは0番地を特別扱いしてるだけだし、void *もあくまでアドレスだ。
0896デフォルトの名無しさん (アウアウウー Sac7-LNjH)
垢版 |
2019/06/14(金) 18:39:36.73ID:BA+tS0rQa
>>891
NULLの件はそれ逆だろう。
実際の0番地を特別扱いにしているのではなく、「どこも指さない特殊なアドレス」を表記するために整数0を使用しているだけで、0番地が特別な訳ではないはず。まあ実際にメモリ割り当てで0番地を割り当てることはしないだろうけど。
void*も、型を指定しないポインタを表すのに使っている型の指定であり、アドレスというのはおかしい。
0902デフォルトの名無しさん (ワッチョイ 0301-oJPG)
垢版 |
2019/06/14(金) 21:51:26.70ID:6z9b86iK0
double * には double * だけを許し char * や strucut foo * を渡したらアカンと
要求される型を厳しくチェックしようとすると

「ポインタだったら実体の型は何でもいい」 という指示を char * に含ますわけにはいかない
0904デフォルトの名無しさん (ワッチョイ 03dc-9ye8)
垢版 |
2019/06/14(金) 22:42:50.69ID:6se/aPBa0
汎用ポインタというかvoid型という概念そのものが嫌い。
全てを厳密にやれ。言語を作る時点でまず関数に戻り値を強制すべきだったんだ。
ポインタわからん軍の原因はvoid型とかいう曖昧なせいなのがあるせいなのも一理あろうて。
レス数が900を超えています。1000を超えると表示できなくなるよ。

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