C言語なら俺に聞け 151

レス数が900を超えています。1000を超えると表示できなくなるよ。
1デフォルトの名無しさん (ワッチョイ 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
2019/06/08(土) 15:56:39.68ID:KzIynz9K0
BOOLを返す関数が負数を返したかどうか調べにゃあかんやつとかな
2019/06/08(土) 16:38:04.87ID:WG7jlf5q0
ワインバーグの本にあったなあ。ドル紙幣はみんな同じ色、同じサイズで見分けがつきにくいけど、
それが常識だと思っている人は、一定の確率で間違えてしまうことも世界の法則で仕方のない
ことだと思っているとか。
2019/06/08(土) 17:13:44.27ID:auwh2hzj0
>>827
GetMessage()の悪口はいくら言ってもよいぞ
DWORDにしとけよ
2019/06/08(土) 18:39:07.71ID:jm0tDZO60
>>826
カオスっていうかこれ普通じゃない?
標準ライブラリのラッパー書くとき互換性保つために0成功にするでしょ
で他のオレオレライブラリはboolという
831デフォルトの名無しさん (ワッチョイ 9bd2-9700)
垢版 |
2019/06/08(土) 18:53:36.19ID:jXs/KV+s0
戻り地がboolのときはtrueが成功
intのときは0が成功なんだよ
2019/06/08(土) 19:39:01.75ID:ogfAGAzJ0
bool型ができたのはC99のときなので
2019/06/08(土) 19:42:23.71ID:jm0tDZO60
boolぐらいなにもインクルードしなくても使わせてくれぽよ
2019/06/08(土) 19:54:54.89ID:ogfAGAzJ0
「歴史的理由」という奴
835デフォルトの名無しさん (アウアウウー Sa1d-I703)
垢版 |
2019/06/08(土) 21:28:56.66ID:gCLo3iIIa
>>830
それのせいでPrelではシステムコールと同名の関数の返り値がいまいち統一取れてなかったりして、結局マニュアル見ながら個別に覚えざるを得なかったりする。
Perlはだいたいは1が成功でundefが失敗なんだけどね。(undefはCでのNULLみたいなもの。未定義を意味する。定義されてて値が0の時とは違うが、書き方によっては同じように扱えることもある)。
2019/06/08(土) 21:58:16.60ID:nbjDJ9kZa
今C++にあるoptionalだっけ?
あんな感じの有ってもいいな。かなりうざい感じになるから使わんか。
837デフォルトの名無しさん (ワッチョイ c38c-LJAA)
垢版 |
2019/06/09(日) 11:06:53.62ID:42ARNGRn0
インクルードをURLで引っ張ってこれたら面白いのに。
2019/06/09(日) 11:17:01.45ID:ZHA7gcDF0
一発でウイルス仕込まれそう
839デフォルトの名無しさん (ワッチョイ 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
840デフォルトの名無しさん (ワッチョイ 5b02-EF/o)
垢版 |
2019/06/09(日) 14:38:56.62ID:zgQq0a060
>>837
/use/include ディレクトリをNFS マウントでもしとけ。
2019/06/11(火) 14:18:29.61ID:suKt4vmPd
すみません、質問があります。

環境はlinuxです。
ある共有ライブラリlibA.soをロードするプログラムbがあります。
このプログラムbをlibA.so抜きでgccでビルドすることはできるでしょうか?
もちろん実行時にはlibA.soは用意します。
842デフォルトの名無しさん (アウアウウー Sa1d-I703)
垢版 |
2019/06/11(火) 15:09:21.38ID:UmxJxqMia
>>841
リンクされる関数やグローバル変数が全て揃ってれば誤魔化し効くのではないかな。
2019/06/11(火) 16:20:37.89ID:X43Szptna
シンボルだけ定義したsoファイルを用意するのが普通ではないかと
2019/06/11(火) 18:35:03.43ID:z8NS6dzQ0
ダミーファイルを用意とか、かっけえな
845デフォルトの名無しさん (アウアウウー Sa1d-I703)
垢版 |
2019/06/11(火) 20:38:50.54ID:UmxJxqMia
そ、そうか?
2019/06/11(火) 21:26:50.36ID:suKt4vmPd
ビルド用のsoファイルを用意する、でいこうと思います。ありがとうございました!
2019/06/11(火) 22:01:48.05ID:vnr40KfNa
スタブってやつね。
dlopen使うと基本そうなると思う。
もともと自動的なシンボル解決してる場合は無視できたかも。
2019/06/12(水) 00:00:59.88ID:82Q6hISi0
>>847
お前は何を言ってるんだ
2019/06/12(水) 02:05:00.40ID:vWkgJgOw0
たぶん、DLL import, export みたいな定義ファイルさえあれば、コンパイルできるだろ?
850デフォルトの名無しさん (アウアウウー Sa1d-I703)
垢版 |
2019/06/12(水) 09:25:53.48ID:apqCeTcNa
DLL? Windowsだとそうなの?
2019/06/12(水) 10:40:58.95ID:QpFBULjO0
a) dll import キーワードつきのヘッダでコンパイル
 DLLを読み込みシンボル解決する .lib をリンク
 実行時には dll 読み込みをやってくれる (無いと文句言う)

b) 自前で DLL読み込んで GetProcAddress で関ポにセットして、
その関ポを呼び出すラップ関数を用意
  自前ロードしてるので、実行時に無い時別の処理の記述が可能になるん
2019/06/13(木) 13:22:19.29ID:tXoihok+d
大学でc言語を学び始めました
ポインタが意味不明でした
何がわからないのかわからない
2019/06/13(木) 13:54:13.91ID:wTJRUi3Ix
メモリとアドレスの概念が分かってないからじゃね?
2019/06/13(木) 19:07:04.64ID:mXxRrk+K0
現実世界にポインタと同じものを説明する概念がないから簡単な説明のしようがないんだよなぁ。住所録とか余計こんがらがるし。
素直に本を沢山読んでプログラムを組んで慣れるしか無い
2019/06/13(木) 19:27:38.29ID:HQZYLHkVa
本にページ数がない世界?
2019/06/13(木) 20:56:34.51ID:8abVSTNa0
アドレスは&つけてprintfした時に出てくるやつでしょ?
箱のラベルみたいなのだとかなんとか言われた気がする
メモリは単純に容量?

別関数で計算した値をmain関数に持ってくる時にポインタを使えばreturnがいらないだとかコピーじゃなくて直接数値を変えるから処理が楽だとか書いてあるけど結局普通に代入するのに比べて利点がよくわからない
2019/06/13(木) 21:10:17.33ID:mvKDv9Bs0
タワーマンション
2019/06/13(木) 21:10:41.15ID:HQZYLHkVa
何かの容量と言ったときの「何か」がメモリです。
利点は基本的にないです。
2019/06/13(木) 21:22:11.61ID:0e3y3dPM0
データが存在する場所
2019/06/13(木) 21:44:19.75ID:VQ1VjdQ1M
みんな思い思いのモデルで遊んでるから、パパは箱モデル出しちゃうぞ
2019/06/13(木) 21:45:29.38ID:vVgcrwZV0
うさみみハリケーンでメモリ覗いてチートしよう!
2019/06/13(木) 21:52:15.32ID:o6WQvi940
天使のような微笑みに
時は立ち止まる
2019/06/13(木) 22:05:37.40ID:mXxRrk+K0
なんか分からない部分のコード示してもらわないと
ここの有能な人たちもどう説明したらいいか分かんないから雑談始まったがw
2019/06/13(木) 22:14:30.76ID:wtG0GGqp0
1ビットが0か1かの二通りを表せる情報量。
1バイトは0〜255までの256通り(2の8乗)を表せる情報量で8ビットに等しい。
1バイトを複数並べたのがメモリーで、各バイトの位置がアドレス。
2019/06/13(木) 22:16:01.81ID:dMX2AWSU0
このスレにエスパーいるの?
2019/06/13(木) 22:22:12.70ID:wtG0GGqp0
アドレスに型情報を加えて、先頭アドレスを起点として配列のようにアクセス可能にしたものがポインタ。
しかし、配列は実体を要求するが、ポインタは実体を要求しない。ヌルポインタは、何も指し示さないポインタ。
2019/06/13(木) 22:29:06.28ID:o6WQvi940
ポインタ配列ってやると実体のない配列になるのかなw
2019/06/14(金) 00:57:04.32ID:v+vUDnm40
ポインタ配列?

ポインタの配列 *array[]
配列のポインタ (*array)[]
2019/06/14(金) 06:12:05.65ID:hJXFGwRg0
“メモリ”って言葉がフラッシュメモリのような、
ストレージデバイスのイメージになってるのも
説明を難しくしてる要因かもしれないね。

メモリは記憶単位ごとに数字で番地が振られていて…と言っても、
「メモリってディレクトリ構造中のファイルとして記憶するんじゃないの?」
みたいな感じに、互いの言葉の意味がチグハグで。
2019/06/14(金) 06:41:21.97ID:f7k/n5Cq0
RAMとROMの違いなんて今の時代説明しても分かる人の方が少ない気がする
2019/06/14(金) 07:27:48.00ID:Q6PAXFreM
>メモリは記憶単位ごとに数字で番地が振られていて

キャッシュメモリ「せやろか?」
2019/06/14(金) 07:30:51.51ID:0tg6L2nj0
https://i.ytimg.com/vi/paQ3zIsz1-8/maxresdefault.jpg
https://upload.wikimedia.org/wikipedia/commons/d/d2/Pamiec_bebnowa_1.jpg
やっぱりコレを見せれば理解しやすいんでね?
2019/06/14(金) 08:11:51.98ID:9CL7rguOx
>>872
磁気コアメモリと、右側はRAMACか?
2019/06/14(金) 08:31:34.65ID:0nKPup2VM
磁気ドラムだよ
ランダムアクセスでさえないのにメインメモリにしたとかいう
2019/06/14(金) 09:02:07.63ID:vN7LRDhO0
>>856
ポインタ=君と感覚を共有してる全く同性能の影分身だ。
君の価値が100万なら、影分身は1円で作れる。

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

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


これ以上わかりやすい説明はないと思うが、どうよ?w
2019/06/14(金) 09:44:07.68ID:y8r4DOsw0
例えられても伝わらないとさらに混乱させるのが、ポインタと配列周辺の話
877デフォルトの名無しさん (アウアウウー Sac7-7DQ/)
垢版 |
2019/06/14(金) 10:03:42.87ID:+nXqXsIga
>>875
分身と言ってしまうとそっくりな実体がもう一つあるかのように思ってしまうのではないか?
やはり実体を指し示すものを連想させる何かにした方が良いのではないか?道標とか。
878デフォルトの名無しさん (ワッチョイ 03dc-9ye8)
垢版 |
2019/06/14(金) 10:26:13.82ID:6se/aPBa0
このように、どうわかりやすく書こうとしてもどっかに不都合が生じるのがポインタの説明
素直にコンピュータの仕組みを勉強するしかないんや・・・
2019/06/14(金) 10:36:21.57ID:9CL7rguOx
ポインタはWindowsのショートカットみたいなもの。
これでもまだ誤解されそうね。
2019/06/14(金) 11:45:14.96ID:suWeiIcg0
インデックスレジスタを拡張したもの
2019/06/14(金) 12:26:01.65ID:2kFHhEHgd
キャッシュとバッファの違いを教えてください
2019/06/14(金) 12:32:55.71ID:lQGpZUNAd
キャッシュは次回のアクセスを高速化するためにデータを一時的に保存しておくこと。
バッファはデータを受け止めるために、保存場所を確保するためのメモリー領域。
2019/06/14(金) 14:56:26.65ID:6Rxhp4270
アセンブラやらせてみる。
2019/06/14(金) 15:05:09.54ID:AQvHkPsD0
>>881
文脈による
汎用機だと二次キャッシュをバッファストレージなんて言ったりすることもあるし
2019/06/14(金) 17:36:32.38ID:TPMloxQtM
>>875
本体がパンツ下ろしたら影分身も職場でパンツ下ろすんですね分かります
886デフォルトの名無しさん (ワッチョイ 8b01-2qry)
垢版 |
2019/06/14(金) 17:45:59.79ID:zWOLB0k60
ポインタがよくわからないんだけど、普通にメモリアドレス==ポインタって認識なの?

int i;
int *p=&i;
の時に変数iのポインタであるpっていういい方は正しいですか
2019/06/14(金) 17:52:24.52ID:f7k/n5Cq0
メモリアドレスは格納されるけど
メモリアドレス==ポインタっていうのは違う気がする
nullだのvoidだのもあるし
2019/06/14(金) 17:58:41.54ID:Soq0+PVxa
iのポインタを格納してるポインタ変数p

値自体を問題にするときはアドレスだが、プログラム中で操作の対象となってる場合はポインタって感じだな。
2019/06/14(金) 18:21:37.60ID:Js4PARtC0
>>886
ポインタはメモリアドレスと型もってて
メモリアドレスからのデータをその型として解釈する
890デフォルトの名無しさん (ワッチョイ 8b01-2qry)
垢版 |
2019/06/14(金) 18:23:47.92ID:zWOLB0k60
なるほど、なんとなくわかったありがとう。混乱の原因はポインタっていう言葉がいろんな使われ方してるからだった。
2019/06/14(金) 18:25:31.19ID:Kaq8zorwa
こう書くとまた荒れそうだが、ポインターとはアドレスが入った変数である、というのは正しい。
NULLは0番地を特別扱いしてるだけだし、void *もあくまでアドレスだ。
2019/06/14(金) 18:32:50.01ID:N06YB3IUM
>>887
nullはまだしもvoidは関係なくね?
2019/06/14(金) 18:34:58.75ID:Js4PARtC0
荒れる要素なくない?
メモリアドレスを保持する整数と型を組合せてあるだけだし

void*はアドレス保持するだけの変数って意味じゃないの
2019/06/14(金) 18:35:21.76ID:6z9b86iK0
void *p;

p++ を許すのは GCC拡張だっけか
2019/06/14(金) 18:37:46.52ID:AQvHkPsD0
>>891
「正しい」とか書くと荒れる元にしかならん
(初心者のうちは)…「という理解でいい」ぐらいにしとき
2019/06/14(金) 18:39:36.73ID:BA+tS0rQa
>>891
NULLの件はそれ逆だろう。
実際の0番地を特別扱いにしているのではなく、「どこも指さない特殊なアドレス」を表記するために整数0を使用しているだけで、0番地が特別な訳ではないはず。まあ実際にメモリ割り当てで0番地を割り当てることはしないだろうけど。
void*も、型を指定しないポインタを表すのに使っている型の指定であり、アドレスというのはおかしい。
2019/06/14(金) 18:45:34.86ID:Js4PARtC0
>>894
サイズどういう扱いなのそれ
2019/06/14(金) 18:48:29.67ID:6z9b86iK0
>>897
確かポインタ演算時は1バイト (char) 扱いだったかな?
2019/06/14(金) 18:52:58.09ID:Js4PARtC0
1バイトなんか
まあそりゃそうか
2019/06/14(金) 21:41:25.35ID:WbpzR08B0
void*なんていらなくね?char*でいいじゃん
構造のわからないものは「バイト列」って意識でしょ?
2019/06/14(金) 21:47:11.03ID:Qn7Uv1x90
>>900
void *がないとmemcpyに引数を渡すとき面倒。
2019/06/14(金) 21:51:26.70ID:6z9b86iK0
double * には double * だけを許し char * や strucut foo * を渡したらアカンと
要求される型を厳しくチェックしようとすると

「ポインタだったら実体の型は何でもいい」 という指示を char * に含ますわけにはいかない
2019/06/14(金) 21:52:14.30ID:sIZagWQx0
汎用ポインタがchar*型になってたらコードレビューは絶対に通さないわ
2019/06/14(金) 22:42:50.69ID:6se/aPBa0
汎用ポインタというかvoid型という概念そのものが嫌い。
全てを厳密にやれ。言語を作る時点でまず関数に戻り値を強制すべきだったんだ。
ポインタわからん軍の原因はvoid型とかいう曖昧なせいなのがあるせいなのも一理あろうて。
2019/06/14(金) 23:06:06.10ID:sIZagWQx0
>>904
関数型言語に行ってらっしゃい
906デフォルトの名無しさん (ワッチョイ 7602-byPh)
垢版 |
2019/06/15(土) 00:02:16.99ID:n7CfuAo60
Kotlin もよろしく
2019/06/15(土) 01:25:34.80ID:RN+u9pJY0
windowsにおいて

setLocale(LC_ALL, "en_US.UTF-8");

が成功する環境と失敗する環境があるのですが何が原因かわかりません。。何かご存じの方いらっしゃらないでしょうか?
2019/06/15(土) 09:25:25.61ID:oZ4xCIwS0
>>904
お前の好き嫌いなんてどうでもいいし、よくわからん時点ならvoid*なんて無視しとけばいいだけ
この手の人は何故か全部を一気に理解しようとするけど今どきの言語仕様でそれやったら終わらんよ
2019/06/15(土) 09:37:31.78ID:pAE5sudp0
「俺の考える最強に分かりやすいポインタの説明」




・・・無理
2019/06/15(土) 10:05:45.19ID:QD7Sd0bs0
>>907
OSは?両方ともWindows10?
2019/06/15(土) 10:23:13.60ID:T0BSudQv0
>>908 void君だろ

C言語なら俺に聞け 148
https://mevius.5ch.net/test/read.cgi/tech/1537347410/37
37 名前:デフォルトの名無しさん (ワッチョイ f94f-yqSl)[sage] 投稿日:2018/09/22(土) 01:42:06.64 ID:16ZpsTnK0
>>36
マジでIDE使え。
そして貼るときはlanguageをCにしとけ。シンタックスハイライトが変わるから。
で、どれが分からんの?

> enter
> find
> delete
> show_all
> delete_all

mainはこの際分からなくていい。
最初に理解しないといけないのは show_all だ。

ただし細かいことを言ってもキリがないが、

> void show_all(void)

なんだこれ?引数 void って初めて見たぞ。文法的にありなのかこれ?
さらに酷いのは show_all 内でグローバル変数 address を掴んでいること。
普通は void show_all(tag_address* ta) だよ。
そうじゃないと複数のリストがあったときに使い物にならないだろ。

マジな話、このソースのレベルの本なら捨てた方がいい。
俺は大学の教材がいいと思うぞ。
(読んでないが)リストならググったら東工大とか出てきた。
http://www.is.titech.ac.jp/compview/clang/chap11.html
2019/06/15(土) 11:55:35.29ID:hahimQeS0
懐かしいな、void君
2019/06/15(土) 13:59:23.10ID:RN+u9pJY0
>>910
コメントありがとうございます。
8と10で成功する端末があることを確認しています。失敗する端末は今のところ10だけです。

そして

SetConsoleOutputCP(65001);

を使用することで失敗する端末でもUTF-8をコンソールに表示でき、一応目的は達成できました。

調べてみると、結局のところwindowsではsetlocaleで2バイト以上文字は設定できないとのことだったのですが、ではなぜ成功する端末があるのか……
2019/06/15(土) 15:49:06.56ID:fUxHfD4R0
謎だな
2019/06/15(土) 16:57:06.86ID:RWV4c9qt0
引数voidって古いシステムの保守でたまに見るな
2019/06/15(土) 16:59:05.33ID:5ne/m9/q0
と、古いシステムの保守なんかやったことねえやつがぬかすか
2019/06/15(土) 18:17:17.87ID:ulIUfSMj0
引数voidは今でも普通に使うけどな
2019/06/15(土) 18:22:29.22ID:5ne/m9/q0
void show_all(); なんて書くやつ見かけたらなるべく距離を置く
2019/06/15(土) 18:40:21.75ID:8bW7ANPO0
>>918
C++ ではそれは当たり前ですが…
2019/06/15(土) 18:42:04.96ID:fAAVk5UIM
>>918の場合
C++なら問題ない
C言語だとちょっと不味い
2019/06/15(土) 18:46:57.27ID:5ne/m9/q0
おまえからも距離を置きたいぜ
ここをどこだと思っている
C++なら無問題などと言わねばわからぬ者がいるとでも思っているのか
2019/06/15(土) 22:30:32.42ID:BY4KYcRQ0
とりあえず、シングルステートでも返り値をboolにする俺がやってきましたよ。
2019/06/16(日) 02:14:21.54ID:wRD2pOBha
ケースバイケースで使い分ける
2019/06/16(日) 08:10:06.75ID:ORkp7ynDM
>>921
>>918の意図が分かってない者がいるぞ
さあどうする?
2019/06/16(日) 10:35:26.32ID:jvyHVZd00
>>924
世も末だな
困ったもんだ
2019/06/16(日) 11:22:43.26ID:RqGVrKm70
大丈夫だよ
ここを見ながらシステム作っている奴はいないから
レス数が900を超えています。1000を超えると表示できなくなるよ。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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